mirror of
https://github.com/be5invis/Iosevka.git
synced 2026-10-28 16:38:35 +00:00
4406 lines
139 KiB
Plaintext
4406 lines
139 KiB
Plaintext
###########################################################################################
|
|
# UNIFIED LETTERFORMS : LATIN ORIGINALS
|
|
###########################################################################################
|
|
|
|
$$include '../meta/macros.ptl'
|
|
|
|
import '../support/transform' as : Transform && [object [transformPoint tp] [untransform utp] inverse]
|
|
import [mix linreg clamp fallback] from '../support/utils'
|
|
import [designParameters] from '../meta/aesthetics'
|
|
|
|
export : define [apply] : begin
|
|
glyph-module-entry commonShapes overmarks
|
|
|
|
### I
|
|
define { ISerifShape } : do "I and related ===================================================="
|
|
sketch # I.straight
|
|
local df : DivFrame para.diversityI
|
|
set-width df.width
|
|
include df.markSet.capital
|
|
include : VBar df.middle 0 CAP
|
|
set currentGlyph.cmpPriority (-2)
|
|
save 'I.straight'
|
|
|
|
sketch # I.line
|
|
local df : DivFrame para.diversityII
|
|
set-width df.width
|
|
include df.markSet.capital
|
|
include : VBar df.middle 0 CAP
|
|
set currentGlyph.cmpPriority (-2)
|
|
save 'I.line'
|
|
|
|
define [ISerifShape top] : glyph-construction
|
|
local df : DivFrame para.diversityI
|
|
include : VBar df.middle 0 top
|
|
include : CenterBottomSerif df.middle 0 (LONGJUT * df.div)
|
|
include : CenterTopSerif df.middle top (LONGJUT * df.div)
|
|
|
|
sketch # I.serifed
|
|
local df : DivFrame para.diversityI
|
|
set-width df.width
|
|
include df.markSet.capital
|
|
include : ISerifShape CAP
|
|
|
|
save 'I.serifed'
|
|
|
|
select-variant 'I' 'I'
|
|
alias 'Iota' 0x399 'I'
|
|
alias 'cyrUkrainianI' 0x406 'I'
|
|
alias 'Palochka' 0x4C0 'I'
|
|
|
|
sketch # smcpI
|
|
local df : DivFrame para.diversityI
|
|
include df.markSet.e
|
|
set-width df.width
|
|
include : ISerifShape XH
|
|
save 'smcpI' 0x26A
|
|
|
|
list ISerifShape
|
|
|
|
### dotless i, i and iota
|
|
# iota
|
|
define { IotaShape TailedIShape } : do "i and related ========================================="
|
|
define [IotaShape top] : glyph-construction
|
|
local df : DivFrame para.diversityI
|
|
local middle df.middle
|
|
set-anchor 'above' BASE middle top
|
|
include : tagged 'serifLT' : LeftwardTopSerif middle top (LONGJUT * df.div)
|
|
include : dispiro
|
|
widths.center
|
|
flat middle top [heading DOWNWARD]
|
|
curl middle HOOK
|
|
arcvh
|
|
flat (middle + HOOK - HALFSTROKE) HALFSTROKE
|
|
curl (middle + [Math.max HOOKX (LONGJUT * 1.05 * df.div)]) HALFSTROKE [heading RIGHTWARD]
|
|
|
|
sketch # iota
|
|
local df : DivFrame para.diversityI
|
|
set-width df.width
|
|
include df.markSet.e
|
|
include : IotaShape XH
|
|
save 'iota' 0x3B9
|
|
save 'latiniota' 0x269
|
|
|
|
sketch # latinIota
|
|
local df : DivFrame para.diversityI
|
|
set-width df.width
|
|
include df.markSet.capital
|
|
include : IotaShape CAP
|
|
save 'latinIota' 0x196
|
|
|
|
sketch # dotlessi.straight
|
|
local df : DivFrame para.diversityI
|
|
set-width df.width
|
|
include df.markSet.e
|
|
include : VBar (df.middle) 0 XH
|
|
set currentGlyph.cmpPriority (-2)
|
|
save 'dotlessi.straight'
|
|
|
|
sketch # dotlessi.hooky
|
|
local df : DivFrame para.diversityI
|
|
set-width df.width
|
|
include df.markSet.e
|
|
local balance : IBALANCE2 * df.div * df.div
|
|
include : VBar (df.middle + balance) 0 XH
|
|
include : LeftwardTopSerif (df.middle + balance) XH (LONGJUT * df.div)
|
|
save 'dotlessi.hooky'
|
|
|
|
sketch # dotlessi.zshaped
|
|
local df : DivFrame para.diversityI
|
|
set-width df.width
|
|
include df.markSet.e
|
|
include : VBar (df.middle) 0 XH
|
|
include : LeftwardTopSerif (df.middle) XH (LONGJUT * df.div)
|
|
include : RightwardBottomSerif df.middle 0 (LONGJUT * df.div)
|
|
save 'dotlessi.zshaped'
|
|
|
|
sketch # dotlessi.line
|
|
local df : DivFrame para.diversityII
|
|
set-width df.width
|
|
include df.markSet.e
|
|
include : VBar (df.middle) 0 XH
|
|
save 'dotlessi.line'
|
|
|
|
sketch # dotlessi.serifed
|
|
local df : DivFrame para.diversityI
|
|
set-width df.width
|
|
include df.markSet.e
|
|
local balance : IBALANCE * df.div * df.div
|
|
include : VBar (df.middle + balance) 0 XH
|
|
include : LeftwardTopSerif (df.middle + balance) XH (LONGJUT * df.div - balance)
|
|
include : RightwardBottomSerif df.middle 0 (LONGJUT * df.div)
|
|
include : LeftwardBottomSerif df.middle 0 (LONGJUT * df.div)
|
|
save 'dotlessi.serifed'
|
|
|
|
sketch # dotlessi.italic
|
|
local df : DivFrame para.diversityI
|
|
set-width df.width
|
|
include df.markSet.e
|
|
if para.isItalic
|
|
: then : begin
|
|
local shift : (1 - df.div) * 0.2
|
|
local left : [mix SB df.rightSB ([linreg 18 0.42 126 0.46 STROKE] - shift)] - HALFSTROKE * HVCONTRAST
|
|
local right : mix SB df.rightSB (1.1 - shift)
|
|
local rightTerm : Math.max right (left + HOOKX + STROKE)
|
|
local middle : mix left right (0.55 * df.div)
|
|
include : dispiro
|
|
widths.lhs
|
|
flat left XH [heading DOWNWARD]
|
|
curl left (SMALLSMOOTHB * 0.8)
|
|
hookend O
|
|
g4 rightTerm (HOOK * [linreg 18 0.85 126 1 STROKE] * df.div)
|
|
include : dispiro
|
|
flat (left - (LONGJUT * df.div) + HALFSTROKE * HVCONTRAST) XH [widths 0 STROKE]
|
|
curl left XH
|
|
set-anchor 'above' BASE (left + HALFSTROKE * HVCONTRAST + [linreg 18 0.25 126 0 STROKE] * TANSLANT * df.width) XH
|
|
set-anchor 'below' BASE middle 0
|
|
: else : begin
|
|
include : IotaShape XH
|
|
save 'dotlessi.italic'
|
|
|
|
define [TailedIShape df top] : glyph-construction
|
|
local middle : df.middle - LBALANCE2
|
|
local x0 : HALFSTROKE + (HOOK - STROKE + 1) * 0.85 * df.div + LBALANCE2
|
|
local x1 : [Math.max (HOOK - HALFSTROKE + 1) (LONGJUT * df.div)] + LBALANCE2
|
|
include : dispiro
|
|
widths.center
|
|
flat middle top [heading DOWNWARD]
|
|
curl middle HOOK
|
|
arcvh
|
|
g4.right.mid (middle + x0) (HALFSTROKE + O) [heading RIGHTWARD]
|
|
g4 (middle + x1) (HALFSTROKE - O) [heading RIGHTWARD]
|
|
set-anchor 'above' BASE middle top
|
|
set-anchor 'below' BASE middle 0
|
|
set-anchor 'overlay' BASE middle (top * OVERLAYPOS)
|
|
set-anchor 'topright' BASE (middle + RIGHTSB - MIDDLE) top
|
|
|
|
sketch # dotlessi.tailed
|
|
local df : DivFrame para.diversityI
|
|
set-width df.width
|
|
include df.markSet.b
|
|
include : TailedIShape df XH
|
|
save 'dotlessi.tailed'
|
|
|
|
select-variant 'dotlessi' 0x131
|
|
sketch # iogonek.dotless
|
|
include glyphs.dotlessi AS_BASE
|
|
include glyphs.ogonekBelow
|
|
save 'iogonek.dotless'
|
|
|
|
|
|
composite 'i' glyphs.dotlessi glyphs.dotAbove [into-unicode 'i']
|
|
if (glyphs.i && glyphs.dotlessi) : begin
|
|
local fs : queryFeatureSelector 'dotlessi' para
|
|
local fs_i : queryFeatureSelector 'dotlessi' para 'i'
|
|
foreach [{k gid} : pairs-of fs] : begin
|
|
composite fs_i.(k) glyphs.(gid) glyphs.dotAbove
|
|
set glyphs.i.featureSelector fs_i
|
|
alias 'cyrUkrainiani' 0x456 'i'
|
|
turned nothing 0x1D09 'i' (MIDDLE * para.diversityI) (XH / 2) markset.p
|
|
|
|
list IotaShape TailedIShape
|
|
|
|
### J
|
|
do "J and related ============================================================================="
|
|
sketch # J.straight
|
|
set-width WIDTH
|
|
include markset.capital
|
|
set-anchor 'above' BASE (RIGHTSB - STROKE * HVCONTRAST * 0.75 - JBALANCE2) CAP
|
|
set-anchor 'overlay' BASE (RIGHTSB - STROKE * HVCONTRAST * 0.75 - JBALANCE2) (CAP * OVERLAYPOS)
|
|
|
|
local slope (STROKE * 0.00092)
|
|
local expand 0.35
|
|
local coexpand ((1 - expand) / 2)
|
|
|
|
local hookx (0.75 * SB)
|
|
|
|
include : dispiro
|
|
widths.rhs
|
|
flat (RIGHTSB - JBALANCE2) CAP [heading DOWNWARD]
|
|
curl (RIGHTSB - JBALANCE2) SMOOTH
|
|
hookend O
|
|
g4 hookx HOOK
|
|
|
|
save 'J.straight'
|
|
|
|
sketch # J.shorthook
|
|
set-width WIDTH
|
|
include markset.capital
|
|
|
|
local slope (STROKE * 0.00092)
|
|
local expand 0.35
|
|
local coexpand ((1 - expand) / 2)
|
|
local smooth : HOOK + 0.75 * STROKE
|
|
|
|
local hookx (0.5 * SB)
|
|
|
|
include : dispiro
|
|
widths.rhs
|
|
flat (RIGHTSB - JBALANCE2) CAP [heading DOWNWARD]
|
|
curl (RIGHTSB - JBALANCE2) smooth
|
|
straight.left.end [mix SB RIGHTSB 0.3] O [heading LEFTWARD]
|
|
|
|
save 'J.shorthook'
|
|
|
|
sketch # J.serifed
|
|
set-width WIDTH
|
|
include glyphs.'J.straight' AS_BASE
|
|
include : LeftwardTopSerif (RIGHTSB - HALFSTROKE * HVCONTRAST - JBALANCE2) CAP LONGJUT
|
|
|
|
save 'J.serifed'
|
|
|
|
select-variant 'J' 'J'
|
|
alias 'cyrJe' 0x408 'J'
|
|
alias 'grkJ' 0x37F 'J'
|
|
|
|
### j and dotless j
|
|
do "j and related ============================================================================="
|
|
sketch # dotlessj.straight
|
|
include markset.p
|
|
local center : MIDDLE + JBALANCE + HALFSTROKE * HVCONTRAST
|
|
set-anchor 'above' BASE (center - HVCONTRAST * HALFSTROKE) XH
|
|
set-anchor 'overlay' BASE (center - HVCONTRAST * HALFSTROKE) (XH / 2)
|
|
local hookx : center - (WIDTH * 0.5) - STROKE * HVCONTRAST + OXHOOK
|
|
local turn : [mix center hookx 0.5] + CORRECTION_OMIDS
|
|
include : dispiro
|
|
widths.rhs
|
|
flat center XH [heading DOWNWARD]
|
|
curl center (DESCENDER + SMOOTHA)
|
|
hookend (DESCENDER + O)
|
|
g4 hookx (DESCENDER + JHOOK)
|
|
|
|
save 'dotlessj.straight'
|
|
|
|
sketch # dotlessj.line
|
|
include markset.p
|
|
include : VBar MIDDLE DESCENDER XH
|
|
save 'dotlessj.line'
|
|
|
|
sketch # dotlessj.serifed
|
|
include markset.p
|
|
include glyphs.'dotlessj.straight' AS_BASE
|
|
include : LeftwardTopSerif (MIDDLE + JBALANCE) XH LONGJUT
|
|
|
|
set-anchor 'above' BASE (MIDDLE + JBALANCE - STROKE * 0.166 * HVCONTRAST) XH
|
|
set-anchor 'overlay' BASE (MIDDLE + JBALANCE - STROKE * 0.166 * HVCONTRAST) (XH / 2)
|
|
save 'dotlessj.serifed'
|
|
|
|
sketch # dotlessj.narrow
|
|
local df : DivFrame para.diversityII
|
|
set-width df.width
|
|
include df.markSet.p
|
|
local crossLeft : mix 0 SB (1 / 2)
|
|
local crossRight : mix df.width df.rightSB (1 / 2)
|
|
local terminal : crossLeft - OX * 2
|
|
local bar : df.middle + HALFSTROKE * HVCONTRAST
|
|
local tTurn : Math.max (HOOK * 0.9) (STROKE * 1.5) : Math.min HOOK (STROKE * 1.75)
|
|
include : dispiro
|
|
widths.lhs
|
|
flat [Math.min terminal (bar - tTurn - [Math.max (STROKE / 3) (df.width / 6)])] DESCENDER
|
|
curl (bar - tTurn) DESCENDER
|
|
archv
|
|
flat bar (DESCENDER + tTurn)
|
|
curl bar XH [heading UPWARD]
|
|
set-anchor 'above' BASE (df.middle) XH
|
|
set-anchor 'overlay' BASE (df.middle) (XH / 2)
|
|
save 'dotlessj.narrow'
|
|
|
|
sketch # dotlessj.narrow-serifed
|
|
local df : DivFrame para.diversityI
|
|
set-width df.width
|
|
include df.markSet.p
|
|
local crossLeft : mix 0 SB (1 / 2)
|
|
local crossRight : mix df.width df.rightSB (1 / 2)
|
|
local terminal : crossLeft - OX * 2
|
|
local barCenter : df.middle + JBALANCE * df.div
|
|
local bar : barCenter + HALFSTROKE * HVCONTRAST
|
|
local tTurn : Math.max (HOOK * 0.9) (STROKE * 1.5) : Math.min HOOK (STROKE * 1.75)
|
|
include : LeftwardTopSerif barCenter XH (LONGJUT * df.div)
|
|
include : dispiro
|
|
widths.lhs
|
|
flat [Math.min terminal (bar - tTurn - [Math.max (STROKE / 3) (df.width / 6)])] DESCENDER
|
|
curl (bar - tTurn) DESCENDER
|
|
archv
|
|
flat bar (DESCENDER + tTurn)
|
|
curl bar XH [heading UPWARD]
|
|
set-anchor 'above' BASE barCenter XH
|
|
set-anchor 'overlay' BASE barCenter (XH / 2)
|
|
save 'dotlessj.narrow-serifed'
|
|
|
|
select-variant 'dotlessj' 0x237
|
|
|
|
composite 'j' glyphs.dotlessj glyphs.dotAbove [into-unicode 'j']
|
|
if (glyphs.j && glyphs.dotlessj) : begin
|
|
local fs : queryFeatureSelector 'dotlessj' para
|
|
local fs_j : queryFeatureSelector 'dotlessj' para 'j'
|
|
foreach [{k gid} : pairs-of fs] : begin
|
|
composite fs_j.(k) glyphs.(gid) glyphs.dotAbove
|
|
set glyphs.j.featureSelector fs_j
|
|
alias "grkj" 0x3F3 'j'
|
|
alias "cyrje" 0x458 'j'
|
|
|
|
sketch # jcurlytail
|
|
include markset.p
|
|
set-anchor 'above' BASE (MIDDLE + JBALANCE) XH
|
|
local fine : adviceBlackness 3.5
|
|
local rinner : LONGJUT / 2 - fine / 2
|
|
local m1 : MIDDLE - HALFSTROKE * HVCONTRAST + JBALANCE
|
|
local x2 : mix RIGHTSB m1 0.25
|
|
local y2 : DESCENDER + O
|
|
include : LeftwardTopSerif (MIDDLE + JBALANCE) XH LONGJUT
|
|
include : dispiro
|
|
widths.lhs
|
|
flat m1 XH [heading DOWNWARD]
|
|
curl m1 (DESCENDER + fine + rinner * 2)
|
|
CurlyTail fine rinner m1 DESCENDER (m1 - LONGJUT) x2 y2
|
|
include glyphs.dotAbove
|
|
save 'jcurlytail' 0x29D
|
|
|
|
### L
|
|
define { LShape } : do "l and related ========================================================="
|
|
define [LShape top] : glyph-construction
|
|
include : VBarLeft (SB * 1.5) 0 top
|
|
include : HBarBottom (SB * 1.5 - O) (RIGHTSB - OX) 0
|
|
if SLAB : begin
|
|
include : LeftwardBottomSerif (SB * 1.5) 0 SIDEJUT
|
|
include : CenterTopSerif (SB * 1.5 + HVCONTRAST * HALFSTROKE) top JUT
|
|
include : UpwardRightSerif (RIGHTSB - OX) 0 VJUT
|
|
|
|
sketch # L
|
|
set-width WIDTH
|
|
include markset.capital
|
|
include : LShape CAP
|
|
|
|
save 'L' 'L'
|
|
turned 'turnL' 0xA780 'L' MIDDLE (CAP / 2)
|
|
|
|
sketch # Lcaron
|
|
include glyphs.commaAbove
|
|
apply-transform : Translate (WIDTH + (RIGHTSB - SB) * 0.375) 0
|
|
include glyphs.L AS_BASE
|
|
|
|
save 'Lcaron' 0x13D
|
|
|
|
sketch # Lslash
|
|
include glyphs.L AS_BASE
|
|
local fine : 0.5 * OVERLAYSTROKE
|
|
local middle : mix STROKE CAP 0.5
|
|
include : dispiro
|
|
flat [mix 0 SB 0.5] (middle - LONGJUT * 0.4) [widths fine fine]
|
|
curl (1.6 * LONGJUT + [mix 0 SB 0.5]) (middle + LONGJUT * 0.4)
|
|
|
|
save 'Lslash' 0x141
|
|
|
|
sketch # Ldot
|
|
include glyphs.L AS_BASE
|
|
include : Ring ([mix STROKE CAP 0.5] + DOTRADIUS) ([mix STROKE CAP 0.5] - DOTRADIUS) ([mix SB RIGHTSB 0.65] - DOTRADIUS) ([mix SB RIGHTSB 0.65] + DOTRADIUS)
|
|
|
|
save 'Ldot' 0x13F
|
|
|
|
sketch # Lbar
|
|
include glyphs.L AS_BASE
|
|
include : HOverlayBar (SB * 0.3) [mix (SB + STROKE) (RIGHTSB - STROKE) 0.55] (CAP * OVERLAYPOS)
|
|
|
|
save 'Lbar' 0x23D
|
|
|
|
sketch # smcpL
|
|
include markset.e
|
|
include : LShape XH
|
|
save 'smcpL' 0x29F
|
|
|
|
list LShape
|
|
|
|
### l
|
|
do "l and related ============================================================================="
|
|
sketch # l.hooky
|
|
local df : DivFrame para.diversityI
|
|
set-width df.width
|
|
include df.markSet.b
|
|
local balance : LBALANCE2 * df.div * df.div
|
|
local middle : df.middle + balance
|
|
set-anchor 'above' BASE middle CAP
|
|
set-anchor 'below' BASE middle 0
|
|
set-anchor 'overlay' BASE middle (CAP * OVERLAYPOS)
|
|
set-anchor 'topright' BASE (df.middle + RIGHTSB - MIDDLE) CAP
|
|
include : VBar (df.middle + balance) 0 (CAP - STROKE)
|
|
include : LeftwardTopSerif (df.middle + balance) CAP (LONGJUT * df.div)
|
|
save 'l.hooky'
|
|
|
|
sketch # l.zshaped
|
|
local df : DivFrame para.diversityI
|
|
set-width df.width
|
|
include df.markSet.b
|
|
include : VBar (df.middle) 0 (CAP - STROKE)
|
|
include : tagged 'serifLT' : LeftwardTopSerif (df.middle) CAP (LONGJUT * df.div)
|
|
include : tagged 'serifRB' : RightwardBottomSerif (df.middle) 0 (LONGJUT * df.div)
|
|
set-anchor 'topright' BASE (df.middle + RIGHTSB - MIDDLE) CAP
|
|
|
|
save 'l.zshaped'
|
|
|
|
sketch # l.line
|
|
local df : DivFrame para.diversityII
|
|
set-width df.width
|
|
include df.markSet.b
|
|
include : VBar (df.middle) 0 (CAP * 0.6)
|
|
include : VBar (df.middle) (CAP * 0.4) CAP
|
|
set-anchor 'topright' BASE (df.middle + RIGHTSB - MIDDLE) CAP
|
|
|
|
save 'l.line'
|
|
|
|
sketch # l.serifed
|
|
local df : DivFrame para.diversityI
|
|
set-width df.width
|
|
include df.markSet.b
|
|
local balance : LBALANCE * df.div * df.div
|
|
include : VBar (df.middle + balance) 0 CAP
|
|
include : LeftwardTopSerif (df.middle + balance) CAP ((LONGJUT * df.div) - balance)
|
|
include : CenterBottomSerif df.middle 0 (LONGJUT * df.div)
|
|
set-anchor 'overlay' BASE (df.middle + balance / 2) (CAP * OVERLAYPOS)
|
|
set-anchor 'topright' BASE (df.middle + RIGHTSB - MIDDLE) CAP
|
|
save 'l.serifed'
|
|
|
|
sketch # l.italic
|
|
local df : DivFrame para.diversityI
|
|
set-width df.width
|
|
include df.markSet.b
|
|
if para.isItalic
|
|
: then : begin
|
|
local shift : (1 - df.div) * 0.4
|
|
local left : mix SB df.rightSB (0.3 - shift)
|
|
local right : mix SB df.rightSB (1.1 - shift)
|
|
local rightTerm : Math.max right (left + HOOKX + STROKE)
|
|
local middle : mix left right (0.54 * df.div)
|
|
include : dispiro
|
|
widths.lhs
|
|
flat left CAP [heading DOWNWARD]
|
|
curl left (SMALLSMOOTHB * 0.85)
|
|
hookend O
|
|
g4 rightTerm (HOOK * [linreg 18 0.85 126 1 STROKE] * df.div)
|
|
include : tagged 'serifLT': dispiro
|
|
flat (left - (LONGJUT * df.div) + HALFSTROKE * HVCONTRAST) CAP [widths 0 STROKE]
|
|
curl left CAP
|
|
set-anchor 'above' BASE (left + HALFSTROKE) CAP
|
|
set-anchor 'below' BASE middle 0
|
|
set-anchor 'overlay' BASE (left + HALFSTROKE) (CAP * OVERLAYPOS)
|
|
set-anchor 'topright' BASE (left + HALFSTROKE + RIGHTSB - MIDDLE) CAP
|
|
: else : begin
|
|
include : IotaShape CAP
|
|
set-anchor 'topright' BASE (df.middle + RIGHTSB - MIDDLE) CAP
|
|
save 'l.italic'
|
|
|
|
sketch # l.tailed
|
|
local df : DivFrame para.diversityI
|
|
set-width df.width
|
|
include df.markSet.b
|
|
include : TailedIShape df CAP
|
|
save 'l.tailed'
|
|
|
|
sketch # l.hookybottom
|
|
local df : DivFrame para.diversityI
|
|
set-width df.width
|
|
include df.markSet.b
|
|
local middle : df.middle - LBALANCE2
|
|
set-anchor 'above' BASE middle CAP
|
|
set-anchor 'below' BASE middle 0
|
|
set-anchor 'overlay' BASE middle (CAP * OVERLAYPOS)
|
|
set-anchor 'topright' BASE (middle + RIGHTSB - MIDDLE) CAP
|
|
include : VBar middle 0 CAP
|
|
include : RightwardBottomSerif middle 0 (LONGJUT * df.div)
|
|
save 'l.hookybottom'
|
|
|
|
|
|
select-variant 'l' 'l'
|
|
alias 'palochka' 0x4CF 'l'
|
|
turned 'turnl' 0xA781 'l' MIDDLE (XH / 2) markset.p
|
|
|
|
sketch # ldot
|
|
include glyphs.l AS_BASE
|
|
apply-transform : Translate (-DOTRADIUS / 2) 0
|
|
include : Ring ([mix STROKE CAP 0.5] + DOTRADIUS) ([mix STROKE CAP 0.5] - DOTRADIUS) ([mix SB RIGHTSB 1] - DOTSIZE) [mix SB RIGHTSB 1]
|
|
|
|
save 'ldot' 0x140
|
|
|
|
sketch # lrtail
|
|
local df : DivFrame para.diversityI
|
|
include glyphs.rtailBR
|
|
apply-transform : Translate (df.middle + LBALANCE2 + HALFSTROKE * HVCONTRAST) 0
|
|
include glyphs.'l.hooky'
|
|
include df.markSet.if
|
|
|
|
save 'lrtail' 0x26D
|
|
|
|
sketch # lcurlytail
|
|
include markset.b
|
|
local fine : adviceBlackness 3.5
|
|
local rinner : LONGJUT / 2 - fine / 2
|
|
local m1 : MIDDLE + HALFSTROKE * HVCONTRAST
|
|
local x2 : mix SB m1 0.25
|
|
local y2 : - fine
|
|
include : LeftwardTopSerif MIDDLE CAP LONGJUT
|
|
include : dispiro
|
|
widths.rhs
|
|
flat m1 CAP [heading DOWNWARD]
|
|
curl m1 (fine + rinner * 2)
|
|
CurlyTail fine rinner m1 0 (m1 + LONGJUT) x2 y2
|
|
|
|
save 'lcurlytail' 0x234
|
|
|
|
sketch # ltildeover
|
|
local df : DivFrame para.diversityI
|
|
include glyphs.'l.serifed' AS_BASE ALSO_METRICS
|
|
include : create-glyph : glyph-construction
|
|
include glyphs.tildeAbove
|
|
apply-transform : Upright
|
|
apply-transform : Translate (df.middle - markMiddle) (CAP * 0.525 - [mix aboveMarkBot aboveMarkTop 0.5])
|
|
apply-transform : Italify
|
|
save 'ltildeover' 0x26B
|
|
|
|
define [Belt middle] : glyph-construction
|
|
local fine : adviceBlackness 4.5
|
|
local r : XH * 0.05
|
|
include : dispiro
|
|
widths.rhs fine
|
|
flat middle (CAPMIDDLE + r) [heading LEFTWARD]
|
|
curl (middle - HALFSTROKE - r * 1.5) (CAPMIDDLE + r)
|
|
archv
|
|
g4.down.mid (middle - HALFSTROKE - r * 2.5) CAPMIDDLE [heading DOWNWARD]
|
|
arcvh
|
|
flat (middle - HALFSTROKE - r * 1.5) (CAPMIDDLE - r)
|
|
curl (middle + HALFSTROKE + r * 1.5 + fine) (CAPMIDDLE - r)
|
|
|
|
sketch # lbelt
|
|
local df : DivFrame para.diversityI
|
|
include glyphs.'l.serifed' AS_BASE ALSO_METRICS
|
|
include : Belt df.middle
|
|
save 'lbelt' 0x26C
|
|
|
|
sketch # lbeltrtail
|
|
local df : DivFrame para.diversityI
|
|
include glyphs.lrtail AS_BASE ALSO_METRICS
|
|
include : Belt df.middle
|
|
save 'lbeltrtail' 0xA78E
|
|
|
|
sketch # looprevesh
|
|
include markset.if
|
|
local fine : adviceBlackness 4
|
|
include : dispiro
|
|
widths.center fine
|
|
g4.down.start MIDDLE (CAP - fine * 1.5) [heading DOWNWARD]
|
|
arcvh
|
|
g4 (MIDDLE - fine * 1) (CAP - fine * 2.5) [heading LEFTWARD]
|
|
archv
|
|
g4 (MIDDLE - fine * 2) (CAP - fine * 1.5) [heading UPWARD]
|
|
arcvh
|
|
g4 (MIDDLE - fine * 1) (CAP - fine * 0.5) [heading RIGHTWARD]
|
|
archv
|
|
flat MIDDLE (CAP - fine * 1.5) [widths.heading HALFSTROKE HALFSTROKE DOWNWARD]
|
|
curl MIDDLE 0 [heading DOWNWARD]
|
|
arcvh
|
|
straight.right.end (MIDDLE + HOOKX) (-HOOK)
|
|
save 'looprevesh' 0x1AA
|
|
|
|
### V and v
|
|
define { VShape VShapeOutline } : do "V, v and related ========================================"
|
|
define cornerdist : HALFSTROKE * HVCONTRAST * 1.15
|
|
define vcurviness : if (SLAB && !para.isItalic) 0.15 0.3
|
|
define VShapeFine : STROKE * [fallback para.vtipfine : if SLAB 0.9 0.8]
|
|
define VShapeFineStraight : Math.max [adviceBlackness 7] [STROKE * 0.66]
|
|
define VShapeMiddleWidth : adviceBlackness 3
|
|
define pInktrap 0.5
|
|
|
|
define [VShapeOutline] : params [top [sw STROKE] barStraight div] : glyph-construction
|
|
local df : DivFrame div
|
|
local fine : [if barStraight VShapeFineStraight VShapeFine] * sw / STROKE
|
|
local sbCor : (CAP / top) * OX
|
|
local dgCor : diagCor top (WIDTH / 2) 0 (sw * 2)
|
|
local clearance : 0 - OX
|
|
|
|
if barStraight : begin
|
|
local vxStartL : df.leftSB + sbCor + clearance
|
|
local vxEndL : df.middle - cornerdist + clearance
|
|
local vxStartR : df.rightSB - sbCor - clearance
|
|
local vxEndR : df.middle + cornerdist - clearance
|
|
include : spiro-outline
|
|
flat [mix vxStartL vxEndL 0] [mix top 0 0]
|
|
curl [mix vxStartL vxEndL pInktrap] [mix top 0 pInktrap]
|
|
corner [mix vxStartL vxEndL 1] [mix top 0 1]
|
|
corner [mix vxStartR vxEndR 1] [mix top 0 1]
|
|
flat [mix vxStartR vxEndR pInktrap] [mix top 0 pInktrap]
|
|
curl [mix vxStartR vxEndR 0] [mix top 0 0]
|
|
: else : begin
|
|
local vxStartL : df.leftSB + clearance
|
|
local vxEndL : df.middle - cornerdist + clearance
|
|
local vxStartR : df.rightSB - clearance
|
|
local vxEndR : df.middle + cornerdist - clearance
|
|
include : spiro-outline
|
|
flat vxStartL top
|
|
curl vxStartL (top * 0.9)
|
|
quadcontrols 0 vcurviness 9 unimportant
|
|
corner vxEndL 0
|
|
corner vxEndR 0
|
|
quadcontrols 1 (1 - vcurviness) 9 unimportant
|
|
flat vxStartR (top * 0.9)
|
|
curl vxStartR top
|
|
|
|
define [VShape] : params [top [sw STROKE] barStraight div] : glyph-construction
|
|
local df : DivFrame div
|
|
local fine : Math.min sw : if barStraight VShapeFineStraight VShapeFine
|
|
local sbCor : (CAP / top) * OX
|
|
local dgCor : diagCor top (WIDTH / 2) 0 (sw * 2)
|
|
if barStraight : begin
|
|
local vxStartL : SB + sbCor
|
|
local vxEndL : df.middle - cornerdist
|
|
local vxStartR : df.rightSB - sbCor
|
|
local vxEndR : df.middle + cornerdist
|
|
local midSW : VShapeMiddleWidth / STROKE * sw
|
|
include : dispiro
|
|
widths.lhs (sw * dgCor)
|
|
flat [mix vxStartL vxEndL 0] [mix top 0 0] [heading DOWNWARD]
|
|
curl [mix vxStartL vxEndL pInktrap] [mix top 0 pInktrap] [widths.lhs midSW]
|
|
g4 [mix vxStartL vxEndL 1] [mix top 0 1] [widths.lhs fine]
|
|
include : dispiro
|
|
widths.rhs (sw * dgCor)
|
|
flat [mix vxStartR vxEndR 0] [mix top 0 0] [heading DOWNWARD]
|
|
curl [mix vxStartR vxEndR pInktrap] [mix top 0 pInktrap] [widths.rhs midSW]
|
|
g4 [mix vxStartR vxEndR 1] [mix top 0 1] [widths.rhs fine]
|
|
tag-contour 'strokeUp'
|
|
: else : begin
|
|
include : dispiro
|
|
widths.lhs sw
|
|
flat df.leftSB top [heading DOWNWARD]
|
|
curl df.leftSB (top * 0.9) [heading DOWNWARD]
|
|
quadcontrols 0 vcurviness 9 unimportant
|
|
g4 (df.middle - cornerdist) 0 [widths.lhs fine]
|
|
include : dispiro
|
|
widths.rhs sw
|
|
flat df.rightSB top [heading DOWNWARD]
|
|
curl df.rightSB (top * 0.9) [heading DOWNWARD]
|
|
quadcontrols 0 vcurviness 9 unimportant
|
|
g4 (df.middle + cornerdist) 0 [widths.rhs fine]
|
|
tag-contour 'strokeUp'
|
|
|
|
#bottom cap
|
|
start-from (df.middle + cornerdist) 0
|
|
line-to (df.middle - cornerdist) 0
|
|
line-to df.middle fine
|
|
|
|
include : AIVSerifs top
|
|
|
|
sketch # V
|
|
set-width WIDTH
|
|
include markset.capital
|
|
branch
|
|
include : VShape CAP STROKE true
|
|
save 'V.straight'
|
|
branch
|
|
include : VShape CAP STROKE false
|
|
save 'V.curly'
|
|
|
|
sketch # v
|
|
include markset.e
|
|
branch
|
|
include : VShape XH STROKE true
|
|
save 'v.straight'
|
|
branch
|
|
include : VShape XH STROKE false
|
|
save 'v.curly'
|
|
|
|
define [VHooktopShape top _stroke barStraight] : glyph-construction
|
|
include : VShape top [fallback _stroke STROKE] barStraight
|
|
eject-contour 'serifRT'
|
|
eject-contour 'strokeUp'
|
|
|
|
include : dispiro
|
|
widths.rhs
|
|
straight.left.start (RIGHTSB + HOOKX / 3) (top - STROKE)
|
|
g4 (RIGHTSB - HOOKX / 3) (top - HALFSTROKE - HOOK)
|
|
quadcontrols 0.4 0.75 64 unimportant
|
|
g4 (MIDDLE + cornerdist) 0 [widths.rhs VShapeFine]
|
|
|
|
sketch # vhooktop
|
|
include markset.e
|
|
branch
|
|
include : VHooktopShape XH STROKE true
|
|
save 'vhooktop.straight'
|
|
save 'cyrizhitsa.straight'
|
|
branch
|
|
include : VHooktopShape XH STROKE false
|
|
save 'vhooktop.curly'
|
|
save 'cyrizhitsa.curly'
|
|
|
|
|
|
sketch # cyrIzhitsa
|
|
include markset.capital
|
|
branch
|
|
include : VHooktopShape CAP STROKE true
|
|
save 'cyrIzhitsa.straight'
|
|
branch
|
|
include : VHooktopShape CAP STROKE false
|
|
save 'cyrIzhitsa.curly'
|
|
|
|
select-variant 'V' 'V'
|
|
select-variant 'v' 'v'
|
|
select-variant 'vhooktop' 0x2C71 (follow -- 'v')
|
|
select-variant 'cyrizhitsa' 0x475 (follow -- 'v')
|
|
select-variant 'cyrIzhitsa' 0x474 (follow -- 'V')
|
|
|
|
|
|
turned 'turnv.straight' nothing 'v.straight' MIDDLE (XH / 2)
|
|
turned 'turnv.curly' nothing 'v.curly' MIDDLE (XH / 2)
|
|
select-variant 'turnv' 0x474 (follow -- 'Lambda')
|
|
|
|
sketch # nu
|
|
include markset.e
|
|
|
|
local xmid : MIDDLE + HALFSTROKE * 0.75
|
|
|
|
include : dispiro
|
|
g4 (SB + 0.4 * STROKE * HVCONTRAST) (XH - O) [widths.rhs]
|
|
bezcontrols 0.33 0.2 1 0.76 6 important
|
|
g4.down.end xmid 0 [heading DOWNWARD]
|
|
|
|
include : dispiro
|
|
widths.rhs
|
|
flat RIGHTSB XH [heading DOWNWARD]
|
|
curl RIGHTSB (XH * 0.9) [heading DOWNWARD]
|
|
quadcontrols 0 0.3 6
|
|
g4 xmid 0
|
|
|
|
save 'nu' 0x3BD
|
|
list VShape VShapeOutline
|
|
|
|
### A
|
|
define { LambdaShape AMaskShape DeltaShape } : do "A and related =============================="
|
|
define [AMaskShape top sw barStraight div] : create-glyph : glyph-construction
|
|
include : VShapeOutline top sw barStraight div
|
|
include : FlipAround ([DivFrame div].width / 2) (top / 2)
|
|
|
|
sketch # A
|
|
set-width WIDTH
|
|
include markset.capital
|
|
set-anchor 'trailing' BASE (RIGHTSB - markHalfStroke) 0
|
|
|
|
branch
|
|
include : VShape CAP STROKE true
|
|
include : FlipAround MIDDLE (CAP / 2)
|
|
include : intersection
|
|
HBarTop 0 WIDTH (XH / 2)
|
|
AMaskShape CAP STROKE true 1
|
|
# include : AMaskShape CAP STROKE true 1
|
|
save 'A.straight'
|
|
save 'Alpha.straight'
|
|
save 'cyrA.straight'
|
|
|
|
branch
|
|
include : VShape CAP STROKE false
|
|
include : FlipAround MIDDLE (CAP / 2)
|
|
include : intersection
|
|
HBarTop 0 WIDTH (XH / 2)
|
|
AMaskShape CAP STROKE false 1
|
|
save 'A.curly'
|
|
save 'Alpha.curly'
|
|
save 'cyrA.curly'
|
|
|
|
select-variant 'A' 'A'
|
|
select-variant 'Alpha' 0x391 (follow -- 'A')
|
|
select-variant 'cyrA' 0x410 (follow -- 'A')
|
|
|
|
turned 'turnA.straight' nothing 'A.straight' MIDDLE (CAP / 2)
|
|
turned 'turnA.curly' nothing 'A.curly' MIDDLE (CAP / 2)
|
|
select-variant 'turnA' 0x2C6F (follow -- 'A')
|
|
|
|
# Lambda
|
|
define [LambdaShape top sw barStraight div] : glyph-construction
|
|
local df : DivFrame [fallback div 1]
|
|
include : VShape top sw barStraight div
|
|
include : FlipAround df.middle (top / 2)
|
|
if SLAB : begin
|
|
include : CenterBottomSerif (SB + sw / 2 * HVCONTRAST) 0 JUT
|
|
tag-contour 'serif'
|
|
include : CenterBottomSerif (RIGHTSB - sw / 2 * HVCONTRAST) 0 JUT
|
|
tag-contour 'serif'
|
|
|
|
sketch # Lambda
|
|
include markset.capital
|
|
branch
|
|
include : LambdaShape CAP STROKE true
|
|
save 'Lambda.straight'
|
|
save 'latinLambda.straight'
|
|
branch
|
|
include : LambdaShape CAP STROKE false
|
|
save 'Lambda.curly'
|
|
save 'latinLambda.curly'
|
|
|
|
select-variant 'Lambda' 0x39B
|
|
select-variant 'latinLambda' 0x245 (follow -- 'Lambda')
|
|
|
|
# Delta
|
|
define [DeltaShape top sw barStraight div] : glyph-construction
|
|
include : LambdaShape top sw barStraight div
|
|
eject-contour 'serif'
|
|
include : intersection
|
|
HBarBottom 0 WIDTH 0 sw
|
|
AMaskShape top sw barStraight div
|
|
|
|
sketch # Delta
|
|
include markset.capital
|
|
branch
|
|
include : DeltaShape CAP STROKE true
|
|
save 'Delta.straight'
|
|
branch
|
|
include : DeltaShape CAP STROKE false
|
|
save 'Delta.curly'
|
|
|
|
select-variant 'Delta' 0x394
|
|
|
|
list LambdaShape AMaskShape DeltaShape
|
|
|
|
### a
|
|
do "a and related ============================================================================="
|
|
sketch # a.doublestorey
|
|
set-width WIDTH
|
|
include markset.e
|
|
set-anchor 'trailing' BASE (RIGHTSB - markHalfStroke) 0
|
|
local stroke : adviceBlackness2 2.875 2 XH
|
|
local bartop (XH * OVERLAYPOS * 1.02 + stroke / 2)
|
|
local lowslope : shoulderMidSlope SHOULDERFINE nothing (-1)
|
|
local lowmiddle : [mix (SB + OX) (RIGHTSB - stroke / 2 * HVCONTRAST) [linreg 72 0.51 126 0.58 stroke]] + CORRECTION_OMIDS * 0.5
|
|
local barsmooth : mix SB RIGHTSB 0.55
|
|
include : dispiro
|
|
widths.lhs stroke
|
|
flat RIGHTSB 0 [heading UPWARD]
|
|
curl RIGHTSB (XH - SMOOTHB * [linreg 18 0.9 126 0.81 stroke])
|
|
hookend XO
|
|
g4 (SB - OXHOOK / 2) (XH - AHOOK)
|
|
include : dispiro
|
|
widths.lhs stroke
|
|
flat (RIGHTSB + O) bartop [heading LEFTWARD]
|
|
curl barsmooth bartop
|
|
archv
|
|
g4 (SB + OX) (bartop * 0.95 * (SMALLSMOOTHB / (SMALLSMOOTHA + SMALLSMOOTHB)))
|
|
arcvh
|
|
g4 (lowmiddle + (-lowslope) * stroke) O [heading {.y 1 .x lowslope}]
|
|
archv 16
|
|
straight.up.end (RIGHTSB - stroke * HVCONTRAST + SHOULDERFINE * HVCONTRAST) (SMALLSMOOTHB * 0.9) [widths.lhs SHOULDERFINE]
|
|
if SLAB : begin
|
|
include : tagged 'serifRB' : RightwardBottomSerif RIGHTSB 0 SIDEJUT
|
|
|
|
save 'a.doublestorey'
|
|
|
|
sketch # a.singlestorey
|
|
set-width WIDTH
|
|
include markset.e
|
|
set-anchor 'trailing' BASE (RIGHTSB - markHalfStroke) 0
|
|
include : OBarRightShape
|
|
if SLAB
|
|
: then : begin
|
|
include : VBarRight RIGHTSB 0 XH
|
|
include : RightwardBottomSerif RIGHTSB 0 SIDEJUT
|
|
tag-contour 'serifRB'
|
|
: else : begin
|
|
include : dispiro
|
|
widths.rhs
|
|
flat RIGHTSB XH [heading DOWNWARD]
|
|
curl RIGHTSB SMOOTHA [heading DOWNWARD]
|
|
g4 [mix SB RIGHTSB (1 + 0.4 * TANSLANT)] 0 [heading DOWNWARD]
|
|
set-anchor 'bottomright' BASE [mix SB RIGHTSB 1.075] 0
|
|
save 'a.singlestorey'
|
|
|
|
select-variant 'a' 'a'
|
|
alias 'cyra' 0x430 'a'
|
|
|
|
sketch # turnlargescripta
|
|
include markset.capital
|
|
include : OBarRightShape CAP
|
|
start-from RIGHTSB 0
|
|
line-to (RIGHTSB - STROKE * HVCONTRAST) 0
|
|
line-to (RIGHTSB - STROKE * HVCONTRAST) (CAP - STROKE / 2)
|
|
line-to RIGHTSB (CAP - O)
|
|
save 'largescripta' 0x2C6D
|
|
include : FlipAround MIDDLE (CAP / 2)
|
|
save 'turnlargescripta' 0x2C70
|
|
|
|
sketch # scripta
|
|
include markset.e
|
|
include : OBarRightShape
|
|
start-from RIGHTSB 0
|
|
line-to (RIGHTSB - STROKE * HVCONTRAST) 0
|
|
line-to (RIGHTSB - STROKE * HVCONTRAST) (XH - STROKE / 2)
|
|
line-to RIGHTSB (XH - O)
|
|
if SLAB : begin
|
|
include : RightwardBottomSerif RIGHTSB 0 SIDEJUT
|
|
tag-contour 'serifRB'
|
|
save 'scripta' 0x0251
|
|
turned 'turna' 0x250 'a.doublestorey' MIDDLE (XH / 2)
|
|
turned nothing 0x252 'scripta' MIDDLE (XH / 2)
|
|
|
|
sketch # artail
|
|
include glyphs.'a.doublestorey' AS_BASE
|
|
eject-contour 'serifRB'
|
|
include glyphs.rtailBR
|
|
save 'artail' 0x1D8F
|
|
|
|
### W and w
|
|
do "W, w and related ========================================================================="
|
|
define [WShape top barStraight df] : glyph-construction
|
|
local fineOuter : if barStraight
|
|
adviceBlackness WShape.fineSOuter [Math.sqrt df.div]
|
|
adviceBlackness WShape.fineOuter df.div
|
|
local fineInner : if barStraight
|
|
adviceBlackness WShape.fineSInner [Math.sqrt df.div]
|
|
adviceBlackness WShape.fineInner df.div
|
|
local fineHeight : (fineOuter + fineInner) / 2
|
|
|
|
local hwCO : if barStraight
|
|
(1 / 2) * [adviceBlackness WShape.hwCOS df.div]
|
|
(1 / 2) * [adviceBlackness WShape.hwCO df.div]
|
|
local delimBias : hwCO * HVCONTRAST
|
|
local fineOffsetOuter : hwCO * HVCONTRAST
|
|
local fineOffsetInner : hwCO * HVCONTRAST
|
|
local m1 : [mix (df.leftSB + delimBias) (df.rightSB - delimBias) : if barStraight WShape.m1S WShape.m1] + [if barStraight O 0]
|
|
local m2 : [mix (df.leftSB + delimBias) (df.rightSB - delimBias) : if barStraight WShape.m2S WShape.m2] - [if barStraight O 0]
|
|
local wMidHeight : if barStraight (top * [Math.min 1 (df.div * 0.9)]) (top * 0.6)
|
|
|
|
if barStraight : begin
|
|
include : dispiro
|
|
widths.lhs
|
|
flat (df.leftSB + O * 2) top [heading DOWNWARD]
|
|
g4 (m1 - fineOffsetOuter) 0 [widths.lhs fineOuter]
|
|
: else : begin
|
|
include : dispiro
|
|
widths.lhs
|
|
flat df.leftSB top [heading DOWNWARD]
|
|
curl df.leftSB (top * 0.75) [heading DOWNWARD]
|
|
quadcontrols 0 0.3 6 unimportant
|
|
g4 (m1 - fineOffsetOuter) 0 [widths.lhs fineOuter]
|
|
|
|
# bottom cap 1
|
|
define [InnerShapes] : union
|
|
spiro-outline
|
|
corner (m1 + fineOffsetInner) 0
|
|
corner (m1 - fineOffsetOuter) 0
|
|
corner m1 fineHeight
|
|
spiro-outline
|
|
corner (df.middle + fineOffsetInner) wMidHeight
|
|
corner df.middle (wMidHeight - fineHeight)
|
|
corner (df.middle - fineOffsetInner) wMidHeight
|
|
spiro-outline
|
|
corner (m2 + fineOffsetOuter) 0
|
|
corner (m2 - fineOffsetInner) 0
|
|
corner m2 fineHeight
|
|
|
|
dispiro
|
|
widths.lhs fineInner
|
|
flat (df.middle - fineOffsetInner) wMidHeight
|
|
curl (m1 + fineOffsetInner) 0 [widths.rhs fineInner]
|
|
dispiro
|
|
widths.rhs fineInner
|
|
flat (df.middle + fineOffsetInner) wMidHeight
|
|
curl (m2 - fineOffsetInner) 0 [widths.lhs fineInner]
|
|
|
|
define [InnerStrokeMask] : union
|
|
spiro-outline
|
|
corner 0 0
|
|
corner df.width 0
|
|
corner df.width (-df.width)
|
|
corner 0 (-df.width)
|
|
spiro-outline
|
|
corner 0 wMidHeight
|
|
corner df.width wMidHeight
|
|
corner df.width (wMidHeight + df.width)
|
|
corner 0 (wMidHeight + df.width)
|
|
|
|
include : difference [InnerShapes] [InnerStrokeMask]
|
|
|
|
if barStraight : begin
|
|
include : dispiro
|
|
widths.rhs
|
|
flat (df.rightSB - O * 2) top [heading DOWNWARD]
|
|
g4 (m2 + fineOffsetOuter) 0 [widths.rhs fineOuter]
|
|
: else : begin
|
|
include : dispiro
|
|
widths.rhs
|
|
flat df.rightSB top [heading DOWNWARD]
|
|
curl df.rightSB (top * 0.75) [heading DOWNWARD]
|
|
quadcontrols 0 0.3 6 unimportant
|
|
g4 (m2 + fineOffsetOuter) 0 [widths.rhs fineOuter]
|
|
include : AIVSerifs top df.leftSB df.rightSB
|
|
|
|
set WShape.fineOuter 5
|
|
set WShape.fineInner 6
|
|
set WShape.fineSOuter 5.5
|
|
set WShape.fineSInner 5.5
|
|
set WShape.hwCO 5
|
|
set WShape.hwCOS 3.5
|
|
set WShape.m1 0.25
|
|
set WShape.m2 : 1 - WShape.m1
|
|
set WShape.m1S 0.235
|
|
set WShape.m2S : 1 - WShape.m1S
|
|
|
|
sketch # W
|
|
local df : DivFrame para.diversityM 3
|
|
set-width df.width
|
|
include df.markSet.capital
|
|
branch
|
|
include : WShape CAP true df
|
|
save 'W.straight'
|
|
save 'cyrWe.straight'
|
|
branch
|
|
include : WShape CAP false df
|
|
save 'W.curly'
|
|
save 'cyrWe.curly'
|
|
|
|
sketch # w
|
|
local df : DivFrame para.diversityM 3
|
|
set-width df.width
|
|
include df.markSet.e
|
|
branch
|
|
include : WShape XH true df
|
|
save 'w.straight'
|
|
save 'cyrwe.straight'
|
|
branch
|
|
include : WShape XH false df
|
|
save 'w.curly'
|
|
save 'cyrwe.curly'
|
|
|
|
|
|
|
|
define [WHooktopShape top barStraight df] : glyph-construction
|
|
local fineOuter : if barStraight
|
|
adviceBlackness WShape.fineSOuter [Math.sqrt df.div]
|
|
adviceBlackness WShape.fineOuter df.div
|
|
|
|
local hwCO : if barStraight
|
|
(1 / 2) * [adviceBlackness WShape.hwCOS df.div]
|
|
(1 / 2) * [adviceBlackness WShape.hwCO df.div]
|
|
local delimBias : hwCO * HVCONTRAST
|
|
local fineOffsetOuter : hwCO * HVCONTRAST
|
|
local fineOffsetInner : hwCO * HVCONTRAST
|
|
local m2 : [mix (df.leftSB + delimBias) (df.rightSB - delimBias) : if barStraight WShape.m2S WShape.m2] - [if barStraight O 0]
|
|
|
|
include : WShape top barStraight df
|
|
|
|
# Eject unnecessary contours
|
|
this.contours.pop
|
|
if SLAB : begin
|
|
local s : this.contours.pop
|
|
this.contours.pop
|
|
this.contours.push s
|
|
|
|
include : dispiro
|
|
widths.rhs
|
|
straight.down.start df.rightSB (top - HOOK) [heading DOWNWARD]
|
|
quadcontrols 0 0.3 6 unimportant g2
|
|
g4 (m2 + fineOffsetOuter) 0 [widths.rhs fineOuter]
|
|
|
|
include : VerticalHook (df.rightSB - HALFSTROKE * HVCONTRAST) (top - HOOK) (HOOKX * 0.65) (-HOOK + HALFSTROKE)
|
|
|
|
sketch # Whooktop
|
|
local df : DivFrame para.diversityM 3
|
|
set-width df.width
|
|
include df.markSet.capital
|
|
branch
|
|
include : WHooktopShape CAP true df
|
|
save 'Whooktop.straight'
|
|
branch
|
|
include : WHooktopShape CAP false df
|
|
save 'Whooktop.curly'
|
|
|
|
sketch # whooktop
|
|
local df : DivFrame para.diversityM 3
|
|
set-width df.width
|
|
include df.markSet.e
|
|
branch
|
|
include : WHooktopShape XH true df
|
|
save 'whooktop.straight'
|
|
branch
|
|
include : WHooktopShape XH false df
|
|
save 'whooktop.curly'
|
|
|
|
define [LowerWWShape df straightBar] : glyph-construction
|
|
include : WShape (CAP / 2) straightBar df
|
|
apply-transform : Upright
|
|
apply-transform : Translate 0 (CAP / 2)
|
|
apply-transform : Italify
|
|
include : WShape (CAP / 2) straightBar df
|
|
sketch # ww
|
|
local df : DivFrame 1 3
|
|
set-width df.width
|
|
include df.markSet.capital
|
|
branch
|
|
include : LowerWWShape df true
|
|
save 'ww.straight'
|
|
branch
|
|
include : LowerWWShape df false
|
|
save 'ww.curly'
|
|
|
|
select-variant 'W' 'W'
|
|
select-variant 'cyrWe' 0x51C (follow -- 'W')
|
|
select-variant 'Whooktop' 0x2C72 (follow -- 'W')
|
|
select-variant 'w' 'w'
|
|
select-variant 'cyrwe' 0x51D (follow -- 'w')
|
|
select-variant 'ww' 0x2AC (follow -- 'w')
|
|
select-variant 'whooktop' 0x2C73 (follow -- 'w')
|
|
|
|
turned 'turnw.straight' nothing 'w.straight' (MIDDLE * para.diversityM) (XH / 2)
|
|
turned 'turnw.curly' nothing 'w.curly' (MIDDLE * para.diversityM) (XH / 2)
|
|
select-variant 'turnw' 0x28D (follow -- 'w')
|
|
|
|
### X and x
|
|
do "X, x and related =========================================================================="
|
|
sketch # X
|
|
set-width WIDTH
|
|
include markset.capital
|
|
|
|
branch
|
|
include : xStrand true SB 0 RIGHTSB CAP 0.1 0.4 0.28
|
|
include : xStrand true SB CAP RIGHTSB 0 0.1 0.4 0.28
|
|
include : AIHSerifs CAP
|
|
save 'X.straight' 'X'
|
|
save 'Chi.straight' 0x3A7
|
|
save 'cyrHa.straight' 0x425
|
|
branch
|
|
include : CyrDescender RIGHTSB
|
|
save 'cyrHadescender.straight'
|
|
|
|
branch
|
|
include : xStrand false SB 0 RIGHTSB CAP 0.1 0.4 0.28
|
|
include : xStrand false SB CAP RIGHTSB 0 0.1 0.4 0.28
|
|
include : AIHSerifs CAP
|
|
save 'X.curly' 'X'
|
|
save 'Chi.curly' 0x3A7
|
|
save 'cyrHa.curly' 0x425
|
|
branch
|
|
include : CyrDescender RIGHTSB
|
|
save 'cyrHadescender.curly'
|
|
|
|
sketch # x
|
|
include markset.e
|
|
local TURN (XH * 0.1)
|
|
|
|
branch
|
|
include : xStrand true SB 0 RIGHTSB XH 0.02 0.4 0.14
|
|
include : xStrand true SB XH RIGHTSB 0 0.02 0.4 0.14
|
|
include : AIHSerifs XH
|
|
save 'x.straight' 'x'
|
|
save 'cyrha.straight' 0x445
|
|
branch
|
|
include : CyrDescender RIGHTSB
|
|
save 'cyrhadescender.straight'
|
|
branch
|
|
include : xStrand false SB 0 RIGHTSB XH 0.02 0.4 0.14
|
|
include : xStrand false SB XH RIGHTSB 0 0.02 0.4 0.14
|
|
include : AIHSerifs XH
|
|
save 'x.curly' 'x'
|
|
save 'cyrha.curly' 0x445
|
|
branch
|
|
include : CyrDescender RIGHTSB
|
|
save 'cyrhadescender.curly'
|
|
|
|
sketch # chi
|
|
set-width WIDTH
|
|
include markset.p
|
|
|
|
branch
|
|
include : xStrand true SB DESCENDER RIGHTSB XH 0.05 0.4 0.11
|
|
include : xStrand true SB XH RIGHTSB DESCENDER 0.05 0.4 0.11
|
|
save 'chi.straight' 0x3C7
|
|
save 'latinchi.straight' 0xAB53
|
|
branch
|
|
include : xStrand false SB DESCENDER RIGHTSB XH 0.05 0.4 0.11
|
|
include : xStrand false SB XH RIGHTSB DESCENDER 0.05 0.4 0.11
|
|
save 'chi.curly' 0x3C7
|
|
save 'latinchi.curly' 0xAB53
|
|
|
|
select-variant 'X' 'X'
|
|
select-variant 'Chi' 0x3A7 (follow -- 'X')
|
|
select-variant 'cyrHa' 0x425 (follow -- 'X')
|
|
select-variant 'cyrHadescender' 0x4B2 (follow -- 'X')
|
|
select-variant 'x' 'x'
|
|
select-variant 'cyrha' 0x445 (follow -- 'x')
|
|
select-variant 'chi' 0x3C7 (follow -- 'x')
|
|
select-variant 'latinchi' 0xAB53 (follow -- 'x')
|
|
select-variant 'cyrhadescender' 0x4B3 (follow -- 'x')
|
|
|
|
### Y
|
|
do "Y and related ============================================================================"
|
|
define [YShape straightBar top bot] : glyph-construction
|
|
local cross : mix [fallback bot 0] top 0.4
|
|
include : halfXStrand straightBar SB top MIDDLE cross 0.1 0.4 0.28
|
|
include : halfXStrand straightBar RIGHTSB top MIDDLE cross 0.1 0.4 0.28
|
|
tag-contour 'strokeRT'
|
|
include : VBar MIDDLE [fallback bot 0] (cross + HALFSTROKE)
|
|
set-anchor 'overlay' BASE MIDDLE cross
|
|
if SLAB : begin
|
|
include : AIVSerifs top
|
|
include : CenterBottomSerif MIDDLE [fallback bot 0] JUT
|
|
|
|
sketch # Y
|
|
include markset.capital
|
|
branch
|
|
include : YShape true CAP
|
|
save 'Y.straight'
|
|
save 'Upsilon.straight'
|
|
save 'cyrUe.straight'
|
|
branch
|
|
include : YShape false CAP
|
|
save 'Y.curly'
|
|
save 'Upsilon.curly'
|
|
save 'cyrUe.curly'
|
|
|
|
define [YHookTopShape straightBar] : glyph-construction
|
|
include : YShape straightBar CAP
|
|
eject-contour 'strokeRT'
|
|
eject-contour 'serifRT'
|
|
|
|
local cross (CAP * 0.4)
|
|
include : dispiro
|
|
widths.rhs
|
|
straight.left.start (RIGHTSB + HOOKX / 3) (CAP - STROKE)
|
|
g4 (RIGHTSB - HOOKX / 3) (CAP - HOOK)
|
|
quadcontrols 0.55 0.7 32 unimportant
|
|
g4 (MIDDLE + STROKE / 2 * HVCONTRAST) cross
|
|
end [function : set this.loose true]
|
|
|
|
sketch # Yhooktop
|
|
include markset.capital
|
|
branch
|
|
include : YHookTopShape true
|
|
save 'Yhooktop.straight'
|
|
branch
|
|
include : YHookTopShape false
|
|
save 'Yhooktop.curly'
|
|
|
|
sketch # cyrue
|
|
include markset.p
|
|
branch
|
|
include : YShape true XH DESCENDER
|
|
save 'cyrue.straight'
|
|
branch
|
|
include : YShape false XH DESCENDER
|
|
save 'cyrue.curly'
|
|
|
|
sketch # smcpY
|
|
include markset.e
|
|
branch
|
|
include : YShape true XH
|
|
save 'smcpY.straight'
|
|
branch
|
|
include : YShape true XH
|
|
save 'smcpY.curly'
|
|
|
|
select-variant 'Y' 'Y'
|
|
select-variant 'Yhooktop' 0x1B3 (follow -- 'Y')
|
|
select-variant 'smcpY' 0x28F (follow -- 'Y')
|
|
select-variant 'Upsilon' 0x3A5 (follow -- 'Y')
|
|
select-variant 'cyrUe' 0x4AE (follow -- 'Y')
|
|
select-variant 'cyrue' 0x4AF (follow -- 'Y')
|
|
|
|
### y
|
|
do "y and related ============================================================================"
|
|
define [GenSmallYShape straightBar] : begin
|
|
local useCurlyBottom : para.isItalic || SLAB || straightBar
|
|
local px1 0.84
|
|
local py1 : linreg 18 0.8 126 0.76 STROKE
|
|
local px2 0.95
|
|
local py20 0.88
|
|
local py2 : if useCurlyBottom 0.97 py20
|
|
local pds 0.05
|
|
local pds2 0.01
|
|
local dpy1 : (1 - [linreg (1 - px2) (1 - py2) px1 py1 1]) / (1 - py1)
|
|
local dpy20 : (1 - [linreg (1 - px1) (1 - py1) px2 py20 1]) / (1 - py20)
|
|
local dpy2 : (1 - [linreg (1 - px1) (1 - py1) px2 py2 1]) / (1 - py2)
|
|
local yrstrokel0 : MIDDLE - WIDTH * 0.1
|
|
local yrstrokel : MIDDLE - WIDTH * 0.1 + (STROKE * HVCONTRAST * [if useCurlyBottom (2 / 3) (1 / 3)])
|
|
local ySbCor : (XH / CAP) * (OX * [if SLAB 1 4])
|
|
local yrstroker : RIGHTSB - [if straightBar ySbCor 0]
|
|
local yshrink : [linreg 18 1 126 0.85 STROKE] * [if straightBar ([adviceBlackness 3.25] / STROKE) 1]
|
|
local slabysize : JUT * (WIDTH / UPM) + STROKE
|
|
local slabyvx 0.7
|
|
|
|
define [CalcDS top bottom] : begin
|
|
local ds : (top - bottom) * pds
|
|
local ds2 : (top - bottom) * pds2 + [if useCurlyBottom (slabysize * slabyvx) 0]
|
|
return {ds ds2}
|
|
|
|
define [yTopKnots x top ds dir dx dy] : begin
|
|
local hs : HALFSTROKE * [diagCor dy dx 0 (STROKE * 2)]
|
|
local hl : hs - hs * dir
|
|
local hr : hs + hs * dir
|
|
if straightBar : return : list
|
|
flat x top [widths.heading hl hr DOWNWARD]
|
|
: else : return : list
|
|
flat x top [widths.heading hl hr DOWNWARD]
|
|
curl x (top - ds) [widths.heading hl hr DOWNWARD]
|
|
quadcontrols 0 dpy1 16
|
|
|
|
define [yBaseKnots top bottom shrink hooktop] : begin
|
|
local {ds ds2} : CalcDS top bottom
|
|
return : list
|
|
if (straightBar && (! hooktop))
|
|
then : list
|
|
else : list
|
|
flat
|
|
mix yrstrokel yrstroker px1
|
|
mix (bottom + ds2) (top - ds) py1
|
|
curl
|
|
mix yrstrokel yrstroker (1 - px2)
|
|
mix (bottom + ds2) (top - ds) (1 - py2)
|
|
widths.rhs : STROKE * [if useCurlyBottom shrink 1]
|
|
|
|
if useCurlyBottom
|
|
then : list
|
|
flat (yrstrokel - slabysize) bottom [widths.rhs]
|
|
curl
|
|
Math.min (yrstrokel - slabysize - 0.1) (yrstrokel - STROKE - JUT)
|
|
begin bottom
|
|
else : list
|
|
quadcontrols 1 (1 - dpy2) 16
|
|
flat yrstrokel (bottom + ds2) [widths.heading 0 STROKE DOWNWARD]
|
|
curl yrstrokel bottom [widths.heading 0 STROKE DOWNWARD]
|
|
|
|
define [yJoinProportion hooktop x] : linreg
|
|
1 - px2
|
|
1 - py2
|
|
if (straightBar && !hooktop) 1 px1
|
|
if (straightBar && !hooktop) 1 py1
|
|
(x - yrstrokel) / (yrstroker - yrstrokel)
|
|
|
|
define [yJoinHeight ds ds2 top bottom hooktop] : begin
|
|
return : mix (bottom + ds2) (top - ds) [yJoinProportion hooktop MIDDLE]
|
|
|
|
define [yJoinKnots ds ds2 top bottom hooktop] : begin
|
|
return : list
|
|
if straightBar : then : list
|
|
: else : list
|
|
flat
|
|
mix (WIDTH - yrstrokel) (WIDTH - yrstroker) px1
|
|
mix (bottom + ds2) (top - ds) py1
|
|
curl MIDDLE
|
|
yJoinHeight ds ds2 top bottom hooktop
|
|
widths.lhs (STROKE * yshrink)
|
|
|
|
define [SmallYStrokeSplitMask top bottom hooktop dir elev] : begin
|
|
local {ds ds2} : CalcDS top bottom
|
|
local jp0 : yJoinProportion hooktop (WIDTH / 2 - WIDTH / 2 * dir)
|
|
local jp1 : yJoinProportion hooktop (WIDTH / 2 + WIDTH / 2 * dir)
|
|
local hs : 0.75 * STROKE
|
|
local yLeft : [mix (bottom + ds2) (top - ds) jp1] + hs - [fallback elev 0]
|
|
local yRight : [mix (bottom + ds2) (top - ds) jp0] + hs - [fallback elev 0]
|
|
local yMin : Math.min bottom yLeft yRight
|
|
return : spiro-outline
|
|
corner WIDTH yMin
|
|
corner WIDTH yRight
|
|
corner 0 yLeft
|
|
corner 0 yMin
|
|
|
|
define [SmallYShape top bottom] : glyph-construction
|
|
local {ds ds2} : CalcDS top bottom
|
|
|
|
include : intersection
|
|
SmallYStrokeSplitMask top bottom false 1
|
|
dispiro
|
|
yTopKnots yrstroker top ds 1 WIDTH (top - bottom)
|
|
yBaseKnots top bottom 1
|
|
|
|
include : difference
|
|
dispiro
|
|
yTopKnots yrstroker top ds 1 WIDTH (top - bottom)
|
|
yBaseKnots top bottom yshrink
|
|
SmallYStrokeSplitMask top bottom false 1 1
|
|
|
|
include : difference
|
|
dispiro
|
|
yTopKnots (WIDTH - yrstroker) top ds (-1) WIDTH (top - bottom)
|
|
yJoinKnots ds ds2 top bottom
|
|
SmallYStrokeSplitMask top bottom false (-1)
|
|
|
|
if SLAB : begin
|
|
include : AIVSerifs top
|
|
|
|
define [SmallYHookTopShape top bottom] : glyph-construction
|
|
local ds : (top - bottom) * pds
|
|
local ds2 : (top - bottom) * pds2 + [if useCurlyBottom (slabysize * slabyvx) 0]
|
|
local joinHeight : yJoinHeight ds ds2 top bottom true
|
|
|
|
include : intersection
|
|
SmallYStrokeSplitMask top bottom true 1
|
|
dispiro
|
|
widths.rhs
|
|
straight.left.start ([mix yrstrokel yrstroker px1] - HALFSTROKE + HOOKX) (XH - STROKE)
|
|
yBaseKnots top bottom 1 true
|
|
|
|
include : difference
|
|
dispiro
|
|
widths.rhs
|
|
straight.left.start ([mix yrstrokel yrstroker px1] - HALFSTROKE + HOOKX) (XH - STROKE)
|
|
yBaseKnots top bottom yshrink true
|
|
SmallYStrokeSplitMask top bottom true 1 1
|
|
|
|
include : difference
|
|
dispiro
|
|
widths.center
|
|
yTopKnots (WIDTH - yrstroker) top ds (-1) WIDTH (top - bottom)
|
|
yJoinKnots ds ds2 top bottom true
|
|
SmallYStrokeSplitMask top bottom true (-1)
|
|
|
|
if SLAB : begin
|
|
include : AIVSerifs top
|
|
eject-contour 'serifRT'
|
|
|
|
define [SmallLambdaShape top bottom] : glyph-construction
|
|
local ds : (top - bottom) * pds
|
|
local ds2 : (top - bottom) * pds2
|
|
local left yrstrokel0
|
|
local right : yrstroker - HALFSTROKE * HVCONTRAST
|
|
|
|
include : dispiro
|
|
widths.center
|
|
flat right bottom [heading UPWARD]
|
|
curl right (bottom + ds) [heading UPWARD]
|
|
quadcontrols 0 dpy1 16
|
|
flat [mix right left (1 - px1)] [mix (top - ds2) (bottom + ds) py1]
|
|
curl [mix right left px2] [mix (top - ds2) (bottom + ds) (1 - py20)]
|
|
quadcontrols 1 (1 - dpy20) 16
|
|
flat left (top - ds2) [heading UPWARD]
|
|
curl left top [heading UPWARD]
|
|
|
|
include : dispiro
|
|
widths.center
|
|
flat (WIDTH - right) bottom [heading UPWARD]
|
|
curl (WIDTH - right) (bottom + ds) [heading UPWARD]
|
|
quadcontrols 0 dpy1 16
|
|
flat [mix (WIDTH - left) (WIDTH - right) px1] [mix (top - ds2) (bottom + ds) py1]
|
|
curl MIDDLE [mix (top - ds2) (bottom + ds) [linreg (1 - px2) (1 - py20) px1 py1 ((MIDDLE - left) / (right - left))]]
|
|
|
|
return : object SmallYShape SmallYHookTopShape SmallLambdaShape
|
|
|
|
sketch # y.straight
|
|
include markset.p
|
|
branch
|
|
include : [GenSmallYShape true].SmallYShape XH DESCENDER
|
|
set-anchor "overlay" BASE MIDDLE (XH / 2)
|
|
save 'y.straight'
|
|
save 'cyru.straight'
|
|
branch
|
|
include : [GenSmallYShape false].SmallYShape XH DESCENDER
|
|
set-anchor "overlay" BASE MIDDLE (XH / 2)
|
|
save 'y.curly'
|
|
save 'cyru.curly'
|
|
|
|
sketch # y.cursive
|
|
include markset.p
|
|
include : nShoulder
|
|
left -- (SB + STROKE * HVCONTRAST)
|
|
right -- RIGHTSB
|
|
fine -- SHOULDERFINE
|
|
include : FlipAround MIDDLE (XH / 2)
|
|
include : dispiro
|
|
widths.rhs
|
|
flat RIGHTSB XH [heading DOWNWARD]
|
|
curl RIGHTSB (DESCENDER + SMALLSMOOTHA)
|
|
hookend (DESCENDER + O)
|
|
g4 SB (DESCENDER + SHOOK)
|
|
if SLAB : begin
|
|
include : LeftwardTopSerif SB XH SIDEJUT
|
|
set-anchor "overlay" BASE MIDDLE (XH / 2)
|
|
save 'y.cursive'
|
|
save 'cyru.cursive'
|
|
|
|
select-variant 'y' 'y'
|
|
select-variant 'cyru' 0x443 (follow -- 'y')
|
|
|
|
|
|
sketch # yhooktop
|
|
include markset.p
|
|
branch
|
|
include : [GenSmallYShape true].SmallYHookTopShape XH DESCENDER
|
|
set-anchor "overlay" BASE MIDDLE (XH / 2)
|
|
save 'yhooktop.straight'
|
|
branch
|
|
include : [GenSmallYShape false].SmallYHookTopShape XH DESCENDER
|
|
set-anchor "overlay" BASE MIDDLE (XH / 2)
|
|
save 'yhooktop.curly'
|
|
|
|
sketch # cyrU
|
|
include markset.capital
|
|
branch
|
|
include : [GenSmallYShape true].SmallYShape CAP 0
|
|
set-anchor "overlay" BASE MIDDLE (XH / 2 - DESCENDER)
|
|
save 'cyrU.straight'
|
|
branch
|
|
include : [GenSmallYShape false].SmallYShape CAP 0
|
|
set-anchor "overlay" BASE MIDDLE (XH / 2 - DESCENDER)
|
|
save 'cyrU.curly'
|
|
|
|
select-variant 'yhooktop' 0x1B4
|
|
select-variant 'cyrU' 0x423 (follow -- 'yhooktop')
|
|
|
|
turned 'turny.straight' nothing 'y.straight' MIDDLE (XH / 2) markset.b
|
|
turned 'turny.curly' nothing 'y.curly' MIDDLE (XH / 2) markset.b
|
|
select-variant 'turny' 0x28E (follow -- 'yhooktop')
|
|
|
|
sketch # lambda
|
|
include markset.b
|
|
include : [GenSmallYShape false].SmallLambdaShape CAP 0
|
|
set-anchor "overlay" BASE MIDDLE (XH / 2)
|
|
save 'lambda' 0x3BB
|
|
|
|
sketch # lambdaslash
|
|
include glyphs.lambda AS_BASE
|
|
include : FlatSlashShape ([tp [Upright] glyphs.('l.serifed').anchors.above].x / para.diversityI) [mix 0 CAP 0.7] (OVERLAYSTROKE / 2)
|
|
save 'lambdaslash' 0x19B
|
|
|
|
### K and k
|
|
do "k and related ============================================================================"
|
|
local [KBalance straightBar] : if SLAB (WIDTH / 16) : if straightBar (WIDTH / 32) 0
|
|
local [KBalanceRight straightBar] : if SLAB (-WIDTH / 32) : if straightBar (WIDTH / 32) 0
|
|
local [KBalanceRightCursive straightBar] : if SLAB (WIDTH / 16) : if straightBar (WIDTH / 32) 0
|
|
define [KLegShape top straightBar] : glyph-construction
|
|
local turn (top * 0.99)
|
|
local fine : adviceBlackness 3.5
|
|
local Ok 0
|
|
local OkSerif 0
|
|
local kshLeft : SB + [KBalance straightBar]
|
|
local kshRight : RIGHTSB + [KBalanceRight straightBar]
|
|
|
|
if straightBar : do
|
|
local attach (top * 0.42 - STROKE)
|
|
local attach2 (top * 0.72 + STROKE)
|
|
set Ok : ([if SLAB (0) (-4)] * OX - STROKE / 3) * (XH / top)
|
|
set OkSerif : if SLAB 0 Ok
|
|
include : intersection
|
|
Rect top 0 0 UPM
|
|
dispiro
|
|
widths.rhs
|
|
flat (kshRight - Ok) top
|
|
curl (kshLeft + STROKE) attach [widths 0 fine]
|
|
|
|
include : intersection
|
|
spiro-outline
|
|
corner (kshLeft + STROKE) 0
|
|
corner (kshLeft + STROKE) (attach + 1)
|
|
corner (kshRight - Ok - 1) top
|
|
corner (kshRight - Ok) top
|
|
corner (kshRight - Ok) 0
|
|
dispiro
|
|
widths.lhs
|
|
flat (kshRight - Ok) 0
|
|
curl (kshLeft + STROKE) attach2
|
|
: else : do
|
|
local attach (top * [if SLAB 0.325 0.375])
|
|
local attach2 [if SLAB [mix kshLeft kshRight 0.48] MIDDLE]
|
|
include : dispiro
|
|
g4.down.start (kshRight) top [widths.heading 0 (STROKE * [if SLAB 1.15 1.05] * (WIDTH * 2 / UPM)) DOWNWARD]
|
|
bezcontrols 0 0.2 0.5 0.65 8
|
|
g4 (kshLeft + STROKE) attach [widths 0 fine]
|
|
include : dispiro
|
|
widths.center
|
|
g4.up.start (kshRight - O - HALFSTROKE * HVCONTRAST) 0 [heading UPWARD]
|
|
quadcontrols 0 0.25 8
|
|
g4 attach2 (top * 0.61) [widths.center fine]
|
|
|
|
if SLAB : do
|
|
local topSerifX : kshRight - OkSerif - (STROKE * [if SLAB 1.15 1.05] * (WIDTH * 2 / UPM) / 2 - HALFSTROKE) * HVCONTRAST * [if para.isItalic 1 0] - HALFSTROKE * 0.5 * HVCONTRAST
|
|
local bottomSerifX : kshRight - OkSerif - O * [if para.isItalic 1 0]
|
|
|
|
include : RightwardTopSerif topSerifX top (SIDEJUT + HALFSTROKE * 0.5 * HVCONTRAST)
|
|
include : RightwardBottomSerif bottomSerifX 0 SIDEJUT
|
|
|
|
define [KCurlyLoopAndLegShape top straightBar] : glyph-construction
|
|
define kshLeft : SB + [KBalance straightBar]
|
|
define kshRight : RIGHTSB + [KBalanceRightCursive straightBar] + 0.2 * STROKE
|
|
|
|
define Ok 0
|
|
define arcFine SHOULDERFINE
|
|
define arcStroke : adviceBlackness2 2 3 top
|
|
define arcTerminalFine : adviceBlackness2 3 4 top
|
|
define st : shoulderMidSlope arcFine arcStroke 1
|
|
|
|
define arcMaxPropX : 0.8 + 2 * (arcStroke / WIDTH)
|
|
define startPropY : 0.46 + 0.1 * (arcStroke / WIDTH)
|
|
define arcTopPropX : 0.56 + 0.2 * (arcStroke / WIDTH)
|
|
define arcMaxXPropY : 0.6 - 1 * (arcStroke / WIDTH)
|
|
define arcEndPropX : 0.15 - 0.5 * (arcStroke / WIDTH)
|
|
define arcEndPropY : 0.45 + 0.2 * (arcStroke / WIDTH)
|
|
|
|
define arcStartX : kshLeft + HVCONTRAST * (STROKE - arcFine)
|
|
define arcMaxX : kshRight * 0.9 - Ok
|
|
define arcTopY : top - O
|
|
|
|
define arcTerminalX : mix arcStartX kshRight arcEndPropX
|
|
define arcTerminalY : mix 0 top arcEndPropY
|
|
define barEndX : kshRight - Ok
|
|
|
|
include : difference
|
|
dispiro
|
|
g2.up.start arcStartX (top * startPropY) [widths.heading 0 arcFine UPWARD]
|
|
arcvh
|
|
g2.right.mid [mix arcStartX arcMaxX arcTopPropX] arcTopY [widths.heading 0 arcStroke {.y (+1) .x (+st)}]
|
|
archv
|
|
g2.down.mid arcMaxX [mix arcTerminalY top arcMaxXPropY] [heading DOWNWARD]
|
|
quadcontrols 0 0.7
|
|
g2 arcTerminalX arcTerminalY [widths arcTerminalFine 0]
|
|
spiro-outline
|
|
corner 0 0
|
|
corner 0 arcTerminalY
|
|
corner arcTerminalX arcTerminalY
|
|
corner barEndX 0
|
|
|
|
include : intersection
|
|
Rect [mix 0 top arcEndPropY] 0 0 UPM
|
|
dispiro
|
|
flat arcTerminalX arcTerminalY [widths.lhs]
|
|
curl barEndX 0 [widths.rhs]
|
|
|
|
define [KShape straightBar] : glyph-construction
|
|
include : VBarLeft (SB + [KBalance straightBar]) 0 CAP
|
|
include : KLegShape CAP straightBar
|
|
if SLAB : begin
|
|
include : CenterTopSerif (SB + [KBalance straightBar] + HALFSTROKE * HVCONTRAST) CAP JUT
|
|
include : CenterBottomSerif (SB + [KBalance straightBar] + HALFSTROKE * HVCONTRAST) 0 JUT
|
|
|
|
sketch # K
|
|
set-width WIDTH
|
|
include markset.capital
|
|
include : KShape true
|
|
branch
|
|
save 'K.straight'
|
|
save 'Kappa.straight'
|
|
save 'cyrKa.straight'
|
|
branch
|
|
include : CyrDescender (RIGHTSB - O)
|
|
save 'cyrKaDescender.straight'
|
|
|
|
sketch # K
|
|
set-width WIDTH
|
|
include markset.capital
|
|
include : KShape false
|
|
branch
|
|
save 'K.curly'
|
|
save 'Kappa.curly'
|
|
save 'cyrKa.curly'
|
|
branch
|
|
include : CyrDescender (RIGHTSB - O)
|
|
save 'cyrKaDescender.curly'
|
|
|
|
select-variant 'K' 'K'
|
|
select-variant 'Kappa' 0x39A (follow -- 'K')
|
|
select-variant 'cyrKa' 0x41A (follow -- 'K')
|
|
select-variant 'cyrKaDescender' 0x49A (follow -- 'K')
|
|
|
|
define [LowerKShape straightBar] : glyph-construction
|
|
include : VBarLeft (SB + [KBalance straightBar]) 0 CAP
|
|
include : KLegShape XH straightBar
|
|
if SLAB : begin
|
|
include : LeftwardTopSerif (SB + [KBalance straightBar]) CAP SIDEJUT
|
|
if (!para.isItalic) : begin
|
|
include : CenterBottomSerif (SB + [KBalance straightBar] + HALFSTROKE * HVCONTRAST) 0 JUT
|
|
tag-contour 'serifLB'
|
|
|
|
define [LowerKCursiveShape straightBar] : glyph-construction
|
|
include : VBarLeft (SB + [KBalance straightBar]) 0 CAP
|
|
include : KCurlyLoopAndLegShape XH straightBar
|
|
if SLAB : begin
|
|
include : LeftwardTopSerif (SB + [KBalance straightBar]) CAP SIDEJUT
|
|
|
|
sketch # k.straight
|
|
set-width WIDTH
|
|
include markset.b
|
|
include : LowerKShape true
|
|
save 'k.straight'
|
|
|
|
sketch # k.curly
|
|
set-width WIDTH
|
|
include markset.b
|
|
include : LowerKShape false
|
|
save 'k.curly'
|
|
|
|
sketch # k
|
|
set-width WIDTH
|
|
include markset.b
|
|
include : LowerKCursiveShape true
|
|
save 'k.cursive'
|
|
|
|
select-variant 'k' 'k'
|
|
|
|
define [LowerKappaShape straightBar] : glyph-construction
|
|
include : VBarLeft (SB + [KBalance straightBar]) 0 XH
|
|
include : KLegShape XH straightBar
|
|
if SLAB : begin
|
|
include : LeftwardTopSerif (SB + [KBalance straightBar]) XH SIDEJUT
|
|
|
|
sketch # kappa
|
|
set-width WIDTH
|
|
include markset.e
|
|
include : LowerKappaShape true
|
|
save 'kappa.straight'
|
|
|
|
sketch # kappa
|
|
set-width WIDTH
|
|
include markset.e
|
|
include : LowerKappaShape false
|
|
save 'kappa.curly'
|
|
|
|
select-variant 'kappa' 0x3BA (follow -- 'K')
|
|
|
|
define [LowerCyrKaShape straightBar] : glyph-construction
|
|
include : VBarLeft (SB + [KBalance straightBar]) 0 XH
|
|
include : KLegShape XH straightBar
|
|
if SLAB : begin
|
|
include : CenterBottomSerif (SB + [KBalance straightBar] + HALFSTROKE * HVCONTRAST) 0 JUT
|
|
include : CenterTopSerif (SB + [KBalance straightBar] + HALFSTROKE * HVCONTRAST) XH JUT
|
|
|
|
sketch # cyrka
|
|
set-width WIDTH
|
|
include markset.e
|
|
include : LowerCyrKaShape true
|
|
branch
|
|
save 'cyrka.straight'
|
|
save 'latinkappa.straight'
|
|
branch
|
|
include : CyrDescender (RIGHTSB - O)
|
|
save 'cyrkaDescender.straight'
|
|
|
|
sketch # cyrka
|
|
set-width WIDTH
|
|
include markset.e
|
|
include : LowerCyrKaShape false
|
|
branch
|
|
save 'cyrka.curly'
|
|
save 'latinkappa.curly'
|
|
branch
|
|
include : CyrDescender (RIGHTSB - O)
|
|
save 'cyrkaDescender.curly'
|
|
|
|
select-variant 'cyrka' 0x43A (follow -- 'K')
|
|
select-variant 'latinkappa' 0x138 (follow -- 'K')
|
|
select-variant 'cyrkaDescender' 0x49B (follow -- 'K')
|
|
|
|
define [KHookTopShape straightBar] : glyph-construction
|
|
include : KLegShape CAP straightBar
|
|
include : VBarLeft (SB + [KBalance straightBar]) 0 (CAP - HOOK - HALFSTROKE)
|
|
include : VerticalHook (SB + [KBalance straightBar] + HALFSTROKE * HVCONTRAST) (CAP - HOOK - HALFSTROKE) HOOKX (-HOOK)
|
|
sketch # Khooktop
|
|
include markset.capital
|
|
include : KHookTopShape true
|
|
save 'Khooktop.straight'
|
|
sketch # Khooktop
|
|
include markset.capital
|
|
include : KHookTopShape false
|
|
save 'Khooktop.curly'
|
|
select-variant 'Khooktop' 0x198 (follow -- 'K')
|
|
|
|
define [LowerKHookTopShape straightBar] : glyph-construction
|
|
include : KLegShape XH straightBar
|
|
include : VBarLeft (SB + [KBalance straightBar]) 0 (CAP - HOOK - HALFSTROKE)
|
|
include : VerticalHook (SB + [KBalance straightBar] + HALFSTROKE * HVCONTRAST) (CAP - HOOK - HALFSTROKE) HOOKX (-HOOK)
|
|
sketch # khooktop.straight
|
|
include markset.b
|
|
include : LowerKHookTopShape true
|
|
save 'khooktop.straight'
|
|
sketch # khooktop.curly
|
|
include markset.b
|
|
include : LowerKHookTopShape true
|
|
save 'khooktop.curly'
|
|
select-variant 'khooktop' 0x199 (follow -- 'K')
|
|
|
|
turned 'turnK.straight' nothing 'K.straight' MIDDLE (CAP / 2)
|
|
turned 'turnK.curly' nothing 'K.curly' MIDDLE (CAP / 2)
|
|
select-variant 'turnK' 0xA7B0 (follow -- 'K')
|
|
|
|
turned 'turnk.straight' nothing 'k.straight' MIDDLE (XH / 2) markset.p
|
|
turned 'turnk.curly' nothing 'k.curly' MIDDLE (XH / 2) markset.p
|
|
turned 'turnk.cursive' nothing 'k.cursive' MIDDLE (XH / 2) markset.p
|
|
select-variant 'turnk' 0x29E (follow -- 'k')
|
|
|
|
### B
|
|
do "B and related ============================================================================="
|
|
define [BShape top] : glyph-construction
|
|
local stroke : adviceBlackness2 2.875 2 XH
|
|
local bowl : top * 0.52 + stroke / 2
|
|
local barleft SB
|
|
local curvleft : RIGHTSB - SB * 0.5 - (top - (bowl - stroke)) * 0.45
|
|
local curvleftTop : Math.min curvleft (RIGHTSB - SB * 0.5 - OX - stroke * 1.375)
|
|
local fine : stroke * CTHIN
|
|
|
|
include : dispiro
|
|
widths.rhs stroke
|
|
flat (barleft - O) top [heading RIGHTWARD]
|
|
curl (curvleftTop - CORRECTION_OMIDS) top
|
|
archv
|
|
g4 (RIGHTSB - SB * 0.5 - OX * 2) [mix top (bowl - stroke) (SMOOTHB / (SMOOTHA + SMOOTHB))]
|
|
arcvh
|
|
flat (curvleftTop + CORRECTION_OMIDS) (bowl - fine) [widths.rhs fine]
|
|
curl (barleft - O) (bowl - fine) [heading LEFTWARD]
|
|
include : dispiro
|
|
widths.rhs fine
|
|
flat (barleft - O) (bowl - stroke + fine) [heading RIGHTWARD]
|
|
curl (curvleft - CORRECTION_OMIDS) (bowl - stroke + fine)
|
|
archv
|
|
g4 (RIGHTSB - OX * 2) [mix bowl 0 (SMOOTHB / (SMOOTHA + SMOOTHB))] [widths.rhs stroke]
|
|
arcvh
|
|
flat (curvleft + CORRECTION_OMIDS) 0
|
|
curl (barleft - O) 0 [heading LEFTWARD]
|
|
include : VBarLeft barleft 0 top stroke
|
|
if SLAB : begin
|
|
include : LeftwardTopSerif barleft top SIDEJUT
|
|
tag-contour 'serifLT'
|
|
include : LeftwardBottomSerif barleft 0 SIDEJUT
|
|
tag-contour 'serifLB'
|
|
|
|
sketch # B
|
|
set-width WIDTH
|
|
include markset.capital
|
|
include : BShape CAP
|
|
save 'B' 'B'
|
|
save 'Beta' 0x392
|
|
save 'cyrVe' 0x412
|
|
|
|
sketch # Bhookleft
|
|
include glyphs.B AS_BASE
|
|
eject-contour "serifLT"
|
|
include : LeftHook SB CAP
|
|
|
|
save 'Bhookleft' 0x181
|
|
|
|
define [ItalicCyrveShape top] : glyph-construction
|
|
local stroke : adviceBlackness2 2.875 2 top
|
|
local mid : mix RIGHTSB SB 0.65
|
|
local midy : top * BARPOS
|
|
local smb : top - [mix (midy + stroke / 2) (top - O - stroke) (SMOOTHA / (SMOOTHA + SMOOTHB))] + TANSLANT * HVCONTRAST * stroke
|
|
local sma : [mix (stroke + O) (midy - stroke / 2) (SMOOTHA / (SMOOTHA + SMOOTHB))] - TANSLANT * HVCONTRAST * stroke
|
|
include : dispiro
|
|
widths.lhs
|
|
flat mid (midy - stroke / 2) [heading RIGHTWARD]
|
|
curl MIDDLE (midy - stroke / 2)
|
|
archv
|
|
g4 (RIGHTSB + O) (top - smb)
|
|
arcvh
|
|
g4 (MIDDLE - CORRECTION_OMIDS) (top - O)
|
|
archv
|
|
flat.ai (SB + O) (top - SMALLSMOOTHA)
|
|
curl.ai (SB + O) SMALLSMOOTHB
|
|
arcvh
|
|
g4 (MIDDLE + CORRECTION_OMIDS) O
|
|
archv
|
|
g4 (RIGHTSB - O) (sma)
|
|
arcvh
|
|
flat MIDDLE (midy + stroke / 2)
|
|
curl mid (midy + stroke / 2) [heading LEFTWARD]
|
|
sketch # cyrve.italic
|
|
include markset.e
|
|
include : ItalicCyrveShape XH
|
|
save 'cyrve.italic'
|
|
save 'closeturnepsilon' 0x25E
|
|
sketch # cyrve.BGR
|
|
include markset.e
|
|
include : ItalicCyrveShape CAP
|
|
save 'cyrve.BGR'
|
|
sketch # cyrve.upright
|
|
include markset.e
|
|
include : BShape XH
|
|
save 'cyrve.upright'
|
|
save 'smcpB' 0x299
|
|
italic-variant 'cyrve' 0x432
|
|
|
|
sketch # Bbar
|
|
|
|
include glyphs.B AS_BASE
|
|
include : HOverlayBar [mix SB 0 0.7] [mix SB RIGHTSB 0.5] [mix 0 CAP 0.3] [Math.min ((CAP - STROKE * 3) / 4) OVERLAYSTROKE]
|
|
save 'Bbar' 0x243
|
|
|
|
sketch # beta
|
|
include markset.if
|
|
local ymiddle : [mix 0 CAP 0.55] - HALFSTROKE
|
|
local fine : STROKE * CTHIN
|
|
include : dispiro
|
|
widths.rhs
|
|
flat SB DESCENDER [heading UPWARD]
|
|
curl SB (CAP - SMALLSMOOTHA)
|
|
arcvh
|
|
g4 ([mix SB (RIGHTSB - OX + O * 3) 0.5] - CORRECTION_OMIDS) CAPO
|
|
archv
|
|
g4 (RIGHTSB - OX + O * 3) [mix CAP ymiddle 0.5]
|
|
arcvh
|
|
flat [mix SB (RIGHTSB - OX + O * 3) 0.5] (ymiddle + STROKE - fine) [widths.rhs fine]
|
|
curl [mix SB RIGHTSB 0.3] (ymiddle + STROKE - fine)
|
|
include : dispiro
|
|
widths.rhs fine
|
|
flat ([mix SB RIGHTSB 0.3] - (2 * fine - STROKE) * TANSLANT) (ymiddle + fine)
|
|
curl (RIGHTSB - ymiddle / 2 - HALFSTROKE) (ymiddle + fine)
|
|
archv
|
|
g4 (RIGHTSB - OX) [mix 0 (ymiddle + STROKE) 0.5] [widths.rhs]
|
|
arcvh
|
|
flat (RIGHTSB - ymiddle / 2 - HALFSTROKE) 0
|
|
curl (SB + HALFSTROKE) 0 [heading LEFTWARD]
|
|
save 'beta' 0x3B2
|
|
|
|
### b
|
|
do "b and related ============================================================================="
|
|
sketch # b
|
|
set-width WIDTH
|
|
include markset.b
|
|
|
|
include : OBarLeftShape
|
|
include : VBarLeft SB 0 CAP
|
|
if SLAB : begin
|
|
include : LeftwardTopSerif SB CAP SIDEJUT
|
|
tag-contour 'serifLT'
|
|
include : LeftwardBottomSerif SB 0 SIDEJUT
|
|
tag-contour 'serifLB'
|
|
|
|
save 'b' 'b'
|
|
|
|
sketch # bhooktop
|
|
include markset.b
|
|
include : OBarLeftShape
|
|
include : HooktopLeftBar
|
|
if SLAB : begin
|
|
include : LeftwardBottomSerif SB 0 SIDEJUT
|
|
tag-contour 'serifLB'
|
|
|
|
|
|
save 'bhooktop' 0x253
|
|
|
|
sketch # bbar
|
|
include glyphs.b AS_BASE
|
|
include : HOverlayBar [mix SB 0 0.7] [mix SB RIGHTSB 0.5] [mix XH CAP 0.45]
|
|
save 'bbar' 0x180
|
|
|
|
sketch # bdot
|
|
include glyphs.dotAbove
|
|
apply-transform : Translate (WIDTH + HALFSTROKE) 0
|
|
include glyphs.b AS_BASE
|
|
save 'bdot' 0x1E03
|
|
|
|
sketch # latinbe
|
|
include glyphs.b AS_BASE
|
|
include : HBarTop (SB - O) [mix SB RIGHTSB 0.9] CAP
|
|
if SLAB : begin
|
|
include : DownwardRightSerif [mix SB RIGHTSB 0.9] CAP VJUT
|
|
save 'latinbe' 0x183
|
|
|
|
sketch # zhuangtonesix
|
|
include glyphs.b AS_BASE
|
|
eject-contour 'serifLT'
|
|
local s : Math.max (XH * 0.1) STROKE
|
|
start-from (SB - O) CAP
|
|
line-to SB CAP
|
|
line-to (SB - s) (CAP - s)
|
|
line-to SB (CAP - s * 2)
|
|
line-to (SB - O) (CAP - s * 2)
|
|
reverse-last
|
|
save 'zhuangtonesix' 0x185
|
|
|
|
### D
|
|
do "D and related ============================================================================="
|
|
sketch # D
|
|
set-width WIDTH
|
|
include markset.capital
|
|
|
|
local dsmooth : Math.min (CAP * 0.499) (SMOOTH * 1.35)
|
|
local bsmooth : Math.min ((WIDTH - SB * 2) * 0.75) (SMOOTH * 1.1)
|
|
|
|
local barleft SB
|
|
|
|
include : VBarLeft barleft 0 CAP
|
|
|
|
include : dispiro
|
|
widths.rhs
|
|
flat (barleft - O) CAP [heading RIGHTWARD]
|
|
curl (RIGHTSB - bsmooth) CAP
|
|
archv
|
|
flat (RIGHTSB - OX) (CAP - dsmooth - (SMOOTHB - SMOOTH))
|
|
curl (RIGHTSB - OX) (dsmooth + (SMOOTHA - SMOOTH))
|
|
arcvh
|
|
flat (RIGHTSB - bsmooth) 0
|
|
curl (barleft - O) 0 [heading LEFTWARD]
|
|
if SLAB : begin
|
|
include : LeftwardTopSerif barleft CAP SIDEJUT
|
|
tag-contour 'serifLT'
|
|
include : LeftwardBottomSerif barleft 0 SIDEJUT
|
|
tag-contour 'serifLB'
|
|
save 'D' 'D'
|
|
|
|
sketch # arficanD
|
|
include glyphs.D AS_BASE
|
|
include : HOverlayBar (SB * 0.3) [mix (SB + STROKE) (RIGHTSB - STROKE) 0.55] (CAP * OVERLAYPOS)
|
|
save 'Eth' 0xD0
|
|
save 'Dcroat' 0x110
|
|
save 'arficanD' 0x189
|
|
|
|
sketch # Dhookleft
|
|
include glyphs.D AS_BASE
|
|
eject-contour "serifLT"
|
|
include : LeftHook SB CAP
|
|
save 'Dhookleft' 0x18A
|
|
|
|
### d
|
|
do "d and related ============================================================================="
|
|
sketch # d
|
|
set-width WIDTH
|
|
include markset.b
|
|
|
|
include : OBarRightShape
|
|
include : VBarRight RIGHTSB 0 CAP
|
|
if SLAB : begin
|
|
include : RightwardBottomSerif RIGHTSB 0 SIDEJUT
|
|
tag-contour 'serifRB'
|
|
include : LeftwardTopSerif (RIGHTSB - STROKE * HVCONTRAST) CAP SIDEJUT
|
|
|
|
save 'd' 'd'
|
|
|
|
sketch # dcroat
|
|
include glyphs.d AS_BASE
|
|
include : HBar [mix (SB + STROKE) (RIGHTSB - STROKE) 0.5] [mix RIGHTSB WIDTH 0.7] [mix XH CAP 0.45] OVERLAYSTROKE
|
|
|
|
save 'dcroat' 0x111
|
|
|
|
sketch # dcaron
|
|
include glyphs.commaAbove
|
|
apply-transform : Translate (WIDTH + (RIGHTSB - SB) / 2 + markExtend / 2) 0
|
|
local f : Widen {'d'} 0.95 1
|
|
include f.d
|
|
include markset.b
|
|
|
|
save 'dcaron' 0x10F
|
|
|
|
sketch # dcurlytail
|
|
local fine : adviceBlackness 4
|
|
local rinner : clamp (WIDTH * 0.065) (XH * 0.05) (fine * 0.35)
|
|
local wide STROKE
|
|
local m1 : Math.min RIGHTSB (WIDTH - rinner * 2 - fine - OX)
|
|
local x2 : mix SB m1 0.5
|
|
local y2 : 0 - fine - rinner * 1.25
|
|
include markset.e
|
|
include : OBarRightShape XH m1
|
|
include : dispiro
|
|
widths.rhs
|
|
flat m1 CAP [heading DOWNWARD]
|
|
curl m1 (rinner * 2 + fine)
|
|
CurlyTail fine rinner m1 0 (m1 + rinner * 2 + fine) x2 y2
|
|
if SLAB : begin
|
|
include : LeftwardTopSerif (m1 - STROKE * HVCONTRAST) CAP SIDEJUT
|
|
|
|
save 'dcurlytail' 0x221
|
|
|
|
sketch # dhooktop
|
|
include markset.b
|
|
include : OBarRightShape
|
|
include : VBarRight RIGHTSB 0 XH
|
|
include : RightwardBottomSerif RIGHTSB 0 SIDEJUT
|
|
tag-contour 'serifRB'
|
|
include : VerticalHook (RIGHTSB - HALFSTROKE * HVCONTRAST) XH HOOKX (-HOOK)
|
|
|
|
save 'dhooktop' 0x257
|
|
|
|
sketch # ddot
|
|
include glyphs.dotAbove
|
|
apply-transform : Translate (WIDTH - HALFSTROKE) 0
|
|
include glyphs.d AS_BASE
|
|
save 'ddot' 0x1E0B
|
|
|
|
sketch # latinde
|
|
include glyphs.d AS_BASE
|
|
include : HBarTop [mix RIGHTSB SB 0.9] (RIGHTSB + O) CAP
|
|
if SLAB : begin
|
|
include : DownwardLeftSerif [mix RIGHTSB SB 0.9] CAP VJUT
|
|
save 'latinde' 0x18C
|
|
|
|
### P
|
|
define { PShape PShapeOutline } : do "P and related =========================================="
|
|
define [PShapeOutlineKnots top mul bp overshoot sw offset] : begin
|
|
local bowlTop (top * 1 - offset)
|
|
local bowlBottom ((top - sw) * bp - sw / 2 + offset)
|
|
local turn : mix bowlTop bowlBottom (SMOOTHB / (SMOOTHA + SMOOTHB))
|
|
local turnRadius : (bowlTop - bowlBottom) * 0.45
|
|
local right : RIGHTSB - offset
|
|
|
|
list
|
|
flat (SB * mul - O) bowlTop [heading RIGHTWARD]
|
|
curl (right - turnRadius - CORRECTION_OMIDS) bowlTop
|
|
archv
|
|
g4 (right - overshoot) turn
|
|
arcvh
|
|
flat (right - turnRadius + CORRECTION_OMIDS) bowlBottom
|
|
curl (SB * mul - O) bowlBottom [heading LEFTWARD]
|
|
|
|
define [PShapeOutline] : params [top [mul PShape.defaultMul] [bp BARPOS] [overshoot PShape.defaultOvershoot] [sw STROKE] [offset 0]] : glyph-construction
|
|
include : spiro-outline
|
|
PShapeOutlineKnots top mul bp overshoot sw offset
|
|
|
|
define [PShape] : params [top [mul PShape.defaultMul] [bp BARPOS] [overshoot PShape.defaultOvershoot] [sw STROKE] [slab SLAB]] : glyph-construction
|
|
include : dispiro
|
|
widths.rhs sw
|
|
PShapeOutlineKnots top mul bp overshoot sw 0
|
|
include : VBarLeft (SB * mul) 0 top sw
|
|
tag-contour 'strokeL'
|
|
|
|
if slab : begin
|
|
include : LeftwardTopSerif (SB * mul) top SIDEJUT sw
|
|
tag-contour 'serifLT'
|
|
include : CenterBottomSerif (SB * mul + HALFSTROKE * HVCONTRAST) 0 JUT sw
|
|
|
|
set PShape.defaultMul 1.25
|
|
set PShape.defaultOvershoot (OX * 2)
|
|
|
|
sketch # P
|
|
set-width WIDTH
|
|
include markset.capital
|
|
include : PShape CAP
|
|
save 'P' 'P'
|
|
save 'Rho' 0x3A1
|
|
save 'cyrEr' 0x420
|
|
|
|
sketch # Phookleft
|
|
include glyphs.P AS_BASE
|
|
eject-contour "serifLT"
|
|
include : LeftHook (SB * 1.25) CAP
|
|
|
|
save 'Phookleft' 0x1A4
|
|
|
|
list PShape PShapeOutline
|
|
|
|
### p
|
|
do "p and related ============================================================================="
|
|
sketch # p
|
|
set-width WIDTH
|
|
include markset.p
|
|
|
|
include : tagged 'bowl' : OBarLeftShape
|
|
include : VBarLeft SB DESCENDER XH
|
|
if SLAB : begin
|
|
include : LeftwardTopSerif SB XH SIDEJUT
|
|
tag-contour 'serifLT'
|
|
include : CenterBottomSerif (SB + HALFSTROKE * HVCONTRAST) DESCENDER JUT
|
|
tag-contour 'serifLB'
|
|
set-anchor 'overlay' BASE MIDDLE (XH / 2)
|
|
save 'p' 'p'
|
|
save 'cyrer' 0x440
|
|
|
|
sketch # phooktop
|
|
include markset.if
|
|
include : OBarLeftShape
|
|
include : HooktopLeftBar nothing DESCENDER
|
|
if SLAB : begin
|
|
include : CenterBottomSerif (SB + HALFSTROKE * HVCONTRAST) DESCENDER JUT
|
|
tag-contour 'serifLB'
|
|
|
|
save 'phooktop' 0x1A5
|
|
### rho
|
|
sketch # rho
|
|
include markset.p
|
|
include : OShape XH 0 (SB - OX + O) RIGHTSB
|
|
include : VBar (SB + HALFSTROKE * HVCONTRAST + O) DESCENDER SMALLSMOOTHB
|
|
save 'rho' 0x3C1
|
|
|
|
### R and CyrYa
|
|
define { RLegShape RLegTerminalX } : do "R and related ====================================="
|
|
define [RLegTerminalX straight right sw] : right - [if straight (OX * 2) 0] - sw / 2 * HVCONTRAST
|
|
define [RLegShape right bottom top charTop slab straight sw extraShift] : glyph-construction
|
|
local xRightBottom : RLegTerminalX straight right sw
|
|
if straight : do
|
|
local shift : if slab (-JUT / 2 + 0.25 * sw * HVCONTRAST) 0
|
|
include : dispiro
|
|
widths.center (sw * [diagCor charTop (WIDTH - extraShift * 2) 0 (sw * 2)])
|
|
corner (MIDDLE + extraShift + shift / 2) top [heading DOWNWARD]
|
|
corner (xRightBottom + shift) bottom [heading DOWNWARD]
|
|
if slab : begin
|
|
include : RightwardBottomSerif (xRightBottom + shift + 0.25 * sw * HVCONTRAST) bottom (SIDEJUT + JUT / 8)
|
|
: else : begin
|
|
include : dispiro
|
|
widths.center sw
|
|
g4.up.start xRightBottom bottom [heading UPWARD]
|
|
quadcontrols 0 [if slab 0.3 0.4] 8
|
|
g4 MIDDLE top
|
|
if slab : begin
|
|
include : RightwardBottomSerif right bottom (SIDEJUT + JUT / 8)
|
|
|
|
define [RBarPos slab] : if slab (0.5 + HALFSTROKE / CAP) BARPOS
|
|
define [RShape] : params [straightBar top [slab SLAB]] : glyph-construction
|
|
include : PShape top (mul -- 1) (bp -- [RBarPos slab]) (overshoot -- O) (slab -- slab)
|
|
local right (RIGHTSB - O - [if SLAB (JUT / 8) 0])
|
|
include : RLegShape right 0 ((top - STROKE) * [RBarPos slab]) top SLAB straightBar STROKE 0
|
|
|
|
sketch # R
|
|
include markset.capital
|
|
branch
|
|
include : RShape true CAP
|
|
set-anchor 'overlay' BASE (SB + STROKE * HVCONTRAST) (CAP * [RBarPos SLAB] - HALFSTROKE)
|
|
save 'R.straight'
|
|
branch
|
|
include : RShape true CAP (slab -- false)
|
|
set-anchor 'overlay' BASE (SB + STROKE * HVCONTRAST) (CAP * [RBarPos 0] - HALFSTROKE)
|
|
eject-contour 'strokeL'
|
|
save 'Rrotunda.straight'
|
|
branch
|
|
include : RShape false CAP
|
|
set-anchor 'overlay' BASE (SB + STROKE * HVCONTRAST) (CAP * [RBarPos SLAB] - HALFSTROKE)
|
|
save 'R.curly'
|
|
branch
|
|
include : RShape false CAP (slab -- false)
|
|
set-anchor 'overlay' BASE (SB + STROKE * HVCONTRAST) (CAP * [RBarPos 0] - HALFSTROKE)
|
|
eject-contour 'strokeL'
|
|
save 'Rrotunda.curly'
|
|
|
|
sketch # smcpR
|
|
include markset.e
|
|
branch
|
|
include : RShape true XH
|
|
save 'smcpR.straight'
|
|
branch
|
|
include : RShape true XH (slab -- false)
|
|
eject-contour 'strokeL'
|
|
save 'rrotunda.straight'
|
|
branch
|
|
include : RShape false XH
|
|
save 'smcpR.curly'
|
|
branch
|
|
include : RShape false XH (slab -- false)
|
|
eject-contour 'strokeL'
|
|
save 'rrotunda.curly'
|
|
|
|
select-variant 'R' 'R'
|
|
select-variant 'Rrotunda' 0xA75A (follow -- 'R')
|
|
select-variant 'smcpR' 0x280 (follow -- 'R')
|
|
select-variant 'rrotunda' 0xA75B (follow -- 'R')
|
|
|
|
sketch # Yr
|
|
include markset.if
|
|
local top : CAP * 0.85
|
|
local bp 0.45
|
|
include : PShape top (mul -- 1) (bp -- bp)
|
|
include : VBarLeft SB (top - 1) CAP
|
|
|
|
local right (RIGHTSB - O - [if SLAB (JUT / 8) 0])
|
|
branch
|
|
include : RLegShape right DESCENDER ((top - STROKE) * bp) (top - DESCENDER) SLAB true STROKE 0
|
|
save 'Yr.straight'
|
|
branch
|
|
include : RLegShape right DESCENDER ((top - STROKE) * bp) (top - DESCENDER) SLAB false STROKE 0
|
|
save 'Yr.curly'
|
|
|
|
select-variant 'Yr' 0x1A6 (follow -- 'R')
|
|
|
|
define [CyrYaShape straightBar top] : glyph-construction
|
|
local bowlTop (top * 1)
|
|
local bowlBottom ((top - STROKE) * [RBarPos SLAB] - HALFSTROKE)
|
|
local turn : mix bowlTop bowlBottom (SMOOTHA / (SMOOTHA + SMOOTHB))
|
|
local turnRadius : (bowlTop - bowlBottom) * 0.45
|
|
local barright : WIDTH - SB * 1.25
|
|
include : dispiro
|
|
widths.lhs
|
|
flat (barright - HALFSTROKE * 0.1) bowlTop [heading LEFTWARD]
|
|
curl (SB + turnRadius - CORRECTION_OMIDS) bowlTop
|
|
archv
|
|
g4 (SB + O) turn
|
|
arcvh
|
|
flat (SB + turnRadius + CORRECTION_OMIDS) bowlBottom
|
|
curl (barright - HALFSTROKE * 0.1) bowlBottom [heading RIGHTWARD]
|
|
include : VBarRight barright 0 top
|
|
local left (SB + O + [if SLAB (JUT / 8) 0])
|
|
|
|
if straightBar : then : include : dispiro
|
|
widths.center (STROKE * [diagCor top (WIDTH - STROKE * 2)])
|
|
corner MIDDLE ((top - STROKE) * [RBarPos SLAB]) [heading DOWNWARD]
|
|
corner (left + OX * 2 + HALFSTROKE * HVCONTRAST) 0 [heading DOWNWARD]
|
|
: else : include : dispiro
|
|
widths.center
|
|
g4.up.start (left + HALFSTROKE * HVCONTRAST) 0 [heading UPWARD]
|
|
quadcontrols 0 [if SLAB 0.3 0.4] 8
|
|
g4 MIDDLE ((top - STROKE) * [RBarPos SLAB])
|
|
|
|
if SLAB : begin
|
|
include : RightwardTopSerif barright top SIDEJUT
|
|
include : CenterBottomSerif (barright - HALFSTROKE * HVCONTRAST) 0 JUT
|
|
include : LeftwardBottomSerif (SB + JUT / 8) 0 (SIDEJUT + JUT / 8)
|
|
|
|
sketch # cyrYa
|
|
include markset.capital
|
|
branch
|
|
include : CyrYaShape true CAP
|
|
save 'cyrYa.straight'
|
|
branch
|
|
include : CyrYaShape false CAP
|
|
save 'cyrYa.curly'
|
|
sketch # cyrya
|
|
include markset.e
|
|
branch
|
|
include : CyrYaShape true XH
|
|
save 'cyrya.straight'
|
|
branch
|
|
include : CyrYaShape false XH
|
|
save 'cyrya.curly'
|
|
|
|
select-variant 'cyrYa' 0x42F (follow -- 'R')
|
|
select-variant 'cyrya' 0x44F (follow -- 'R')
|
|
|
|
turned 'invsmcpR.straight' nothing 'cyrya.straight' MIDDLE (XH / 2)
|
|
turned 'invsmcpR.curly' nothing 'cyrya.curly' MIDDLE (XH / 2)
|
|
select-variant 'invsmcpR' 0x281 (follow -- 'R')
|
|
|
|
list RLegShape RLegTerminalX
|
|
|
|
### r
|
|
do "r and related ============================================================================="
|
|
local dfR : DivFrame para.diversityF
|
|
local rStraight 0
|
|
local rSerifed 1
|
|
local rNarrow 2
|
|
|
|
define [RDim mode] : begin
|
|
local rBalanceMultiplier : match mode [0 1] [1 (4 / 3)] [2 (1 / 2)]
|
|
local rHookMultiplier : match mode [0 1] [1 (2 / 3)] [2 1]
|
|
local rHookSwMultiplier : match mode [0 0] [1 (1 / 4)] [2 0]
|
|
local rSerifLeftExtender : match mode [0 0] [1 (1 / 3)] [2 0]
|
|
local hookSuperness : match mode [0 2.35] [1 2.75] [2 2.35]
|
|
|
|
local rbar : SB + RBALANCE * rBalanceMultiplier + STROKE * HVCONTRAST
|
|
local rSerifX : rbar - HALFSTROKE * HVCONTRAST
|
|
local rSerifLeftJut : SIDEJUT + RBALANCE * (0.3 + rSerifLeftExtender)
|
|
local rSerifRightJut : rSerifLeftJut * 1.20
|
|
local [rBottomSerif y] : tagged 'serifLB' : union
|
|
LeftwardBottomSerif rSerifX y (rSerifLeftJut + HALFSTROKE * HVCONTRAST)
|
|
RightwardBottomSerif rSerifX y (rSerifRightJut + HALFSTROKE * HVCONTRAST)
|
|
local [rTopSerif y] : tagged 'serifLT'
|
|
LeftwardTopSerif rSerifX y (rSerifLeftJut + HALFSTROKE * HVCONTRAST)
|
|
local fine : SHOULDERFINE * CTHIN
|
|
local rHookX (dfR.rightSB + RBALANCE2 * rBalanceMultiplier - OXE)
|
|
local rmiddle : match mode
|
|
0 : mix (rbar - fine) rHookX (0.54 + 2 * TANSLANT * STROKE / WIDTH)
|
|
1 : mix (rbar - fine) rHookX (0.59 + 2 * TANSLANT * STROKE / WIDTH)
|
|
2 : mix rHookX dfR.width (3 / 8)
|
|
local mixpin : match mode
|
|
0 : 0.65 + 4 * TANSLANT * STROKE / WIDTH
|
|
1 : 0.65 + 0.25 * STROKE / WIDTH + 4 * TANSLANT * STROKE / WIDTH
|
|
2 : 0.65 + 4 * TANSLANT * STROKE / WIDTH
|
|
local rmiddlein : [mix rbar (rHookX - STROKE * HVCONTRAST * 1.05) mixpin] - CORRECTION_OMIDS
|
|
local skew : Math.max 0 : (rmiddle - rmiddlein) / STROKE
|
|
local rHookY : RHOOK * rHookMultiplier + STROKE * rHookSwMultiplier
|
|
return : object rbar rBottomSerif rTopSerif fine rmiddle skew rHookX rHookY hookSuperness
|
|
|
|
define [StandardLowerRShape df md doTopSerif doBottomSerif] : glyph-construction
|
|
define [object rbar rBottomSerif rTopSerif fine rmiddle skew rHookX rHookY hookSuperness] : RDim md
|
|
include : dispiro
|
|
widths.lhs
|
|
g4.up.start rHookX (XH - rHookY - STROKE * 0.5) [heading UPWARD]
|
|
arcvh nothing hookSuperness
|
|
g4.left.mid (rmiddle - CORRECTION_OMIDS * [linreg 72 0.75 108 1 STROKE]) XO [widths.heading STROKE 0 {.y (-1) .x (-skew)}]
|
|
archv
|
|
straight.down.end (rbar - fine * HVCONTRAST) (XH * 0.53 + (SMALLSMOOTH - SMALLSMOOTHA)) [widths.heading fine 0 DOWNWARD]
|
|
include : VBarRight rbar 0 XH
|
|
set-anchor 'overlay' BASE (rbar - STROKE * 0.25) (XH * 0.5)
|
|
if doBottomSerif : include : rBottomSerif 0
|
|
if doTopSerif : include : rTopSerif XH
|
|
|
|
define [NarrowLowerRshape df md doTopSerif doBottomSerif] : glyph-construction
|
|
define [object rbar fine rmiddle] : RDim rNarrow
|
|
include : dispiro
|
|
widths.lhs
|
|
g4.left.mid (rmiddle - CORRECTION_OMIDS * [linreg 72 0.75 108 1 STROKE]) XO
|
|
archv
|
|
straight.down.end (rbar - fine * HVCONTRAST) (XH * 0.53 + (SMALLSMOOTH - SMALLSMOOTHA)) [widths.heading fine 0 DOWNWARD]
|
|
include : VBarRight rbar 0 XH
|
|
set-anchor 'overlay' BASE (rbar - STROKE * 0.25) (XH * 0.5)
|
|
|
|
sketch
|
|
set-width dfR.width
|
|
include dfR.markSet.e
|
|
branch
|
|
include : StandardLowerRShape dfR rStraight 0 0
|
|
save "r.straight"
|
|
branch
|
|
include : StandardLowerRShape dfR rSerifed 1 1
|
|
save "r.serifed"
|
|
branch
|
|
include : StandardLowerRShape dfR rSerifed 1 0
|
|
save "r.top-serifed"
|
|
|
|
sketch # r.narrow
|
|
set-width dfR.width
|
|
include dfR.markSet.e
|
|
include : NarrowLowerRshape dfR rNarrow 0 0
|
|
save 'r.narrow'
|
|
|
|
select-variant 'r' 'r'
|
|
|
|
do
|
|
define [marks] : compsiteMarkSet dfR.markSet.e {.anchors {.bottomright {.type BASE .x dfR.rightSB - RBALANCE .y 0}}}
|
|
turned 'turnr.straight' nothing 'r.straight' dfR.middle (XH / 2) [marks]
|
|
turned 'turnr.serifed' nothing 'r.serifed' dfR.middle (XH / 2) [marks]
|
|
turned 'turnr.top-serifed' nothing 'r.top-serifed' dfR.middle (XH / 2) [marks]
|
|
turned 'turnr.narrow' nothing 'r.narrow' dfR.middle (XH / 2) [marks]
|
|
select-variant 'turnr' 0x279 (follow -- 'r')
|
|
|
|
do
|
|
define [SmallRLongLegShape F mode doTopSerif] : glyph-construction
|
|
define [object rbar rBottomSerif] : RDim mode
|
|
include : F dfR mode doTopSerif 0
|
|
eject-contour 'serifLB'
|
|
include : VBarRight rbar DESCENDER 0
|
|
if SLAB : include : rBottomSerif DESCENDER
|
|
|
|
sketch # rlongleg.standard
|
|
set-width dfR.width
|
|
include dfR.markSet.p
|
|
branch
|
|
include : SmallRLongLegShape StandardLowerRShape rStraight 0
|
|
save 'rlongleg.straight'
|
|
branch
|
|
include : SmallRLongLegShape StandardLowerRShape rSerifed 1
|
|
save 'rlongleg.serifed'
|
|
branch
|
|
include : SmallRLongLegShape StandardLowerRShape rSerifed 1
|
|
save 'rlongleg.top-serifed'
|
|
branch
|
|
include : SmallRLongLegShape NarrowLowerRshape rNarrow 0
|
|
save 'rlongleg.narrow'
|
|
|
|
select-variant 'rlongleg' 0x27C (follow -- 'r')
|
|
|
|
do
|
|
local [marks] : compsiteMarkSet dfR.markSet.b {.anchors {.bottomright {.type BASE .x dfR.rightSB - RBALANCE .y 0}}}
|
|
turned 'turnrlongleg.straight' nothing 'rlongleg.straight' dfR.middle (XH / 2) [marks]
|
|
turned 'turnrlongleg.serifed' nothing 'rlongleg.serifed' dfR.middle (XH / 2) [marks]
|
|
turned 'turnrlongleg.top-serifed' nothing 'rlongleg.top-serifed' dfR.middle (XH / 2) [marks]
|
|
turned 'turnrlongleg.narrow' nothing 'rlongleg.narrow' dfR.middle (XH / 2) [marks]
|
|
select-variant 'turnrlongleg' 0x27A (follow -- 'r')
|
|
|
|
do
|
|
define [SmallRRTailShape F mode doTopSerif] : glyph-construction
|
|
define [object rbar] : RDim mode
|
|
include : F dfR mode doTopSerif 0
|
|
eject-contour 'serifLB'
|
|
include : create-glyph : glyph-construction
|
|
include glyphs.rtailBR
|
|
apply-transform : Upright
|
|
apply-transform : Translate rbar 0
|
|
apply-transform : Italify
|
|
sketch # rrtail
|
|
set-width dfR.width
|
|
include dfR.markSet.p
|
|
branch
|
|
include : SmallRRTailShape StandardLowerRShape rStraight 0
|
|
save 'rrtail.straight'
|
|
branch
|
|
include : SmallRRTailShape StandardLowerRShape rSerifed 1
|
|
save 'rrtail.serifed'
|
|
branch
|
|
include : SmallRRTailShape StandardLowerRShape rSerifed 1
|
|
save 'rrtail.top-serifed'
|
|
branch
|
|
include : SmallRRTailShape NarrowLowerRshape rNarrow 0
|
|
save 'rrtail.narrow'
|
|
select-variant 'rrtail' 0x27D (follow -- 'r')
|
|
|
|
do
|
|
turned 'smallLetterTurnedRWithTail.straight' nothing 'rrtail.straight' dfR.middle (XH / 2)
|
|
turned 'smallLetterTurnedRWithTail.serifed' nothing 'rrtail.serifed' dfR.middle (XH / 2)
|
|
turned 'smallLetterTurnedRWithTail.top-serifed' nothing 'rrtail.top-serifed' dfR.middle (XH / 2)
|
|
turned 'smallLetterTurnedRWithTail.narrow' nothing 'rrtail.narrow' dfR.middle (XH / 2)
|
|
select-variant 'smallLetterTurnedRWithTail' 0x2C79 (follow -- 'r')
|
|
|
|
do
|
|
define [TurnRRTailShape F mode] : glyph-construction
|
|
define [object rbar] : RDim mode
|
|
include : F dfR mode 0 0
|
|
eject-contour 'serifLT'
|
|
include : FlipAround dfR.middle (XH / 2)
|
|
include : create-glyph : glyph-construction
|
|
include glyphs.rtailBR
|
|
apply-transform : Upright
|
|
apply-transform : Translate (dfR.rightSB - rbar + dfR.leftSB + STROKE * HVCONTRAST) 0
|
|
apply-transform : Italify
|
|
sketch # turnrrtail
|
|
set-width dfR.width
|
|
include dfR.markSet.p
|
|
branch
|
|
include : TurnRRTailShape StandardLowerRShape rStraight
|
|
save 'turnrrtail.straight'
|
|
branch
|
|
include : TurnRRTailShape StandardLowerRShape rSerifed
|
|
save 'turnrrtail.serifed'
|
|
branch
|
|
include : TurnRRTailShape StandardLowerRShape rSerifed
|
|
save 'turnrrtail.top-serifed'
|
|
branch
|
|
include : TurnRRTailShape NarrowLowerRshape rNarrow
|
|
save 'turnrrtail.narrow'
|
|
|
|
select-variant 'turnrrtail' 0x27B (follow -- 'r')
|
|
|
|
sketch # rflap
|
|
set-width dfR.width
|
|
include dfR.markSet.e
|
|
define [object rbar rBottomSerif rHookY] : RDim rStraight
|
|
local rHookX (RIGHTSB + RBALANCE2 - OXE)
|
|
local rmiddle : [mix rbar (rHookX - HALFSTROKE) 0.5] - CORRECTION_OMIDS
|
|
|
|
include : dispiro
|
|
widths.lhs
|
|
g4 rHookX (XH - rHookY)
|
|
hookstart XO
|
|
flat (rbar - STROKE * HVCONTRAST) (XH - SMALLSMOOTHA)
|
|
curl (rbar - STROKE * HVCONTRAST) 0 [heading DOWNWARD]
|
|
|
|
branch
|
|
save 'rflap.straight'
|
|
save 'rflap.top-serifed'
|
|
branch
|
|
include : rBottomSerif 0
|
|
save 'rflap.serifed'
|
|
|
|
sketch # rflap.narrow
|
|
set-width dfR.width
|
|
include dfR.markSet.e
|
|
define [object rbar rBottomSerif rmiddle] : RDim rNarrow
|
|
|
|
include : dispiro
|
|
widths.lhs
|
|
g4.left.start (rmiddle - CORRECTION_OMIDS * [linreg 72 0.75 108 1 STROKE]) XO
|
|
archv
|
|
flat (rbar - STROKE * HVCONTRAST) (XH - SMALLSMOOTHA)
|
|
curl (rbar - STROKE * HVCONTRAST) 0 [heading DOWNWARD]
|
|
if SLAB : include : rBottomSerif 0
|
|
save 'rflap.narrow'
|
|
|
|
select-variant 'rflap' 0x27E (follow -- 'r')
|
|
|
|
### C and c, also cyre
|
|
define {CShape CShapeOutline} : do "C, c nad related ========================================"
|
|
define [CShape top bot sw] : glyph-construction
|
|
include : dispiro
|
|
widths.lhs sw
|
|
g4 RIGHTSB (top - HOOK)
|
|
hookstart (top - O)
|
|
flat (SB + OX) (top - SMOOTHA)
|
|
curl (SB + OX) (bot + SMOOTHB)
|
|
hookend (bot + O)
|
|
g4 RIGHTSB (bot + HOOK)
|
|
|
|
define [CShapeOutline top bot _offset] : glyph-construction
|
|
define offset : fallback _offset 1
|
|
include : spiro-outline
|
|
g4 RIGHTSB (top - HOOK)
|
|
hookstart (top - O - offset)
|
|
flat (SB + OX + offset) (top - SMOOTHA)
|
|
curl (SB + OX + offset) (bot + SMOOTHB)
|
|
hookend (bot + O + offset)
|
|
g4 RIGHTSB (bot + HOOK)
|
|
|
|
sketch # C
|
|
set-width WIDTH
|
|
include markset.capital
|
|
include : CShape CAP 0
|
|
save 'C' 'C'
|
|
save 'cyrEs' 0x421
|
|
save 'lunateSigma' 0x3F9
|
|
|
|
sketch # c
|
|
set-width WIDTH
|
|
include markset.e
|
|
|
|
include : dispiro
|
|
widths.lhs
|
|
g4 RIGHTSB (XH - HOOK)
|
|
hookstart XO
|
|
flat.ai (SB + OX) (XH - SMALLSMOOTHA)
|
|
curl.ai (SB + OX) (0 + SMALLSMOOTHB)
|
|
hookend O
|
|
g4 RIGHTSB HOOK
|
|
save 'c' 'c'
|
|
save 'cyres' 0x441
|
|
save 'lunatesigma' 0x3F2
|
|
|
|
turned 'turnC' 0x186 'C' MIDDLE (CAP / 2)
|
|
turned 'turnc' 0x254 'c' MIDDLE (XH / 2)
|
|
composite glyphs.turnc [into-unicode 0x037B]
|
|
composite glyphs.turnC [into-unicode 0x03FD]
|
|
composite glyphs.c [DotAt (MIDDLE + HALFSTROKE / 4) (XH/2) DOTRADIUS] [into-unicode 0x037C]
|
|
composite glyphs.turnc [DotAt (MIDDLE - HALFSTROKE / 4) (XH/2) DOTRADIUS] [into-unicode 0x037D]
|
|
composite glyphs.C [DotAt (MIDDLE + HALFSTROKE / 4) (CAP/2) DOTRADIUS] [into-unicode 0x03FE]
|
|
composite glyphs.turnC [DotAt (MIDDLE - HALFSTROKE / 4) (CAP/2) DOTRADIUS] [into-unicode 0x03FF]
|
|
|
|
sketch # strenchedC
|
|
set-width WIDTH
|
|
include markset.p
|
|
include : CShape XH DESCENDER
|
|
|
|
save 'strenchedC' 0x297
|
|
|
|
sketch # Chooktop
|
|
include glyphs.C AS_BASE
|
|
include : VBarRight (RIGHTSB - OXHOOK) (CAP - HOOK) CAP
|
|
include : VerticalHook (RIGHTSB - HALFSTROKE * HVCONTRAST - OXHOOK) CAP HOOKX (-HOOK)
|
|
|
|
save 'Chooktop' 0x187
|
|
|
|
sketch # chooktop
|
|
include glyphs.c AS_BASE
|
|
include : VBarRight (RIGHTSB - OXHOOK) (XH - HOOK) XH
|
|
include : VerticalHook (RIGHTSB - HALFSTROKE * HVCONTRAST - OXHOOK) XH HOOKX (-HOOK)
|
|
|
|
save 'chooktop' 0x188
|
|
|
|
sketch # Cbar
|
|
include glyphs.C AS_BASE
|
|
include : HOverlayBar (SB * 0.3) [mix (SB + STROKE) (RIGHTSB - STROKE) 0.55] (CAP * OVERLAYPOS)
|
|
|
|
save 'Cbar' 0xA792
|
|
|
|
sketch # cbar
|
|
include glyphs.c AS_BASE
|
|
include : HOverlayBar (SB * 0.3) [mix (SB + STROKE) (RIGHTSB - STROKE) 0.55] (XH * OVERLAYPOS)
|
|
|
|
save 'cbar' 0xA793
|
|
|
|
sketch # ccurlytail
|
|
include markset.e
|
|
local stroke : adviceBlackness2 2.875 2 XH
|
|
local fine : adviceBlackness 3
|
|
local rinner : ((XH * 0.45) - fine * 1.5) / 2
|
|
local m1 : SB + O + stroke * HVCONTRAST
|
|
local x2 : SB + stroke * 0.3
|
|
local y2 : -XH * 0.05
|
|
include : dispiro
|
|
widths.lhs stroke
|
|
g4 RIGHTSB (XH - HOOK)
|
|
hookstart XH
|
|
flat.ai (SB + OX) (XH - SMALLSMOOTHA)
|
|
curl.ai (SB + OX) SMALLSMOOTHB
|
|
arcvh
|
|
CurlyTail fine rinner m1 0 RIGHTSB x2 y2
|
|
linreg 500 (0.5) 375 (-0.25) : Math.min WIDTH 500
|
|
begin nothing
|
|
linreg 500 (0) 375 (1) : Math.min WIDTH 500
|
|
|
|
save 'ccurlytail' 0x255
|
|
|
|
sketch # cyrE
|
|
include markset.capital
|
|
include glyphs.C
|
|
include : FlipAround MIDDLE (CAP / 2)
|
|
include : HBar [mix SB RIGHTSB 0.25] RIGHTSB (CAP / 2)
|
|
|
|
save 'cyrE' 0x42D
|
|
|
|
sketch # cyre
|
|
include markset.e
|
|
include glyphs.c
|
|
include : FlipAround MIDDLE (XH / 2)
|
|
include : HBar [mix SB RIGHTSB 0.25] RIGHTSB (XH / 2)
|
|
|
|
save 'cyre' 0x44D
|
|
|
|
sketch # cyrYe
|
|
include markset.capital
|
|
include glyphs.C
|
|
include : HBar SB [mix RIGHTSB SB 0.25] (CAP / 2) [adviceBlackness2 4 2 CAP]
|
|
|
|
save 'cyrYe' 0x404
|
|
|
|
sketch # cyrye
|
|
include markset.e
|
|
include glyphs.c
|
|
include : HBar SB [mix RIGHTSB SB 0.25] (XH / 2) [adviceBlackness2 4 2 XH]
|
|
|
|
save 'cyrye' 0x454
|
|
|
|
sketch # sigma
|
|
include markset.e
|
|
start-from (RIGHTSB + 0.25 * SB) XH
|
|
line-to (RIGHTSB + 0.25 * SB) (XH - STROKE)
|
|
line-to MIDDLE (XH - STROKE - O * 1.5)
|
|
line-to MIDDLE (XH - O)
|
|
include : dispiro
|
|
widths.lhs
|
|
flat (MIDDLE + 1) (XH - O)
|
|
curl MIDDLE (XH - O)
|
|
archv
|
|
flat.ai (SB + OX) (XH - SMALLSMOOTHA)
|
|
curl.ai (SB + OX) SMALLSMOOTHB
|
|
arcvh
|
|
g4 (MIDDLE + CORRECTION_OMIDS) O
|
|
archv
|
|
flat.ai (RIGHTSB - OX * 0.5) SMALLSMOOTHA
|
|
curl.ai (RIGHTSB - OX * 0.5) (XH - SMALLSMOOTHB)
|
|
arcvh
|
|
flat MIDDLE (XH - HALFSTROKE - O) [widths HALFSTROKE 0]
|
|
curl (MIDDLE - 1) (XH - HALFSTROKE - O)
|
|
save 'sigma' 0x3C3
|
|
|
|
sketch # sigmafinal
|
|
include markset.p
|
|
include : dispiro
|
|
widths.lhs
|
|
g4 RIGHTSB (XH - HOOK)
|
|
hookstart XH
|
|
flat.ai (SB + OX) (XH - SMALLSMOOTHA)
|
|
curl.ai (SB + OX) SMALLSMOOTHB
|
|
arcvh
|
|
g4 (MIDDLE + CORRECTION_OMIDS) 0
|
|
alsothru 0.5 0.1353
|
|
g4.down.mid (RIGHTSB - STROKE * HVCONTRAST + OX) [mix DESCENDER STROKE [linreg 18 0.5 126 0.49 STROKE]] [heading DOWNWARD]
|
|
arcvh
|
|
flat (RIGHTSB - HOOKX + OX) (DESCENDER + STROKE) [heading LEFTWARD]
|
|
curl [Math.min (RIGHTSB - STROKE * HVCONTRAST * 1.5) (RIGHTSB - HOOKX + OX - 1)] (DESCENDER + STROKE) [heading LEFTWARD]
|
|
save 'sigmafinal' 0x3C2
|
|
|
|
begin { CShape CShapeOutline }
|
|
|
|
### G
|
|
do "G and related ============================================================================="
|
|
define [GShape top sma smb] : glyph-construction
|
|
local yBar : top * 0.52 + STROKE * 0.25
|
|
local fine SHOULDERFINE
|
|
local sb : shoulderMidSlope fine nothing (-1)
|
|
include : dispiro
|
|
widths.lhs
|
|
g4 RIGHTSB (top - HOOK)
|
|
hookstart (top - O)
|
|
flat (SB + OX) (top - sma)
|
|
curl (SB + OX) smb
|
|
arcvh
|
|
g4.right.mid (MIDDLE + (CORRECTION_OMIDX - sb) * STROKE) O [widths.heading STROKE 0 {.y (1) .x (sb)}]
|
|
archv
|
|
straight.up.end (RIGHTSB - (STROKE - fine) * HVCONTRAST) sma [widths.heading fine 0 UPWARD]
|
|
include : HBarTop MIDDLE RIGHTSB yBar
|
|
include : VBarRight RIGHTSB sma yBar
|
|
include : VBarRight RIGHTSB sma 0 (STROKE - fine / 2)
|
|
|
|
sketch # G
|
|
set-width WIDTH
|
|
include markset.capital
|
|
include : GShape CAP SMOOTHA SMOOTHB
|
|
save 'G' 'G'
|
|
|
|
sketch # smcpG
|
|
include markset.e
|
|
include : GShape XH SMOOTHA SMOOTHB
|
|
|
|
save 'smcpG' 0x262
|
|
|
|
sketch # Ghooktop
|
|
include glyphs.G AS_BASE
|
|
include : VBarRight (RIGHTSB - OXHOOK) (CAP - HOOK) CAP
|
|
include : VerticalHook (RIGHTSB - HALFSTROKE * HVCONTRAST - OXHOOK) CAP HOOKX (-HOOK) nothing O
|
|
|
|
save 'Ghooktop' 0x193
|
|
|
|
sketch # smcpGhooktop
|
|
include glyphs.smcpG AS_BASE
|
|
include : VBarRight (RIGHTSB - OXHOOK) (XH - HOOK) XH
|
|
include : VerticalHook (RIGHTSB - HALFSTROKE * HVCONTRAST - OXHOOK) XH HOOKX (-HOOK) nothing O
|
|
|
|
save 'smcpGhooktop' 0x29B
|
|
|
|
sketch # Gbar
|
|
include glyphs.G AS_BASE
|
|
include : HOverlayBar [mix SB RIGHTSB 0.5] [mix RIGHTSB WIDTH 0.7] [mix 0 CAPMIDDLE 0.55]
|
|
save 'Gbar' 0x1E4
|
|
|
|
### g
|
|
do "g and related ============================================================================="
|
|
sketch # g.doublestorey
|
|
include markset.p
|
|
local obot : XH * GBARPOS - O - STROKE * 0.4
|
|
include : OShape XH obot SB (RIGHTSB - 0.3 * SB)
|
|
|
|
local gleftx ([mix 0 SB 0.85] + OX)
|
|
local grightx ([mix WIDTH RIGHTSB 0.825] - OX)
|
|
local groundy : Math.round : [mix DESCENDER (XH * GBARPOS) 0.64] + HALFSTROKE
|
|
local gtipy : [mix groundy (obot + STROKE + O) 1.005] - STROKE * CTHIN
|
|
include : dispiro
|
|
g4.left.start [mix SB RIGHTSB 0.4] gtipy [widths 0 (STROKE * CTHIN)]
|
|
g4 ([mix SB RIGHTSB 0.0575] + STROKE * 0.85) [mix groundy gtipy 0.5] [widths.rhs (STROKE * [mix CTHIN 1 0.5])]
|
|
flat [mix SB RIGHTSB 0.435] groundy [widths 0 STROKE]
|
|
curl [mix RIGHTSB SB 0.435] groundy
|
|
archv 4
|
|
g4 grightx [mix (DESCENDER + O) groundy (1.06 * SMALLSMOOTHA / (SMALLSMOOTHA + SMALLSMOOTHB))]
|
|
arcvh
|
|
g4 (MIDDLE + CORRECTION_OMIDS) (DESCENDER + O)
|
|
archv
|
|
g4 gleftx [mix (DESCENDER + O) groundy (1.06 * SMALLSMOOTHB / (SMALLSMOOTHA + SMALLSMOOTHB))]
|
|
arcvh
|
|
g4 [mix SB RIGHTSB 0.435] groundy [heading RIGHTWARD]
|
|
local gm : mix SB (RIGHTSB - 0.3 * SB) 0.5
|
|
start-from (RIGHTSB + 0.25 * SB - OX) XH
|
|
line-to (RIGHTSB + 0.25 * SB - OX) (XH - STROKE)
|
|
line-to gm (XH - STROKE - O)
|
|
line-to gm XH
|
|
|
|
set-anchor 'overlay' BASE MIDDLE [mix (DESCENDER + O) groundy 0.5]
|
|
save 'g.doublestorey'
|
|
|
|
sketch # g.opendoublestorey
|
|
include markset.p
|
|
local obot : XH * GBARPOS - O - STROKE * 0.4
|
|
include : OShape XH obot SB (RIGHTSB - 0.3 * SB)
|
|
|
|
local gleftx ([mix 0 SB 0.85] + OX)
|
|
local grightx ([mix WIDTH RIGHTSB 0.825] - OX)
|
|
local groundy : Math.round : [mix DESCENDER (XH * GBARPOS) 0.64] + HALFSTROKE
|
|
local gtipy : [mix groundy (obot + STROKE + O) 1.005] - STROKE * CTHIN
|
|
include : dispiro
|
|
g4.left.start [mix SB RIGHTSB 0.4] gtipy [widths 0 (STROKE * CTHIN)]
|
|
g4 ([mix SB RIGHTSB 0.0575] + STROKE * 0.85) [mix groundy gtipy 0.5] [widths.rhs (STROKE * [mix CTHIN 1 0.5])]
|
|
flat [mix SB RIGHTSB 0.435] groundy [widths 0 STROKE]
|
|
curl [mix RIGHTSB SB 0.435] groundy
|
|
archv 4
|
|
g4 grightx [mix (DESCENDER + O) groundy (1.06 * SMALLSMOOTHA / (SMALLSMOOTHA + SMALLSMOOTHB))]
|
|
hookend (DESCENDER + O)
|
|
g4 gleftx [mix (DESCENDER + O) groundy (1.06 * SMALLSMOOTHB / (SMALLSMOOTHA + SMALLSMOOTHB))]
|
|
local gm : mix SB (RIGHTSB - 0.3 * SB) 0.5
|
|
start-from (RIGHTSB + 0.25 * SB - OX) XH
|
|
line-to (RIGHTSB + 0.25 * SB - OX) (XH - STROKE)
|
|
line-to gm (XH - STROKE - O)
|
|
line-to gm XH
|
|
|
|
set-anchor 'overlay' BASE MIDDLE [mix (DESCENDER + O) groundy 0.5]
|
|
save 'g.opendoublestorey'
|
|
|
|
sketch # g.singlestorey
|
|
include markset.p
|
|
include : OBarRightShape
|
|
include : dispiro
|
|
widths.rhs
|
|
flat RIGHTSB XH [heading DOWNWARD]
|
|
curl RIGHTSB (DESCENDER + SMALLSMOOTHA)
|
|
hookend (DESCENDER + O)
|
|
g4 SB (DESCENDER + SHOOK)
|
|
if SLAB : begin
|
|
include : RightwardTopSerif RIGHTSB XH SIDEJUT
|
|
tag-contour 'serifRT'
|
|
set-anchor "overlay" BASE MIDDLE (XH / 2)
|
|
save 'g.singlestorey'
|
|
save 'scriptg' 0x261
|
|
save 'cyrde.SRB'
|
|
|
|
select-variant 'g' 'g'
|
|
turned nothing 0x1D77 'g' MIDDLE [mix DESCENDER XH 0.5]
|
|
|
|
sketch # scriptghooktop
|
|
include glyphs.scriptg AS_BASE
|
|
eject-contour 'serifRT'
|
|
include : VerticalHook (RIGHTSB - HALFSTROKE * HVCONTRAST) XH HOOKX (-HOOK) nothing O
|
|
|
|
save 'scriptghooktop' 0x260
|
|
|
|
do
|
|
define l : mix 0 SB 0.3
|
|
define r : mix WIDTH RIGHTSB 0.3
|
|
define bwDoubleStorey : Math.min [adviceBlackness 5] (0.5 / 3 * (CAP - STROKE * 4))
|
|
define bwSingleStorey : adviceBlackness2 4 2 XH
|
|
sketch # gbar.doublestorey
|
|
include glyphs."g.doublestorey" AS_BASE
|
|
include : HBar l r glyphs."g.doublestorey".anchors.overlay.y bwDoubleStorey
|
|
save 'gbar.doublestorey'
|
|
sketch # gbar.opendoublestorey
|
|
include glyphs."g.opendoublestorey" AS_BASE
|
|
include : HBar l r glyphs."g.opendoublestorey".anchors.overlay.y bwDoubleStorey
|
|
save 'gbar.opendoublestorey'
|
|
sketch # gbar.singlestorey
|
|
include glyphs."g.singlestorey" AS_BASE
|
|
include : HBar l r glyphs."g.singlestorey".anchors.overlay.y bwSingleStorey
|
|
save 'gbar.singlestorey'
|
|
select-variant "gbar" 0x1E5 (follow -- 'g')
|
|
|
|
### O and o
|
|
do "O and o ==================================================================================="
|
|
sketch
|
|
include markset.capital
|
|
include : OShape CAP 0 SB RIGHTSB nothing SMOOTHA SMOOTHB
|
|
|
|
save 'O' 'O'
|
|
save 'Omicron' 0x39F
|
|
save 'cyrO' 0x41E
|
|
|
|
sketch # o
|
|
set-width WIDTH
|
|
include markset.e
|
|
include : OShape XH 0 SB RIGHTSB nothing nothing nothing true
|
|
save 'o' 'o'
|
|
save 'omicron' 0x3BF
|
|
save 'cyro' 0x43e
|
|
|
|
sketch
|
|
include markset.capital
|
|
include : HornBaseAnchor RIGHTSB CAP (WIDTH / 2) (SMOOTHB) (-1)
|
|
include : difference
|
|
HornShape RIGHTSB CAP (WIDTH / 2) (SMOOTHB) (-1)
|
|
OShapeOutline (CAP + O) (0 - O) (SB - O) (RIGHTSB + O) nothing SMOOTHA SMOOTHB
|
|
include glyphs.O
|
|
save 'OHorn' 0x01A0
|
|
|
|
sketch
|
|
include markset.e
|
|
include : HornBaseAnchor RIGHTSB XH (WIDTH / 2) (SMOOTHB) (-1)
|
|
include : difference
|
|
HornShape RIGHTSB XH (WIDTH / 2) (SMOOTHB) (-1)
|
|
OShapeOutline (XH + O) (0 - O) (SB - O) (RIGHTSB + O) nothing nothing nothing true
|
|
include glyphs.o
|
|
save 'oHorn' 0x01A1
|
|
|
|
sketch # Oslash
|
|
|
|
local fine : 0.5 * OVERLAYSTROKE
|
|
|
|
include glyphs.O AS_BASE
|
|
include : dispiro
|
|
flat (SB + O + fine) [mix CAP 0 1.05] [widths fine fine]
|
|
curl (RIGHTSB - O - fine) [mix 0 CAP 1.05]
|
|
|
|
save 'Oslash' 0xD8
|
|
|
|
sketch # oslash
|
|
|
|
local fine : 0.5 * OVERLAYSTROKE
|
|
|
|
include glyphs.o AS_BASE
|
|
include : dispiro
|
|
flat (SB + O + fine) [mix XH 0 1.05] [widths fine fine]
|
|
curl (RIGHTSB - O - fine) [mix 0 XH 1.05]
|
|
|
|
save 'oslash' 0xF8
|
|
|
|
sketch # Obar
|
|
include glyphs.O AS_BASE
|
|
include : HBar (SB + OX + 1) (RIGHTSB - OX - 1) (CAP * 0.5) OVERLAYSTROKE
|
|
save 'Obar' 0x19F
|
|
save 'cyrOe' 0x4E8
|
|
save 'capSymbolTheta' 0x3F4
|
|
|
|
sketch # obar
|
|
include glyphs.o AS_BASE
|
|
include : HBar (SB + OX + 1) (RIGHTSB - OX - 1) (XH * 0.5) OVERLAYSTROKE
|
|
save 'obar' 0x275
|
|
save 'cyroe' 0x4E9
|
|
|
|
sketch # bulleye
|
|
include glyphs.O AS_BASE
|
|
local radius : Math.min DOTRADIUS ((RIGHTSB - SB - STROKE * 2) / 4)
|
|
include : Ring (CAPMIDDLE + radius) (CAPMIDDLE - radius) (MIDDLE + radius) (MIDDLE - radius)
|
|
|
|
save 'bulleye' 0x298
|
|
|
|
sketch # oupperhalf
|
|
include markset.e
|
|
include : dispiro
|
|
widths.rhs
|
|
flat (SB + OX) (XH / 2) [heading UPWARD]
|
|
curl (SB + OX) (XH - [Math.min (XH / 2 - 0.1) SMALLSMOOTHA])
|
|
arcvh
|
|
g4 (MIDDLE - CORRECTION_OMIDS) (XH - O)
|
|
archv
|
|
flat (RIGHTSB - OX) (XH - [Math.min (XH / 2 - 0.1) SMALLSMOOTHB])
|
|
curl (RIGHTSB - OX) (XH / 2) [heading DOWNWARD]
|
|
save 'oupperhalf' 0x1D16
|
|
|
|
sketch # olowerhalf
|
|
include markset.e
|
|
include : dispiro
|
|
widths.lhs
|
|
flat (SB + OX) (XH / 2) [heading DOWNWARD]
|
|
curl (SB + OX) [Math.min (XH / 2 - 0.1) SMALLSMOOTHB]
|
|
arcvh
|
|
g4 (MIDDLE + CORRECTION_OMIDS) O
|
|
archv
|
|
flat (RIGHTSB - OX) [Math.min (XH / 2 - 0.1) SMALLSMOOTHA]
|
|
curl (RIGHTSB - OX) (XH / 2) [heading UPWARD]
|
|
save 'olowerhalf' 0x1D17
|
|
|
|
### Q
|
|
do "Q and related ============================================================================="
|
|
sketch # Q.straight
|
|
set-width WIDTH
|
|
include glyphs.O AS_BASE
|
|
local shift : linreg 18 0 126 0.25 STROKE
|
|
include : dispiro
|
|
widths.rhs
|
|
flat (MIDDLE + WIDTH * 0.075 - STROKE * HVCONTRAST * shift) (-CAP * 0.2) [heading UPWARD]
|
|
curl (MIDDLE - STROKE * HVCONTRAST * shift) 0
|
|
save 'Q.straight'
|
|
sketch # Q.taily
|
|
set-width WIDTH
|
|
include glyphs.O AS_BASE
|
|
local shift : linreg 18 0.5 126 0.6 STROKE
|
|
local startx : MIDDLE + (STROKE * shift) * HVCONTRAST
|
|
local terminalx : MIDDLE + HOOKX
|
|
include : dispiro
|
|
widths.rhs
|
|
flat startx HALFSTROKE [heading DOWNWARD]
|
|
curl startx 0 [heading DOWNWARD]
|
|
arcvh
|
|
flat [Math.min (terminalx - 1) (startx + HOOK - STROKE)] (STROKE - HOOK)
|
|
curl terminalx (STROKE - HOOK)
|
|
save 'Q.taily'
|
|
|
|
select-variant 'Q' 'Q'
|
|
alias 'cyrQa' 0x51A 'Q'
|
|
|
|
### q
|
|
do "q and related ============================================================================="
|
|
sketch # q
|
|
set-width WIDTH
|
|
include markset.p
|
|
|
|
include : OBarRightShape
|
|
include : VBarRight RIGHTSB DESCENDER XH
|
|
if SLAB : begin
|
|
include : RightwardTopSerif RIGHTSB XH SIDEJUT
|
|
tag-contour 'serifRT'
|
|
include : CenterBottomSerif (RIGHTSB - HALFSTROKE * HVCONTRAST) DESCENDER JUT
|
|
save 'q' 'q'
|
|
save 'cyrqa' 0x51B
|
|
|
|
sketch # Qrtail
|
|
include markset.capital
|
|
include : OBarRightShape CAP
|
|
include : VBarRight RIGHTSB 0 CAP
|
|
include : create-glyph : glyph-construction
|
|
include glyphs.rtailBR
|
|
apply-transform : Upright
|
|
apply-transform : Translate RIGHTSB 0
|
|
apply-transform : Italify
|
|
if SLAB : begin
|
|
include : RightwardTopSerif RIGHTSB CAP SIDEJUT
|
|
tag-contour 'serifRT'
|
|
|
|
save 'Qrtail' 0x24A
|
|
|
|
sketch # qrtail
|
|
include markset.e
|
|
include : OBarRightShape
|
|
include : VBarRight RIGHTSB 0 XH
|
|
include : create-glyph : glyph-construction
|
|
include glyphs.rtailBR
|
|
apply-transform : Upright
|
|
apply-transform : Translate RIGHTSB 0
|
|
apply-transform : Italify
|
|
if SLAB : begin
|
|
include : RightwardTopSerif RIGHTSB XH SIDEJUT
|
|
tag-contour 'serifRT'
|
|
|
|
save 'qrtail' 0x24B
|
|
|
|
sketch # qhooktop
|
|
include markset.p
|
|
include glyphs.q
|
|
eject-contour 'serifRT'
|
|
include : VerticalHook (RIGHTSB - HALFSTROKE * HVCONTRAST) XH HOOKX (-HOOK)
|
|
save 'qhooktop' 0x2A0
|
|
|
|
|
|
### N
|
|
define { NShape } : do "N and related"
|
|
define [NShape top left right coward diagcoward xn] : glyph-construction
|
|
local topstroke : adviceBlackness [fallback diagcoward 4]
|
|
local stroke : adviceBlackness [fallback coward 1]
|
|
local halftopstroke : topstroke / 2
|
|
|
|
include : dispiro
|
|
flat left 0 [widths.heading 0 stroke UPWARD]
|
|
curl left (top * 0.4) [heading UPWARD]
|
|
straight.up.end left top [widths.heading 0 topstroke UPWARD]
|
|
include : dispiro
|
|
flat right top [widths.heading 0 stroke DOWNWARD]
|
|
curl right (top * 0.6) [heading DOWNWARD]
|
|
straight.down.end right 0 [widths.heading 0 topstroke DOWNWARD]
|
|
include : dispiro
|
|
flat (left + halftopstroke) top [widths.heading topstroke 0 DOWNWARD]
|
|
curl (right - halftopstroke) 0 [widths.heading 0 topstroke DOWNWARD]
|
|
include : AINSerifs top left right stroke xn
|
|
|
|
sketch # N
|
|
set-width WIDTH
|
|
include markset.capital
|
|
include : NShape CAP SB RIGHTSB
|
|
save 'N' 'N'
|
|
save 'Nu' 0x39D
|
|
|
|
sketch # smcpN
|
|
include markset.e
|
|
include : NShape XH SB RIGHTSB 3 3.5
|
|
|
|
save 'smcpN' 0x274
|
|
|
|
sketch # Nltail
|
|
include glyphs.N AS_BASE
|
|
eject-contour 'serifLB'
|
|
include : VerticalHook (SB + HALFSTROKE * HVCONTRAST) 0 (-HOOKX) HOOK
|
|
|
|
save 'Nltail' 0x19D
|
|
list NShape
|
|
|
|
### n
|
|
do "n and related"
|
|
sketch # n
|
|
set-width WIDTH
|
|
include markset.e
|
|
|
|
include : nShoulder
|
|
left -- (SB + STROKE * HVCONTRAST)
|
|
right -- RIGHTSB
|
|
fine -- SHOULDERFINE
|
|
include : VBarLeft SB 0 XH
|
|
|
|
if SLAB : begin
|
|
include : LeftwardTopSerif SB XH SIDEJUT
|
|
tag-contour 'serifLT'
|
|
if (para.isItalic)
|
|
: then : include : tagged 'serifRB' : RightwardBottomSerif RIGHTSB 0 SIDEJUT
|
|
: else : include : tagged 'serifRB' : CenterBottomSerif (RIGHTSB - HALFSTROKE * HVCONTRAST) 0 JUT
|
|
if (!para.isItalic) : begin
|
|
include : tagged 'serifLB' : CenterBottomSerif (SB + HALFSTROKE * HVCONTRAST) 0 JUT
|
|
save 'n' 'n'
|
|
save 'cyrpe.italic'
|
|
|
|
sketch # napostrophe
|
|
include glyphs.commaAbove
|
|
apply-transform : Translate (WIDTH + SB - MIDDLE) 0
|
|
include glyphs.n AS_BASE
|
|
|
|
save 'napostrophe' 0x149
|
|
|
|
sketch # eng
|
|
include markset.p
|
|
include glyphs.n false
|
|
eject-contour 'serifRB'
|
|
include : VerticalHook (RIGHTSB - HALFSTROKE * HVCONTRAST) 0 (-HOOKX) HOOK
|
|
|
|
save 'eng' 0x14B
|
|
|
|
sketch # Eng
|
|
include markset.capital
|
|
|
|
include : nShoulder
|
|
left -- (SB + STROKE)
|
|
right -- RIGHTSB
|
|
top -- CAP
|
|
bottom -- (HOOK + HALFSTROKE + O)
|
|
sma -- SMOOTHA
|
|
smb -- SMOOTHB
|
|
include : VerticalHook (RIGHTSB - HALFSTROKE * HVCONTRAST) (HOOK + HALFSTROKE + O) [Math.max ((SB - RIGHTSB) / 2 + HALFSTROKE) (-HOOKX)] HOOK
|
|
include : VBar (SB + HALFSTROKE * HVCONTRAST) 0 CAP
|
|
|
|
save 'Eng' 0x14A
|
|
|
|
sketch # nltail
|
|
include glyphs.n AS_BASE
|
|
eject-contour 'serifLB'
|
|
include : VerticalHook (SB + HALFSTROKE * HVCONTRAST) 0 (-HOOKX) HOOK
|
|
|
|
save 'nltail' 0x272
|
|
|
|
sketch # ncurlytail
|
|
local fine : adviceBlackness 4
|
|
local rinner : clamp (WIDTH * 0.065) (XH * 0.05) (fine * 0.35)
|
|
local wide : adviceBlackness 3
|
|
local m1 : Math.min RIGHTSB (WIDTH - rinner * 2 - fine - OX)
|
|
local x2 : mix SB m1 0.5
|
|
local y2 : -fine
|
|
include markset.e
|
|
include : VBarLeft SB 0 XH wide
|
|
include : dispiro
|
|
nShoulderKnots
|
|
left -- (SB + wide * HVCONTRAST)
|
|
right -- m1
|
|
fine -- SHOULDERFINE
|
|
bottom -- (rinner * 2 + fine)
|
|
stroke -- wide
|
|
CurlyTail fine rinner m1 0 (m1 + rinner * 2 + fine) x2 y2
|
|
|
|
if SLAB : begin
|
|
include : LeftwardTopSerif SB XH SIDEJUT
|
|
tag-contour 'serifLT'
|
|
if (!para.isItalic) : begin
|
|
include : CenterBottomSerif (SB + HALFSTROKE * HVCONTRAST) 0 JUT
|
|
tag-contour 'serifLB'
|
|
|
|
save 'ncurlytail' 0x235
|
|
# eta
|
|
sketch # eta
|
|
include markset.p
|
|
set-anchor 'lf' BASE (SB + HALFSTROKE) 0
|
|
|
|
include : nShoulder
|
|
left -- (SB + STROKE * HVCONTRAST)
|
|
right -- RIGHTSB
|
|
bottom -- DESCENDER
|
|
include : VBarLeft SB 0 XH
|
|
if SLAB : begin
|
|
include : LeftwardTopSerif SB XH SIDEJUT
|
|
tag-contour 'serifLT'
|
|
|
|
save 'eta' 0x3B7
|
|
|
|
sketch # latinEta
|
|
include markset.if
|
|
set-anchor 'lf' BASE (SB + HALFSTROKE) 0
|
|
|
|
include : nShoulder
|
|
left -- (SB + STROKE * HVCONTRAST)
|
|
right -- RIGHTSB
|
|
top -- CAP
|
|
bottom -- DESCENDER
|
|
include : VBar (SB + HALFSTROKE * HVCONTRAST) 0 CAP
|
|
if SLAB : begin
|
|
include : LeftwardTopSerif SB CAP SIDEJUT
|
|
tag-contour 'serifLT'
|
|
if (para.isItalic)
|
|
: then : include : tagged 'serifRB' : RightwardBottomSerif RIGHTSB DESCENDER SIDEJUT
|
|
: else : include : tagged 'serifRB' : CenterBottomSerif (RIGHTSB - HALFSTROKE * HVCONTRAST) DESCENDER JUT
|
|
if (!para.isItalic) : begin
|
|
include : CenterBottomSerif (SB + HALFSTROKE * HVCONTRAST) 0 JUT
|
|
tag-contour 'serifLB'
|
|
|
|
save 'latinEta' 0x220
|
|
|
|
sketch # latineta
|
|
include markset.p
|
|
set-anchor 'lf' BASE (SB + HALFSTROKE) 0
|
|
|
|
include : nShoulder
|
|
left -- (SB + STROKE * HVCONTRAST)
|
|
right -- RIGHTSB
|
|
bottom -- DESCENDER
|
|
include : VBarLeft SB 0 XH
|
|
if SLAB : begin
|
|
include : LeftwardTopSerif SB XH SIDEJUT
|
|
tag-contour 'serifLT'
|
|
if (para.isItalic)
|
|
: then : include : tagged 'serifRB' : RightwardBottomSerif RIGHTSB DESCENDER SIDEJUT
|
|
: else : include : tagged 'serifRB' : CenterBottomSerif (RIGHTSB - HALFSTROKE * HVCONTRAST) DESCENDER JUT
|
|
if (!para.isItalic) : begin
|
|
include : CenterBottomSerif (SB + HALFSTROKE * HVCONTRAST) 0 JUT
|
|
tag-contour 'serifLB'
|
|
save 'latineta' 0x19E
|
|
|
|
### U
|
|
define { UShape } : do "U and related"
|
|
define [UShape top bottom stroke oper] : glyph-construction
|
|
include : dispiro
|
|
widths.lhs stroke
|
|
flat SB top [heading DOWNWARD]
|
|
curl SB (bottom + SMOOTHB)
|
|
arcvh
|
|
g4 (MIDDLE + CORRECTION_OMIDS) (bottom + O)
|
|
archv
|
|
flat RIGHTSB (bottom + SMOOTHA)
|
|
curl RIGHTSB top [heading UPWARD]
|
|
if [not oper] : include : AIVSerifs top
|
|
|
|
sketch # U
|
|
set-width WIDTH
|
|
include markset.capital
|
|
include : UShape CAP 0
|
|
|
|
save 'U' 'U'
|
|
|
|
sketch # smcpU
|
|
include markset.e
|
|
include : UShape XH 0
|
|
|
|
save 'smcpU' 0x1D1C
|
|
list UShape
|
|
|
|
### u
|
|
do "u and related"
|
|
sketch # u
|
|
set-width WIDTH
|
|
include markset.e
|
|
set-anchor 'trailing' BASE (RIGHTSB - markHalfStroke) 0
|
|
include glyphs.n
|
|
eject-contour 'serifRB'
|
|
eject-contour 'serifLB'
|
|
retag-contour 'serifLT' 'serifRB'
|
|
include : FlipAround MIDDLE (XH / 2)
|
|
|
|
if SLAB : begin
|
|
include : LeftwardTopSerif (RIGHTSB - STROKE * HVCONTRAST) XH SIDEJUT
|
|
include : LeftwardTopSerif SB XH SIDEJUT
|
|
|
|
save 'u' 'u'
|
|
# upsilon
|
|
sketch # upsilon
|
|
include markset.e
|
|
include : dispiro
|
|
widths.lhs
|
|
flat (SB + OX - O) XH [heading DOWNWARD]
|
|
curl (SB + OX - O) SMALLSMOOTHB
|
|
arcvh
|
|
g4 (MIDDLE + CORRECTION_OMIDS) O
|
|
archv
|
|
flat (RIGHTSB - OX + O) SMALLSMOOTHA
|
|
curl (RIGHTSB - OX + O) XH [heading UPWARD]
|
|
|
|
save 'upsilon' 0x3C5
|
|
define [LatinUpsilon2Shape top sma smb] : glyph-construction
|
|
include : dispiro
|
|
widths.lhs
|
|
flat SB top [heading DOWNWARD]
|
|
curl SB smb
|
|
arcvh
|
|
g4 (MIDDLE + CORRECTION_OMIDS) O
|
|
archv
|
|
flat RIGHTSB sma
|
|
curl RIGHTSB (top - HOOK - HALFSTROKE) [heading UPWARD]
|
|
include : VerticalHook (RIGHTSB - HALFSTROKE * HVCONTRAST) (top - HOOK - HALFSTROKE) (-(RIGHTSB - HALFSTROKE * HVCONTRAST - MIDDLE)) (-HOOK)
|
|
|
|
sketch # latinUpsilon2
|
|
include markset.e
|
|
include : LatinUpsilon2Shape CAP SMOOTHA SMOOTHB
|
|
|
|
save 'latinUpsilon2' 0x1B2
|
|
|
|
sketch # latinupsilon2
|
|
include markset.e
|
|
include : LatinUpsilon2Shape XH SMALLSMOOTHA SMALLSMOOTHB
|
|
save 'latinupsilon2' 0x28B
|
|
|
|
### M
|
|
do "M and related"
|
|
define [MShape top _div] : glyph-construction
|
|
local div : fallback _div 1
|
|
local df : DivFrame div 3
|
|
local topstroke : adviceBlackness 5 div
|
|
local halftopstroke : topstroke / 2
|
|
local middleY : top * 0.3 / div
|
|
|
|
include : dispiro
|
|
flat df.leftSB 0 [widths.heading 0 STROKE UPWARD]
|
|
curl df.leftSB (top * 0.2) [heading UPWARD]
|
|
straight.up.end df.leftSB top [widths.heading 0 topstroke UPWARD]
|
|
include : dispiro
|
|
flat df.rightSB 0 [widths.heading STROKE 0 UPWARD]
|
|
curl df.rightSB (top * 0.2) [heading UPWARD]
|
|
straight.up.end df.rightSB top [widths.heading topstroke 0 UPWARD]
|
|
include : dispiro
|
|
flat (df.leftSB + halftopstroke) top [widths.heading topstroke 0 DOWNWARD]
|
|
curl df.middle middleY [widths.heading (topstroke / 2) (topstroke / 2) DOWNWARD]
|
|
include : dispiro
|
|
flat (df.rightSB - halftopstroke) top [widths.heading 0 topstroke DOWNWARD]
|
|
curl df.middle middleY [widths.heading (topstroke / 2) (topstroke / 2) DOWNWARD]
|
|
include : AIMSerifs top df.leftSB df.rightSB
|
|
|
|
sketch # M
|
|
local df : DivFrame para.diversityM
|
|
include df.markSet.capital
|
|
set-width df.width
|
|
include : MShape CAP df.div
|
|
save 'M' 'M'
|
|
save 'Mu' 0x39C
|
|
save 'cyrEm' 0x41C
|
|
|
|
sketch # cyrem
|
|
local df : DivFrame para.diversityM
|
|
include df.markSet.e
|
|
set-width df.width
|
|
include : MShape XH df.div
|
|
save 'cyrem' 0x43C
|
|
|
|
### m
|
|
do "m and related ============================================================================"
|
|
define [dfM] : DivFrame para.diversityM 3
|
|
define [SmallMShape top bot mbot df] : glyph-construction
|
|
local m1 : mix df.leftSB (df.middle + df.mvs / 2 * HVCONTRAST) 0.5
|
|
local m2 : mix df.rightSB (df.middle - df.mvs / 2 * HVCONTRAST) 0.5
|
|
include : mShoulderSpiro
|
|
left -- (df.leftSB + df.mvs * HVCONTRAST)
|
|
right -- (df.middle + df.mvs / 2 * HVCONTRAST)
|
|
top -- top
|
|
bottom -- mbot
|
|
width -- df.mvs
|
|
fine -- (df.mvs * SHOULDERFINE / STROKE)
|
|
diversity -- df.div
|
|
include : mShoulderSpiro
|
|
left -- (df.middle + df.mvs * 0.5 * HVCONTRAST)
|
|
right -- df.rightSB
|
|
top -- top
|
|
bottom -- bot
|
|
width -- df.mvs
|
|
fine -- (df.mvs * SHOULDERFINE / STROKE)
|
|
diversity -- df.div
|
|
include : VBarLeft df.leftSB bot top df.mvs
|
|
if SLAB : begin
|
|
local jut : JUT * df.mvs / STROKE + O
|
|
if (df.width > jut * 7) : begin
|
|
include : intersection
|
|
CenterTopSerif (df.leftSB + 0.5 * df.mvs * HVCONTRAST) top jut df.mvs
|
|
spiro-outline
|
|
corner SB bot
|
|
corner SB top
|
|
corner 0 top
|
|
corner 0 bot
|
|
tag-contour 'serifLT'
|
|
if (!para.isItalic) : begin
|
|
include : CenterBottomSerif (df.leftSB + 0.5 * df.mvs * HVCONTRAST) bot jut df.mvs
|
|
tag-contour 'serifLB'
|
|
include : CenterBottomSerif df.middle bot jut df.mvs
|
|
tag-contour 'serifMB'
|
|
include : CenterBottomSerif (df.rightSB - 0.5 * df.mvs * HVCONTRAST) bot jut df.mvs
|
|
tag-contour 'serifRB'
|
|
: else : begin
|
|
include : intersection
|
|
RightwardBottomSerif (df.rightSB + O) bot (jut / 2) df.mvs
|
|
spiro-outline
|
|
corner (df.rightSB + O) bot
|
|
corner (df.rightSB + O) top
|
|
corner df.width top
|
|
corner df.width bot
|
|
tag-contour 'serifRB'
|
|
: else : begin
|
|
include : LeftwardTopSerif df.leftSB top SIDEJUT df.mvs
|
|
tag-contour 'serifLT'
|
|
if (!para.isItalic) : include : LeftwardBottomSerif df.leftSB bot SIDEJUT df.mvs
|
|
include : RightwardBottomSerif df.rightSB bot SIDEJUT df.mvs
|
|
tag-contour 'serifRB'
|
|
|
|
sketch # m.normal
|
|
local df : dfM
|
|
set-width df.width
|
|
include df.markSet.e
|
|
include : SmallMShape XH 0 0 df
|
|
save 'm.normal'
|
|
save 'cyrte.italic'
|
|
sketch # m.shortleg
|
|
local df : dfM
|
|
set-width df.width
|
|
include df.markSet.e
|
|
include : SmallMShape XH 0 [XH * 0.2] df
|
|
eject-contour 'serifMB'
|
|
save 'm.shortleg'
|
|
select-variant 'm' 'm'
|
|
composite 'cyrtedescender.italic' glyphs.'cyrte.italic' [CyrDescender (WIDTH * para.diversityM - SB)] markset.e
|
|
|
|
sketch # mltail
|
|
local df : dfM
|
|
include df.markSet.p
|
|
include glyphs.m
|
|
eject-contour 'serifRB'
|
|
include : VerticalHook (df.rightSB - df.mvs / 2 * HVCONTRAST) 0 (-HOOKX) HOOK df.mvs
|
|
save 'mltail' 0x271
|
|
|
|
turned nothing 0x26F 'm' [dfM].middle (XH / 2)
|
|
|
|
sketch # capitalTurnm
|
|
local df : dfM
|
|
set-width df.width
|
|
include df.markSet.capital
|
|
include : SmallMShape CAP 0 0 df
|
|
include : FlipAround df.middle (CAP / 2)
|
|
save 'capitalTurnm' 0x19C
|
|
|
|
sketch # turnmleg
|
|
local df : dfM
|
|
set-width df.width
|
|
include df.markSet.p
|
|
include glyphs.m
|
|
eject-contour 'serifLT'
|
|
include : FlipAround df.middle (XH / 2)
|
|
include : VBarRight df.rightSB DESCENDER 0 df.mvs
|
|
save 'turnmleg' 0x270
|
|
|
|
### H
|
|
do "H and related"
|
|
define [HShape top] : glyph-construction
|
|
include : VBarLeft SB 0 top
|
|
include : VBarRight RIGHTSB 0 top
|
|
include : HBar (SB - O) (RIGHTSB + O) (top * BARPOS)
|
|
include : AIHSerifs top
|
|
|
|
sketch # H
|
|
set-width WIDTH
|
|
include markset.capital
|
|
include : HShape CAP
|
|
save 'H' 'H'
|
|
save 'Eta' 0x397
|
|
save 'cyrEn' 0x41D
|
|
composite glyphs.cyrEn [CyrDescender RIGHTSB] [into-unicode 0x4A2]
|
|
|
|
sketch # cyren
|
|
include markset.e
|
|
include : HShape XH
|
|
save 'cyren' 0x43D
|
|
save 'smcpH' 0x29C
|
|
composite glyphs.cyren [CyrDescender RIGHTSB] [into-unicode 0x4A3]
|
|
|
|
sketch # Hbar
|
|
include glyphs.H AS_BASE
|
|
include : HOverlayBar [mix SB 0 0.7] [mix RIGHTSB WIDTH 0.7] [mix CAPMIDDLE CAP 0.45]
|
|
save 'Hbar' 0x126
|
|
|
|
### h
|
|
do "h and related"
|
|
sketch # h
|
|
set-width WIDTH
|
|
include markset.b
|
|
|
|
include : nShoulder
|
|
left -- (SB + STROKE * HVCONTRAST)
|
|
right -- RIGHTSB
|
|
include : VBarLeft SB 0 CAP
|
|
if SLAB : begin
|
|
include : LeftwardTopSerif SB CAP SIDEJUT
|
|
if (para.isItalic)
|
|
: then : include : RightwardBottomSerif RIGHTSB 0 SIDEJUT
|
|
: else : include : CenterBottomSerif (RIGHTSB - HALFSTROKE * HVCONTRAST) 0 JUT
|
|
tag-contour 'serifRB'
|
|
if (!para.isItalic) : begin
|
|
include : CenterBottomSerif (SB + HALFSTROKE * HVCONTRAST) 0 JUT
|
|
tag-contour 'serifLB'
|
|
save 'h' 'h'
|
|
save 'cyrshha' 0x4BB
|
|
|
|
sketch # hhooktop
|
|
include markset.b
|
|
include : nShoulder
|
|
left -- (SB + STROKE * HVCONTRAST)
|
|
right -- RIGHTSB
|
|
include : HooktopLeftBar
|
|
if SLAB : begin
|
|
if (para.isItalic)
|
|
: then : include : RightwardBottomSerif RIGHTSB 0 SIDEJUT
|
|
: else : include : CenterBottomSerif (RIGHTSB - HALFSTROKE * HVCONTRAST) 0 JUT
|
|
tag-contour 'serifRB'
|
|
if (!para.isItalic) : begin
|
|
include : CenterBottomSerif (SB + HALFSTROKE * HVCONTRAST) 0 JUT
|
|
tag-contour 'serifLB'
|
|
|
|
save 'hhooktop' 0x266
|
|
|
|
sketch # hhooktopltail
|
|
include markset.p
|
|
include glyphs.hhooktop
|
|
eject-contour 'serifRB'
|
|
include : VerticalHook (RIGHTSB - HALFSTROKE * HVCONTRAST) 0 (-HOOKX) HOOK
|
|
|
|
save 'hhooktopltail' 0x267
|
|
|
|
sketch # hltail
|
|
include markset.p
|
|
include glyphs.h
|
|
eject-contour 'serifRB'
|
|
include : VerticalHook (RIGHTSB - HALFSTROKE * HVCONTRAST) 0 (-HOOKX) HOOK
|
|
|
|
save 'hltail' 0xA727
|
|
turned nothing 0x265 'h' MIDDLE (XH / 2) markset.p
|
|
|
|
sketch # hookturnh
|
|
include : nShoulder
|
|
left -- (SB + STROKE * HVCONTRAST)
|
|
right -- RIGHTSB
|
|
bottom -- (HOOK + HALFSTROKE + 1)
|
|
include : VBarLeft SB 0 CAP
|
|
include : create-glyph : glyph-construction
|
|
include glyphs.rtailBR
|
|
apply-transform : Upright
|
|
apply-transform : Translate RIGHTSB (HOOK + HALFSTROKE)
|
|
apply-transform : Italify
|
|
include : FlipAround MIDDLE (XH / 2)
|
|
include markset.p
|
|
if SLAB : begin
|
|
include : LeftwardTopSerif (RIGHTSB - STROKE * HVCONTRAST) XH SIDEJUT
|
|
include : CenterBottomSerif (RIGHTSB - HALFSTROKE * HVCONTRAST) DESCENDER JUT
|
|
|
|
save 'hookturnh' 0x2AE
|
|
|
|
sketch # hookturnhrtail
|
|
include : nShoulder
|
|
left -- (SB + STROKE * HVCONTRAST)
|
|
right -- RIGHTSB
|
|
bottom -- (HOOK + HALFSTROKE + 1)
|
|
include : VBarLeft SB 0 (XH - 1)
|
|
include : create-glyph : glyph-construction
|
|
include glyphs.rtailBR
|
|
apply-transform : Upright
|
|
apply-transform : Translate RIGHTSB (HOOK + HALFSTROKE)
|
|
apply-transform : Italify
|
|
include : FlipAround MIDDLE (XH / 2)
|
|
include : create-glyph : glyph-construction
|
|
include glyphs.rtailBR
|
|
apply-transform : Upright
|
|
apply-transform : Translate RIGHTSB 0
|
|
apply-transform : Italify
|
|
include markset.p
|
|
if SLAB : begin
|
|
include : LeftwardTopSerif (RIGHTSB - STROKE * HVCONTRAST) XH SIDEJUT
|
|
|
|
save 'hookturnhrtail' 0x2AF
|
|
|
|
sketch # hbar
|
|
include glyphs.h AS_BASE
|
|
include : HOverlayBar [mix SB 0 0.7] [mix SB RIGHTSB 0.5] [mix XH CAP 0.45]
|
|
save 'hbar' 0x127
|
|
save 'cyrtshe' 0x45B
|
|
|
|
### F
|
|
define { FShape } : do "F and related"
|
|
define [FShape top y noserif] : glyph-construction
|
|
local stroke : adviceBlackness2 2.875 2 CAP
|
|
include : VBarLeft (SB * 1.5) 0 [fallback top CAP] stroke
|
|
include : HBarTop (SB * 1.5 - O) RIGHTSB [fallback top CAP] stroke
|
|
include : HBar (SB * 1.5 - O) (RIGHTSB - [Math.max HALFSTROKE ((RIGHTSB - SB) * 0.15)] - [if SLAB (STROKE * 0.25) 0]) ([fallback top CAP] * [fallback y [if SLAB 0.52 0.54]]) stroke
|
|
if (SLAB && !noserif) : begin
|
|
include : LeftwardTopSerif (SB * 1.5) [fallback top CAP] SIDEJUT
|
|
include : CenterBottomSerif (SB * 1.5 + HALFSTROKE * HVCONTRAST) 0 JUT
|
|
tag-contour 'serifBottom'
|
|
include : DownwardRightSerif RIGHTSB [fallback top CAP] VJUT
|
|
|
|
sketch # F
|
|
set-width WIDTH
|
|
include markset.capital
|
|
include : FShape
|
|
|
|
save 'F' 'F'
|
|
|
|
sketch # Fltail
|
|
include glyphs.F AS_BASE
|
|
eject-contour 'serifBottom'
|
|
include : VerticalHook (SB * 1.5 + HALFSTROKE * HVCONTRAST) 0 (-HOOKX) HOOK
|
|
|
|
save 'Fltail' 0x191
|
|
list FShape
|
|
|
|
### long s, and f
|
|
define { LongSShape } : do "long-s and f related"
|
|
define fovershoot : fallback para.fovershoot (O * 6)
|
|
|
|
sketch # longs.straight
|
|
set-width WIDTH
|
|
include markset.b
|
|
include : dispiro
|
|
widths.center
|
|
flat (MIDDLE - FBALANCE) 0 [heading UPWARD]
|
|
curl (MIDDLE - FBALANCE) (CAP - FHOOK)
|
|
arcvh
|
|
straight.right.end (MIDDLE - FBALANCE + HOOKX) (CAP - HALFSTROKE - fovershoot)
|
|
set-anchor 'overlay' BASE (MIDDLE - FBALANCE + STROKE * 0.5 * HVCONTRAST) (CAP * OVERLAYPOS)
|
|
if SLAB : begin
|
|
include : CenterBottomSerif (MIDDLE - FBALANCE) 0 JUT
|
|
tag-contour 'serifMB'
|
|
|
|
save 'longs.straight'
|
|
|
|
sketch # longs.upright
|
|
include markset.b
|
|
local m : MIDDLE - JBALANCE - HALFSTROKE * HVCONTRAST
|
|
local r : m + (WIDTH * 0.5) + STROKE * HVCONTRAST - OXHOOK
|
|
include : dispiro
|
|
widths.lhs
|
|
g4 r (CAP - HOOK)
|
|
hookstart (CAP - O)
|
|
flat m (CAP - SMOOTHA)
|
|
curl m 0 [heading DOWNWARD]
|
|
set-anchor 'overlay' BASE (m + STROKE * 0.65 * HVCONTRAST) (CAP * OVERLAYPOS)
|
|
if SLAB : begin
|
|
include : tagged 'serifLB' : CenterBottomSerif (m + HALFSTROKE * HVCONTRAST + RBALANCE * 0.35) 0 (JUT + RBALANCE * 0.65)
|
|
|
|
save 'longs.upright'
|
|
|
|
define [LongSShape top bottom hookx hooky fine] : glyph-construction
|
|
local w [fallback fine STROKE]
|
|
include : dispiro
|
|
widths.center w
|
|
straight.right.start (MIDDLE - hookx) (bottom + w / 2 + fovershoot)
|
|
flat MIDDLE (bottom + hooky)
|
|
curl MIDDLE (top - hooky)
|
|
straight.right.end (MIDDLE + hookx) (top - w / 2 - fovershoot)
|
|
|
|
sketch 'esh'
|
|
include markset.if
|
|
include : LongSShape CAP (-HOOK) HOOKX HOOK
|
|
|
|
branch
|
|
save 'longs.italic'
|
|
save 'esh' 0x283
|
|
|
|
branch
|
|
include : HOverlayBar (MIDDLE - LONGJUT * 0.6) (MIDDLE + LONGJUT * 0.6) (XH * 0.25)
|
|
save 'eshbar' 0x284
|
|
|
|
sketch # longs
|
|
set-width WIDTH
|
|
|
|
if (para.isItalic)
|
|
then : include glyphs.'longs.italic' AS_BASE
|
|
else : include glyphs.'longs.upright' AS_BASE
|
|
save 'longs' 0x17F
|
|
|
|
sketch # eshcurlytail
|
|
include markset.if
|
|
local fine : adviceBlackness 3.5
|
|
local rinner : LONGJUT / 2 - fine / 2
|
|
local m1 : MIDDLE - HALFSTROKE * HVCONTRAST - FBALANCE
|
|
local x2 : mix RIGHTSB m1 0.25
|
|
local y2 : DESCENDER + O
|
|
include glyphs.'longs.straight' false
|
|
eject-contour 'serifMB'
|
|
include : dispiro
|
|
widths.lhs
|
|
flat m1 XH [heading DOWNWARD]
|
|
curl m1 (DESCENDER + fine + rinner * 2)
|
|
CurlyTail
|
|
fine -- fine
|
|
rinner -- rinner
|
|
xleft -- m1
|
|
bottom -- DESCENDER
|
|
right -- (m1 - LONGJUT)
|
|
x2 -- x2
|
|
y2 -- y2
|
|
save 'eshcurlytail' 0x286
|
|
|
|
sketch # ifishhook
|
|
include markset.p
|
|
include : VBar MIDDLE DESCENDER (XH - HOOK)
|
|
include : VerticalHook MIDDLE (XH - HOOK) (-LONGJUT + LBALANCE) (-HOOK + HALFSTROKE)
|
|
apply-transform : Translate LBALANCE 0
|
|
if SLAB : begin
|
|
include : CenterBottomSerif MIDDLE DESCENDER JUT
|
|
|
|
save 'ifishhook' 0x27F
|
|
|
|
sketch # iviby
|
|
include markset.p
|
|
include : VBar MIDDLE 0 (XH - HOOK - HALFSTROKE)
|
|
include : VerticalHook MIDDLE (XH - HOOK - HALFSTROKE) (-LONGJUT) (-HOOK)
|
|
include : VerticalHook MIDDLE 0 LONGJUT HOOK
|
|
|
|
save 'iviby' 0x285
|
|
|
|
define fbar : XH * para.fbarpos + STROKE * para.fbarStrokeAdj
|
|
sketch # f.straight
|
|
local fovershoot2 (O * 2)
|
|
include markset.b
|
|
local barleft : [mix SB RIGHTSB 0.35] - STROKE * 0.25 * HVCONTRAST
|
|
include : dispiro
|
|
widths.lhs
|
|
g4 (RIGHTSB + RBALANCE2 - OXE) (CAP - HOOK * 0.75 - fovershoot2)
|
|
hookstart (CAP - O - fovershoot2) (tight -- true)
|
|
flat barleft (CAP - SMOOTHA * 0.8 - fovershoot2)
|
|
curl barleft 0 [heading DOWNWARD]
|
|
include : dispiro
|
|
widths.rhs
|
|
flat ([mix SB RIGHTSB 0] - HALFSTROKE * TANSLANT) fbar
|
|
curl ([mix SB RIGHTSB 0.95] - HALFSTROKE * TANSLANT) fbar
|
|
|
|
branch
|
|
save 'f.straight'
|
|
save 'lenisf' 0xAB35
|
|
|
|
branch
|
|
include : dispiro
|
|
widths.lhs
|
|
flat ([mix SB RIGHTSB 0.02] + HALFSTROKE * TANSLANT) 0
|
|
curl ([mix SB RIGHTSB 0.875] + HALFSTROKE * TANSLANT) 0
|
|
save 'f.serifed'
|
|
|
|
define dfNarrowF : DivFrame para.diversityF
|
|
sketch # f.narrow
|
|
local df : DivFrame para.diversityF
|
|
set-width df.width
|
|
include df.markSet.b
|
|
local crossLeft : mix 0 SB (1 / 2)
|
|
local crossRight : mix df.width df.rightSB (1 / 2)
|
|
local barleft : [mix crossLeft crossRight 0.42] - STROKE * 0.375 * HVCONTRAST
|
|
local tTurn : Math.max (HOOK * 0.9) (STROKE * 1.375) : Math.min HOOK (STROKE * 1.75)
|
|
include : dispiro
|
|
widths.lhs
|
|
flat crossRight CAP
|
|
curl [Math.min (barleft + tTurn) (crossRight - 1)] CAP
|
|
archv
|
|
flat barleft [Math.max XH (CAP - tTurn)]
|
|
curl barleft 0 [heading DOWNWARD]
|
|
include : dispiro
|
|
widths.rhs
|
|
flat (crossLeft - HALFSTROKE * TANSLANT) fbar
|
|
curl (crossRight - HALFSTROKE * TANSLANT) fbar
|
|
save 'f.narrow'
|
|
|
|
sketch # tailed
|
|
include glyphs.'longs.italic' AS_BASE
|
|
include : dispiro
|
|
widths.rhs
|
|
flat (MIDDLE - LONGJUT - HALFSTROKE * TANSLANT) fbar
|
|
curl (MIDDLE + LONGJUT - HALFSTROKE * TANSLANT) fbar
|
|
save 'f.tailed'
|
|
save 'fltail' 0x192
|
|
|
|
select-variant 'f' 'f'
|
|
|
|
turned 'turnf.straight' nothing 'f.straight' MIDDLE (XH / 2) markset.p
|
|
turned 'turnf.serifed' nothing 'f.serifed' MIDDLE (XH / 2) markset.p
|
|
turned 'turnf.narrow' nothing 'f.narrow' dfNarrowF.middle (XH / 2) dfNarrowF.markSet.p
|
|
turned 'turnf.tailed' nothing 'f.tailed' MIDDLE (XH / 2) markset.p
|
|
select-variant 'turnf' 0x25F (follow -- 'f')
|
|
|
|
do "f ligatures"
|
|
local shift (-(WIDTH * 0.055 + SB * 0.5))
|
|
local barr RIGHTSB
|
|
local hbarleft (SB + shift + STROKE * [if para.slantAngle 0.5 0.25])
|
|
|
|
sketch # f_i
|
|
include markset.b
|
|
include : create-glyph : glyph-construction
|
|
include glyphs.longs
|
|
apply-transform : Translate shift 0
|
|
include : VBarRight barr 0 fbar
|
|
include : HBarTop hbarleft barr fbar
|
|
if SLAB : begin
|
|
if para.isItalic
|
|
: then : include : tagged 'serifRB' : RightwardBottomSerif barr 0 SIDEJUT
|
|
: else : include : tagged 'serifRB' : CenterBottomSerif (barr - HALFSTROKE * HVCONTRAST) 0 JUT
|
|
save 'f_i' 0xFB01
|
|
|
|
sketch # f_l.upright
|
|
local m : MIDDLE - JBALANCE - HALFSTROKE * HVCONTRAST + shift
|
|
include : dispiro
|
|
widths.rhs
|
|
flat m 0 [heading UPWARD]
|
|
curl m (CAP - SMOOTHA)
|
|
hookend (CAP - O)
|
|
g4 (barr + OXHOOK) (CAP - HOOK)
|
|
include : VBarRight barr 0 (CAP - HOOK)
|
|
include : dispiro
|
|
widths.rhs
|
|
flat ([Math.min (m - STROKE * 0.3) hbarleft] - TANSLANT * HALFSTROKE) fbar
|
|
curl ([mix SB barr 0.6] - TANSLANT * HALFSTROKE) fbar
|
|
if SLAB : begin
|
|
include : tagged 'serifLB' : CenterBottomSerif (m + HALFSTROKE * HVCONTRAST + RBALANCE * 0.35) 0 (JUT + RBALANCE * 0.65)
|
|
include : tagged 'serifRB' : CenterBottomSerif (barr - HALFSTROKE * HVCONTRAST) 0 JUT
|
|
save 'f_l.upright'
|
|
|
|
sketch # f_l.italic
|
|
include : create-glyph : glyph-construction
|
|
include glyphs.'longs.italic' AS_BASE
|
|
apply-transform : Translate shift 0
|
|
include : VBarRight barr 0 CAP
|
|
include : HBarTop hbarleft [mix SB barr 0.65] fbar
|
|
if SLAB : include : tagged 'serifRB' : RightwardBottomSerif barr 0 SIDEJUT
|
|
save 'f_l.italic'
|
|
|
|
italic-variant 'f_l' 0xFB02
|
|
|
|
list LongSShape
|
|
|
|
### E
|
|
define { EShape } : do "E and related"
|
|
define [EShape top] : glyph-construction
|
|
local stroke : adviceBlackness2 2.875 2 CAP
|
|
include : FShape top nothing true
|
|
include : HBarBottom (SB * 1.5 - O) RIGHTSB 0 stroke
|
|
if SLAB : begin
|
|
include : LeftwardTopSerif (SB * 1.5) [fallback top CAP] SIDEJUT
|
|
include : CenterBottomSerif (SB * 1.5 + HALFSTROKE * HVCONTRAST) 0 JUT
|
|
tag-contour 'serifBottom'
|
|
include : DownwardRightSerif RIGHTSB [fallback top CAP] VJUT
|
|
include : LeftwardBottomSerif (SB * 1.5) 0 SIDEJUT
|
|
include : UpwardRightSerif RIGHTSB 0 VJUT
|
|
|
|
sketch # turnE
|
|
set-width WIDTH
|
|
include markset.capital
|
|
include : EShape CAP
|
|
save 'E' 'E'
|
|
save 'Epsilon' 0x395
|
|
save 'cyrIe' 0x415
|
|
|
|
include : FlipAround MIDDLE (CAP / 2)
|
|
save 'turnE' 0x18E
|
|
|
|
sketch # smcpturnE
|
|
include markset.e
|
|
include : EShape XH
|
|
include : FlipAround MIDDLE (XH / 2)
|
|
save 'smcpturnE' 0x2C7B
|
|
|
|
list EShape
|
|
|
|
### e
|
|
define { SmallEShape RevSmallEShape } : do "e and related"
|
|
define [SmallEShape top stroke barpos curly] : glyph-construction
|
|
local barbottom : top * [fallback barpos EBARPOS] - (stroke / 2)
|
|
local hookx (RIGHTSB - OXHOOK + TAILADJX * TANSLANT)
|
|
local hookmiddle : [mix (SB + O) hookx 0.55] + CORRECTION_OMIDS
|
|
local hook : Math.min AHOOK : if para.isItalic top (stroke / 2 + (top - stroke * 3) / 4)
|
|
include : dispiro
|
|
widths.lhs stroke
|
|
flat (RIGHTSB - OX) barbottom [heading UPWARD]
|
|
curl (RIGHTSB - OX) (top - SMALLSMOOTHB)
|
|
arcvh
|
|
g4 (MIDDLE - CORRECTION_OMIDS) (top - O)
|
|
archv
|
|
[if ((SMALLSMOOTHA + SMALLSMOOTHB) / top > 0.75) flat.ai flat] (SB + OX) (top - SMALLSMOOTHA)
|
|
[if ((SMALLSMOOTHA + SMALLSMOOTHB) / top > 0.75) curl.ai curl] (SB + OX) (0 + SMALLSMOOTHB)
|
|
hookend O (sw -- stroke)
|
|
g4 (RIGHTSB - OX * [if para.isItalic 0 0.5]) hook
|
|
include : HBarBottom (SB + (stroke / 2) + OX) (RIGHTSB - (stroke / 2) - OX) barbottom stroke
|
|
|
|
sketch # cyrie
|
|
include markset.e
|
|
include : SmallEShape XH [adviceBlackness2 2.875 2 XH]
|
|
save 'e' 'e'
|
|
save 'cyrie' 0x435
|
|
|
|
include : FlipAround MIDDLE (XH / 2)
|
|
save 'turne' 0x1DD
|
|
save 'schwa' 0x259
|
|
save 'cyrschwa' 0x4D9
|
|
|
|
sketch # cyrSchwa
|
|
include markset.capital
|
|
include : SmallEShape CAP [adviceBlackness2 2.875 2 CAP]
|
|
include : FlipAround MIDDLE (CAP / 2)
|
|
save 'Schwa' 0x18F
|
|
save 'cyrSchwa' 0x4D8
|
|
|
|
define [RevSmallEShape top stroke barpos] : glyph-construction
|
|
local barbottom (top * [fallback barpos EBARPOS] - HALFSTROKE)
|
|
local hookx SB
|
|
local hookmiddle : [mix (RIGHTSB - O) hookx 0.55] + CORRECTION_OMIDS
|
|
|
|
include : dispiro
|
|
widths.rhs stroke
|
|
flat (SB + OX) barbottom [heading UPWARD]
|
|
curl (SB + OX) (top - SMALLSMOOTHA)
|
|
arcvh
|
|
g4 MIDDLE (top - O)
|
|
archv
|
|
[if ((SMALLSMOOTHA + SMALLSMOOTHB) / top > 0.75) flat.ai flat] (RIGHTSB - OX) (top - SMALLSMOOTHB)
|
|
[if ((SMALLSMOOTHA + SMALLSMOOTHB) / top > 0.75) curl.ai curl] (RIGHTSB - OX) SMALLSMOOTHA
|
|
hookend O (sw -- stroke)
|
|
g4 (SB + O) AHOOK
|
|
include : HBarBottom (SB + (stroke / 2)) (RIGHTSB - (stroke / 2)) barbottom stroke
|
|
|
|
sketch # reve
|
|
include markset.e
|
|
include : RevSmallEShape XH [adviceBlackness2 2.875 2 XH]
|
|
save 'reve' 0x258
|
|
|
|
list SmallEShape RevSmallEShape
|
|
|
|
### T
|
|
do "T and related"
|
|
define [TShape top] : glyph-construction
|
|
include : VBar MIDDLE 0 top
|
|
local l : SB + OX * 1.5
|
|
local r : RIGHTSB - OX * 1.5
|
|
include : tagged 'strokeLT' : HBarTop l MIDDLE top
|
|
include : tagged 'strokeRT' : HBarTop MIDDLE r top
|
|
if SLAB : begin
|
|
include : tagged 'serifRT' : DownwardRightSerif r top VJUT MVERTSTROKE
|
|
include : tagged 'serifLT' : DownwardLeftSerif l top VJUT MVERTSTROKE
|
|
include : tagged 'serifRB' : RightwardBottomSerif MIDDLE 0 (LONGJUT * 0.6)
|
|
include : tagged 'serifRB' : LeftwardBottomSerif MIDDLE 0 (LONGJUT * 0.6)
|
|
|
|
sketch # cyrTe
|
|
include markset.capital
|
|
set-anchor 'bottomright' BASE (MIDDLE + HALFSTROKE * HVCONTRAST) 0
|
|
include : TShape CAP
|
|
|
|
save 'T' 'T'
|
|
save 'Tau' 0x3A4
|
|
save 'cyrTe' 0x422
|
|
|
|
branch
|
|
include [CyrDescender (MIDDLE + HALFSTROKE * HVCONTRAST)]
|
|
include markset.if
|
|
save 'cyrTedescender' 0x4AC
|
|
|
|
branch
|
|
include : FlipAround MIDDLE (CAP / 2)
|
|
save 'turnT' 0xA7B1
|
|
|
|
branch
|
|
include : HOverlayBar [mix MIDDLE SB 0.8] [mix MIDDLE RIGHTSB 0.8] [mix 0 CAP 0.45]
|
|
save 'Tbar' 0x166
|
|
|
|
branch
|
|
eject-contour 'serifLT'
|
|
eject-contour 'strokeLT'
|
|
include : LeftHook (SB + LeftHook.extension) CAP MIDDLE
|
|
save 'Thookleft' 0x1AC
|
|
|
|
sketch # cyrtedescender.upright
|
|
include markset.e
|
|
include : TShape XH
|
|
save 'cyrte.upright'
|
|
|
|
include [CyrDescender (MIDDLE + HALFSTROKE * HVCONTRAST)]
|
|
include markset.p
|
|
save 'cyrtedescender.upright'
|
|
|
|
italic-variant 'cyrtedescender' 0x4AD
|
|
|
|
sketch # tau
|
|
include markset.e
|
|
include : HBar SB RIGHTSB (XH - HALFSTROKE)
|
|
include : VBar MIDDLE 0 XH
|
|
save 'tau' 0x3C4
|
|
|
|
### t
|
|
do "t and related"
|
|
define tcenter : MIDDLE - TBALANCE - STROKE * 0.5 * HVCONTRAST
|
|
define dfNarrowT : DivFrame para.diversityF
|
|
define [SmallTShape top bot] : glyph-construction
|
|
local hookx : tcenter + (WIDTH - SB * 2) * 0.8 + STROKE * 0.25 * HVCONTRAST
|
|
local turn : [mix tcenter hookx 0.5] + CORRECTION_OMIDS
|
|
local smb : Math.max HOOK ((turn - tcenter) * 1.2)
|
|
|
|
local G : dispiro
|
|
widths.lhs
|
|
flat tcenter top [heading DOWNWARD]
|
|
curl tcenter (bot + smb)
|
|
hookend (bot + O) (tight -- !para.isItalic)
|
|
g4 hookx (bot + HOOK)
|
|
local g : G.call currentGlyph # Not using include
|
|
set-anchor 'bottomright' BASE g.knots.(g.knots.length - 1).x g.knots.(g.knots.length - 1).y
|
|
set-anchor 'below' BASE [mix tcenter g.knots.(g.knots.length - 1).x : linreg 18 0.375 126 0.5 STROKE] bot
|
|
include : dispiro
|
|
widths.rhs
|
|
flat (tcenter + HALFSTROKE - LONGJUT + TBALANCE2 - HALFSTROKE * TANSLANT) XH
|
|
curl (tcenter + HALFSTROKE + LONGJUT + TBALANCE2 - HALFSTROKE * TANSLANT) XH
|
|
|
|
sketch # t.standard
|
|
set-width WIDTH
|
|
include markset.b
|
|
include : SmallTShape CAP 0
|
|
save 't.standard'
|
|
sketch # t.narrow
|
|
local df : DivFrame para.diversityF
|
|
set-width df.width
|
|
include df.markSet.b
|
|
local crossLeft : mix 0 SB (1 / 2)
|
|
local crossRight : mix df.width df.rightSB (1 / 2)
|
|
local barleft : [mix crossLeft crossRight 0.42] - STROKE * 0.375 * HVCONTRAST
|
|
local tTurn : Math.max (HOOK * 0.9) (STROKE * 1.375) : Math.min HOOK (STROKE * 1.75)
|
|
include : dispiro
|
|
widths.rhs
|
|
flat crossRight 0
|
|
curl [Math.min (barleft + tTurn) (crossRight - 1)] 0
|
|
archv
|
|
flat barleft tTurn
|
|
curl barleft CAP [heading UPWARD]
|
|
include : dispiro
|
|
widths.rhs
|
|
flat (crossLeft - HALFSTROKE * TANSLANT) XH
|
|
curl (crossRight - HALFSTROKE * TANSLANT) XH
|
|
set-anchor 'topright' BASE crossRight CAP
|
|
save 't.narrow'
|
|
sketch # t.cross
|
|
set-width WIDTH
|
|
include markset.b
|
|
include : VBar MIDDLE 0 CAP
|
|
include : HBarTop (MIDDLE - LONGJUT) (MIDDLE + LONGJUT) XH
|
|
save 't.cross'
|
|
select-variant 't' 't'
|
|
|
|
turned 'turnt.standard' nothing 't.standard' MIDDLE (XH / 2) markset.p
|
|
turned 'turnt.cross' nothing 't.cross' MIDDLE (XH / 2) markset.p
|
|
turned 'turnt.narrow' nothing 't.narrow' dfNarrowT.middle (XH / 2) dfNarrowT.markSet.p
|
|
select-variant 'turnt' 0x287 (follow -- 't')
|
|
|
|
sketch # tltail
|
|
include markset.if
|
|
include glyphs.('t.standard')
|
|
local attach : utp currentGlyph.gizmo glyphs.('t.standard').anchors.bottomright
|
|
include : VBarRight attach.x 0 attach.y
|
|
include : VerticalHook (attach.x - HALFSTROKE * HVCONTRAST) 0 (-HOOKX) HOOK
|
|
save 'tltail' 0x1AB
|
|
|
|
sketch # thooktop
|
|
include markset.e
|
|
include : SmallTShape (XH - HALFSTROKE) 0
|
|
include : VerticalHook (tcenter + HALFSTROKE * HVCONTRAST) XH HOOKX (-HOOK)
|
|
save 'thooktop' 0x1AD
|
|
|
|
sketch # trtail
|
|
include markset.if
|
|
include : SmallTShape CAP DESCENDER
|
|
save 'trtail' 0x288
|
|
|
|
sketch # tcurlytail
|
|
include markset.b
|
|
local fine : adviceBlackness 3.5
|
|
local rinner : LONGJUT / 2 - fine / 2
|
|
local x2 : mix SB tcenter 0.4
|
|
local y2 : -fine
|
|
include : HBarTop (tcenter + HALFSTROKE - LONGJUT + TBALANCE2) (tcenter + HALFSTROKE + LONGJUT + TBALANCE2) XH
|
|
include : dispiro
|
|
widths.lhs
|
|
flat tcenter CAP [heading DOWNWARD]
|
|
curl tcenter (fine + rinner * 2)
|
|
CurlyTail fine rinner (tcenter+ STROKE * HVCONTRAST) 0 (tcenter + STROKE * HVCONTRAST + LONGJUT) x2 y2
|
|
|
|
save 'tcurlytail' 0x236
|
|
|
|
sketch # tbar
|
|
include glyphs.("t.standard") AS_BASE
|
|
include : HOverlayBar ([mix MIDDLE SB 0.7] - TBALANCE * 0.5 - STROKE * 0.25 * HVCONTRAST) ([mix MIDDLE RIGHTSB 0.7] - TBALANCE * 0.5 - STROKE * 0.25 * HVCONTRAST) [mix 0 XH 0.6]
|
|
save 'tbar' 0x167
|
|
|
|
### S and s
|
|
do "s and related"
|
|
sketch # S
|
|
set-width WIDTH
|
|
include markset.capital
|
|
local stroke : adviceBlackness2 2.875 2 CAP
|
|
local ess : ESS * stroke / STROKE
|
|
define smooth : adviceSSmooth CAP (-1) stroke
|
|
include : dispiro
|
|
widths.lhs stroke
|
|
g4 RIGHTSB (CAP - HOOK)
|
|
hookstart CAPO (sw -- stroke) (swItalicAdj -- STROKE)
|
|
g4 SB (CAP - smooth)
|
|
alsothru 0.5 0.5 [widths.center ess]
|
|
g4 RIGHTSB smooth [widths 0 stroke]
|
|
hookend O (sw -- stroke) (swItalicAdj -- STROKE)
|
|
g4 SB HOOK
|
|
save 'S' 'S'
|
|
save 'cyrDze' 0x405
|
|
|
|
sketch # s
|
|
set-width WIDTH
|
|
include markset.e
|
|
local stroke : adviceBlackness2 2.875 2 XH
|
|
local ess : ESS * stroke / STROKE
|
|
define smooth : adviceSSmooth XH (-1 - [linreg 18 0 126 1 stroke] * (3 - (WIDTH / 500) * 2.5 * [linreg 18 0 126 1 stroke])) stroke
|
|
include : dispiro
|
|
widths.lhs stroke
|
|
g4 (RIGHTSB + OX / 4) (XH - SHOOK)
|
|
hookstart XO (sw -- stroke) (swItalicAdj -- STROKE)
|
|
g4.down.mid (SB + OX / 8) (XH - smooth)
|
|
alsothru 0.5 0.5 [widths.center ess]
|
|
g4.down.mid (RIGHTSB - OX / 8) (smooth) [widths 0 stroke]
|
|
hookend O (sw -- stroke) (swItalicAdj -- STROKE)
|
|
g4 (SB - OX / 4) SHOOK
|
|
save 's' 's'
|
|
save 'cyrdze' 0x455
|
|
|
|
sketch # revS
|
|
include markset.capital
|
|
local stroke : adviceBlackness2 2.875 2 CAP
|
|
local ess : ESS * stroke / STROKE
|
|
local smooth : adviceSSmooth CAP 1 stroke
|
|
include : dispiro
|
|
widths.rhs stroke
|
|
g4 SB (CAP - HOOK)
|
|
hookstart CAPO (sw -- stroke) (swItalicAdj -- STROKE)
|
|
g4 RIGHTSB (CAP - smooth)
|
|
alsothru 0.5 0.5 [widths.center ess]
|
|
g4 SB smooth [widths stroke 0]
|
|
hookend O (sw -- stroke) (swItalicAdj -- STROKE)
|
|
g4 RIGHTSB HOOK
|
|
|
|
save 'revS' 0x1A7
|
|
|
|
sketch # revs
|
|
include markset.e
|
|
local stroke : adviceBlackness2 2.875 2 XH
|
|
local ess : ESS * stroke / STROKE
|
|
local smooth : adviceSSmooth XH (1 + [linreg 18 0 126 1 stroke] * (3.25 - (WIDTH / 500) * 2 * [linreg 18 0 126 1 stroke])) stroke
|
|
include : dispiro
|
|
widths.rhs stroke
|
|
g4 SB (XH - SHOOK)
|
|
hookstart XO (sw -- stroke) (swItalicAdj -- STROKE)
|
|
g4 RIGHTSB (XH - smooth)
|
|
alsothru 0.5 0.5 [widths.center ess]
|
|
g4 SB (smooth) [widths stroke 0]
|
|
hookend O (sw -- stroke) (swItalicAdj -- STROKE)
|
|
g4 RIGHTSB SHOOK
|
|
|
|
save 'revs' 0x1A8
|
|
save 'cyrghe.italic'
|
|
|
|
sketch # srtail
|
|
include glyphs.rtailBR
|
|
local stroke : adviceBlackness2 2.875 2 XH
|
|
apply-transform : Upright
|
|
apply-transform : Translate (SB + stroke * HVCONTRAST + OXHOOK) 0
|
|
apply-transform : Italify
|
|
include markset.p
|
|
include glyphs.s
|
|
include : VBarLeft (SB + OXHOOK) 0 SHOOK
|
|
|
|
save 'srtail' 0x282
|
|
|
|
sketch # Sswash
|
|
include markset.if
|
|
include glyphs.S
|
|
local stroke : adviceBlackness2 2.875 2 CAP
|
|
include : dispiro
|
|
widths.lhs [adviceBlackness 4.5]
|
|
g4 (SB + OXHOOK) HOOK
|
|
alsothru 0.15 0.6 important
|
|
flat (RIGHTSB - 1) DESCENDER [widths stroke 0]
|
|
curl RIGHTSB DESCENDER
|
|
|
|
save 'Sswash' 0x2C7E
|
|
|
|
sketch # sswash
|
|
include markset.p
|
|
include glyphs.s
|
|
local stroke : adviceBlackness2 2.875 2 XH
|
|
include : dispiro
|
|
widths.lhs [adviceBlackness 4.5]
|
|
g4 (SB + OXHOOK) SHOOK
|
|
alsothru 0.2 0.6 important
|
|
flat (RIGHTSB - 1) DESCENDER [widths stroke 0]
|
|
curl RIGHTSB DESCENDER
|
|
save 'sswash' 0x23F
|
|
|
|
### Z and z
|
|
do "Z, z and related"
|
|
sketch # Z
|
|
set-width WIDTH
|
|
include markset.capital
|
|
|
|
local cor : 1.15 * HVCONTRAST
|
|
|
|
include : HBarTop SB RIGHTSB CAP
|
|
|
|
start-from SB STROKE
|
|
line-to (SB + STROKE * cor) STROKE
|
|
line-to RIGHTSB (CAP - STROKE)
|
|
line-to (RIGHTSB - STROKE * cor) (CAP - STROKE)
|
|
reverse-last
|
|
|
|
include : HBarBottom SB RIGHTSB 0
|
|
tag-contour 'strokeBottom'
|
|
|
|
if SLAB : begin
|
|
include : DownwardLeftSerif SB CAP VJUT
|
|
include : UpwardRightSerif RIGHTSB 0 VJUT
|
|
tag-contour 'serifRB'
|
|
save 'Z' 'Z'
|
|
save 'Zeta' 0x396
|
|
|
|
sketch # z
|
|
set-width WIDTH
|
|
include markset.e
|
|
|
|
local cor : 1.2 * HVCONTRAST
|
|
|
|
include : HBarTop SB RIGHTSB XH
|
|
|
|
start-from SB STROKE
|
|
line-to (SB + STROKE * cor) STROKE
|
|
line-to RIGHTSB (XH - STROKE)
|
|
line-to (RIGHTSB - STROKE * cor) (XH - STROKE)
|
|
reverse-last
|
|
|
|
include : HBarBottom SB RIGHTSB 0
|
|
tag-contour 'strokeBottom'
|
|
if SLAB : begin
|
|
include : DownwardLeftSerif SB XH VJUT
|
|
include : UpwardRightSerif RIGHTSB 0 VJUT
|
|
tag-contour 'serifRB'
|
|
|
|
save 'z' 'z'
|
|
|
|
sketch # Zdtail
|
|
include glyphs.Z AS_BASE
|
|
eject-contour 'strokeBottom'
|
|
eject-contour 'serifRB'
|
|
include : dispiro
|
|
widths.lhs
|
|
flat SB 0 [heading RIGHTWARD]
|
|
curl (RIGHTSB - HOOKX) 0
|
|
archv
|
|
straight.down.end RIGHTSB (-HOOK) [widths.heading 0 STROKE DOWNWARD]
|
|
|
|
save 'Zdtail' 0x224
|
|
|
|
sketch # zdtail
|
|
include glyphs.z AS_BASE
|
|
eject-contour 'strokeBottom'
|
|
eject-contour 'serifRB'
|
|
include : dispiro
|
|
widths.lhs
|
|
flat SB 0 [heading RIGHTWARD]
|
|
curl (RIGHTSB - HOOKX) 0
|
|
archv
|
|
straight.down.end RIGHTSB (-HOOK) [widths.heading 0 STROKE DOWNWARD]
|
|
|
|
save 'zdtail' 0x225
|
|
|
|
sketch # Zswash
|
|
include markset.if
|
|
local cor 1.15
|
|
|
|
include : HBarTop SB RIGHTSB CAP
|
|
|
|
start-from SB 0
|
|
line-to (SB + STROKE * cor) 0
|
|
line-to RIGHTSB (CAP - STROKE)
|
|
line-to (RIGHTSB - STROKE * cor) (CAP - STROKE)
|
|
reverse-last
|
|
|
|
include : dispiro
|
|
widths.lhs
|
|
g4 SB 0
|
|
alsothru 0.36 0.6 important
|
|
flat (RIGHTSB - 1) DESCENDER
|
|
curl RIGHTSB DESCENDER
|
|
if SLAB : begin
|
|
include : DownwardLeftSerif SB CAP VJUT
|
|
|
|
save 'Zswash' 0x2C7F
|
|
|
|
sketch # zswash
|
|
include markset.p
|
|
|
|
include : HBarTop SB RIGHTSB XH
|
|
|
|
local cor 1.2
|
|
start-from SB 0
|
|
line-to (SB + STROKE * cor) 0
|
|
line-to RIGHTSB (XH - STROKE)
|
|
line-to (RIGHTSB - STROKE * cor) (XH - STROKE)
|
|
reverse-last
|
|
|
|
include : dispiro
|
|
widths.lhs
|
|
g4 (SB - OXHOOK) 0
|
|
alsothru 0.36 0.6 important
|
|
flat (RIGHTSB - 1) DESCENDER
|
|
curl RIGHTSB DESCENDER
|
|
|
|
if SLAB : begin
|
|
include : DownwardLeftSerif SB XH VJUT
|
|
|
|
save 'zswash' 0x240
|
|
|
|
sketch # Zdesc
|
|
include glyphs.Z AS_BASE
|
|
eject-contour 'serifRB'
|
|
include : VBarRight [mix SB RIGHTSB 1.05] (HALFSTROKE - LONGJUT) STROKE
|
|
|
|
save 'Zdesc' 0x2C6B
|
|
|
|
sketch # zdesc
|
|
include glyphs.z AS_BASE
|
|
eject-contour 'serifRB'
|
|
include : VBarRight [mix SB RIGHTSB 1.05] (HALFSTROKE - LONGJUT) STROKE
|
|
|
|
save 'zdesc' 0x2C6C
|
|
|
|
sketch # zcurlytail
|
|
include markset.e
|
|
|
|
local fine : adviceBlackness 4
|
|
local rinner : Math.max (XH * 0.04) (fine * 0.3)
|
|
local x2 : mix (SB + STROKE) RIGHTSB 0.3
|
|
local x1 : mix x2 (RIGHTSB - fine - rinner * 1.5) 0.45
|
|
local y2 : -XH * 0.2
|
|
local m1 : RIGHTSB - fine / 2 - rinner * 1.5 + O
|
|
include : HCurlyTail fine STROKE rinner SB m1 (RIGHTSB + fine / 2) x1 x2 y2
|
|
|
|
include glyphs.z
|
|
eject-contour 'strokeBottom'
|
|
eject-contour 'serifRB'
|
|
save 'zcurlytail' 0x291
|
|
|
|
return [object ISerifShape IotaShape LShape VShape PShape PShapeOutline RLegShape RLegTerminalX NShape UShape FShape LongSShape EShape SmallEShape RevSmallEShape CShape CShapeOutline LambdaShape AMaskShape DeltaShape]
|