From 5e7d28bf72b7c777f276dfb7e9d8528f44a1ae11 Mon Sep 17 00:00:00 2001 From: be5invis Date: Sat, 19 Jun 2021 10:29:35 -0700 Subject: [PATCH] Improve aceent builder --- changes/7.1.1.md | 1 + font-src/glyphs/auto-build/accents.ptl | 166 ++---------------- .../glyphs/symbol/punctuation/ascii-marks.ptl | 1 + font-src/meta/unicode-knowledge.ptl | 133 ++++++++++++++ 4 files changed, 145 insertions(+), 156 deletions(-) diff --git a/changes/7.1.1.md b/changes/7.1.1.md index 81a2b6ecd..65c7163f3 100644 --- a/changes/7.1.1.md +++ b/changes/7.1.1.md @@ -1,2 +1,3 @@ + * Add Greek Number Sign (`U+0374`). * Fix Misplaced diacritics in `U+A7BA`, `U+A7BC`, and `U+A7BE` (#1125). * Make Modifier Letter Colon (`U+A789`) smaller than Colon (#1126). diff --git a/font-src/glyphs/auto-build/accents.ptl b/font-src/glyphs/auto-build/accents.ptl index 9e99e074a..544f19c76 100644 --- a/font-src/glyphs/auto-build/accents.ptl +++ b/font-src/glyphs/auto-build/accents.ptl @@ -67,35 +67,23 @@ glyph-block AutoBuild-Accents : begin return s local foundDecompositions {.} - define [decideName namingParts code] : begin - local baseName : glyphStore.queryNameOf namingParts.0 - local glyphName baseName - foreach [part : namingParts.slice 1] : if part : begin - glyphName = glyphName + [fallback part.shortName : glyphStore.queryNameOf part] - - if foundDecompositions.(glyphName) : begin - local j 2 - while foundDecompositions.(glyphName + j) [inc j] - set glyphName (glyphName + j) - - return glyphName # When recursively building, `recursiveCodes` contain an array of "needed" Unicode list local goalCodes : recursiveCodes || [range 0x0000 0xFFFF] foreach code goalCodes : if [not : glyphStore.queryByUnicode code] : do - local str : String.fromCharCode code - local nfd : fallback customDecompositions.(str) : str.normalize 'NFD' - if (nfd.length > 1) : begin + local str : String.fromCodePoint code + local nfd : fallback UnicodeKnowledge.decompositionOverrides.(str) : str.normalize 'NFD' + if (str !== nfd) : begin + local nfdChars : Array.from nfd local parts { } local allFound true - foreach j [range 0 nfd.length] : begin - local part : glyphStore.queryByUnicode [nfd.charCodeAt j] - if [not part] : then - set allFound false - : else - set parts.(j) part + foreach part [items-of nfdChars] : begin + local part : glyphStore.queryByUnicode [part.codePointAt 0] + if [not part] + : then : set allFound false + : else : parts.push part if allFound : begin - local glyphName : decideName parts code + local glyphName : 'u' + [code.toString 16 :.padStart 4 '0'] set parts : subParts parts set foundDecompositions.(glyphName) { glyphName code parts } @@ -146,7 +134,6 @@ glyph-block AutoBuild-Accents : begin foreach [_id : items-of : Object.keys foundDecompositions] : do local { glyphName code parts } foundDecompositions.(_id) - local saved : RootGlyphProc glyphName code parts if saved : begin define part0Name : glyphStore.queryNameOf parts.0 @@ -165,136 +152,3 @@ glyph-block AutoBuild-Accents : begin set parts1.0 : query-glyph relBase if [not : query-glyph relGN] : RootGlyphProc relGN null parts1 if [query-glyph origGN] : gr.set [query-glyph origGN] relGN - -define customDecompositions : object - # Latvians use comma instead of cedillas in several letters. - # Record them as custom decomposition. - ."\u0156" "R\u0326" - ."\u0157" "r\u0326" - ."\u0136" "K\u0326" - ."\u0137" "k\u0326" - ."\u0145" "N\u0326" - ."\u0146" "n\u0326" - ."\u013B" "L\u0326" - ."\u013C" "l\u0326" - ."\u0122" "G\u0326" - ."\u0123" "g\u0312" - - # autobuild Latin glyphs - ."\u0167" "t\u0335" - ."\u0197" "I\u0335" - ."\u019A" "l\u0335" - ."\u0248" "J\u0335" - ."\u0249" "j\u0335" - ."\u0268" "i\u0335" - ."\u024D" "r\u0335" - ."\u1D7B" "\u026A\u0335" - ."\u1D7C" "\u0269\u0335" - - ."\u1D7F" "\u028A\uE001" - ."\u0289" "u\uE001" - ."\u0244" "U\uE001" - ."\u01E5" "g\uE001" - ."\u01BB" "2\uE001" - ."\u04B0" "\u04AE\u0335" - ."\u04B1" "\u04AF\u0335" - ."\u024F" "y\uE001" - ."\uAB30" "\uAB64\uE001" - ."\u1D7D" "p\uE001" - - ."\u023A" "A\u0338" - ."\u023B" "C\u0338" - ."\u023C" "c\u0337" - ."\u023E" "T\u0338" - ."\u0246" "E\u0338" - ."\u0247" "e\u0337" - - ."\u0290" "z\u0322" - ."\u1D90" "\u0251\u0322" - - ."\u1E10" "D\u0326" - ."\u1E11" "d\u0326" - - ."\u1E9C" "\u017F\uE000" - - ."\u1EDC" "\u01A0\u0300" - ."\u1EDD" "\u01A1\u0300" - ."\u1EDA" "\u01A0\u0301" - ."\u1EDB" "\u01A1\u0301" - ."\u1EDE" "\u01A0\u0309" - ."\u1EDF" "\u01A1\u0309" - ."\u1EE0" "\u01A0\u0303" - ."\u1EE1" "\u01A1\u0303" - ."\u1EE2" "\u01A0\u0323" - ."\u1EE3" "\u01A1\u0323" - - # Cyrillic composite characters - ."\u0498" "\u0417\u0327" - ."\u0499" "\u0437\u0327" - ."\u04AA" "\u0421\u0327" - ."\u04AB" "\u0441\u0327" - ."\u047C" "\uA64C\u0486\u0487" - ."\u047D" "\uA64D\u0486\u0487" - - # Spacing modifers - ."\u02CB" "\uE00D\u0300" - ."\u02CA" "\uE00D\u0301" - ."\u02C6" "\uE00D\u0302" - ."\u02DC" "\uE00D\u0303" - ."\u00AF" "\uE00D\u0304" - ."\u02C9" "\uE00D\u0304" - ."\u02D8" "\uE00D\u0306" - ."\u02D9" "\uE00D\u0307" - ."\u00A8" "\uE00D\u0308" - ."\u02DA" "\uE00D\u030A" - ."\u02C7" "\uE00D\u030C" - ."\u00B8" "\uE00D\u0327" - ."\u02CD" "\uE00D\u0331" - ."\u02CE" "\uE00D\u0316" - ."\u02CF" "\uE00D\u0317" - ."\u02D2" "\uE00D\u0339" - ."\u02D3" "\uE00D\u031C" - ."\u02D4" "\uE00D\u031D" - ."\u02D5" "\uE00D\u031E" - ."\u02D6" "\uE00D\u031F" - ."\u02D7" "\uE00D\u0320" - ."\u02DB" "\uE00D\u0328" - ."\u02DD" "\uE00D\u030B" - ."\u02DF" "\uE00D\u033D" - ."\u02EC" "\uE00D\u032C" - ."\u02ED" "\uE00D\u033F" - ."\u02F3" "\uE00D\u0325" - ."\u02F7" "\uE00D\u0330" - ."\u02BE" "\uE00D\u0357" - ."\u02BF" "\uE00D\u0351" - ."\u02C2" "\uE00D\u1DFE" - ."\u02C3" "\uE00D\u0350" - ."\u02C4" "\uE00D\uE002" - ."\u02C5" "\uE00D\uE003" - ."\u02EF" "\uE00D\uE005" - ."\u02F0" "\uE00D\uE004" - ."\u02F1" "\uE00D\u0354" - ."\u02F2" "\uE00D\u0355" - - ."\u1FED" "\uE00D\u0308\u0300" - ."\u1FEE" "\uE00D\u0308\u0301" - ."\u1FEF" "\uE00D\u0300" - ."\u1FFD" "\uE00D\u0301" - ."\u1FFE" "\uE00D\u0314" - ."\u1FBD" "\uE00D\u0313" - ."\u1FBE" "\uE00D\u0345" - ."\u1FBF" "\uE00D\u0313" - ."\u1FC0" "\uE00D\u0342" - ."\u1FC1" "\uE00D\u0308\u0342" - ."\u0384" "\uE00D\u0301" - ."\u0385" "\uE00D\u0308\u0301" - ."\u037A" "\uE00D\u0345" - ."\uAB30" "\u0251\uE001" - ."\uA7BB" "a\uE010" - ."\uA7BD" "i\uE010" - ."\uA7BF" "u\uE010" - - # Suppress incorrect slashed arrows... so far - ."\u219A" "" - ."\u219B" "" - ."\u21AE" "" diff --git a/font-src/glyphs/symbol/punctuation/ascii-marks.ptl b/font-src/glyphs/symbol/punctuation/ascii-marks.ptl index 99460bc19..d9c539978 100644 --- a/font-src/glyphs/symbol/punctuation/ascii-marks.ptl +++ b/font-src/glyphs/symbol/punctuation/ascii-marks.ptl @@ -54,6 +54,7 @@ glyph-block Symbol-Punctuation-Ascii-Marks : begin include : MarkZoom currentGlyph.advanceWidth alias 'mdfPrime' 0x2B9 'prime' + alias 'grek/numberSign' 0x374 'prime' alias 'mdfDoublePrime' 0x2BA 'doubleprime' alias 'mdfTurncomma' 0x2BB 'openSingleQuote' alias 'mdfApostrophe' 0x2BC 'closeSingleQuote' diff --git a/font-src/meta/unicode-knowledge.ptl b/font-src/meta/unicode-knowledge.ptl index d4c59a781..6a6327c8c 100644 --- a/font-src/meta/unicode-knowledge.ptl +++ b/font-src/meta/unicode-knowledge.ptl @@ -30,3 +30,136 @@ export : define markCompositionTf : object 'perispomeniAbove' 'dasiaPerispomeni' 'cyrlPsiliAbove' : object 'cyrlPokrytieAbove' 'cyrlPsiliPokrytieAbove' + +export : define decompositionOverrides : object + # Latvians use comma instead of cedillas in several letters. + # Record them as custom decomposition. + ."\u0156" "R\u0326" + ."\u0157" "r\u0326" + ."\u0136" "K\u0326" + ."\u0137" "k\u0326" + ."\u0145" "N\u0326" + ."\u0146" "n\u0326" + ."\u013B" "L\u0326" + ."\u013C" "l\u0326" + ."\u0122" "G\u0326" + ."\u0123" "g\u0312" + + # autobuild Latin glyphs + ."\u0167" "t\u0335" + ."\u0197" "I\u0335" + ."\u019A" "l\u0335" + ."\u0248" "J\u0335" + ."\u0249" "j\u0335" + ."\u0268" "i\u0335" + ."\u024D" "r\u0335" + ."\u1D7B" "\u026A\u0335" + ."\u1D7C" "\u0269\u0335" + + ."\u1D7F" "\u028A\uE001" + ."\u0289" "u\uE001" + ."\u0244" "U\uE001" + ."\u01E5" "g\uE001" + ."\u01BB" "2\uE001" + ."\u04B0" "\u04AE\u0335" + ."\u04B1" "\u04AF\u0335" + ."\u024F" "y\uE001" + ."\uAB30" "\uAB64\uE001" + ."\u1D7D" "p\uE001" + + ."\u023A" "A\u0338" + ."\u023B" "C\u0338" + ."\u023C" "c\u0337" + ."\u023E" "T\u0338" + ."\u0246" "E\u0338" + ."\u0247" "e\u0337" + + ."\u0290" "z\u0322" + ."\u1D90" "\u0251\u0322" + + ."\u1E10" "D\u0326" + ."\u1E11" "d\u0326" + + ."\u1E9C" "\u017F\uE000" + + ."\u1EDC" "\u01A0\u0300" + ."\u1EDD" "\u01A1\u0300" + ."\u1EDA" "\u01A0\u0301" + ."\u1EDB" "\u01A1\u0301" + ."\u1EDE" "\u01A0\u0309" + ."\u1EDF" "\u01A1\u0309" + ."\u1EE0" "\u01A0\u0303" + ."\u1EE1" "\u01A1\u0303" + ."\u1EE2" "\u01A0\u0323" + ."\u1EE3" "\u01A1\u0323" + + # Cyrillic composite characters + ."\u0498" "\u0417\u0327" + ."\u0499" "\u0437\u0327" + ."\u04AA" "\u0421\u0327" + ."\u04AB" "\u0441\u0327" + ."\u047C" "\uA64C\u0486\u0487" + ."\u047D" "\uA64D\u0486\u0487" + + # Spacing modifers + ."\u02CB" "\uE00D\u0300" + ."\u02CA" "\uE00D\u0301" + ."\u02C6" "\uE00D\u0302" + ."\u02DC" "\uE00D\u0303" + ."\u00AF" "\uE00D\u0304" + ."\u02C9" "\uE00D\u0304" + ."\u02D8" "\uE00D\u0306" + ."\u02D9" "\uE00D\u0307" + ."\u00A8" "\uE00D\u0308" + ."\u02DA" "\uE00D\u030A" + ."\u02C7" "\uE00D\u030C" + ."\u00B8" "\uE00D\u0327" + ."\u02CD" "\uE00D\u0331" + ."\u02CE" "\uE00D\u0316" + ."\u02CF" "\uE00D\u0317" + ."\u02D2" "\uE00D\u0339" + ."\u02D3" "\uE00D\u031C" + ."\u02D4" "\uE00D\u031D" + ."\u02D5" "\uE00D\u031E" + ."\u02D6" "\uE00D\u031F" + ."\u02D7" "\uE00D\u0320" + ."\u02DB" "\uE00D\u0328" + ."\u02DD" "\uE00D\u030B" + ."\u02DF" "\uE00D\u033D" + ."\u02EC" "\uE00D\u032C" + ."\u02ED" "\uE00D\u033F" + ."\u02F3" "\uE00D\u0325" + ."\u02F7" "\uE00D\u0330" + ."\u02BE" "\uE00D\u0357" + ."\u02BF" "\uE00D\u0351" + ."\u02C2" "\uE00D\u1DFE" + ."\u02C3" "\uE00D\u0350" + ."\u02C4" "\uE00D\uE002" + ."\u02C5" "\uE00D\uE003" + ."\u02EF" "\uE00D\uE005" + ."\u02F0" "\uE00D\uE004" + ."\u02F1" "\uE00D\u0354" + ."\u02F2" "\uE00D\u0355" + + ."\u1FED" "\uE00D\u0308\u0300" + ."\u1FEE" "\uE00D\u0308\u0301" + ."\u1FEF" "\uE00D\u0300" + ."\u1FFD" "\uE00D\u0301" + ."\u1FFE" "\uE00D\u0314" + ."\u1FBD" "\uE00D\u0313" + ."\u1FBE" "\uE00D\u0345" + ."\u1FBF" "\uE00D\u0313" + ."\u1FC0" "\uE00D\u0342" + ."\u1FC1" "\uE00D\u0308\u0342" + ."\u0384" "\uE00D\u0301" + ."\u0385" "\uE00D\u0308\u0301" + ."\u037A" "\uE00D\u0345" + ."\uAB30" "\u0251\uE001" + ."\uA7BB" "a\uE010" + ."\uA7BD" "i\uE010" + ."\uA7BF" "u\uE010" + + # Suppress incorrect slashed arrows... so far + ."\u219A" "" + ."\u219B" "" + ."\u21AE" ""