Repository navigation
Noto Serif Khitan Small Script: unify the layout into one font and rebuild from a packaged UFO - #3
Open
Kushim-Jiang wants to merge 8 commits into
Open
Kushim-Jiang wants to merge 8 commits into
Kushim-Jiang wants to merge 8 commits into
Conversation
Only the Serif family is still built, so its two Fangsong siblings and their configs and documentation go.
The layout is composed in Python, so the Glyphs source cannot carry it: the UFO holds the composed features.fea and the designspace is what the build instantiates from. The source has no Latin, because config-serif.yaml adds the Google Fonts Latin Core subset.
The updated font is designed by LIU Zhao and SHAO Lansu, and the OpenType layout is redesigned by Kushim JIANG.
Regression tests for the layout in qa/shaping_tests, in the format the shaping check reads: horizontal and vertical stacking, ss01, the U+16FE4 filler, the vertical punctuation forms and the dlig ligatures.
The source is regenerated from noto-serif-kss, which now declares 2.200.
The design build composes the positioning and GDEF with FeaComposer and the fontTools feature-file AST now, and declares one lookup per kind of statement so every language system shares it. The packaged source drops from 87 to 29 GPOS lookups and the built font shrinks by 2 KB. The composition is unchanged: 3,864 generated cases and the 16 tests in qa/shaping_tests shape identically to the previous source.
The build clones the Google Fonts subset repositories into subset-files/ while resolving includeSubsets. It is a cache, not a source.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this does
Replaces the Glyphs sources with a packaged UFO + designspace, collapses the family into a single font that carries both writing directions, renames the family to Noto Serif Khitan Small Script, and bumps the version from
1.000to2.200.Why the design changed
1. The rotated face is no longer needed
The previous design was three faces of the same typeface: a horizontal face, and two faces for vertical text — vertical (upright) and rotated (glyphs turned counter-clockwise).
KSS is an upright script, so a vertical column should be upright too. When the original design was made, Microsoft Office already laid KSS out upright, but web layout did not, so the rotated face existed purely to let a browser produce an upright column out of rotated glyphs. Web layout now supports upright KSS as well, so rotated has no remaining purpose and is dropped.
2. Horizontal and vertical are one font
Vertical KSS is a feature, not a separate design: the vertical case differs only by
vertand by the placement GPOS applies. The horizontal and vertical faces therefore merge into one font with both layouts enabled.Further, the composition is now done with GPOS placement instead of GSUB substitution. The old approach needed some twenty-odd sets of positional glyph forms plus the substitution chains that selected them; positioning the components means the font needs only one glyph per component. That removes the bulk of the glyph set and cuts the file size substantially.
3. Non-stacking "linear" layout as
ss01We also used the BabelStone Khitan Small Script fonts as a reference point (BabelStone Fonts : Khitan Small Script Fonts). Their three faces map onto this font as:
ss01BabelStone's Linear face performs no cluster composition, which some editions need — for example Daniel Kane, The Kitan Language and Script (Brill, 2009).
ss01reproduces that: composition is switched off and every component is left in its own cell.Changes
One source, one font
sources/NotoSerifKhitanSmallScript.ufoandsources/NotoSerifKhitanSmallScript.designspacereplacesources/NotoSerifKhitanSmallScript.glyphspackage. The layout is generated in Python and therefore cannot live in a Glyphs source; the packaging step exports the composed font — including the composedfeatures.fea— as a UFO the notofonts pipeline can build.sources/config-serif.yamlnow points at the designspace. Thenotorecipe provider requires a designspace (a bare UFO crashesinstantiateUfo), which is why one is shipped alongside the UFO.NotoFangsongKSSRotated.glyphspackage,NotoFangsongKSSVertical.glyphspackage,config-fangsong-rotated.yaml,config-fangsong-vertical.yaml, and their fourdocumentation/pages.Naming and credits
Noto Khitan Small Script→ Noto Serif Khitan Small Script (README and packaged source).Character set
includeSubsetsinconfig-serif.yaml. Shipping this design's own Latin would duplicate that subset.Tests
qa/shaping_tests/khitan-small-script.json: 16 shaping regression tests covering horizontal composition, thess01linear mode, vertical composition, punctuation, and the ligatures. They are in thefontbakeryshaping-test format and are picked up by the existingcom.google.fonts/check/shapingconfiguration. They were generated from the design build and pass both on that build's output and on the font built from this source.Housekeeping
.gitignore: the gftools-builder by-products (sources/build.ninja,sources/.ninja_log,sources/full-designspace/,sources/instance_ufos/).Companion change
The source is produced by the
noto-serif-kssdesign repository, whosecode/package.py(with the newlatin=Falsepackaging path and the vertical-metrics work) is the other half of this change.