* Fix serifs of certain letters (#1458):
- LATIN CAPITAL LETTER GAMMA (`U+0194`); - LATIN CAPITAL LETTER OU (`U+0222`); - LATIN SMALL LETTER OU (`U+0223`); - LATIN SMALL LETTER ALPHA (`U+0251`); - LATIN SMALL LETTER GAMMA (`U+0263`); - LATIN SMALL LETTER RAMS HORN (`U+0264`); - LATIN SMALL LETTER TURNED OPEN E (`U+1D08`); - LATIN LETTER SMALL CAPITAL OU (`U+1D15`); - LATIN LETTER AIN (`U+1D25`);
This commit is contained in:
parent
2ca7513f3e
commit
60cccc4ef1
9 changed files with 132 additions and 71 deletions
|
@ -1,2 +1,12 @@
|
|||
* Fix metrics of ASCII single quotes under Aile (#1454).
|
||||
* Fix overshoot of oval-shaped `0`, and open `6`/`9` (#1455).
|
||||
* Fix serifs of certain letters (#1458):
|
||||
- LATIN CAPITAL LETTER GAMMA (`U+0194`);
|
||||
- LATIN CAPITAL LETTER OU (`U+0222`);
|
||||
- LATIN SMALL LETTER OU (`U+0223`);
|
||||
- LATIN SMALL LETTER ALPHA (`U+0251`);
|
||||
- LATIN SMALL LETTER GAMMA (`U+0263`);
|
||||
- LATIN SMALL LETTER RAMS HORN (`U+0264`);
|
||||
- LATIN SMALL LETTER TURNED OPEN E (`U+1D08`);
|
||||
- LATIN LETTER SMALL CAPITAL OU (`U+1D15`);
|
||||
- LATIN LETTER AIN (`U+1D25`);
|
||||
|
|
|
@ -10,6 +10,9 @@ glyph-module
|
|||
glyph-block CommonShapes : begin
|
||||
glyph-block-import Common-Derivatives
|
||||
|
||||
glyph-block-export no-shape
|
||||
define [no-shape] { .__isNoShape true }
|
||||
|
||||
glyph-block-export Rect
|
||||
define [Rect u d l r transformShiftOnly] : glyph-proc
|
||||
local giz currentGlyph.gizmo
|
||||
|
|
|
@ -191,7 +191,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 'grek/epsilon' Middle (XH / 2)
|
||||
turned 'turnepsilon' 0x1D08 'latn/epsilon' Middle (XH / 2)
|
||||
alias 'cyrl/ZeRev' 0x510 'latn/Epsilon'
|
||||
alias 'cyrl/zeRev' 0x511 'latn/epsilon'
|
||||
|
||||
|
|
|
@ -9,36 +9,31 @@ glyph-block Letter-Latin-OU : begin
|
|||
glyph-block-import CommonShapes
|
||||
glyph-block-import Common-Derivatives
|
||||
|
||||
define [UpperOuShape top] : glyph-proc
|
||||
include : OShape (top * HBarPos + HalfStroke) 0 SB RightSB nothing ArchDepthA ArchDepthB
|
||||
define [OuShape top yBar gapL gapR] : glyph-proc
|
||||
include : OShape (yBar + HalfStroke) 0 SB RightSB nothing ArchDepthA ArchDepthB
|
||||
|
||||
local xLeft : clamp (SB + 1.25 * HVContrast * Stroke) [mix SB RightSB 0.4] (Middle - Width * 0.05)
|
||||
local d : 0.25 * TanSlope * (RightSB - SB)
|
||||
include : dispiro
|
||||
widths.lhs
|
||||
flat SB top [heading Downward]
|
||||
curl SB (top * HBarPos - O - HalfStroke + ArchDepthB)
|
||||
arcvh
|
||||
g4 (Middle + CorrectionOMidS) (top * HBarPos - O - HalfStroke + (Stroke * (1 - CThin))) [widths.lhs (Stroke * CThin)]
|
||||
g4.left.start (xLeft - CorrectionOMidS) (top - gapL)
|
||||
archv
|
||||
flat RightSB (top * HBarPos - O - HalfStroke + ArchDepthA) [widths.lhs]
|
||||
curl RightSB top [heading Upward]
|
||||
g4.down.mid SB ([mix (yBar - HalfStroke) (top - gapL) 0.5] + d)
|
||||
arcvh
|
||||
g4 (Middle + CorrectionOMidS) (yBar - O - HalfStroke + (Stroke * (1 - CThin))) [widths.lhs (Stroke * CThin)]
|
||||
archv
|
||||
g4.up.mid RightSB ([mix (yBar - HalfStroke) (top - gapR) 0.5] - d) [widths.lhs]
|
||||
arcvh
|
||||
g4.left.end (Width - xLeft - CorrectionOMidS) (top - gapR)
|
||||
|
||||
create-glyph 'OU' 0x222 : glyph-proc
|
||||
include : MarkSet.capital
|
||||
include : UpperOuShape CAP
|
||||
include : OuShape CAP (CAP * HBarPos) (CAP * 0.05) 0
|
||||
|
||||
create-glyph 'smcpOU' 0x1D15 : glyph-proc
|
||||
include : MarkSet.e
|
||||
include : UpperOuShape XH
|
||||
include : OuShape XH (XH * HBarPos) 0 0
|
||||
|
||||
create-glyph 'ou' 0x223 : glyph-proc
|
||||
include : MarkSet.b
|
||||
local bar : StrokeWidthBlend (XH * 0.9) XH
|
||||
include : OShape bar 0 SB RightSB
|
||||
include : dispiro
|
||||
widths.lhs
|
||||
flat SB Ascender [heading Downward]
|
||||
curl SB (bar - O - Stroke + ArchDepthB)
|
||||
arcvh
|
||||
g4 (Middle + CorrectionOMidS) (bar - O - Stroke + (Stroke * (1 - CThin))) [widths.lhs (Stroke * CThin)]
|
||||
archv
|
||||
flat RightSB (bar - O - Stroke + ArchDepthA) [widths.lhs]
|
||||
curl RightSB Ascender [heading Upward]
|
||||
include : OuShape Ascender (Ascender * [mix HBarPos (XH / CAP) 0.5]) 0 0
|
||||
|
|
|
@ -8,8 +8,9 @@ glyph-module
|
|||
glyph-block Letter-Latin-Rams-Horn : begin
|
||||
glyph-block-import CommonShapes
|
||||
glyph-block-import Common-Derivatives
|
||||
glyph-block-import Letter-Shared-Shapes : SerifFrame
|
||||
|
||||
define [RamsHornShape bottom top] : glyph-proc
|
||||
define [LatinGammaShape bottom top] : glyph-proc
|
||||
local hf : [AdviceStroke 4] / 2
|
||||
local d : hf * 2 + Width * 0.05
|
||||
|
||||
|
@ -27,38 +28,60 @@ glyph-block Letter-Latin-Rams-Horn : begin
|
|||
|
||||
create-glyph 'latn/gamma' 0x263 : glyph-proc
|
||||
include : MarkSet.p
|
||||
include : RamsHornShape Descender XH
|
||||
include : LatinGammaShape Descender XH
|
||||
if SLAB : begin
|
||||
local sf : SerifFrame XH Descender SB RightSB
|
||||
include : composite-proc sf.lt.full sf.rt.full
|
||||
|
||||
create-glyph 'latn/Gamma' 0x194 : glyph-proc
|
||||
include : MarkSet.capDesc
|
||||
include : RamsHornShape Descender Ascender
|
||||
include : LatinGammaShape Descender CAP
|
||||
if SLAB : begin
|
||||
local sf : SerifFrame CAP Descender SB RightSB
|
||||
include : composite-proc sf.lt.full sf.rt.full
|
||||
|
||||
define [RamsHornShape fFill bottom top] : glyph-proc
|
||||
local k1 0.625
|
||||
local k2 0.7
|
||||
local kIntersection 0.15
|
||||
local d : 0.25 * (RightSB - SB) * k1 * TanSlope
|
||||
|
||||
local sw : AdviceStroke : if SLAB 3 2.75
|
||||
local fine : AdviceStroke : if SLAB 3.75 3.5
|
||||
local coFine : mix sw fine (kIntersection / k2)
|
||||
local fillOffset : sw * 0.25
|
||||
|
||||
include : union
|
||||
dispiro
|
||||
widths.rhs sw
|
||||
straight.right.start SB top [heading Rightward]
|
||||
g4 Middle [mix top bottom kIntersection] [widths.rhs coFine]
|
||||
g4.down.mid [mix Middle RightSB k1] ([mix top bottom k2] - d) [widths.rhs fine]
|
||||
arcvh
|
||||
g4.left.mid (Middle + CorrectionOMidX * fine) (bottom + O)
|
||||
archv
|
||||
g4.up.mid [mix Middle SB k1] ([mix top bottom k2] + d)
|
||||
g4 Middle [mix top bottom kIntersection] [widths.rhs coFine]
|
||||
straight.right.end RightSB top [widths.rhs.heading sw Rightward]
|
||||
if fFill
|
||||
then : spiro-outline
|
||||
corner Middle ([mix top bottom kIntersection] - fillOffset)
|
||||
g4.down.mid ([mix Middle RightSB k1] - fillOffset) ([mix top bottom k2] - d)
|
||||
g4.left.mid (Middle + CorrectionOMidX * fine) (bottom + fillOffset)
|
||||
g4.up.mid ([mix Middle SB k1] + fillOffset) ([mix top bottom k2] + d)
|
||||
close
|
||||
else : no-shape
|
||||
|
||||
if SLAB : begin
|
||||
include : DownwardLeftSerif SB (top - sw) (VJut * (sw / Stroke) - sw) fine
|
||||
include : DownwardRightSerif RightSB (top - sw) (VJut * (sw / Stroke) - sw) fine
|
||||
|
||||
create-glyph 'ramshorn' 0x264 : glyph-proc
|
||||
include : MarkSet.e
|
||||
include : RamsHornShape 0 XH
|
||||
include : RamsHornShape false 0 XH
|
||||
|
||||
### Ayin
|
||||
create-glyph 'latinAyin' 0x1D25 : glyph-proc
|
||||
include : MarkSet.e
|
||||
local k1 0.65
|
||||
local k2 0.7
|
||||
local zmidy (XH * 0.15)
|
||||
local offset : Stroke * 0.25
|
||||
include : union
|
||||
dispiro
|
||||
widths.lhs
|
||||
g4.right.start SB 0 [heading Rightward]
|
||||
g4 Middle zmidy
|
||||
g4.up.mid [mix Middle RightSB k1] (XH * k2) [heading Upward]
|
||||
arcvh
|
||||
g4.left.mid Middle (XH - O) [heading Leftward]
|
||||
archv
|
||||
g4.down.mid [mix Middle SB k1] (XH * k2) [heading Downward]
|
||||
g4 Middle zmidy
|
||||
g4.right.end RightSB 0 [heading Rightward]
|
||||
spiro-outline
|
||||
corner Middle (zmidy + offset)
|
||||
g4.up.mid ([mix Middle RightSB k1] - offset) (XH * k2)
|
||||
g4.left.mid Middle (XH - offset)
|
||||
g4.down.mid ([mix Middle SB k1] + offset) (XH * k2)
|
||||
close
|
||||
include : RamsHornShape true 0 XH
|
||||
include : FlipAround Middle (XH / 2)
|
||||
|
|
|
@ -202,17 +202,31 @@ glyph-block Letter-Latin-Lower-A : begin
|
|||
corner (RightSB - Stroke * HVContrast) (CAP - Stroke / 2)
|
||||
corner RightSB (CAP - O)
|
||||
|
||||
create-glyph 'scripta' 0x0251 : glyph-proc
|
||||
include : MarkSet.e
|
||||
include : union
|
||||
OBarRightShape
|
||||
spiro-outline
|
||||
corner RightSB 0
|
||||
corner (RightSB - Stroke * HVContrast) 0
|
||||
corner (RightSB - Stroke * HVContrast) (XH - Stroke / 2)
|
||||
corner RightSB (XH - O)
|
||||
if SLAB : include : tagged 'serifRB' RightwardBottomSerif RightSB 0 SideJut
|
||||
define [CutRightStroke g] : difference g : spiro-outline
|
||||
corner RightSB XH
|
||||
corner (RightSB - Stroke * HVContrast) XH
|
||||
corner (RightSB - Stroke * HVContrast) (XH - Stroke / 2)
|
||||
|
||||
create-glyph 'scripta.serifless' : glyph-proc
|
||||
include : MarkSet.e
|
||||
set-base-anchor 'trailing' RightSB 0
|
||||
include : OBarRightShape
|
||||
include : CutRightStroke : VBarRight RightSB 0 XH
|
||||
|
||||
create-glyph 'scripta.serifed' : glyph-proc
|
||||
include : MarkSet.e
|
||||
set-base-anchor 'trailing' (RightSB + SideJut) 0
|
||||
include : OBarRightShape
|
||||
include : VBarRight RightSB 0 XH
|
||||
include : tagged 'serifRB' : CutRightStroke : RightwardBottomSerif RightSB 0 SideJut
|
||||
|
||||
create-glyph 'scripta.tailed' : glyph-proc
|
||||
include : MarkSet.e
|
||||
set-base-anchor 'trailing' (RightSB + SideJut) 0
|
||||
include : OBarRightShape
|
||||
include : CutRightStroke : RightwardTailedBar RightSB 0 XH
|
||||
|
||||
select-variant 'scripta' 0x0251
|
||||
turned 'turnlargescripta' 0x2C70 'largescripta' Middle (CAP / 2)
|
||||
turned 'turnscripta' 0x252 'scripta' Middle (XH / 2)
|
||||
|
||||
|
|
|
@ -133,19 +133,19 @@ define-macro glyph-block-import : syntax-rules
|
|||
derive-composites link-reduced-variant alias-reduced-variant glyph-is-needed
|
||||
HalfAdvance TurnMarks derive-multi-part-glyphs DeriveMeshT]
|
||||
|
||||
CommonShapes `[Rect SquareAt Ring RingAt DotAt RingStroke RingStrokeAt DotStrokeAt
|
||||
CircleRing CircleRingAt CircleDotAt RoundStrokeTerminalAt OShapeT OShape OShapeOutline
|
||||
OShapeFlatTB OBarLeftShape OBarRightShape LeftwardTopSerif LeftwardBottomSerif
|
||||
RightwardTopSerif RightwardBottomSerif CenterTopSerif CenterTopSerifAsymmetric
|
||||
CenterBottomSerif CenterBottomSerifAsymmetric DownwardRightSerif UpwardRightSerif
|
||||
DownwardLeftSerif UpwardLeftSerif NeedSlab NeedNotItalic HBar HBarTop HBarBottom
|
||||
HOverlayBar VBar VBarLeft VBarRight VerticalHook LeftHook FlatSlashShape hookstart
|
||||
hookend Ungizmo Regizmo FlipAround ScaleAround Realign ForceUpright DiagCor NameUni
|
||||
PointingTo WithTransform clear-anchors OBarLeftToothlessShape OBarLeftRoundedShape
|
||||
OBarRightToothlessShape OBarRightRoundedShape AsRadical ExtLineCenter ExtLineLhs
|
||||
ExtLineRhs DiagCorDs HCrossBar VERY-FAR MaskAbove MaskBelow MaskLeft MaskRight
|
||||
HalfRectTriangle MaskAboveLine MaskBelowLine MaskLeftLine MaskRightLine DotVariants
|
||||
WithDotVariants]
|
||||
CommonShapes `[no-shape Rect SquareAt Ring RingAt DotAt RingStroke RingStrokeAt
|
||||
DotStrokeAt CircleRing CircleRingAt CircleDotAt RoundStrokeTerminalAt OShapeT OShape
|
||||
OShapeOutline OShapeFlatTB OBarLeftShape OBarRightShape LeftwardTopSerif
|
||||
LeftwardBottomSerif RightwardTopSerif RightwardBottomSerif CenterTopSerif
|
||||
CenterTopSerifAsymmetric CenterBottomSerif CenterBottomSerifAsymmetric
|
||||
DownwardRightSerif UpwardRightSerif DownwardLeftSerif UpwardLeftSerif NeedSlab
|
||||
NeedNotItalic HBar HBarTop HBarBottom HOverlayBar VBar VBarLeft VBarRight VerticalHook
|
||||
LeftHook FlatSlashShape hookstart hookend Ungizmo Regizmo FlipAround ScaleAround Realign
|
||||
ForceUpright DiagCor NameUni PointingTo WithTransform clear-anchors
|
||||
OBarLeftToothlessShape OBarLeftRoundedShape OBarRightToothlessShape
|
||||
OBarRightRoundedShape AsRadical ExtLineCenter ExtLineLhs ExtLineRhs DiagCorDs HCrossBar
|
||||
VERY-FAR MaskAbove MaskBelow MaskLeft MaskRight HalfRectTriangle MaskAboveLine
|
||||
MaskBelowLine MaskLeftLine MaskRightLine DotVariants WithDotVariants]
|
||||
|
||||
define vartiableFilter : if externEnv.$glyphBlockVariableUsage$
|
||||
lambda [x] externEnv.$glyphBlockVariableUsage$.(x)
|
||||
|
|
|
@ -63,6 +63,8 @@ export class Glyph {
|
|||
return this.applyTransform(component, copyAnchors);
|
||||
} else if (component instanceof Glyph) {
|
||||
return this.includeGlyph(component, copyAnchors, copyWidth);
|
||||
} else if (component.__isNoShape) {
|
||||
// Do nothing. By design.
|
||||
} else {
|
||||
throw new Error("Invalid component to be introduced.");
|
||||
}
|
||||
|
|
|
@ -1785,6 +1785,7 @@ selector.a = "doubleStoreySerifless"
|
|||
selector."a/sansSerif" = "doubleStoreySerifless"
|
||||
selector."a/rtailBase" = "doubleStoreySerifless"
|
||||
selector."a/turnABase" = "doubleStoreySerifless"
|
||||
selector.scripta = "serifless"
|
||||
|
||||
[prime.a.variants.double-storey-tailed]
|
||||
rank = 2
|
||||
|
@ -1793,6 +1794,7 @@ selector.a = "doubleStoreyTailed"
|
|||
selector."a/sansSerif" = "doubleStoreyTailed"
|
||||
selector."a/rtailBase" = "doubleStoreySerifless"
|
||||
selector."a/turnABase" = "doubleStoreyTailed"
|
||||
selector.scripta = "tailed"
|
||||
|
||||
[prime.a.variants.double-storey-toothless-corner]
|
||||
rank = 3
|
||||
|
@ -1801,6 +1803,7 @@ selector.a = "doubleStoreyToothlessCorner"
|
|||
selector."a/sansSerif" = "doubleStoreyToothlessCorner"
|
||||
selector."a/rtailBase" = "doubleStoreySerifless"
|
||||
selector."a/turnABase" = "doubleStoreyToothlessCorner"
|
||||
selector.scripta = "serifless"
|
||||
|
||||
[prime.a.variants.double-storey-toothless-rounded]
|
||||
rank = 4
|
||||
|
@ -1809,6 +1812,7 @@ selector.a = "doubleStoreyToothlessRounded"
|
|||
selector."a/sansSerif" = "doubleStoreyToothlessRounded"
|
||||
selector."a/rtailBase" = "doubleStoreySerifless"
|
||||
selector."a/turnABase" = "doubleStoreyToothlessRounded"
|
||||
selector.scripta = "serifless"
|
||||
|
||||
[prime.a.variants.double-storey-serifed]
|
||||
rank = 5
|
||||
|
@ -1817,6 +1821,7 @@ selector.a = "doubleStoreySerifed"
|
|||
selector."a/sansSerif" = "doubleStoreySerifless"
|
||||
selector."a/rtailBase" = "doubleStoreySerifless"
|
||||
selector."a/turnABase" = "doubleStoreySerifed"
|
||||
selector.scripta = "serifed"
|
||||
|
||||
[prime.a.variants.single-storey-serifless]
|
||||
rank = 6
|
||||
|
@ -1825,6 +1830,7 @@ selector.a = "singleStoreySerifless"
|
|||
selector."a/sansSerif" = "singleStoreySerifless"
|
||||
selector."a/rtailBase" = "singleStoreySerifless"
|
||||
selector."a/turnABase" = "doubleStoreySerifless"
|
||||
selector.scripta = "serifless"
|
||||
|
||||
[prime.a.variants.single-storey-earless-corner-serifless]
|
||||
rank = 7
|
||||
|
@ -1833,6 +1839,7 @@ selector.a = "singleStoreyEarlessCornerSerifless"
|
|||
selector."a/sansSerif" = "singleStoreyEarlessCornerSerifless"
|
||||
selector."a/rtailBase" = "singleStoreyEarlessCornerSerifless"
|
||||
selector."a/turnABase" = "doubleStoreySerifless"
|
||||
selector.scripta = "serifless"
|
||||
|
||||
[prime.a.variants.single-storey-earless-rounded-serifless]
|
||||
rank = 8
|
||||
|
@ -1841,6 +1848,7 @@ selector.a = "singleStoreyEarlessRoundedSerifless"
|
|||
selector."a/sansSerif" = "singleStoreyEarlessRoundedSerifless"
|
||||
selector."a/rtailBase" = "singleStoreyEarlessRoundedSerifless"
|
||||
selector."a/turnABase" = "doubleStoreySerifless"
|
||||
selector.scripta = "serifless"
|
||||
|
||||
[prime.a.variants.single-storey-tailed]
|
||||
rank = 9
|
||||
|
@ -1849,6 +1857,7 @@ selector.a = "singleStoreyTailed"
|
|||
selector."a/sansSerif" = "singleStoreyTailed"
|
||||
selector."a/rtailBase" = "singleStoreySerifless"
|
||||
selector."a/turnABase" = "doubleStoreyTailed"
|
||||
selector.scripta = "tailed"
|
||||
|
||||
[prime.a.variants.single-storey-earless-corner-tailed]
|
||||
rank = 10
|
||||
|
@ -1857,6 +1866,7 @@ selector.a = "singleStoreyEarlessCornerTailed"
|
|||
selector."a/sansSerif" = "singleStoreyEarlessCornerTailed"
|
||||
selector."a/rtailBase" = "singleStoreyEarlessCornerSerifless"
|
||||
selector."a/turnABase" = "doubleStoreyTailed"
|
||||
selector.scripta = "tailed"
|
||||
|
||||
[prime.a.variants.single-storey-earless-rounded-tailed]
|
||||
rank = 11
|
||||
|
@ -1865,6 +1875,7 @@ selector.a = "singleStoreyEarlessRoundedTailed"
|
|||
selector."a/sansSerif" = "singleStoreyEarlessRoundedTailed"
|
||||
selector."a/rtailBase" = "singleStoreyEarlessRoundedSerifless"
|
||||
selector."a/turnABase" = "doubleStoreyTailed"
|
||||
selector.scripta = "tailed"
|
||||
|
||||
[prime.a.variants.single-storey-serifed]
|
||||
rank = 12
|
||||
|
@ -1873,6 +1884,7 @@ selector.a = "singleStoreySerifed"
|
|||
selector."a/sansSerif" = "singleStoreySerifless"
|
||||
selector."a/rtailBase" = "singleStoreySerifless"
|
||||
selector."a/turnABase" = "doubleStoreySerifed"
|
||||
selector.scripta = "serifed"
|
||||
|
||||
[prime.a.variants.single-storey-earless-corner-serifed]
|
||||
rank = 13
|
||||
|
@ -1881,6 +1893,7 @@ selector.a = "singleStoreyEarlessCornerSerifed"
|
|||
selector."a/sansSerif" = "singleStoreyEarlessCornerSerifless"
|
||||
selector."a/rtailBase" = "singleStoreyEarlessCornerSerifless"
|
||||
selector."a/turnABase" = "doubleStoreySerifed"
|
||||
selector.scripta = "serifed"
|
||||
|
||||
[prime.a.variants.single-storey-earless-rounded-serifed]
|
||||
rank = 14
|
||||
|
@ -1889,6 +1902,7 @@ selector.a = "singleStoreyEarlessRoundedSerifed"
|
|||
selector."a/sansSerif" = "singleStoreyEarlessRoundedSerifless"
|
||||
selector."a/rtailBase" = "singleStoreyEarlessRoundedSerifless"
|
||||
selector."a/turnABase" = "doubleStoreySerifed"
|
||||
selector.scripta = "serifed"
|
||||
|
||||
|
||||
[prime.b]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue