From b3cad12960467fd6df9b156c2a85eb1cbb73437d Mon Sep 17 00:00:00 2001 From: be5invis Date: Sun, 31 Dec 2023 08:56:32 -0800 Subject: [PATCH] Fix leaning marks of turned capital F/L (#2137). --- changes/28.0.4.md | 1 + .../font-glyphs/src/common/derivatives.ptl | 29 ++--------------- .../font-glyphs/src/letter/cyrillic/che.ptl | 3 +- .../src/letter/greek/lower-delta.ptl | 3 +- .../src/letter/greek/lower-epsilon.ptl | 4 +-- .../src/letter/greek/upper-omega.ptl | 4 +-- .../src/letter/latin-ext/glottal-stop.ptl | 3 +- .../src/letter/latin-ext/insular-g.ptl | 5 +-- .../src/letter/latin-ext/lower-ae-oe.ptl | 5 +-- packages/font-glyphs/src/letter/latin/c.ptl | 10 +++--- packages/font-glyphs/src/letter/latin/k.ptl | 11 +++---- .../font-glyphs/src/letter/latin/lower-a.ptl | 7 ++-- .../font-glyphs/src/letter/latin/lower-e.ptl | 4 +-- .../font-glyphs/src/letter/latin/lower-g.ptl | 3 +- .../font-glyphs/src/letter/latin/lower-il.ptl | 5 +-- .../font-glyphs/src/letter/latin/lower-t.ptl | 7 ++-- .../font-glyphs/src/letter/latin/lower-y.ptl | 4 +-- .../font-glyphs/src/letter/latin/upper-a.ptl | 10 +++--- .../font-glyphs/src/letter/latin/upper-e.ptl | 4 +-- .../font-glyphs/src/letter/latin/upper-f.ptl | 6 ++-- .../font-glyphs/src/letter/latin/upper-g.ptl | 3 +- .../font-glyphs/src/letter/latin/upper-l.ptl | 3 +- .../font-glyphs/src/letter/latin/upper-m.ptl | 3 +- .../font-glyphs/src/letter/latin/upper-r.ptl | 9 +++--- .../font-glyphs/src/letter/latin/upper-t.ptl | 5 ++- packages/font-glyphs/src/letter/latin/v.ptl | 5 +-- packages/font-glyphs/src/letter/latin/w.ptl | 3 +- packages/font-glyphs/src/letter/shared.ptl | 9 ++++++ packages/font-glyphs/src/marks/adjust.ptl | 32 +++++++++++++++++++ packages/font-glyphs/src/meta/aesthetics.ptl | 8 ++++- packages/font-glyphs/src/meta/macros.ptl | 4 +-- packages/geometry/src/transform.mjs | 4 +++ packages/glyph/src/glyph.mjs | 1 + 33 files changed, 127 insertions(+), 90 deletions(-) create mode 100644 changes/28.0.4.md diff --git a/changes/28.0.4.md b/changes/28.0.4.md new file mode 100644 index 000000000..badb419cc --- /dev/null +++ b/changes/28.0.4.md @@ -0,0 +1 @@ +* Fix leaning marks of turned capital F/L (#2137). diff --git a/packages/font-glyphs/src/common/derivatives.ptl b/packages/font-glyphs/src/common/derivatives.ptl index 1561d7f97..135587438 100644 --- a/packages/font-glyphs/src/common/derivatives.ptl +++ b/packages/font-glyphs/src/common/derivatives.ptl @@ -138,10 +138,10 @@ glyph-block Common-Derivatives : begin if [not newid] : throw : new Error "Target ID not specified" derive-glyphs newid unicode id lambda [src gr] : glyph-proc - include [refer-glyph src] [if mark false AS_BASE] ALSO_METRICS - if mark : include mark + include [refer-glyph src] AS_BASE ALSO_METRICS define x : if (_x <@ Function) [_x.call currentGlyph] _x define y : if (_y <@ Function) [_y.call currentGlyph] _y + if mark : include mark # This is [FlipAround], but we cannot use it because common-shapes depends on this # glyph block @@ -164,31 +164,6 @@ glyph-block Common-Derivatives : begin glyph-block-export HalfAdvance define [HalfAdvance] : this.advanceWidth / 2 - glyph-block-export TurnMarks - define [TurnMarks k fnOverride] : glyph-proc - local df : DivFrame (currentGlyph.advanceWidth / Width) - local mx : compositeBaseAnchors [df.markSet.(k)] - if fnOverride [fnOverride df] {.baseAnchors {.}} - include mx - - glyph-block-export SwapMarks - define [SwapMarks k1 k2] : glyph-proc - # Swap markAnchors - local m1 currentGlyph.markAnchors.(k1) - local m2 currentGlyph.markAnchors.(k2) - currentGlyph.deleteMarkAnchor k1 - currentGlyph.deleteMarkAnchor k2 - if m1 : set currentGlyph.markAnchors.(k2) m1 - if m2 : set currentGlyph.markAnchors.(k1) m2 - - # Swap baseAnchors - local b1 currentGlyph.baseAnchors.(k1) - local b2 currentGlyph.baseAnchors.(k2) - currentGlyph.deleteBaseAnchor k1 - currentGlyph.deleteBaseAnchor k2 - if b1 : set currentGlyph.baseAnchors.(k2) b1 - if b2 : set currentGlyph.baseAnchors.(k1) b2 - # Dual derivatives glyph-block-export HCombine define [HCombine newid unicode id1 id2 spacing] : begin diff --git a/packages/font-glyphs/src/letter/cyrillic/che.ptl b/packages/font-glyphs/src/letter/cyrillic/che.ptl index cc5d9655b..cb60518c0 100644 --- a/packages/font-glyphs/src/letter/cyrillic/che.ptl +++ b/packages/font-glyphs/src/letter/cyrillic/che.ptl @@ -8,6 +8,7 @@ glyph-block Letter-Cyrillic-Che : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives glyph-block-import Mark-Adjustment : LeaningAnchor + glyph-block-import Letter-Shared : CreateTurnedLetter glyph-block-import Letter-Shared-Shapes : SerifFrame RightwardTailedBar DToothlessRise glyph-block-import Letter-Shared-Shapes : CyrDescender BottomExtension @@ -101,7 +102,7 @@ glyph-block Letter-Cyrillic-Che : begin refer-glyph 'cyrl/che.standard' CyrDescender.lSideJut (RightSB - [HSwToV Stroke]) 0 (jut -- MidJutSide) - turned 'cyrl/Shha' 0x4BA 'cyrl/Che' Middle (CAP / 2) + CreateTurnedLetter 'cyrl/Shha' 0x4BA 'cyrl/Che' HalfAdvance (CAP / 2) derive-composites 'cyrl/ShhaDescender' 0x526 'cyrl/Shha' [CyrDescender.rSideJut RightSB 0] define [ChrVBar top] : begin diff --git a/packages/font-glyphs/src/letter/greek/lower-delta.ptl b/packages/font-glyphs/src/letter/greek/lower-delta.ptl index 42516191a..4930b5736 100644 --- a/packages/font-glyphs/src/letter/greek/lower-delta.ptl +++ b/packages/font-glyphs/src/letter/greek/lower-delta.ptl @@ -7,6 +7,7 @@ glyph-module glyph-block Letter-Greek-Lower-Delta : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives + glyph-block-import Letter-Shared : CreateTurnedLetter create-glyph 'grek/delta.rounded' : glyph-proc include : MarkSet.b @@ -70,4 +71,4 @@ glyph-block Letter-Greek-Lower-Delta : begin alias 'cyrl/be.SRB' null 'grek/delta.rounded' alias 'latindelta' 0x1E9F 'grek/delta' - turned 'turndelta' 0x18D 'grek/delta' Middle (XH / 2) [MarkSet.p] + CreateTurnedLetter 'turndelta' 0x18D 'grek/delta' HalfAdvance (XH / 2) diff --git a/packages/font-glyphs/src/letter/greek/lower-epsilon.ptl b/packages/font-glyphs/src/letter/greek/lower-epsilon.ptl index e639efd52..1214c00f7 100644 --- a/packages/font-glyphs/src/letter/greek/lower-epsilon.ptl +++ b/packages/font-glyphs/src/letter/greek/lower-epsilon.ptl @@ -10,7 +10,7 @@ glyph-block Letter-Greek-Lower-Epsilon : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives glyph-block-import Mark-Adjustment : ExtendBelowBaseAnchors - glyph-block-import Letter-Shared : CreateAccentedComposition + glyph-block-import Letter-Shared : CreateAccentedComposition CreateTurnedLetter glyph-block-import Letter-Shared-Shapes : SerifedArcStart SerifedArcEnd SerifFrame glyph-block-import Letter-Shared-Shapes : InwardSlabArcStart InwardSlabArcEnd glyph-block-import Letter-Shared-Shapes : ArcStartSerif ArcEndSerif @@ -473,7 +473,7 @@ glyph-block Letter-Greek-Lower-Epsilon : begin alias 'grek/epsilon' 0x3B5 'latn/epsilon.serifless' select-variant 'latn/Epsilon' 0x190 select-variant 'latn/epsilon' 0x25B - turned 'turnepsilon' 0x1D08 'latn/epsilon' Middle (XH / 2) + CreateTurnedLetter 'turnepsilon' 0x1D08 'latn/epsilon' HalfAdvance (XH / 2) alias 'cyrl/ZeRev' 0x510 'latn/Epsilon' alias 'cyrl/zeRev' 0x511 'latn/epsilon' diff --git a/packages/font-glyphs/src/letter/greek/upper-omega.ptl b/packages/font-glyphs/src/letter/greek/upper-omega.ptl index a56ae8cdf..b16f30512 100644 --- a/packages/font-glyphs/src/letter/greek/upper-omega.ptl +++ b/packages/font-glyphs/src/letter/greek/upper-omega.ptl @@ -8,7 +8,7 @@ glyph-module glyph-block Letter-Greek-Upper-Omega : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives - glyph-block-import Letter-Shared : SetGrekUpperTonos + glyph-block-import Letter-Shared : SetGrekUpperTonos CreateTurnedLetter define [UpperOmegaShape top extend ada adb] : glyph-proc local fine : Stroke * CThin @@ -46,4 +46,4 @@ glyph-block Letter-Greek-Upper-Omega : begin include : UpperOmegaShape CAP 0.08 ArchDepthA ArchDepthB include : FlipAround Middle (CAP / 2) - turned 'latn/upsilon' 0x28A 'grek/smcpOmega' Middle (XH / 2) + CreateTurnedLetter 'latn/upsilon' 0x28A 'grek/smcpOmega' HalfAdvance (XH / 2) diff --git a/packages/font-glyphs/src/letter/latin-ext/glottal-stop.ptl b/packages/font-glyphs/src/letter/latin-ext/glottal-stop.ptl index 60410a59b..2dad9b94a 100644 --- a/packages/font-glyphs/src/letter/latin-ext/glottal-stop.ptl +++ b/packages/font-glyphs/src/letter/latin-ext/glottal-stop.ptl @@ -9,6 +9,7 @@ glyph-block Letter-Latin-Glottal-Stop : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives glyph-block-import Mark-Shared-Metrics : markHalfStroke + glyph-block-import Letter-Shared : CreateTurnedLetter glyph-block-import Letter-Shared-Shapes : LetterBarOverlay create-glyph 'glottalStop' 0x294 : glyph-proc @@ -65,7 +66,7 @@ glyph-block Letter-Latin-Glottal-Stop : begin if SLAB : begin include : HSerif.mb Middle 0 Jut - turned 'invGlottalStop' 0x296 'revGlottalStop' Middle (Ascender / 2) + CreateTurnedLetter 'invGlottalStop' 0x296 'revGlottalStop' HalfAdvance (Ascender / 2) create-glyph 'glottalStopBar' 0x2A1 : glyph-proc include [refer-glyph 'glottalStop'] AS_BASE diff --git a/packages/font-glyphs/src/letter/latin-ext/insular-g.ptl b/packages/font-glyphs/src/letter/latin-ext/insular-g.ptl index 39044356c..8ecf6534b 100644 --- a/packages/font-glyphs/src/letter/latin-ext/insular-g.ptl +++ b/packages/font-glyphs/src/letter/latin-ext/insular-g.ptl @@ -7,6 +7,7 @@ glyph-module glyph-block Letter-Latin-Insular-G : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives + glyph-block-import Letter-Shared : CreateTurnedLetter define [InsularGShape top bot] : glyph-proc local fine : AdviceStroke 4 @@ -63,5 +64,5 @@ glyph-block Letter-Latin-Insular-G : begin include : MarkSet.capital include : InsularGShape CAP 0 - turned 'GInsularTurned' 0xA77E 'GInsular' Middle (CAP / 2) - turned 'gInsularTurned' 0xA77F 'gInsular' Middle [mix Descender XH 0.5] + CreateTurnedLetter 'GInsularTurned' 0xA77E 'GInsular' HalfAdvance (CAP / 2) + CreateTurnedLetter 'gInsularTurned' 0xA77F 'gInsular' HalfAdvance [mix Descender XH 0.5] diff --git a/packages/font-glyphs/src/letter/latin-ext/lower-ae-oe.ptl b/packages/font-glyphs/src/letter/latin-ext/lower-ae-oe.ptl index 31fa79a94..b6400a358 100644 --- a/packages/font-glyphs/src/letter/latin-ext/lower-ae-oe.ptl +++ b/packages/font-glyphs/src/letter/latin-ext/lower-ae-oe.ptl @@ -9,6 +9,7 @@ glyph-block Letter-Latin-Lower-AE-OE : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives glyph-block-import Mark-Adjustment : LeaningAnchor + glyph-block-import Letter-Shared : CreateTurnedLetter glyph-block-import Letter-Shared-Shapes : nShoulder OBarLeft glyph-block-export SubDfAndShift @@ -407,8 +408,8 @@ glyph-block Letter-Latin-Lower-AE-OE : begin alias 'cyrl/ae' 0x4D5 'ae' alias 'cyrl/oo' 0xA699 'oo' - turned 'turnae' 0x1D02 'ae' [DivFrame para.diversityM 3].middle (XH / 2) - turned 'turnoe' 0x1D14 'oe' [DivFrame para.diversityM 3].middle (XH / 2) + CreateTurnedLetter 'turnae' 0x1D02 'ae' HalfAdvance (XH / 2) [DivFrame para.diversityM 3] + CreateTurnedLetter 'turnoe' 0x1D14 'oe' HalfAdvance (XH / 2) [DivFrame para.diversityM 3] derive-composites 'turnoeSlashO' 0xAB41 'turnoe' 'rightHalfSlashOverlay' derive-composites 'turnoeBarO' 0xAB42 'turnoe' 'rightHalfBarOverlay' diff --git a/packages/font-glyphs/src/letter/latin/c.ptl b/packages/font-glyphs/src/letter/latin/c.ptl index 88d8db2a8..e67fdac9f 100644 --- a/packages/font-glyphs/src/letter/latin/c.ptl +++ b/packages/font-glyphs/src/letter/latin/c.ptl @@ -10,7 +10,7 @@ glyph-block Letter-Latin-C : begin glyph-block-import Common-Derivatives glyph-block-import Mark-Adjustment : ExtendAboveBaseAnchors ExtendBelowBaseAnchors glyph-block-import Mark-Shared-Metrics : markStroke - glyph-block-import Letter-Shared : CreateDependentComposite + glyph-block-import Letter-Shared : CreateDependentComposite CreateTurnedLetter glyph-block-import Letter-Shared-Shapes : SerifFrame CurlyTail DToothlessRise glyph-block-import Letter-Shared-Shapes : SerifedArcStart SerifedArcEnd InwardSlabArcStart glyph-block-import Letter-Shared-Shapes : ArcStartSerif ArcEndSerif @@ -395,13 +395,13 @@ glyph-block Letter-Latin-C : begin 'std' 'c/centKernelStd' 'cap' 'c/centKernelCap' - turned 'turnC' 0x186 'C' Middle (CAP / 2) - turned 'turnc' 0x254 'c' Middle (XH / 2) - turned 'turnSmcpC' 0x1D10 'smcpC' Middle (XH / 2) + CreateTurnedLetter 'turnC' 0x186 'C' HalfAdvance (CAP / 2) + CreateTurnedLetter 'turnc' 0x254 'c' HalfAdvance (XH / 2) + CreateTurnedLetter 'turnSmcpC' 0x1D10 'smcpC' HalfAdvance (XH / 2) alias 'grek/revLunateSigma' 0x3FD 'revC' alias 'grek/revLunateSmallSigma' 0x37B 'revSmallC.serifless' - turned 'turnc/turnDescBase' null 'c/turnDescBase' Middle (XH / 2) + CreateTurnedLetter 'turnc/turnDescBase' null 'c/turnDescBase' HalfAdvance (XH / 2) derive-composites 'turncRetroflexHook' 0x1D97 'turnc/turnDescBase' RetroflexHook.l SB 0 (yAttach -- DToothlessRise) diff --git a/packages/font-glyphs/src/letter/latin/k.ptl b/packages/font-glyphs/src/letter/latin/k.ptl index a5581d9a5..df141e716 100644 --- a/packages/font-glyphs/src/letter/latin/k.ptl +++ b/packages/font-glyphs/src/letter/latin/k.ptl @@ -12,7 +12,7 @@ glyph-block Letter-Latin-K : begin glyph-block-import Mark-Shared-Metrics : markExtend glyph-block-import Mark-Above : aboveMarkMid glyph-block-import Mark-Adjustment : ExtendBelowBaseAnchors LeaningAnchor - + glyph-block-import Letter-Shared : CreateTurnedLetter glyph-block-import Letter-Shared-Shapes : DiagTail CyrDescender glyph-block-import Letter-Shared-Shapes : LetterBarOverlay PalatalHook TopHook @@ -456,10 +456,6 @@ glyph-block Letter-Latin-K : begin if slabLT : include : UpperKLTSerif CAP Stroke xBarLeft slabLT if slabLB : include : UpperKLBSerif CAP Stroke xBarLeft slabLB - turned "turnK.\(suffix)" nothing "K.\(suffix)" Middle (CAP / 2) - - turned "smcpTurnK.\(suffix)" nothing "smcpK.\(suffix)" Middle (XH / 2) - define [BashkirKaShape df top] : glyph-proc local left : if slabLT ([mix SB RightSB 0.35] - [HSwToV : 0.5 * df.mvs]) [mix SB RightSB 0.2] local leftNB : left - [KBalance slabLT straightBar] @@ -591,9 +587,10 @@ glyph-block Letter-Latin-K : begin derive-composites 'KStrokeLegStroke' 0xA744 'KStroke' 'legSlashOver' derive-composites 'kStrokeLegStroke' 0xA745 'kStroke' 'legSlashOver' - select-variant 'turnK' 0xA7B0 (follow -- 'K') + CreateTurnedLetter 'turnK' 0xA7B0 'K' HalfAdvance (CAP / 2) + CreateTurnedLetter 'smcpTurnK' 0x1DF10 'smcpK' HalfAdvance (XH / 2) + select-variant 'turnk' 0x29E (follow -- 'k') - select-variant 'smcpTurnK' 0x1DF10 (follow -- 'K') select-variant 'cyrl/BashkirUpperKa' 0x4A0 (follow -- 'cyrl/Ka') select-variant 'cyrl/BashkirKa' 0x4A1 (follow -- 'cyrl/ka') diff --git a/packages/font-glyphs/src/letter/latin/lower-a.ptl b/packages/font-glyphs/src/letter/latin/lower-a.ptl index 95b6bcab4..27c1ad434 100644 --- a/packages/font-glyphs/src/letter/latin/lower-a.ptl +++ b/packages/font-glyphs/src/letter/latin/lower-a.ptl @@ -10,6 +10,7 @@ glyph-block Letter-Latin-Lower-A : begin glyph-block-import Common-Derivatives glyph-block-import Mark-Shared-Metrics : markHalfStroke glyph-block-import Letter-Shared : CreateAccentedComposition CreateOgonekComposition + glyph-block-import Letter-Shared : CreateTurnedLetter glyph-block-import Letter-Shared-Shapes : SerifFrame OBarLeft OBarRight ArcStartSerif glyph-block-import Letter-Shared-Shapes : RightwardTailedBar InvRightwardTailedBar glyph-block-import Letter-Shared-Shapes : DToothlessRise DMBlend RetroflexHook @@ -300,7 +301,7 @@ glyph-block Letter-Latin-Lower-A : begin link-reduced-variant 'a/turnABase' 'a' alias 'cyrl/a' 0x430 'a' - turned 'turna' 0x250 'a/turnABase' Middle (XH / 2) + CreateTurnedLetter 'turna' 0x250 'a/turnABase' HalfAdvance (XH / 2) derive-composites 'artail' 0x1D8F 'a/rtailBase' RetroflexHook.rSideJut RightSB 0 (yOverflow -- Stroke) @@ -311,11 +312,11 @@ glyph-block Letter-Latin-Lower-A : begin select-variant 'scripta' 0x0251 select-variant 'largescripta' 0x2C6D (follow -- 'scripta') select-variant 'invscripta' 0xAB64 (follow -- 'scripta') - turned 'turnlargescripta' 0x2C70 'largescripta' Middle (CAP / 2) - turned 'turnscripta' 0x252 'scripta' Middle (XH / 2) derive-composites 'alphaRetroflexHook' 0x1D90 'scripta.singleStoreySerifless' RetroflexHook.rSideJut RightSB 0 (yOverflow -- Stroke) + CreateTurnedLetter 'turnscripta' 0x252 'scripta' HalfAdvance (XH / 2) + CreateTurnedLetter 'turnlargescripta' 0x2C70 'largescripta' HalfAdvance (CAP / 2) CreateAccentedComposition 'aDieresis' 0xE4 'a' 'dieresisAbove' CreateAccentedComposition 'aSbRsbUnderlineBelow' null 'a' 'sbRsbUnderlineBelow' diff --git a/packages/font-glyphs/src/letter/latin/lower-e.ptl b/packages/font-glyphs/src/letter/latin/lower-e.ptl index 16473e268..d762a1bc0 100644 --- a/packages/font-glyphs/src/letter/latin/lower-e.ptl +++ b/packages/font-glyphs/src/letter/latin/lower-e.ptl @@ -8,7 +8,7 @@ glyph-module glyph-block Letter-Latin-Lower-E : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives - glyph-block-import Letter-Shared : CreateSelectorVariants DefineSelectorGlyph + glyph-block-import Letter-Shared : CreateSelectorVariants DefineSelectorGlyph CreateTurnedLetter glyph-block-import Letter-Shared-Shapes : FlatHookDepth RetroflexHook glyph-block-import Letter-Shared-Shapes : SerifedArcEnd ArcEndSerif DToothlessRise glyph-block-import Mark-Shared-Metrics : markExtend markStroke markStress markFine @@ -273,7 +273,7 @@ glyph-block Letter-Latin-Lower-E : begin select-variant 'e' 'e' alias 'cyrl/ie' 0x435 'e' - turned 'turne' 0x1DD 'e' Middle (XH / 2) + CreateTurnedLetter 'turne' 0x1DD 'e' HalfAdvance (XH / 2) select-variant 'eOgonek' 0x119 (follow -- 'e') select-variant 'eRetroflexHook' 0x1D92 (follow -- 'e') diff --git a/packages/font-glyphs/src/letter/latin/lower-g.ptl b/packages/font-glyphs/src/letter/latin/lower-g.ptl index f992b2074..3e4ec84f2 100644 --- a/packages/font-glyphs/src/letter/latin/lower-g.ptl +++ b/packages/font-glyphs/src/letter/latin/lower-g.ptl @@ -9,6 +9,7 @@ glyph-block Letter-Latin-Lower-G : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives glyph-block-import Mark-Adjustment : ExtendAboveBaseAnchors + glyph-block-import Letter-Shared : CreateTurnedLetter glyph-block-import Letter-Shared-Shapes : OBarLeft OBarRight DToothlessRise DMBlend glyph-block-import Letter-Shared-Shapes : FlatHookDepth CurlyTail PalatalHook TopHook @@ -209,7 +210,7 @@ glyph-block Letter-Latin-Lower-G : begin select-variant 'g' 'g' link-reduced-variant 'g/sansSerif' 'g' MathSansSerif - turned 'turng' 0x1D77 'g' Middle [mix Descender XH 0.5] + CreateTurnedLetter 'turng' 0x1D77 'g' HalfAdvance [mix Descender XH 0.5] select-variant "gBar" 0x1E5 (follow -- 'g') select-variant 'g/single' null (shapeFrom -- 'g') diff --git a/packages/font-glyphs/src/letter/latin/lower-il.ptl b/packages/font-glyphs/src/letter/latin/lower-il.ptl index 4b3487f8f..08330ade9 100644 --- a/packages/font-glyphs/src/letter/latin/lower-il.ptl +++ b/packages/font-glyphs/src/letter/latin/lower-il.ptl @@ -11,6 +11,7 @@ glyph-block Letter-Latin-Lower-I : begin glyph-block-import Mark-Adjustment : ExtendBelowBaseAnchors glyph-block-import Letter-Shared : CreateAccentedComposition CreateMultiAccentedComposition glyph-block-import Letter-Shared : CreateCommaCaronComposition CreateOgonekComposition + glyph-block-import Letter-Shared : CreateTurnedLetter glyph-block-import Letter-Shared-Shapes : FlatHookDepth DiagTail glyph-block-import Letter-Shared-Shapes : CurlyTail BeltOverlay PalatalHook glyph-block-import Letter-Shared-Shapes : RetroflexHook LetterBarOverlay RightwardTailedBar @@ -321,7 +322,7 @@ glyph-block Letter-Latin-Lower-I : begin select-variant 'latn/Iota' 0x196 (follow -- 'latn/iota') alias 'cyrl/Iota' 0xA646 'latn/Iota' - turned 'turni' 0x1D09 'i' HalfAdvance (XH / 2) [TurnMarks 'p'] + CreateTurnedLetter 'turni' 0x1D09 'i' HalfAdvance (XH / 2) CreateAccentedComposition 'cyrl/ghe.SRB' null 'dotlessi/tailed' 'macronAbove' CreateMultiAccentedComposition 'cyrl/gje.SRB' null 'dotlessi/tailed' { 'macronAbove' 'acuteAbove' } @@ -337,7 +338,7 @@ glyph-block Letter-Latin-Lower-I : begin select-variant 'lRTail/decompress' (follow -- 'l/reduced/rtailDec') (shapeFrom -- 'lRTail') alias 'cyrl/palochka' 0x4CF 'l' - turned 'turnl' 0xA781 'l' HalfAdvance (XH / 2) [TurnMarks 'p'] + CreateTurnedLetter 'turnl' 0xA781 'l' HalfAdvance (XH / 2) select-variant 'l/phoneticLeft' (shapeFrom -- 'l') select-variant 'l/compLigRight' (shapeFrom -- 'l') select-variant 'lDotBase' null (follow -- 'l') diff --git a/packages/font-glyphs/src/letter/latin/lower-t.ptl b/packages/font-glyphs/src/letter/latin/lower-t.ptl index 96c6e0f57..7a92254b6 100644 --- a/packages/font-glyphs/src/letter/latin/lower-t.ptl +++ b/packages/font-glyphs/src/letter/latin/lower-t.ptl @@ -9,7 +9,7 @@ glyph-block Letter-Latin-Lower-T : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives glyph-block-import Mark-Adjustment : LeaningAnchor - glyph-block-import Letter-Shared : CreateCommaCaronComposition + glyph-block-import Letter-Shared : CreateCommaCaronComposition CreateTurnedLetter glyph-block-import Letter-Shared-Shapes : CurlyTail FlatHookDepth ConnectedCedilla SerifedArcEnd glyph-block-import Letter-Shared-Shapes : DiagTail DToothlessRise glyph-block-import Letter-Shared-Shapes : TopHook PalatalHook @@ -276,8 +276,6 @@ glyph-block Letter-Latin-Lower-T : begin local attach : currentGlyph.gizmo.unapply currentGlyph.baseAnchors.hooktopAttach include : TopHook.mBarInner attach.x XH Ascender - turned "turnt.\(suffix)" nothing "t.\(suffix)" df.middle (XH / 2) [df.markSet.p] - create-glyph "tCurlyTail.\(suffix)" : glyph-proc include : MarkSet.b @@ -305,7 +303,6 @@ glyph-block Letter-Latin-Lower-T : begin select-variant 't/phoneticLeft1' (shapeFrom -- 't') select-variant 't/phoneticLeft2' select-variant 't/phoneticRight' - select-variant 'turnt' 0x287 (follow -- 't') CreateCommaCaronComposition 'tcaron' 0x165 't' derive-glyphs 'tCedilla' 0x163 't' ConnectedCedilla @@ -316,6 +313,8 @@ glyph-block Letter-Latin-Lower-T : begin select-variant "tHookTopRTail" 0x1DF09 + CreateTurnedLetter "turnt" 0x287 "t" HalfAdvance (XH / 2) + # U+01BE is actually "t" and "s" combined together define SLAB-NONE 0 define SLAB-CLASSICAL 1 diff --git a/packages/font-glyphs/src/letter/latin/lower-y.ptl b/packages/font-glyphs/src/letter/latin/lower-y.ptl index a4fdc94b9..01a220014 100644 --- a/packages/font-glyphs/src/letter/latin/lower-y.ptl +++ b/packages/font-glyphs/src/letter/latin/lower-y.ptl @@ -11,7 +11,7 @@ glyph-block Letter-Latin-Lower-Y : begin glyph-block-import Mark-Shared-Metrics : markExtend markStroke markStress markFine glyph-block-import Mark-Above : aboveMarkTop aboveMarkBot aboveMarkMid aboveMarkStack glyph-block-import Mark-Below : belowMarkStack - glyph-block-import Letter-Shared : CreateAccentedComposition + glyph-block-import Letter-Shared : CreateAccentedComposition CreateTurnedLetter glyph-block-import Letter-Shared-Shapes : nShoulder FlatHookDepth SerifFrame BeltOverlay TopHook define SLAB-NONE { false false false } @@ -413,7 +413,7 @@ glyph-block Letter-Latin-Lower-Y : begin link-reduced-variant 'y/sansSerif' 'y' MathSansSerif select-variant 'cyrl/u' 0x443 (shapeFrom -- 'y') - turned 'turny' 0x28E 'y/nonCursive' Middle (XH / 2) [MarkSet.b] + CreateTurnedLetter 'turny' 0x28E 'y/nonCursive' HalfAdvance (XH / 2) derive-glyphs 'turnyBelt' 0x1DF06 'y/nonCursive' : function [src sel] : glyph-proc include : MarkSet.b include [refer-glyph src] diff --git a/packages/font-glyphs/src/letter/latin/upper-a.ptl b/packages/font-glyphs/src/letter/latin/upper-a.ptl index 4ce2c7f4d..50a29c90a 100644 --- a/packages/font-glyphs/src/letter/latin/upper-a.ptl +++ b/packages/font-glyphs/src/letter/latin/upper-a.ptl @@ -11,7 +11,7 @@ glyph-block Letter-Latin-Upper-A : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives glyph-block-import Mark-Shared-Metrics : markHalfStroke - glyph-block-import Letter-Shared : SetGrekUpperTonos CreateOgonekComposition + glyph-block-import Letter-Shared : SetGrekUpperTonos CreateOgonekComposition CreateTurnedLetter glyph-block-import Letter-Shared-Shapes : SerifFrame glyph-block-import Letter-Latin-V : VShapeOutline VShape VCornerHalfWidth @@ -156,7 +156,7 @@ glyph-block Letter-Latin-Upper-A : begin select-variant 'currency/australSign' 0x20B3 (follow -- 'A') link-reduced-variant 'grek/Alpha/sansSerif' 'grek/Alpha' MathSansSerif (follow -- 'A/sansSerif') alias 'cyrl/A' 0x410 'A' - turned 'turnA' 0x2C6F 'A' Middle (CAP / 2) + CreateTurnedLetter 'turnA' 0x2C6F 'A' HalfAdvance (CAP / 2) select-variant 'grek/Lambda' 0x39B link-reduced-variant 'grek/Lambda/sansSerif' 'grek/Lambda' MathSansSerif @@ -224,9 +224,9 @@ glyph-block Letter-Latin-Upper-A : begin select-variant 'increment.aplForm' [CodeApl 0x2206] (follow -- 'grek/Delta') select-variant 'increment.aplThin' (follow -- 'grek/Delta') - turned 'nabla' [CodeNonApl 0x2207] 'increment' Middle (CAP / 2) - turned 'nabla.aplForm' [CodeApl 0x2207] 'increment.aplForm' Middle SymbolMid - turned 'nabla.aplThin' null 'increment.aplThin' Middle SymbolMid + CreateTurnedLetter 'nabla' [CodeNonApl 0x2207] 'increment' HalfAdvance (CAP / 2) + CreateTurnedLetter 'nabla.aplForm' [CodeApl 0x2207] 'increment.aplForm' HalfAdvance SymbolMid + CreateTurnedLetter 'nabla.aplThin' null 'increment.aplThin' HalfAdvance SymbolMid derive-glyphs 'cyrl/De.BGR' null 'grek/Delta' : function [src gr] : glyph-proc include [refer-glyph src] AS_BASE ALSO_METRICS diff --git a/packages/font-glyphs/src/letter/latin/upper-e.ptl b/packages/font-glyphs/src/letter/latin/upper-e.ptl index 3887c1652..191ef014f 100644 --- a/packages/font-glyphs/src/letter/latin/upper-e.ptl +++ b/packages/font-glyphs/src/letter/latin/upper-e.ptl @@ -9,7 +9,7 @@ glyph-block Letter-Latin-Upper-E : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives glyph-block-import Mark-Shared-Metrics : markHalfStroke - glyph-block-import Letter-Shared : SetGrekUpperTonos CreateOgonekComposition + glyph-block-import Letter-Shared : SetGrekUpperTonos CreateOgonekComposition CreateTurnedLetter glyph-block-import Letter-Latin-Upper-F : xMidBarShrink yMidBar EFVJutLength define kSB 1 @@ -74,7 +74,7 @@ glyph-block Letter-Latin-Upper-E : begin alias 'cyrl/Ie' 0x415 'E' select-variant 'revE' 0x18E (follow -- 'E') - turned 'turnSmcpE' 0x2C7B 'smcpE' Middle (XH / 2) + CreateTurnedLetter 'turnSmcpE' 0x2C7B 'smcpE' HalfAdvance (XH / 2) glyph-block-import Letter-Blackboard : BBS BBD create-glyph 'mathbb/E' 0x1D53C : glyph-proc diff --git a/packages/font-glyphs/src/letter/latin/upper-f.ptl b/packages/font-glyphs/src/letter/latin/upper-f.ptl index 438188219..7aeefbb16 100644 --- a/packages/font-glyphs/src/letter/latin/upper-f.ptl +++ b/packages/font-glyphs/src/letter/latin/upper-f.ptl @@ -9,6 +9,7 @@ glyph-block Letter-Latin-Upper-F : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives glyph-block-import Mark-Adjustment : LeaningAnchor + glyph-block-import Letter-Shared : CreateTurnedLetter glyph-block-import Letter-Shared-Shapes : LetterBarOverlay PalatalHook glyph-block-export xMidBarShrink @@ -95,9 +96,8 @@ glyph-block Letter-Latin-Upper-F : begin FShape CAP (stroke -- BBS) Rect (CAP - BBS) BBS (xFBarLeft + [HSwToV BBS]) (xFBarLeft + BBD) - turned 'turnF' 0x2132 'F' Middle (CAP / 2) - turned 'turnSmcpF' 0x214E 'smcpF' Middle (XH / 2) - + CreateTurnedLetter 'turnF' 0x2132 'F' HalfAdvance (CAP / 2) + CreateTurnedLetter 'turnSmcpF' 0x214E 'smcpF' HalfAdvance (XH / 2) derive-glyphs 'Fltail' 0x191 'F' : lambda [src gr] : glyph-proc include [refer-glyph src] AS_BASE ALSO_METRICS diff --git a/packages/font-glyphs/src/letter/latin/upper-g.ptl b/packages/font-glyphs/src/letter/latin/upper-g.ptl index 43ed9a626..e6defa29a 100644 --- a/packages/font-glyphs/src/letter/latin/upper-g.ptl +++ b/packages/font-glyphs/src/letter/latin/upper-g.ptl @@ -9,6 +9,7 @@ glyph-block Letter-Latin-Upper-G : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives glyph-block-import Mark-Adjustment : ExtendAboveBaseAnchors + glyph-block-import Letter-Shared : CreateTurnedLetter glyph-block-import Letter-Shared-Shapes : DToothlessRise ShoulderMidKnotLhs glyph-block-import Letter-Shared-Shapes : SerifedArcStart TopHook glyph-block-import Letter-Shared-Shapes : ArcStartSerif LetterBarOverlay SerifFrame @@ -111,7 +112,7 @@ glyph-block Letter-Latin-Upper-G : begin select-variant 'smcpG' 0x262 (follow -- 'G') select-variant 'GHookTop' 0x193 select-variant 'smcpGHookTop' 0x29B (follow -- 'GHookTop') - turned 'turnSmcpG' 0x1DF02 'smcpG' Middle (XH / 2) + CreateTurnedLetter 'turnSmcpG' 0x1DF02 'smcpG' HalfAdvance (XH / 2) derive-composites 'Gbar' 0x1E4 'G' 'GBarOverlay' diff --git a/packages/font-glyphs/src/letter/latin/upper-l.ptl b/packages/font-glyphs/src/letter/latin/upper-l.ptl index e7e638707..1719e95ce 100644 --- a/packages/font-glyphs/src/letter/latin/upper-l.ptl +++ b/packages/font-glyphs/src/letter/latin/upper-l.ptl @@ -12,6 +12,7 @@ glyph-block Letter-Latin-Upper-L : begin glyph-block-import Mark-Above : aboveMarkMid glyph-block-import Mark-Adjustment : LeaningAnchor glyph-block-import Letter-Blackboard : BBS BBD + glyph-block-import Letter-Shared : CreateTurnedLetter glyph-block-import Letter-Shared-Shapes : BeltOverlay LetterBarOverlay define [LBarLeftX df] : df.leftSB * 1.5 @@ -71,7 +72,7 @@ glyph-block Letter-Latin-Upper-L : begin select-variant 'LLWelsh' 0x1EFA (follow -- 'L') select-variant 'LHighBar' 0xA748 (follow -- 'L') - turned 'turnL' 0xA780 'L' Middle (CAP / 2) + CreateTurnedLetter 'turnL' 0xA780 'L' HalfAdvance (CAP / 2) create-glyph 'mathbb/L' 0x1D543 : glyph-proc local df : include : DivFrame 1 diff --git a/packages/font-glyphs/src/letter/latin/upper-m.ptl b/packages/font-glyphs/src/letter/latin/upper-m.ptl index 0c75e0b8a..5cecabfb8 100644 --- a/packages/font-glyphs/src/letter/latin/upper-m.ptl +++ b/packages/font-glyphs/src/letter/latin/upper-m.ptl @@ -8,6 +8,7 @@ glyph-module glyph-block Letter-Latin-Upper-M : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives + glyph-block-import Letter-Shared : CreateTurnedLetter glyph-block-import Letter-Shared-Shapes : SerifFrame CyrTailDescender PalatalHook define FORM-FLAT 0 @@ -179,7 +180,7 @@ glyph-block Letter-Latin-Upper-M : begin alias 'grek/San' 0x3FA 'M.grekCapitalSan' alias 'grek/san' 0x3FB 'smcpMWithDescender.grekSmallSan' - turned 'turnM' null 'M' HalfAdvance (CAP / 2) + CreateTurnedLetter 'turnM' null 'M' HalfAdvance (CAP / 2) glyph-block-import Letter-Blackboard : BBS BBD BBBarRight create-glyph 'mathbb/M' 0x1D544 : glyph-proc diff --git a/packages/font-glyphs/src/letter/latin/upper-r.ptl b/packages/font-glyphs/src/letter/latin/upper-r.ptl index 0dec8137d..595713f1e 100644 --- a/packages/font-glyphs/src/letter/latin/upper-r.ptl +++ b/packages/font-glyphs/src/letter/latin/upper-r.ptl @@ -8,9 +8,10 @@ glyph-module glyph-block Letter-Latin-Upper-R : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives - glyph-block-import Letter-Latin-Upper-P : PShape RevPShape PBarPosY PRotundaShape BBPShape PShapeOutline - glyph-block-import Letter-Blackboard : BBS BBD + glyph-block-import Letter-Shared : CreateTurnedLetter glyph-block-import Letter-Shared-Shapes : RightwardTailedBar RetroflexHook + glyph-block-import Letter-Blackboard : BBS BBD + glyph-block-import Letter-Latin-Upper-P : PShape RevPShape PBarPosY PRotundaShape BBPShape PShapeOutline glyph-block-export RConfig RevRShape RBarPos define LEG-SHAPE-CURLY 0 @@ -258,7 +259,7 @@ glyph-block Letter-Latin-Upper-R : begin select-variant 'RRTail' 0x2C64 select-variant 'smcpR' 0x280 (follow -- 'R') - turned 'turnSmapR' 0x1D1A 'smcpR' Middle (XH / 2) + CreateTurnedLetter 'turnSmapR' 0x1D1A 'smcpR' HalfAdvance (XH / 2) select-variant 'RRotunda' 0xA75A select-variant 'rRotunda' 0xA75B (follow -- 'RRotunda') @@ -266,7 +267,7 @@ glyph-block Letter-Latin-Upper-R : begin select-variant 'cyrl/Ya' 0x42F select-variant 'cyrl/ya' 0x44F select-variant 'revSmcpR' 0x1D19 (shapeFrom -- 'cyrl/ya') (follow -- 'R') - turned 'invSmcpR' 0x281 'revSmcpR' Middle (XH / 2) + CreateTurnedLetter 'invSmcpR' 0x281 'revSmcpR' HalfAdvance (XH / 2) select-variant 'Yr' 0x1A6 (follow -- 'R') select-variant 'smcpRLongRightLeg' 0xAB46 (follow -- 'R') diff --git a/packages/font-glyphs/src/letter/latin/upper-t.ptl b/packages/font-glyphs/src/letter/latin/upper-t.ptl index 7a333d95a..a98a357cd 100644 --- a/packages/font-glyphs/src/letter/latin/upper-t.ptl +++ b/packages/font-glyphs/src/letter/latin/upper-t.ptl @@ -10,6 +10,7 @@ glyph-block Letter-Latin-Upper-T : begin glyph-block-import Common-Derivatives glyph-block-import Letter-Blackboard : BBS BBD glyph-block-import Letter-Latin-Lower-M + glyph-block-import Letter-Shared : CreateTurnedLetter glyph-block-import Letter-Shared-Shapes : LetterBarOverlay UpwardHookShape glyph-block-import Letter-Shared-Shapes : CyrDescender SerifFrame FlatHookDepth LeftHook RetroflexHook @@ -139,8 +140,6 @@ glyph-block Letter-Latin-Upper-T : begin y -- 0 jut -- [if doSB MidJutCenter Jut] - turned "turnT.\(suffix)" nothing "T.\(suffix)" df.middle (CAP / 2) - create-glyph "TRTailBR.\(suffix)" : glyph-proc include [refer-glyph "T.\(suffix)"] AS_BASE ALSO_METRICS include : MarkSet.capital @@ -167,7 +166,7 @@ glyph-block Letter-Latin-Upper-T : begin select-variant "TStroke" 0x166 (follow -- 'T') select-variant "Thookleft" 0x1AC (follow -- 'T') select-variant "cyrl/TeDescender" 0x4AC (follow -- 'T') - select-variant 'turnT' 0xA7B1 (follow -- 'T') + CreateTurnedLetter 'turnT' 0xA7B1 'T' HalfAdvance (CAP / 2) alias 'grek/Tau' 0x3A4 'T' alias-reduced-variant 'grek/Tau/sansSerif' 'grek/Tau' 'T/sansSerif' MathSansSerif diff --git a/packages/font-glyphs/src/letter/latin/v.ptl b/packages/font-glyphs/src/letter/latin/v.ptl index 153950094..e91c0acff 100644 --- a/packages/font-glyphs/src/letter/latin/v.ptl +++ b/packages/font-glyphs/src/letter/latin/v.ptl @@ -9,6 +9,7 @@ glyph-block Letter-Latin-V : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives glyph-block-export VShape VShapeOutline + glyph-block-import Letter-Shared : CreateTurnedLetter glyph-block-import Letter-Shared-Shapes : DiagTail SerifFrame PalatalHook glyph-block-import Letter-Blackboard : BBS BBD @@ -321,8 +322,8 @@ glyph-block Letter-Latin-V : begin select-variant 'cyrl/Yn' 0xA65E (follow -- 'VHookRight') alias 'cyrl/izhitsa' 0x475 'vHookRight' - turned 'turnV' 0x245 'V' Middle (CAP / 2) - turned 'turnv' 0x28C 'v' Middle (XH / 2) + CreateTurnedLetter 'turnV' 0x245 'V' HalfAdvance (CAP / 2) + CreateTurnedLetter 'turnv' 0x28C 'v' HalfAdvance (XH / 2) glyph-block-export BBVShape BBVInnerMaskShape BBVOuterMaskShape define [BBVShape l r kd ks top] : glyph-proc diff --git a/packages/font-glyphs/src/letter/latin/w.ptl b/packages/font-glyphs/src/letter/latin/w.ptl index 1b9d23964..8dbaf6522 100644 --- a/packages/font-glyphs/src/letter/latin/w.ptl +++ b/packages/font-glyphs/src/letter/latin/w.ptl @@ -8,6 +8,7 @@ glyph-module glyph-block Letter-Latin-W : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives + glyph-block-import Letter-Shared : CreateTurnedLetter glyph-block-import Letter-Shared-Shapes : DiagTail SerifFrame VerticalHook glyph-block-import Letter-Latin-Upper-M : MShape @@ -387,7 +388,7 @@ glyph-block Letter-Latin-W : begin select-variant 'wHookTop' 0x2C73 alias 'cyrl/We' 0x51C 'W' alias 'cyrl/we' 0x51D 'w' - turned 'turnw' 0x28D 'w' (Middle * para.diversityM) (XH / 2) + CreateTurnedLetter 'turnw' 0x28D 'w' HalfAdvance (XH / 2) alias 'cyrl/Omega' 0x460 'W.cyrlCapialOmega' alias 'cyrl/omega' 0x461 [if para.isItalic 'w.cyrlSmallOmega' 'w.cyrlCapialOmega'] diff --git a/packages/font-glyphs/src/letter/shared.ptl b/packages/font-glyphs/src/letter/shared.ptl index 8b24b2b2c..ae89fb89a 100644 --- a/packages/font-glyphs/src/letter/shared.ptl +++ b/packages/font-glyphs/src/letter/shared.ptl @@ -9,6 +9,7 @@ glyph-module glyph-block Letter-Shared : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives + glyph-block-import Mark-Adjustment : TurnMarks glyph-block-export CreateAccentedComposition define [CreateAccentedComposition dst u srcGid accentGid] @@ -80,6 +81,14 @@ glyph-block Letter-Shared : begin define [SetGrekUpperTonos kern] : glyph-proc set-base-anchor 'grekUpperTonos' kern (CAP - 0.75 * AccentStackOffset) + glyph-block-export CreateTurnedLetter + define [CreateTurnedLetter dstGid unicode srcGid _cx _cy _df] : begin + derive-glyphs dstGid unicode srcGid : lambda [src gr] : glyph-proc + include [refer-glyph src] AS_BASE ALSO_METRICS + define cx : if (_cx <@ Function) [_cx.call currentGlyph] _cx + define cy : if (_cy <@ Function) [_cy.call currentGlyph] _cy + include : FlipAround cx cy + include : TurnMarks cx cy _df glyph-block Letter-Blackboard : begin glyph-block-import CommonShapes diff --git a/packages/font-glyphs/src/marks/adjust.ptl b/packages/font-glyphs/src/marks/adjust.ptl index 4de010441..44c77ecfd 100644 --- a/packages/font-glyphs/src/marks/adjust.ptl +++ b/packages/font-glyphs/src/marks/adjust.ptl @@ -24,6 +24,38 @@ glyph-block Mark-Adjustment : begin local a : currentGlyph.gizmo.unapply currentGlyph.baseAnchors.leaningAbove if (a.y < y) : set-base-anchor 'leaningAbove' a.x y + glyph-block-export TurnMarks + define [TurnMarks cx cy _df] : glyph-proc + # Get position of existing marks, prior to flipping + local bAbove : currentGlyph.gizmo.unapplyIfPresent currentGlyph.baseAnchors.above + local bBelow : currentGlyph.gizmo.unapplyIfPresent currentGlyph.baseAnchors.below + local bLeaningAbove : currentGlyph.gizmo.unapplyIfPresent currentGlyph.baseAnchors.leaningAbove + local bLeaningBelow : currentGlyph.gizmo.unapplyIfPresent currentGlyph.baseAnchors.leaningBelow + + # If there are no marks, or if there are no marks above or below, do nothing + if (!bAbove || !bBelow) : return nothing + + # Apply the new mark set, with flipped dimensions + local df : _df || [if currentGlyph.divFrameParams + [DivFrame.fromParams currentGlyph.divFrameParams] + [DivFrame (currentGlyph.advanceWidth / Width)]] + local topAfterFlip : mix cy bBelow.y (-1) + local botAfterFlip : mix cy bAbove.y (-1) + local markSet : df.markSet.OfZone { .top topAfterFlip .bot botAfterFlip } + include : markSet + + # Set the new marks' X coordinates to the flipped X coordinates of the old marks + if (bBelow && currentGlyph.baseAnchors.above) + set-base-anchor 'above' [mix cx bBelow.x (-1)] currentGlyph.baseAnchors.above.y + if (bAbove && currentGlyph.baseAnchors.below) + set-base-anchor 'below' [mix cx bAbove.x (-1)] currentGlyph.baseAnchors.below.y + + # Handle leaning marks + if (bLeaningBelow && currentGlyph.baseAnchors.above) + set-base-anchor 'leaningAbove' [mix cx bLeaningBelow.x (-1)] currentGlyph.baseAnchors.above.y + if (bLeaningAbove && currentGlyph.baseAnchors.below) + set-base-anchor 'leaningBelow' [mix cx bLeaningAbove.x (-1)] currentGlyph.baseAnchors.below.y + glyph-block-export LeaningAnchor define LeaningAnchor : namespace define [SetProcImpl mkCenter mkLeaning x] : glyph-proc diff --git a/packages/font-glyphs/src/meta/aesthetics.ptl b/packages/font-glyphs/src/meta/aesthetics.ptl index cc7585100..7a8acf5d9 100644 --- a/packages/font-glyphs/src/meta/aesthetics.ptl +++ b/packages/font-glyphs/src/meta/aesthetics.ptl @@ -429,6 +429,7 @@ export : define [GenDivFrame metrics] : begin local mvs : fallback _mvs : if _hPack [metrics.AdviceStroke _hPack div] metrics.Stroke local sbMul : fallback _sbMul : Math.min 1 : (metrics.Width * div - hPack * mvs) / (2 * hPack * metrics.SB) + set this.params : object div hPack sbMul mvs ox set this.div div set this.hPack hPack set this.width : metrics.Width * div @@ -472,6 +473,11 @@ export : define [GenDivFrame metrics] : begin public [applyToGlyph g] : begin g.setWidth this.width + set g.divFrameParams this.params return this - return : lambda [_div _hPack _sbMul _mvs _ox] : new CDivFrame _div _hPack _sbMul _mvs _ox + define [F _div _hPack _sbMul _mvs _ox] : begin + return : new CDivFrame _div _hPack _sbMul _mvs _ox + set F.fromParams : lambda [params] : begin + return : new CDivFrame params.div params.hPack params.sbMul params.mvs params.ox + return F diff --git a/packages/font-glyphs/src/meta/macros.ptl b/packages/font-glyphs/src/meta/macros.ptl index 5886118e2..6900c9838 100644 --- a/packages/font-glyphs/src/meta/macros.ptl +++ b/packages/font-glyphs/src/meta/macros.ptl @@ -164,8 +164,8 @@ define-macro glyph-block-import : syntax-rules define allExports : object Common-Derivatives `[select-variant orthographic-italic orthographic-slanted refer-glyph query-glyph alias turned HDual HCombine VDual VCombine derive-glyphs - derive-composites link-reduced-variant alias-reduced-variant HalfAdvance TurnMarks - SwapMarks derive-multi-part-glyphs DeriveMeshT] + derive-composites link-reduced-variant alias-reduced-variant HalfAdvance + derive-multi-part-glyphs DeriveMeshT] CommonShapes `[no-shape tagged KnotAdj Rect SquareAt Ring RingAt DotAt RingStroke RingStrokeAt DotStrokeAt CircleRing CircleRingAt CircleDotAt RoundStrokeTerminalAt diff --git a/packages/geometry/src/transform.mjs b/packages/geometry/src/transform.mjs index 26e306314..1178bbda5 100644 --- a/packages/geometry/src/transform.mjs +++ b/packages/geometry/src/transform.mjs @@ -55,6 +55,10 @@ export class Transform { this.unapplyToSink(pt, sink); return sink; } + unapplyIfPresent(pt) { + if (pt) return this.unapply(pt); + else return null; + } inverse() { const denom = this.xx * this.yy - this.xy * this.yx; return new Transform( diff --git a/packages/glyph/src/glyph.mjs b/packages/glyph/src/glyph.mjs index 744b62f1f..72e472855 100644 --- a/packages/glyph/src/glyph.mjs +++ b/packages/glyph/src/glyph.mjs @@ -18,6 +18,7 @@ export class Glyph { this.gizmo = Transform.Id(); // Metrics this.advanceWidth = 500; + this.divFrameParams = null; this.markAnchors = {}; this.baseAnchors = {}; // Tracking