The app draws each character stroke by stroke. That geometry comes from
Make Me a Hanzi (graphics.txt), which is
derived from the Arphic PL UKai and Arphic PL KaitiM GB typefaces,
Copyright © 1999 Arphic Technology Co., Ltd., and distributed under the
Arphic Public License.
The Arphic Public License, section 2, requires that modifications be documented and made freely available to third parties under the same licence. This page is that designated place.
All changes were made on 2026-08-14 by this project.
| Change | Why |
|---|---|
| Selection — only the glyphs the app’s character database needs are kept (2,806 of 2,810 glyph forms; 姍, 燁, 鏗 and 驁 have no source data) | The full dataset is 29 MB; the app ships 3.5 MB |
Coordinate flip — the source is font space (1024 wide, y pointing up, baseline at 0). Every coordinate is transformed with y' = 900 - y |
So the app never has to think about two coordinate systems |
Path normalisation — the SVG subset (absolute and relative M/L/H/V/Q/C/S/Z) is rewritten to absolute M/L/Q/C/Z only |
Lets the app keep one small, deterministic parser |
| Medians converted from point lists to the same absolute path syntax as the outlines | Same reason |
Storage — each character is stored as {"o": [outlines], "m": [medians]}, raw-deflate compressed, in a SQLite table |
Size |
No glyph outline is redrawn, reshaped or re-ordered. The stroke shapes and the stroke order are Arphic’s; the transformations above are mechanical.
The complete build script is build_strokes.py. Running it against
graphics.txt reproduces the data the app ships, byte for byte.
The modified data remains under the Arphic Public License.