Improve aceent builder

This commit is contained in:
be5invis 2021-06-19 10:29:35 -07:00
parent bea535f5c1
commit 5e7d28bf72
4 changed files with 145 additions and 156 deletions

View file

@ -1,2 +1,3 @@
* Add Greek Number Sign (`U+0374`).
* Fix Misplaced diacritics in `U+A7BA`, `U+A7BC`, and `U+A7BE` (#1125). * Fix Misplaced diacritics in `U+A7BA`, `U+A7BC`, and `U+A7BE` (#1125).
* Make Modifier Letter Colon (`U+A789`) smaller than Colon (#1126). * Make Modifier Letter Colon (`U+A789`) smaller than Colon (#1126).

View file

@ -67,35 +67,23 @@ glyph-block AutoBuild-Accents : begin
return s return s
local foundDecompositions {.} 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 # When recursively building, `recursiveCodes` contain an array of "needed" Unicode list
local goalCodes : recursiveCodes || [range 0x0000 0xFFFF] local goalCodes : recursiveCodes || [range 0x0000 0xFFFF]
foreach code goalCodes : if [not : glyphStore.queryByUnicode code] : do foreach code goalCodes : if [not : glyphStore.queryByUnicode code] : do
local str : String.fromCharCode code local str : String.fromCodePoint code
local nfd : fallback customDecompositions.(str) : str.normalize 'NFD' local nfd : fallback UnicodeKnowledge.decompositionOverrides.(str) : str.normalize 'NFD'
if (nfd.length > 1) : begin if (str !== nfd) : begin
local nfdChars : Array.from nfd
local parts { } local parts { }
local allFound true local allFound true
foreach j [range 0 nfd.length] : begin foreach part [items-of nfdChars] : begin
local part : glyphStore.queryByUnicode [nfd.charCodeAt j] local part : glyphStore.queryByUnicode [part.codePointAt 0]
if [not part] : then if [not part]
set allFound false : then : set allFound false
: else : else : parts.push part
set parts.(j) part
if allFound : begin if allFound : begin
local glyphName : decideName parts code local glyphName : 'u' + [code.toString 16 :.padStart 4 '0']
set parts : subParts parts set parts : subParts parts
set foundDecompositions.(glyphName) { glyphName code parts } set foundDecompositions.(glyphName) { glyphName code parts }
@ -146,7 +134,6 @@ glyph-block AutoBuild-Accents : begin
foreach [_id : items-of : Object.keys foundDecompositions] : do foreach [_id : items-of : Object.keys foundDecompositions] : do
local { glyphName code parts } foundDecompositions.(_id) local { glyphName code parts } foundDecompositions.(_id)
local saved : RootGlyphProc glyphName code parts local saved : RootGlyphProc glyphName code parts
if saved : begin if saved : begin
define part0Name : glyphStore.queryNameOf parts.0 define part0Name : glyphStore.queryNameOf parts.0
@ -165,136 +152,3 @@ glyph-block AutoBuild-Accents : begin
set parts1.0 : query-glyph relBase set parts1.0 : query-glyph relBase
if [not : query-glyph relGN] : RootGlyphProc relGN null parts1 if [not : query-glyph relGN] : RootGlyphProc relGN null parts1
if [query-glyph origGN] : gr.set [query-glyph origGN] relGN 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" ""

View file

@ -54,6 +54,7 @@ glyph-block Symbol-Punctuation-Ascii-Marks : begin
include : MarkZoom currentGlyph.advanceWidth include : MarkZoom currentGlyph.advanceWidth
alias 'mdfPrime' 0x2B9 'prime' alias 'mdfPrime' 0x2B9 'prime'
alias 'grek/numberSign' 0x374 'prime'
alias 'mdfDoublePrime' 0x2BA 'doubleprime' alias 'mdfDoublePrime' 0x2BA 'doubleprime'
alias 'mdfTurncomma' 0x2BB 'openSingleQuote' alias 'mdfTurncomma' 0x2BB 'openSingleQuote'
alias 'mdfApostrophe' 0x2BC 'closeSingleQuote' alias 'mdfApostrophe' 0x2BC 'closeSingleQuote'

View file

@ -30,3 +30,136 @@ export : define markCompositionTf : object
'perispomeniAbove' 'dasiaPerispomeni' 'perispomeniAbove' 'dasiaPerispomeni'
'cyrlPsiliAbove' : object 'cyrlPsiliAbove' : object
'cyrlPokrytieAbove' 'cyrlPsiliPokrytieAbove' '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" ""