FONTLOG for Zen Garden Pen
==========================

This file provides detailed information on the Zen Garden Pen font software.
This information should be distributed along with the Zen Garden Pen fonts
and any derivative works.


Basic Font Information
----------------------

Zen Garden Pen is the handwritten lettering of the game Zen Garden. It is a
Modified Version, under the SIL Open Font License 1.1, of Nanum Pen Script
by NHN Corporation, designed by Sandoll Communications Inc. (Copyright (c)
2010, NHN Corporation). The original's name is mentioned here only to credit
its origin: the Reserved Font Names listed in OFL.txt are not used in any
name of this font.

  Family            Zen Garden Pen
  Style             Regular
  Full name         Zen Garden Pen Regular
  PostScript name   ZenGardenPen-Regular
  Unique ID         1.002;UKWN;ZenGardenPen-Regular
  Files             ZenGardenPen-Regular.ttf   (55,600 bytes; the game's)
                    ZenGardenPen-Regular.otf   (343,552 bytes; CFF outlines)
                    ZenGardenPen-Regular.woff2 (26,192 bytes; web)
                    ZenGardenPen-Regular.woff  (31,104 bytes; web)
  Version           1.002
  Units per em      1000 (vertical metrics unchanged from the original:
                    ascent 800, descent -200, line gap 250)
  Glyphs            296, mapping 289 code points

Zen Garden Pen covers Latin only: Basic Latin, Latin-1 Supplement, the
macron vowels used for romanised Japanese names (Ā ā Ē ē Ī ī Ō ō Ū ū),
Œ œ Š š Ž ž Ÿ ı ȷ ƒ, combining accents, general punctuation (dashes, quotes,
ellipsis, bullets, guillemets, primes), € ™ № and spaces and zero-width
characters, and the letters and currency signs that App Store prices use
(č ł ฿ ₦ ₪ ₫ ₱ ₸ ₹ ₺ ₽ and U+20C1, the Saudi riyal sign). Japanese and
Korean are not included.

The font is bundled with the game and is not sold on its own. Since
2026-10-11 it is also published on its own, free of charge, as TTF,
OTF, WOFF2 and WOFF, for use outside the game.

The font is built reproducibly from the unmodified original by
build_zen_garden_pen.py (Python with fontTools only); the new drawings are
kept in that script as outline data, and the scripts that drew them are in
design/.


ChangeLog
---------

2026-10-11 (the Zen Garden authors) Zen Garden Pen Version 1.002
- The characters App Store prices need. The app letters StoreKit's
  localized price (Product.displayPrice) in the pen; an audit of all 175
  storefronts in every locale of their countries (macOS 27, iOS 26.5 and
  27) found 12 characters the font lacked, which Core Text drew in the
  system font: č ł (Kč, zł) and ฿ ₦ ₪ ₫ ₱ ₸ ₹ ₺ ₽ and U+20C1 SAUDI RIYAL
  SIGN (Unicode 17.0; iOS 27 writes Saudi prices with it). Nanum Pen has
  none of them. Added in the same hand (advance in units):
    č  362  a composite of the unchanged c and the caron, like š ž; c is
            a mark base like the other letters, so c + U+030C is drawn
            exactly as č
    ł  262  Nanum's l with its hyphen laid across the stem at 30 degrees
    ₦  530  Nanum's N with two of its hyphen bars, lighter than the
            letter (pen 0.75), at 0.38 and 0.62 of its height, so that the
            diagonal leaves the left stem above them and meets the right
            stem below them
    ₽  406  Nanum's P (its advance and side bearings) with one hyphen bar
            across the stem under the bowl
    ₱  454  Nanum's P with a deeper bowl (its centre line drawn out down
            from the top, the join with the stem from 364 to 290, the
            pen kept), its stem carried up into the top stroke by Nanum's
            l, laid exactly on the stem's own centre line at the stem's
            width (no step where the two meet) and ending inside the top
            stroke, and two hyphen bars (pen 0.75, so that the small bowl
            stays open) at a third and two thirds of the bowl
    ₫  350  Nanum's d at about 0.9 of its height (along its spine, the pen
            kept), a hyphen bar across the ascender and a hyphen line
            under it
    ₸  508  Nanum's T with its crossbar written twice: its own bar moved
            up, and a slightly shorter, flatter copy on the stem
    ฿  534  Nanum's B, 16 % wider along its spine so that its counters
            stay open, with Nanum's l laid through both bowls from below
            the baseline to above the letter, leaning as the B does
    ₺  426  Nanum's L, its stem drawn up (17 % above the foot) and its
            foot bent up into a quarter arc (along the spine), with two
            hyphen bars rising at 22 degrees across the stem
    ₹  434  drawn: top bar, the bowl hanging from it, second bar, leg
    ₪  609  drawn: an arch with a full-height left leg and a cup with a
            full-height right leg, set between each other's legs with
            about 90 units of paper between the legs, like the counters
            of u and n
    U+20C1  543  drawn after the Saudi Central Bank's 2025 symbol: two
            stems turning into feet to the left and to the right, a long
            bar across both and a short bar under the right foot, bars and
            feet rising at the symbol's 10.7 degrees
  The drawn signs use the marker pen of the drawn marks (60 units, round
  ends) with the hand's pressure: each stroke lands 6 % heavier, swells
  5 % towards its middle and wavers 2.5 %, so it measures 61-63 units
  across like the letters (Nanum's stems 60-66) and varies along its
  length as theirs do; and 1.5 units of wobble and the slight backward
  lean of Nanum's verticals. All stand in the digits' zone (ink 17-720; $ € £ ¥ reach
  13-680), with side bearings of 22-39 units (₽ and č keep P's and c's).
  Where crossing strokes left a pinhole counter (under 800 square units),
  it is filled.
- Every 1.001 glyph keeps its glyph ID, outline, advance and side
  bearing, every 1.001 code point its glyph, and the layout features
  only gain one line (č as a mark base); the font still has no kerning.
  The new glyphs follow all 1.001 glyphs in the glyph order. U+00A0 stays
  as wide as the space (280) and U+202F half of it (140), the spaces that
  prices are written with.
- OS/2: the Thai Unicode range (bit 24) and the Vietnamese code page
  (1258) are left clear: the baht and dong signs alone would set them,
  and the font does not write Thai or Vietnamese. xAvgCharWidth 394 ->
  397.
- Version 1.002 (name IDs 3, 5; head.fontRevision), head.modified
  2026-10-11; name ID 10 mentions the currency signs. design/required.json
  adds the 13 characters prices use that the game's own text does not
  (the 12 above and ₩): 252 required characters.
- Checks: the build verifies the kept glyphs against Nanum Pen and that
  all 252 required characters are mapped. identity_check finds every kept
  character and 3,436 segments of the game's text identical to Nanum Pen
  (54,818 checks, 0 failures) and, run against 1.001 itself, every
  character 1.001 drew and 3,130 segments identical to 1.001 (49,822
  checks, 0 failures). coretext_load now also lays out 23 App Store prices
  (with their no-break spaces and direction marks) at 20, 24 and 34 pt:
  no fallback glyph; Kč decomposed lays out as Kč precomposed. Two clean
  copies of the build in a fontTools-only venv (PYTHONHASHSEED random and
  12345), the build in the design venv and design/draw.py give the same
  file. The new outlines have no overlaps, outer contours all run one
  way and counters the other, and the smallest counter is 1,667 square
  units. In the app, scripts/check_lettering_coverage.sh now also sets
  App Store prices in every storefront currency in the pen.
- The standalone files are made again from this version, the same way
  as for 1.001 (below): ZenGardenPen-Regular.ttf 55,600 bytes (the
  game's font, byte for byte, SHA-256 76911bc8...), .otf 343,552, .woff2
  26,192 and .woff 31,104, with the game's 296 glyphs and 289 code
  points. OTS 9.2.0 accepts all four; the OTF's cubics match the TTF
  point for point (largest difference 0.0003 units); with Core Text the
  WOFF2 and WOFF render pixel for pixel like the TTF and the OTF lays
  out every line exactly like it; in Chrome the WOFF2 renders pixel for
  pixel like the TTF. All four: family "Zen Garden Pen", no Reserved
  Font Name, OS/2 fsType 0.

2026-10-11 (the Zen Garden authors) Zen Garden Pen Version 1.001,
standalone files
- No change to the font: same version, glyphs, outlines, metrics, names
  and features. It is now also published on its own, for websites,
  design tools and documents, in four files:
    ZenGardenPen-Regular.ttf    49,648 bytes  the game's font, byte for
                                              byte (SHA-256 befcc5f6...)
    ZenGardenPen-Regular.otf   314,992 bytes  the same font with CFF
                                              (PostScript) outlines
    ZenGardenPen-Regular.woff2  23,508 bytes  the TTF, WOFF2-compressed
    ZenGardenPen-Regular.woff   27,956 bytes  the TTF, WOFF-compressed
  The game's TTF is already the whole font (the build makes the
  Latin-only font and the game bundles that very file), so these files
  have exactly the game's 284 glyphs and 277 code points.
- OTF: each glyph decomposed (CFF has no composites) and each TrueType
  quadratic segment written as the one cubic that traces the same
  curve (degree elevation, no merging or approximation); contours
  reversed to the PostScript direction. The coordinates stay exact:
  the thirds and halves this gives are stored as CFF fixed-point
  numbers, which is why the OTF is larger than the TTF. cmap, advance
  widths, vertical metrics, name, OS/2, GDEF, GSUB and GPOS are the
  TTF's own tables; post is format 3 (the glyph names are in the CFF
  charset), maxp 0.5, and each left side bearing is the xMin of its CFF
  outline. No hinting, as in the TTF.
