From bcec6ed4ca16bc77113d09e0bbc46100cb3ebf06 Mon Sep 17 00:00:00 2001 From: John McWilliams Date: Thu, 13 Mar 2025 10:36:42 -0400 Subject: [PATCH] Implement remaining precomposed accented letters. --- .../src/letter/greek/orthography.ptl | 53 ++++++++++++--- .../font-glyphs/src/letter/latin/lower-a.ptl | 67 ++++++++++++++++++- .../font-glyphs/src/letter/latin/lower-g.ptl | 25 +++++-- .../src/meta/unicode-knowledge.ptl | 2 - 4 files changed, 130 insertions(+), 17 deletions(-) diff --git a/packages/font-glyphs/src/letter/greek/orthography.ptl b/packages/font-glyphs/src/letter/greek/orthography.ptl index 3c700aa88..36c62026a 100644 --- a/packages/font-glyphs/src/letter/greek/orthography.ptl +++ b/packages/font-glyphs/src/letter/greek/orthography.ptl @@ -9,12 +9,49 @@ glyph-block Letter-Greek-Orthography : begin # Link localization forms - link-gr LocalizedForm.IPPH 'a' 'a/doubleStorey' - link-gr LocalizedForm.IPPH 'aDieresis' 'aDieresis/doubleStorey' - link-gr LocalizedForm.IPPH 'aRetroflexHook' 'aRetroflexHook/doubleStorey' - link-gr LocalizedForm.IPPH 'g' 'g/doubleStorey' - link-gr LocalizedForm.IPPH 'gBar' 'gScriptBar' + link-gr LocalizedForm.IPPH 'a' 'a/doubleStorey' + link-gr LocalizedForm.IPPH 'aGrave' 'aGrave/doubleStorey' + link-gr LocalizedForm.IPPH 'aAcute' 'aAcute/doubleStorey' + link-gr LocalizedForm.IPPH 'aCircum' 'aCircum/doubleStorey' + link-gr LocalizedForm.IPPH 'aTilde' 'aTilde/doubleStorey' + link-gr LocalizedForm.IPPH 'aDieresis' 'aDieresis/doubleStorey' + link-gr LocalizedForm.IPPH 'aRing' 'aRing/doubleStorey' + link-gr LocalizedForm.IPPH 'aMacron' 'aMacron/doubleStorey' + link-gr LocalizedForm.IPPH 'aBreve' 'aBreve/doubleStorey' + link-gr LocalizedForm.IPPH 'aOgonek' 'aOgonek/doubleStorey' + link-gr LocalizedForm.IPPH 'aCaron' 'aCaron/doubleStorey' + link-gr LocalizedForm.IPPH 'aDieresisMacron' 'aDieresisMacron/doubleStorey' + link-gr LocalizedForm.IPPH 'aDotMacron' 'aDotMacron/doubleStorey' + link-gr LocalizedForm.IPPH 'aRingAcute' 'aRingAcute/doubleStorey' + link-gr LocalizedForm.IPPH 'aDblGrave' 'aDblGrave/doubleStorey' + link-gr LocalizedForm.IPPH 'aInvBreve' 'aInvBreve/doubleStorey' + link-gr LocalizedForm.IPPH 'aDot' 'aDot/doubleStorey' + link-gr LocalizedForm.IPPH 'aRetroflexHook' 'aRetroflexHook/doubleStorey' + link-gr LocalizedForm.IPPH 'aBelowring' 'aBelowring/doubleStorey' + link-gr LocalizedForm.IPPH 'aRightHalfRing' 'aRightHalfRing/doubleStorey' + link-gr LocalizedForm.IPPH 'aBelowdot' 'aBelowdot/doubleStorey' + link-gr LocalizedForm.IPPH 'aHook' 'aHook/doubleStorey' + link-gr LocalizedForm.IPPH 'aCircumAcute' 'aCircumAcute/doubleStorey' + link-gr LocalizedForm.IPPH 'aCircumGrave' 'aCircumGrave/doubleStorey' + link-gr LocalizedForm.IPPH 'aCircumHook' 'aCircumHook/doubleStorey' + link-gr LocalizedForm.IPPH 'aCircumTilde' 'aCircumTilde/doubleStorey' + link-gr LocalizedForm.IPPH 'aCircumBelowdot' 'aCircumBelowdot/doubleStorey' + link-gr LocalizedForm.IPPH 'aBreveAcute' 'aBreveAcute/doubleStorey' + link-gr LocalizedForm.IPPH 'aBreveGrave' 'aBreveGrave/doubleStorey' + link-gr LocalizedForm.IPPH 'aBreveHook' 'aBreveHook/doubleStorey' + link-gr LocalizedForm.IPPH 'aBreveTilde' 'aBreveTilde/doubleStorey' + link-gr LocalizedForm.IPPH 'aBreveBelowdot' 'aBreveBelowdot/doubleStorey' - link-gr LocalizedForm.IPPH 'grek/beta' 'latn/beta' - link-gr LocalizedForm.IPPH 'grek/theta' 'grek/theta/nonCursive' - link-gr LocalizedForm.IPPH 'grek/chi' 'latn/chi' + link-gr LocalizedForm.IPPH 'g' 'g/doubleStorey' + link-gr LocalizedForm.IPPH 'gCircum' 'gCircum/doubleStorey' + link-gr LocalizedForm.IPPH 'gBreve' 'gBreve/doubleStorey' + link-gr LocalizedForm.IPPH 'gDot' 'gDot/doubleStorey' + link-gr LocalizedForm.IPPH 'gCedilla' 'gCedilla/doubleStorey' + link-gr LocalizedForm.IPPH 'gBar' 'gScriptBar' + link-gr LocalizedForm.IPPH 'gCaron' 'gCaron/doubleStorey' + link-gr LocalizedForm.IPPH 'gAcute' 'gAcute/doubleStorey' + link-gr LocalizedForm.IPPH 'gMacron' 'gMacron/doubleStorey' + + link-gr LocalizedForm.IPPH 'grek/beta' 'latn/beta' + link-gr LocalizedForm.IPPH 'grek/theta' 'grek/theta/nonCursive' + link-gr LocalizedForm.IPPH 'grek/chi' 'latn/chi' diff --git a/packages/font-glyphs/src/letter/latin/lower-a.ptl b/packages/font-glyphs/src/letter/latin/lower-a.ptl index ffc191c3f..c189f67a0 100644 --- a/packages/font-glyphs/src/letter/latin/lower-a.ptl +++ b/packages/font-glyphs/src/letter/latin/lower-a.ptl @@ -9,7 +9,7 @@ glyph-block Letter-Latin-Lower-A : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives glyph-block-import Mark-Shared-Metrics : markHalfStroke - glyph-block-import Letter-Shared : CreateAccentedComposition CreateTurnedLetter + glyph-block-import Letter-Shared : CreateAccentedComposition CreateMultiAccentedComposition CreateTurnedLetter glyph-block-import Letter-Shared-Shapes : SerifFrame OBarLeft OBarRight ArcStartSerif glyph-block-import Letter-Shared-Shapes : RightwardTailedBar RetroflexHook glyph-block-import Letter-Shared-Shapes : InwardSlabArcStart @@ -299,7 +299,68 @@ glyph-block Letter-Latin-Lower-A : begin CreateTurnedLetter 'turnaScript' 0x252 'aScript' HalfAdvance (XH / 2) CreateTurnedLetter 'turnAScript' 0x2C70 'AScript' HalfAdvance (CAP / 2) - CreateAccentedComposition 'aDieresis' 0xE4 'a' 'dieresisAbove' - CreateAccentedComposition 'aDieresis/doubleStorey' null 'a/doubleStorey' 'dieresisAbove' + CreateAccentedComposition 'aGrave' 0xE0 'a' 'graveAbove' + CreateAccentedComposition 'aAcute' 0xE1 'a' 'acuteAbove' + CreateAccentedComposition 'aCircum' 0xE2 'a' 'circumflexAbove' + CreateAccentedComposition 'aTilde' 0xE3 'a' 'tildeAbove' + CreateAccentedComposition 'aDieresis' 0xE4 'a' 'dieresisAbove' + CreateAccentedComposition 'aRing' 0xE5 'a' 'ringAbove' + CreateAccentedComposition 'aMacron' 0x101 'a' 'macronAbove' + CreateAccentedComposition 'aBreve' 0x103 'a' 'breveAbove' + CreateAccentedComposition 'aOgonek' 0x105 'a' 'ogonekBelow' + CreateAccentedComposition 'aCaron' 0x1CE 'a' 'caronAbove' + CreateAccentedComposition 'aDblGrave' 0x201 'a' 'doubleGraveAbove' + CreateAccentedComposition 'aInvBreve' 0x203 'a' 'archAbove' + CreateAccentedComposition 'aDot' 0x227 'a' 'dotAbove' + CreateAccentedComposition 'aBelowring' 0x1E01 'a' 'ringBelow' + CreateAccentedComposition 'aBelowdot' 0x1EA1 'a' 'dotBelow' + CreateAccentedComposition 'aHook' 0x1EA3 'a' 'hookAbove' + CreateAccentedComposition 'aRightHalfRing' 0x1E9A 'a' 'rightHalfCircleTR' + + CreateMultiAccentedComposition 'aDieresisMacron' 0x1DF 'a' { 'dieresisAbove' 'macronAbove' } + CreateMultiAccentedComposition 'aDotMacron' 0x1E1 'a' { 'dotAbove' 'macronAbove' } + CreateMultiAccentedComposition 'aRingAcute' 0x1FB 'a' { 'ringAbove' 'acuteAbove' } + CreateMultiAccentedComposition 'aCircumAcute' 0x1EA5 'a' { 'circumflexAbove' 'acuteAbove' } + CreateMultiAccentedComposition 'aCircumGrave' 0x1EA7 'a' { 'circumflexAbove' 'graveAbove' } + CreateMultiAccentedComposition 'aCircumHook' 0x1EA9 'a' { 'circumflexAbove' 'hookAbove' } + CreateMultiAccentedComposition 'aCircumTilde' 0x1EAB 'a' { 'circumflexAbove' 'tildeAbove' } + CreateMultiAccentedComposition 'aCircumBelowdot' 0x1EAD 'a' { 'circumflexAbove' 'dotBelow' } + CreateMultiAccentedComposition 'aBreveAcute' 0x1EAF 'a' { 'breveAbove' 'acuteAbove' } + CreateMultiAccentedComposition 'aBreveGrave' 0x1EB1 'a' { 'breveAbove' 'graveAbove' } + CreateMultiAccentedComposition 'aBreveHook' 0x1EB3 'a' { 'breveAbove' 'hookAbove' } + CreateMultiAccentedComposition 'aBreveTilde' 0x1EB5 'a' { 'breveAbove' 'tildeAbove' } + CreateMultiAccentedComposition 'aBreveBelowdot' 0x1EB7 'a' { 'breveAbove' 'dotBelow' } + + CreateAccentedComposition 'aGrave/doubleStorey' null 'a/doubleStorey' 'graveAbove' + CreateAccentedComposition 'aAcute/doubleStorey' null 'a/doubleStorey' 'acuteAbove' + CreateAccentedComposition 'aCircum/doubleStorey' null 'a/doubleStorey' 'circumflexAbove' + CreateAccentedComposition 'aTilde/doubleStorey' null 'a/doubleStorey' 'tildeAbove' + CreateAccentedComposition 'aDieresis/doubleStorey' null 'a/doubleStorey' 'dieresisAbove' + CreateAccentedComposition 'aRing/doubleStorey' null 'a/doubleStorey' 'ringAbove' + CreateAccentedComposition 'aMacron/doubleStorey' null 'a/doubleStorey' 'macronAbove' + CreateAccentedComposition 'aBreve/doubleStorey' null 'a/doubleStorey' 'breveAbove' + CreateAccentedComposition 'aOgonek/doubleStorey' null 'a/doubleStorey' 'ogonekBelow' + CreateAccentedComposition 'aCaron/doubleStorey' null 'a/doubleStorey' 'caronAbove' + CreateAccentedComposition 'aDblGrave/doubleStorey' null 'a/doubleStorey' 'doubleGraveAbove' + CreateAccentedComposition 'aInvBreve/doubleStorey' null 'a/doubleStorey' 'archAbove' + CreateAccentedComposition 'aDot/doubleStorey' null 'a/doubleStorey' 'dotAbove' + CreateAccentedComposition 'aBelowring/doubleStorey' null 'a/doubleStorey' 'ringBelow' + CreateAccentedComposition 'aBelowdot/doubleStorey' null 'a/doubleStorey' 'dotBelow' + CreateAccentedComposition 'aHook/doubleStorey' null 'a/doubleStorey' 'hookAbove' + CreateAccentedComposition 'aRightHalfRing/doubleStorey' null 'a/doubleStorey' 'rightHalfCircleAbove' + + CreateMultiAccentedComposition 'aDieresisMacron/doubleStorey' null 'a/doubleStorey' { 'dieresisAbove' 'macronAbove' } + CreateMultiAccentedComposition 'aDotMacron/doubleStorey' null 'a/doubleStorey' { 'dotAbove' 'macronAbove' } + CreateMultiAccentedComposition 'aRingAcute/doubleStorey' null 'a/doubleStorey' { 'ringAbove' 'acuteAbove' } + CreateMultiAccentedComposition 'aCircumAcute/doubleStorey' null 'a/doubleStorey' { 'circumflexAbove' 'acuteAbove' } + CreateMultiAccentedComposition 'aCircumGrave/doubleStorey' null 'a/doubleStorey' { 'circumflexAbove' 'graveAbove' } + CreateMultiAccentedComposition 'aCircumHook/doubleStorey' null 'a/doubleStorey' { 'circumflexAbove' 'hookAbove' } + CreateMultiAccentedComposition 'aCircumTilde/doubleStorey' null 'a/doubleStorey' { 'circumflexAbove' 'tildeAbove' } + CreateMultiAccentedComposition 'aCircumBelowdot/doubleStorey' null 'a/doubleStorey' { 'circumflexAbove' 'dotBelow' } + CreateMultiAccentedComposition 'aBreveAcute/doubleStorey' null 'a/doubleStorey' { 'breveAbove' 'acuteAbove' } + CreateMultiAccentedComposition 'aBreveGrave/doubleStorey' null 'a/doubleStorey' { 'breveAbove' 'graveAbove' } + CreateMultiAccentedComposition 'aBreveHook/doubleStorey' null 'a/doubleStorey' { 'breveAbove' 'hookAbove' } + CreateMultiAccentedComposition 'aBreveTilde/doubleStorey' null 'a/doubleStorey' { 'breveAbove' 'tildeAbove' } + CreateMultiAccentedComposition 'aBreveBelowdot/doubleStorey' null 'a/doubleStorey' { 'breveAbove' 'dotBelow' } CreateAccentedComposition 'aSbRsbUnderlineBelow' null 'a' 'sbRsbUnderlineBelow' diff --git a/packages/font-glyphs/src/letter/latin/lower-g.ptl b/packages/font-glyphs/src/letter/latin/lower-g.ptl index ec6371555..c3da498c4 100644 --- a/packages/font-glyphs/src/letter/latin/lower-g.ptl +++ b/packages/font-glyphs/src/letter/latin/lower-g.ptl @@ -9,7 +9,7 @@ glyph-block Letter-Latin-Lower-G : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives glyph-block-import Mark-Adjustment : ExtendAboveBaseAnchors LeaningAnchor - glyph-block-import Letter-Shared : CreateTurnedLetter + glyph-block-import Letter-Shared : CreateAccentedComposition CreateTurnedLetter glyph-block-import Letter-Shared-Shapes : OBarLeft OBarRight FlatHookDepth glyph-block-import Letter-Shared-Shapes : CurlyTail PalatalHook TopHook @@ -208,10 +208,10 @@ glyph-block Letter-Latin-Lower-G : begin CreateTurnedLetter 'turng' 0x1D77 'g' HalfAdvance [mix Descender XH 0.5] select-variant "gBar" 0x1E5 (follow -- 'g') - select-variant 'gScript' 0x261 (follow -- [conditional-follow SLAB 'g/singleStorey/autoSerifed/slab' 'g/singleStorey/autoSerifed/sans']) (shapeFrom -- 'g') - select-variant 'GScript' 0xA7AC (follow -- [conditional-follow SLAB 'g/singleStorey/autoSerifed/slab' 'g/singleStorey/autoSerifed/sans']) + select-variant 'gScript' 0x261 (follow -- [conditional-follow SLAB 'g/singleStorey/autoSerifed/slab' 'g/singleStorey/autoSerifed/sans']) (shapeFrom -- 'g') + select-variant 'GScript' 0xA7AC (follow -- [conditional-follow SLAB 'g/singleStorey/autoSerifed/slab' 'g/singleStorey/autoSerifed/sans']) select-variant 'gScriptPalatalHook' 0x1D83 (follow -- [conditional-follow SLAB 'g/singleStorey/autoSerifed/slab' 'g/singleStorey/autoSerifed/sans']) (shapeFrom -- 'gPalatalHook') - select-variant 'gScriptBar' (follow -- [conditional-follow SLAB 'g/singleStorey/autoSerifed/slab' 'g/singleStorey/autoSerifed/sans']) (shapeFrom -- 'gBar') + select-variant 'gScriptBar' (follow -- [conditional-follow SLAB 'g/singleStorey/autoSerifed/slab' 'g/singleStorey/autoSerifed/sans']) (shapeFrom -- 'gBar') select-variant 'gScriptCrossedTail' 0xAB36 (follow -- [conditional-follow SLAB 'g/singleStoreyBentHook/autoSerifed/slab' 'g/singleStoreyBentHook/autoSerifed/sans']) alias 'cyrl/de.BGR' null 'gScript' @@ -238,3 +238,20 @@ glyph-block Letter-Latin-Lower-G : begin include : intersection VBar.r (RightSB - BBD) Descender XH BBS SingleStorey.BentHookT spiro-outline [DivFrame 1] XH 1 BBS + + CreateAccentedComposition 'gCircum' 0x11D 'g' 'circumflexAbove' + CreateAccentedComposition 'gBreve' 0x11F 'g' 'breveAbove' + CreateAccentedComposition 'gDot' 0x121 'g' 'dotAbove' + CreateAccentedComposition 'gCedilla' 0x123 'g' 'turnCommaAbove' + CreateAccentedComposition 'gCaron' 0x1E7 'g' 'caronAbove' + CreateAccentedComposition 'gAcute' 0x1F5 'g' 'acuteAbove' + CreateAccentedComposition 'gMacron' 0x1E21 'g' 'macronAbove' + + CreateAccentedComposition 'gCircum/doubleStorey' null 'g/doubleStorey' 'circumflexAbove' + CreateAccentedComposition 'gBreve/doubleStorey' null 'g/doubleStorey' 'breveAbove' + CreateAccentedComposition 'gDot/doubleStorey' null 'g/doubleStorey' 'dotAbove' + CreateAccentedComposition 'gCaron/doubleStorey' null 'g/doubleStorey' 'caronAbove' + CreateAccentedComposition 'gAcute/doubleStorey' null 'g/doubleStorey' 'acuteAbove' + CreateAccentedComposition 'gMacron/doubleStorey' null 'g/doubleStorey' 'macronAbove' + + derive-composites 'gCedilla/doubleStorey' null 'g/doubleStorey' 'cedillaExtShapeBelowSOArc' diff --git a/packages/font-glyphs/src/meta/unicode-knowledge.ptl b/packages/font-glyphs/src/meta/unicode-knowledge.ptl index 41232f2fd..d9682d48a 100644 --- a/packages/font-glyphs/src/meta/unicode-knowledge.ptl +++ b/packages/font-glyphs/src/meta/unicode-knowledge.ptl @@ -38,7 +38,6 @@ export : define decompOverrides : object # Latvians use comma instead of cedillas in several letters. # Record them as custom decomposition. 0x122 { 'G' 'commaBelow' } - 0x123 { 'g' 'turnCommaAbove' } 0x136 { 'K' 'commaBelow' } 0x137 { 'k' 'commaBelow' } 0x13B { 'L' 'commaBelow' } @@ -165,7 +164,6 @@ export : define decompOverrides : object 0x1E08 { 'CCedilla' 'acuteAbove' } 0x1E09 { 'cCedilla' 'acuteAbove' } - 0x1E9A { 'a' 'rightHalfCircleTR' } 0x1E9C { 'longs' 'shortSlashOver' } 0x1EDA { 'OHorn' 'acuteAbove' } 0x1EDB { 'oHorn' 'acuteAbove' }