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).
* Make Modifier Letter Colon (`U+A789`) smaller than Colon (#1126).

View file

@ -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" ""

View file

@ -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'

View file

@ -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" ""