- WOFF2 (Brotli, glyf/loca transform) and WOFF (Zopfli) decompress to
  the TTF's tables and outlines (WOFF2 sets head flag bit 11, as its
  specification requires for the glyf transform).
- Checks: OTS, the sanitizer browsers run on web fonts, accepts all
  four files. With fontTools, every OTF glyph is the TTF glyph as exact
  cubics, point for point (largest difference 0.0002 units, the CFF's
  fixed-point precision). With Core Text, the WOFF2 and the WOFF render
  every glyph at 26 sizes from 8 to 240 px and 107 lines of sample text
  at 20, 24 and 34 pt, @2x and @3x, pixel for pixel like the TTF. The
  OTF lays out every line exactly like the TTF (glyphs, positions,
  widths) and differs in under 0.005 % of the pixels, at curve
  extremes at some sizes, where the rasterizer flattens cubic curves
  differently from quadratic ones (Core Graphics also fills a TTF
  outline and the same outline as exact cubics a little differently).
  All four: family "Zen Garden Pen", no Reserved Font Name, OS/2
  fsType 0 (installable embedding).

2026-10-10 (the Zen Garden authors) Zen Garden Pen Version 1.001
- Z and z without the crossbar. Nanum Pen writes both letters with a bar
  through the diagonal; it is gone, leaving the top stroke, the diagonal
  and the foot as the hand wrote them. Each letter keeps the original's
  one contour except the bar's points (Z 84 -> 65 points, z 77 -> 61), and
  four short bridges carry the diagonal's two edges on across where the
  bar crossed them. Each bridge leaves and reaches the kept edge along
  that edge's own tangent (a cubic with handles a third of the gap, as
  TrueType quadratics within 0.25 units); the kept edges and the gaps
  differ in direction by 0.1 to 2.7 degrees. The diagonal runs on at its
  own width through the old junction (Z 80-83 units across, z 79-82),
  with no stub or notch where the bar joined.
