208 lines
7 KiB
Text
208 lines
7 KiB
Text
$$include '../../../meta/macros.ptl'
|
|
|
|
import [mix fallback SuffixCfg] from"../../../support/utils.mjs"
|
|
import [Dotless CvDecompose] from"../../../support/gr.mjs"
|
|
|
|
glyph-module
|
|
|
|
glyph-block Letter-Latin-Lower-Eszet : begin
|
|
glyph-block-import CommonShapes
|
|
glyph-block-import Common-Derivatives
|
|
glyph-block-import Letter-Shared-Shapes : FlatHookDepth PalatalHook CyrDescender SerifFrame
|
|
glyph-block-import Letter-Latin-S : AdviceSArchDepth
|
|
|
|
define NO-TAIL 0
|
|
define DESCENDING 1
|
|
define TAILED 2
|
|
|
|
define SERIF-NONE 0
|
|
define SERIF-BOT 1
|
|
define SERIF-MID 2
|
|
define SERIF-DUAL 3
|
|
|
|
define [EszetSerifs df fTraditional slab] : begin
|
|
local sf : SerifFrame.fromDf [DivFrame 1] XH 0
|
|
local lb : if fTraditional sf.lb.full sf.lb.outer
|
|
return : match slab
|
|
[Just SERIF-BOT] : composite-proc lb
|
|
[Just SERIF-MID] : composite-proc sf.lt.outer
|
|
[Just SERIF-DUAL] : composite-proc lb sf.lt.outer
|
|
__ : no-shape
|
|
|
|
define [Traditional fFlathook] : function [slab tail] : glyph-proc
|
|
include : MarkSet.bp
|
|
local l : SB * 1
|
|
local xHook : [mix SB RightSB 0.75] + HalfStroke * HVContrast
|
|
local hd : FlatHookDepth [DivFrame 1]
|
|
if fFlathook
|
|
: then : include : dispiro
|
|
flat xHook Ascender [widths.lhs]
|
|
curl (l + hd.x) Ascender
|
|
archv
|
|
flat l (Ascender - hd.y)
|
|
curl l 0 [heading Downward]
|
|
: else : include : dispiro
|
|
widths.lhs
|
|
g4 xHook (Ascender - Hook)
|
|
hookstart (Ascender - O)
|
|
flat l XH
|
|
curl l 0 [heading Downward]
|
|
local t : mix 0 Ascender 0.7
|
|
local tm : [mix Descender t 0.625] + HalfStroke
|
|
local tl : [mix l RightSB 0.35] + HalfStroke * HVContrast
|
|
include : HBar.t (l + 1) (RightSB - HalfStroke * 1.2 - OX) t
|
|
include : dispiro
|
|
widths.rhs
|
|
flat tl tm [heading Rightward]
|
|
curl (tl + 1) tm [heading Rightward]
|
|
g2 (RightSB - OX * 1.5) [mix Descender tm 0.70]
|
|
g2 (RightSB - OX * 1.5) [mix Descender tm 0.67]
|
|
alsoThru 0.5 0.75
|
|
g4 ([mix SB RightSB 0.35] + [if tail 0.625 0] * HVContrast * Stroke) Descender
|
|
include : dispiro
|
|
widths.center (Stroke * 1.1)
|
|
corner tl (tm - Stroke) [heading Upward]
|
|
corner (RightSB - HalfStroke * 1.2 - OX) t [heading Upward]
|
|
|
|
include : EszetSerifs [DivFrame 1] true slab
|
|
include : match tail
|
|
[Just DESCENDING] : VBar.l l Descender 0
|
|
[Just TAILED] : PalatalHook.lExt l 0
|
|
__ : glyph-proc
|
|
|
|
|
|
define [Sulzbacher slab tail] : glyph-proc
|
|
define ymiddle : [mix 0 Ascender 0.5] - HalfStroke
|
|
define xFinal : Math.max
|
|
mix (SB + Stroke * HVContrast) RightSB 0.1
|
|
mix SB RightSB 0.3
|
|
define xMiddle : Math.max xFinal (SB + Stroke * HVContrast * 1.2) (RightSB - ymiddle / 2 - Stroke * 0.75)
|
|
define xMiddleBot : Math.max xMiddle (xFinal + 0.01 + TanSlope * Stroke)
|
|
|
|
include : MarkSet.b
|
|
include : dispiro
|
|
widths.rhs
|
|
flat SB 0 [heading Upward]
|
|
curl SB XH
|
|
arcvh
|
|
g4 (Middle - CorrectionOMidS) (Ascender - O)
|
|
archv
|
|
g4 (RightSB + O * 2) [YSmoothMidR ymiddle Ascender]
|
|
g4.left.end xMiddle ymiddle [heading Leftward]
|
|
include : dispiro
|
|
widths.rhs
|
|
g4.right.start xMiddle (ymiddle + Stroke) [heading Rightward]
|
|
archv
|
|
g4 (RightSB - O) [YSmoothMidR (ymiddle + Stroke) 0]
|
|
arcvh
|
|
flat xMiddleBot 0 [heading Leftward]
|
|
curl xFinal 0 [heading Leftward]
|
|
|
|
include : EszetSerifs [DivFrame 1] false slab
|
|
include : match tail
|
|
[Just DESCENDING] : VBar.l SB Descender 0
|
|
[Just TAILED] : PalatalHook.lExt SB 0
|
|
__ : glyph-proc
|
|
|
|
|
|
define [LongSSLig slab tail] : glyph-proc
|
|
include : MarkSet.b
|
|
|
|
define swOuter : AdviceStroke2 2 3 Ascender
|
|
define strokeCoeff : StrokeWidthBlend 0 1 swInner
|
|
define sEndX : Math.max
|
|
mix (SB + Stroke * HVContrast) RightSB 0.1
|
|
mix SB RightSB 0.3
|
|
define swInner : AdviceStroke2 2.5 3 Ascender
|
|
define ess: swInner * EssLower / Stroke
|
|
define sTurnX : Math.max sEndX [mix SB RightSB 0.3]
|
|
define sBotX : Math.max (sEndX + 1) [mix sEndX RightSB 0.30]
|
|
define sTopX : sTurnX + (RightSB - sBotX)
|
|
|
|
define sTopHookX : sTopX + 0.5 * swInner * HVContrast
|
|
define archDepthATop : ArchDepthAOf (ArchDepth * (sTopHookX - SB - swInner * 0.5) / (RightSB - SB)) (Width - (RightSB - sTopHookX))
|
|
define archDepthBTop : ArchDepthBOf (ArchDepth * (sTopHookX - SB - swInner * 0.5) / (RightSB - SB)) (Width - (RightSB - sTopHookX))
|
|
define innerSmoothB : 1 * archDepthBTop # ArchDepthBOf (0.5 * swInner + (widthInner / Width) * [AdviceSArchDepth XH (-1) swInner]) widthInner
|
|
|
|
|
|
include : dispiro
|
|
widths.rhs swOuter
|
|
flat SB 0 [heading Upward]
|
|
curl SB (Ascender - archDepthATop)
|
|
arcvh
|
|
g4 ([mix SB sTopHookX 0.52] - CorrectionOMidX * swOuter) (Ascender - O) [widths.rhs : mix swOuter swInner 0.5]
|
|
archv
|
|
g4.down.mid sTopHookX (Ascender - archDepthBTop + TanSlope * swInner) [widths.rhs.heading swInner Downward]
|
|
alsoThru.g2 0.5 0.50 [widths.center swInner]
|
|
g4 sTurnX [mix innerSmoothB (Ascender - archDepthBTop) 0.5] [widths.lhs.heading swInner Downward]
|
|
alsoThru.g2 0.5 0.50 [widths.center swInner]
|
|
g4 (RightSB - OX) (innerSmoothB - 2 * TanSlope * swInner) [widths.rhs.heading swInner Downward]
|
|
arcvh
|
|
flat ([Math.max (sEndX + 0.1 + TanSlope * swInner) : Math.min (RightSB - innerSmoothB) [mix sEndX RightSB 0.375]] + CorrectionOMidX * swInner / 2 + TanSlope * swInner ) 0
|
|
curl sEndX 0 [heading Leftward]
|
|
|
|
include : EszetSerifs [DivFrame 1] false slab
|
|
include : match tail
|
|
[Just DESCENDING] : VBar.l SB Descender 0 swOuter
|
|
[Just TAILED] : PalatalHook.lExt SB 0 (sw -- swOuter)
|
|
__ : no-shape
|
|
|
|
define EszetConfig : SuffixCfg.weave
|
|
object # body
|
|
traditional : Traditional false
|
|
traditionalFlatHook : Traditional true
|
|
sulzbacher Sulzbacher
|
|
longSSLig LongSSLig
|
|
object # terminal
|
|
'' NO-TAIL
|
|
'descending' DESCENDING
|
|
'tailed' TAILED
|
|
object # serifs
|
|
serifless 0
|
|
bottomSerifed 1
|
|
middleSerifed 2
|
|
dualSerifed 3
|
|
|
|
foreach { suffix { Base tail serif } } [pairs-of EszetConfig] : do
|
|
create-glyph "eszet.\(suffix)" : Base serif tail
|
|
|
|
select-variant 'eszet' 0xDF
|
|
|
|
glyph-block Letter-Latin-Upper-Eszet : begin
|
|
glyph-block-import CommonShapes
|
|
glyph-block-import Common-Derivatives
|
|
|
|
|
|
create-glyph 'Eszet' 0x1E9E : glyph-proc
|
|
include : MarkSet.capital
|
|
|
|
define ymiddle : [mix 0 CAP 0.5] - HalfStroke
|
|
define ymiddleCap : [mix 0 CAP 0.54] - HalfStroke
|
|
define xFinal : Math.max
|
|
mix (SB + Stroke * HVContrast) RightSB 0.1
|
|
mix SB RightSB 0.3
|
|
define xMiddle : Math.max xFinal (SB + Stroke * HVContrast * 1.2) (RightSB - ymiddle / 2 - Stroke * 0.75)
|
|
define xMiddleBot : Math.max xMiddle (xFinal + 0.01 + TanSlope * Stroke)
|
|
define rightTopX : RightSB + O
|
|
|
|
include : dispiro
|
|
widths.lhs
|
|
flat rightTopX CAP [heading Leftward]
|
|
curl Middle CAP
|
|
archv
|
|
flat SB XH
|
|
curl SB 0 [heading Downward]
|
|
include : dispiro
|
|
widths.rhs
|
|
g4 xMiddle (ymiddleCap + Stroke) [heading Rightward]
|
|
archv
|
|
g4 (RightSB - O * 2) [YSmoothMidR (ymiddleCap + Stroke) 0]
|
|
arcvh
|
|
flat xMiddleBot 0
|
|
curl xFinal 0 [heading Leftward]
|
|
include : dispiro
|
|
widths.rhs
|
|
g4 rightTopX (CAP - Stroke)
|
|
g4 xMiddle (ymiddleCap + Stroke) [widths Stroke 0]
|
|
|
|
if SLAB : include : HSerif.lb SB 0 SideJut
|