- Advance widths and left side bearings are unchanged (Z 524 / 28,
  z 466 / 25), the original has no kerning, and the mark anchors of Z and
  z are still measured on Nanum's own letters, so Ž and ž (composites of
  Z z with the caron) keep their caron where it was and every line of
  text keeps its spacing and line breaks. Only the ink changes: z now ends
  at x 428 (the bar reached 440). The font has no Ź Ż ź ż; Ž ž are the
  only glyphs built from Z and z.
- Version 1.001 (name IDs 3 and 5, head.fontRevision), head.modified
  2026-10-10. OFL.txt's modification notice names the change.
- Checks: the build verifies Z and z (the original's advance and side
  bearing, no ink outside the original letter, bare sand where the bar
  was, one diagonal whose width and centre line run on smoothly through
  the old junction). identity_check, now with Z and z as redrawn letters,
  finds every other kept character and 3,436 segments of the game's text
  identical to Nanum Pen, pixel for pixel, and the 208 segments that
  contain Z or z laid out and wrapped exactly as before: 54,818 checks,
  0 failures.

2026-10-09 (the Zen Garden authors) Zen Garden Pen Version 1.000
- Subset to Latin: removed the Hangul syllables and jamo, the Hangul and
  CJK compatibility symbols, enclosed alphanumerics, box drawing and
  fullwidth forms, the 'fwid' GSUB feature, the empty GPOS and DSIG tables
  and the TrueType hinting, which Core Text does not use
  (3,201,664 -> 49,744 bytes; 13,751 -> 284 glyphs).
- Kept every remaining glyph of the original (Basic Latin, ¢ £ ¥ § © ° ±
  ¶ × ÷ ‘ ’ “ ” † ‡ ‰ ₩ ℃ ℉ ℓ ℡ ™ Ω ≠: 120 code points) with identical
  outlines, advance widths and side bearings; the original has no kerning.
  Verified with fontTools and by rendering every kept character and 3,281
  segments of the game's strings with Core Text against the original at
  20, 24 and 34 pt, 2x and 3x: 50,635 checks, all identical.
- Renamed per OFL 1.1 section 3: family "Zen Garden Pen", PostScript
  "ZenGardenPen-Regular", own unique ID, version 1.000 and vendor ID UKWN;
  removed the Korean-language and Macintosh name records; kept NHN's
  copyright notice and added "Modifications Copyright 2026, the Zen Garden
  authors"; name IDs 13 and 14 carry the OFL 1.1 text and URL.
- Production glyph names (AGL / uniXXXX) instead of ".notdef.N".
- Added 156 code points (162 glyphs), drawn to look written with the same
  felt pen. Most are the original's own strokes moved along their centre
  line, which keeps the original's stroke width, ends and texture: the
  hyphen gives the dashes, macrons and bars; the straight quote the acute,
  grave and primes; the period the dieresis, dot accent, ellipsis and
  middle dot; the comma the cedilla; ’ and ” the low quotes ‚ „ (88 % of
  their height, so „…” pair); the parenthesis the breve; ! and ? turned
  give ¡ ¿; Nanum's C with two hyphen bars gives €. Where a transformed
  stroke would crumple, the glyph is drawn as new strokes with the
  measured pen width (58-64 units, 60-62 for the drawn marks, 52 for
  superiors, 48-50 for the ring) and round marker ends: circumflex, caron,
  tilde, ring, the capital acute and grave, the guillemets, ß, ð, ¤, the
  small R of ®, the ogonek, the superiors and fractions, and the dotted
  circle.
  The macrons are the hyphen drawn out into long, nearly level bars with a
  slightly lighter pen (330 units on lowercase, 290 on capitals; pen about
  54 and 58), because Nanum Pen's i has a 184-unit dash for its dot: a
  short macron made ī look like i, and every i next to an ō look like ī.
  Over ı the bar is as long as over o and sits 88 units higher than the
  other marks over ı (its bottom at 615, where the i dash ends at 576); ī
  and Ī are a little wider than i and I to make room for it.
  Precomposed letters (68), TrueType composites of the unchanged base
  letter and a mark (flatter capital forms of the marks on capitals,
  dotless i under marks):
    À Á Â Ã Ä Å Ç È É Ê Ë Ì Í Î Ï Ñ Ò Ó Ô Õ Ö Ù Ú Û Ü Ý à á â ã ä å ç è é
    ê ë ì í î ï ñ ò ó ô õ ö ù ú û ü ý ÿ Ā ā Ē ē Ī ī Ō ō Š š Ū ū Ÿ Ž ž
  Other letters (17): ı ȷ are i j without the tittle; Æ æ Œ œ join A a O o
  to E e; Ø ø add one slash stroke; Ð þ µ ƒ reuse D, b, u, f; Þ is the I's
  stroke drawn out to the height of Nanum's P with a D bowl across its
  middle; ß and ð (o with a rising, crossed ascender) are drawn; ª º are a
  small a and o over a short bar:
    ª µ º Æ Ð Ø Þ ß æ ð ø þ ı Œ œ ƒ ȷ
  Combining marks (12), with GPOS mark-to-base anchors measured on each
  letter's ink (mark feature: top, macron and bottom classes; the macron
  sits higher over ı so that ī does not read as i; marks on capitals clear
  the letter's ink within 150 units by 40, so they never sit on the arms
  of H K M N U X, and the long macron clears the ink under its whole
  length by 40, also over k n v and Y; the precomposed letters are bases
  too), mark-to-mark
  stacking (mkmk: 40 units between lowercase marks, 16 between capital
  marks, so that a capital with two marks such as O + macron + acute
  stays under the 800 ascent) and GSUB ccmp (i j -> dotless before a top
  mark; capital forms of the marks after capitals). Decomposed text
  renders exactly like precomposed text:
    U+0300 U+0301 U+0302 U+0303 U+0304 U+0306 U+0307 U+0308 U+030A U+030B
    U+030C U+0327
  Punctuation, spacing accents and symbols (42):
    ¡ ¤ ¦ ¨ « ¬ ® ¯ ² ³ ´ · ¸ ¹ » ¼ ½ ¾ ¿ ˆ ˇ ˘ ˙ ˚ ˛ ˜ ˝ – — ‚ ‛ „ ‟ • …
    ′ ″ ‹ › ⁄ € ◌
  The em dash has 92-unit side bearings (advance 892), so an unspaced dash
  ("sing—they", "—Bashō") does not run into its neighbours. The spacing
  ogonek ˛ is a small drawn hook, down to the left and back to the right.
  Spaces and format characters (11, empty; U+00A0 is exactly as wide as
  the space, U+2009 and U+202F are half of it, the zero-width ones have no
  advance):
    U+00A0 U+2007 U+2008 U+2009 U+200A U+200B U+200C U+200D U+202F U+2060
    U+FEFF
  U+00AD soft hyphen is the hyphen (a composite of it). U+2010 and U+2011
  map to the original hyphen glyph, U+2012 to the en dash, U+2015 to the em
  dash, U+2027 to the middle dot.
- Redrew U+2116 NUMERO SIGN, the one kept code point whose glyph changes.
  The original drew a full-width handwritten "No." (advance 940); it is now
  the original capital N (its exact outline, at its own position) followed
  by a raised small o with a short pen bar under it. The o is the
  original's o, made smaller and grown back evenly to a pen of about 58
  units, so it keeps its shape and the notch where its stroke starts; the
  bar is the original hyphen, shortened to a little more than the o's
  width. Advance 720 units, ink 43,135 to 671,580. "№ 5" at 24 pt is
  33.2 pt wide (it was 38.5 pt). A variant with a bare raised o was drawn
  for comparison; the barred form was chosen.
- GDEF: combining marks class 3 (mark); № changed from class 2 (ligature)
  to class 1 (base).
- OS/2 Unicode ranges recalculated for the new character set, without bit
  67 (Arabic Presentation Forms-B), which only U+FEFF would set. The new
  outlines have no duplicate consecutive points (zero-length segments).
- Before release, after review (same version): longer, lighter, level
  macrons and a higher bar on ī (see above); marks on H K M N U X (and
  the macron on k n v Y) raised clear of the letters; capital mark stacks
  tightened; the ring drawn with
  a heavier pen (50, capital 48; it was 41 and 36) and a larger loop so
  its counter stays open; circumflex, caron, tilde and the capital acute
  and grave drawn with a 60-62 pen (was 56-58); Þ redrawn at full capital
  height, ð with a straighter ascender and a clearer cross stroke, ˛ as a
  hook (it was a mirrored comma); duplicate points removed; OS/2 bit 67
  cleared. Every kept glyph is still identical to the original.


Acknowledgements
----------------

Original design: Doo-yul Kwak, Hyunghwan Choi, Nicolas Noh
(Sandoll Communications Inc.), for NHN Corporation.
http://www.sandoll.co.kr

Latin extension and modifications: the Zen Garden authors.
