3203 lines
94 KiB
Plaintext
3203 lines
94 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'
|
|
|
|
export : define [apply] : begin
|
|
glyph-module-entry commonShapes overmarks
|
|
|
|
### I
|
|
sketch # I.straight
|
|
include markset.capital
|
|
include : VBar MIDDLE 0 CAP
|
|
set currentGlyph.cmpPriority (-2)
|
|
save 'I.straight'
|
|
|
|
define [ISerifShape top] : glyph-construction
|
|
include : VBar MIDDLE 0 top
|
|
include : CenterBottomSerif MIDDLE 0 (LONGJUT * 0.8)
|
|
include : CenterTopSerif MIDDLE top (LONGJUT * 0.8)
|
|
|
|
sketch # I.serifed
|
|
include markset.capital
|
|
include : ISerifShape CAP
|
|
|
|
save 'I.serifed'
|
|
|
|
select-variant 'I' 'I' 'serifed'
|
|
alias 'Iota' 0x399 'I'
|
|
alias 'cyrUkrainianI' 0x406 'I'
|
|
alias 'Palochka' 0x4C0 'I'
|
|
|
|
sketch # smcpI
|
|
include markset.e
|
|
include : ISerifShape XH
|
|
save 'smcpI' 0x26A
|
|
|
|
### dotless i, i and iota
|
|
# iota
|
|
define [IotaShape top] : glyph-construction
|
|
local middle MIDDLE
|
|
set-anchor 'above' BASE middle top
|
|
include : LeftwardTopSerif middle top LONGJUT
|
|
include : dispiro
|
|
widths.center
|
|
flat middle top [heading DOWNWARD]
|
|
curl middle HOOK
|
|
arcvh
|
|
flat (middle + HOOK - HALFSTROKE) HALFSTROKE
|
|
curl (middle + LONGJUT * 1.05) HALFSTROKE [heading RIGHTWARD]
|
|
|
|
sketch # iota
|
|
include markset.e
|
|
include : IotaShape XH
|
|
save 'iota' 0x3B9
|
|
save 'latiniota' 0x269
|
|
|
|
sketch # latinIota
|
|
include markset.capital
|
|
include : IotaShape CAP
|
|
save 'latinIota' 0x196
|
|
|
|
sketch # dotlessi.straight
|
|
include markset.e
|
|
include : VBar (MIDDLE) 0 XH
|
|
set currentGlyph.cmpPriority (-2)
|
|
save 'dotlessi.straight'
|
|
|
|
sketch # dotlessi.hooky
|
|
include markset.e
|
|
include : VBar (MIDDLE + IBALANCE) 0 XH
|
|
include : LeftwardTopSerif (MIDDLE + IBALANCE) XH LONGJUT
|
|
save 'dotlessi.hooky'
|
|
|
|
sketch # dotlessi.zshaped
|
|
include markset.e
|
|
include : VBar (MIDDLE) 0 XH
|
|
include : LeftwardTopSerif (MIDDLE) XH LONGJUT
|
|
include : RightwardBottomSerif MIDDLE 0 LONGJUT
|
|
save 'dotlessi.zshaped'
|
|
|
|
sketch # dotlessi.serifed
|
|
include markset.e
|
|
local balance IBALANCE
|
|
include : VBar (MIDDLE + balance) 0 XH
|
|
include : LeftwardTopSerif (MIDDLE + balance) XH (LONGJUT - balance)
|
|
include : RightwardBottomSerif MIDDLE 0 LONGJUT
|
|
include : LeftwardBottomSerif MIDDLE 0 LONGJUT
|
|
save 'dotlessi.serifed'
|
|
|
|
sketch # dotlessi.italic
|
|
if para.isItalic
|
|
: then : begin
|
|
local left : [mix SB RIGHTSB [linreg 18 0.42 126 0.46 STROKE]] - HALFSTROKE * HVCONTRAST
|
|
local right : mix SB RIGHTSB 1.1
|
|
local middle : mix left right 0.55
|
|
include : dispiro
|
|
widths.lhs
|
|
flat left XH [heading DOWNWARD]
|
|
curl left (SMALLSMOOTHB * 0.8)
|
|
hookend O
|
|
g4 right (HOOK * [linreg 18 0.85 126 1 STROKE])
|
|
include : dispiro
|
|
flat (left - LONGJUT + HALFSTROKE * HVCONTRAST) XH [widths 0 STROKE]
|
|
curl left XH
|
|
include markset.e
|
|
set-anchor 'above' BASE (left + HALFSTROKE * HVCONTRAST + [linreg 18 0.25 126 0 STROKE] * TANSLANT * WIDTH) XH
|
|
set-anchor 'below' BASE middle 0
|
|
: else : begin
|
|
include markset.e
|
|
include : IotaShape XH
|
|
save 'dotlessi.italic'
|
|
|
|
select-variant 'dotlessi' 0x131 [if para.isItalic 'italic' 'serifed'] {
|
|
.'cv03' 'dotlessi.serifed'
|
|
.'cv04' 'dotlessi.italic'
|
|
.'cv05' 'dotlessi.hooky'
|
|
.'cv06' 'dotlessi.zshaped'
|
|
}
|
|
|
|
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
|
|
composite 'i.cv03' glyphs.(glyphs.dotlessi.featureSelector.cv03) glyphs.dotAbove
|
|
composite 'i.cv04' glyphs.(glyphs.dotlessi.featureSelector.cv04) glyphs.dotAbove
|
|
composite 'i.cv05' glyphs.(glyphs.dotlessi.featureSelector.cv05) glyphs.dotAbove
|
|
composite 'i.cv06' glyphs.(glyphs.dotlessi.featureSelector.cv06) glyphs.dotAbove
|
|
set glyphs.i.featureSelector {
|
|
.cv03 'i.cv03'
|
|
.cv04 'i.cv04'
|
|
.cv05 'i.cv05'
|
|
.cv06 'i.cv06'
|
|
}
|
|
alias 'cyrUkrainiani' 0x456 'i'
|
|
turned nothing 0x1D09 'i' MIDDLE (XH / 2) markset.p
|
|
* IotaShape
|
|
|
|
### J
|
|
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' 'serifed'
|
|
alias 'cyrJe' 0x408 'J'
|
|
alias 'grkJ' 0x37F 'J'
|
|
|
|
### dotless j and j
|
|
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.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'
|
|
|
|
select-variant 'dotlessj' 0x237 'serifed'
|
|
|
|
sketch # j
|
|
set-width WIDTH
|
|
|
|
include glyphs.dotlessj AS_BASE
|
|
include glyphs.dotAbove
|
|
save 'j' 'j'
|
|
save 'grkj' 0x3F3
|
|
save 'cyrje' 0x458
|
|
|
|
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 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
|
|
|
|
### l
|
|
create-glyph 'l.straight' : glyph-construction
|
|
include markset.b
|
|
set currentGlyph.cmpPriority (-2)
|
|
include : VBar MIDDLE 0 CAP
|
|
|
|
sketch # l.hooky
|
|
include markset.b
|
|
include : VBar (MIDDLE + LBALANCE) 0 (CAP - STROKE)
|
|
include : LeftwardTopSerif (MIDDLE + LBALANCE) CAP LONGJUT
|
|
|
|
save 'l.hooky'
|
|
|
|
sketch # l.zshaped
|
|
include markset.b
|
|
include : VBar MIDDLE 0 (CAP - STROKE)
|
|
include : LeftwardTopSerif MIDDLE CAP LONGJUT
|
|
include : RightwardBottomSerif MIDDLE 0 LONGJUT
|
|
|
|
save 'l.zshaped'
|
|
|
|
sketch # l.serifed
|
|
include markset.b
|
|
include : VBar (MIDDLE + LBALANCE) 0 CAP
|
|
include : LeftwardTopSerif (MIDDLE + LBALANCE) CAP (LONGJUT - LBALANCE)
|
|
include : CenterBottomSerif MIDDLE 0 LONGJUT
|
|
set-anchor 'overlay' BASE (MIDDLE + LBALANCE / 2) (CAP * OVERLAYPOS)
|
|
|
|
save 'l.serifed'
|
|
|
|
sketch # l.italic
|
|
include markset.b
|
|
if para.isItalic
|
|
: then : begin
|
|
local left : mix SB RIGHTSB 0.3
|
|
local right : mix SB RIGHTSB 1.1
|
|
local middle : mix left right 0.54
|
|
include : dispiro
|
|
widths.lhs
|
|
flat left CAP [heading DOWNWARD]
|
|
curl left (SMALLSMOOTHB * 0.85)
|
|
hookend O
|
|
g4 right HOOK
|
|
include : dispiro
|
|
flat SB 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)
|
|
: else : include : IotaShape CAP
|
|
save 'l.italic'
|
|
|
|
select-variant 'l' 'l' [if para.isItalic 'italic' 'serifed'] {
|
|
.'cv07' 'l.serifed'
|
|
.'cv08' 'l.italic'
|
|
.'cv09' 'l.hooky'
|
|
.'cv10' 'l.zshaped'
|
|
}
|
|
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
|
|
include glyphs.rtailBR
|
|
apply-transform : Translate (MIDDLE + LBALANCE + HALFSTROKE * HVCONTRAST) 0
|
|
include glyphs.'l.hooky'
|
|
include 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
|
|
include glyphs.'l.serifed' AS_BASE
|
|
include : create-glyph : glyph-construction
|
|
include glyphs.tildeAbove
|
|
apply-transform : Upright
|
|
apply-transform : Translate (MIDDLE - markMiddle) (CAP * 0.525 - [mix aboveMarkBot aboveMarkTop 0.5])
|
|
apply-transform : Italify
|
|
|
|
save 'ltildeover' 0x26B
|
|
define [Belt] : 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
|
|
include glyphs.'l.serifed' AS_BASE
|
|
include : Belt
|
|
|
|
save 'lbelt' 0x26C
|
|
|
|
sketch # lbeltrtail
|
|
include glyphs.lrtail AS_BASE
|
|
include : Belt
|
|
|
|
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
|
|
local cornerdist : HALFSTROKE * HVCONTRAST * [if SLAB 1.2 1]
|
|
local vcurviness : if (SLAB && !para.isItalic) 0.15 0.3
|
|
define [VShape] : params [top [sw STROKE]] : glyph-construction
|
|
include : dispiro
|
|
widths.lhs sw
|
|
flat SB top [heading DOWNWARD]
|
|
curl SB (top * 0.9) [heading DOWNWARD]
|
|
quadcontrols 0 vcurviness 9 unimportant
|
|
g4 (MIDDLE - cornerdist) 0 [widths.lhs (VShape.fine * sw / STROKE)]
|
|
|
|
#bottom cap
|
|
start-from (MIDDLE + cornerdist) 0
|
|
line-to (MIDDLE - cornerdist) 0
|
|
line-to MIDDLE (VShape.fine * sw / STROKE)
|
|
|
|
include : dispiro
|
|
widths.rhs sw
|
|
flat RIGHTSB top [heading DOWNWARD]
|
|
curl RIGHTSB (top * 0.9) [heading DOWNWARD]
|
|
quadcontrols 0 vcurviness 9 unimportant
|
|
g4 (MIDDLE + cornerdist) 0 [widths.rhs (VShape.fine * sw / STROKE)]
|
|
tag-contour 'strokeUp'
|
|
include : AIVSerifs top
|
|
set VShape.fine : STROKE * [fallback para.vtipfine : if SLAB 0.9 0.8]
|
|
|
|
sketch # V
|
|
set-width WIDTH
|
|
include markset.capital
|
|
include : VShape CAP
|
|
|
|
save 'V' 'V'
|
|
|
|
sketch # v
|
|
include markset.e
|
|
include : VShape XH
|
|
|
|
save 'v' 'v'
|
|
define [VHooktopShape top] : glyph-construction
|
|
include : VShape top
|
|
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 VShape.fine]
|
|
|
|
sketch # vhooktop
|
|
include markset.e
|
|
include : VHooktopShape XH
|
|
save 'vhooktop' 0x2C71
|
|
save 'cyrizhitsa' 0x475
|
|
|
|
sketch # cyrIzhitsa
|
|
include markset.capital
|
|
include : VHooktopShape CAP
|
|
save 'cyrIzhitsa' 0x474
|
|
|
|
turned 'turnv' 0x28C 'v' MIDDLE (XH / 2)
|
|
|
|
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
|
|
* VShape
|
|
|
|
### A
|
|
sketch # A
|
|
set-width WIDTH
|
|
include markset.capital
|
|
set-anchor 'trailing' BASE (RIGHTSB - markHalfStroke) 0
|
|
|
|
include : VShape CAP
|
|
include : FlipAround MIDDLE (CAP / 2)
|
|
|
|
local p : linreg 18 0.075 108 0.075 STROKE
|
|
if (SLAB && !para.isItalic) : set p : p * 1.33
|
|
include : HBarTop [mix SB RIGHTSB p] [mix RIGHTSB SB p] (XH / 2)
|
|
save 'A' 'A'
|
|
save 'Alpha' 0x391
|
|
save 'cyrA' 0x410
|
|
turned nothing 0x2C6F 'A' MIDDLE (CAP / 2)
|
|
### a
|
|
sketch # a.doublestorey
|
|
set-width WIDTH
|
|
include markset.e
|
|
set-anchor 'trailing' BASE (RIGHTSB - markHalfStroke) 0
|
|
local bartop (XH * OVERLAYPOS * 1.02 + HALFSTROKE)
|
|
local lowslope : shoulderMidSlope SHOULDERFINE nothing (-1)
|
|
local lowmiddle : [mix (SB + OX) (RIGHTSB - HALFSTROKE * HVCONTRAST) [linreg 72 0.51 126 0.58 STROKE]] + CORRECTION_OMIDS * 0.5
|
|
local barsmooth : mix SB RIGHTSB 0.55
|
|
include : dispiro
|
|
widths.lhs
|
|
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
|
|
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.075] 0 [heading DOWNWARD]
|
|
set-anchor 'bottomright' BASE [mix SB RIGHTSB 1.075] 0
|
|
save 'a.singlestorey'
|
|
|
|
select-variant 'a' 'a' [if para.isItalic 'singlestorey' 'doublestorey'] {
|
|
.'cv01' 'a.doublestorey'
|
|
.'cv02' 'a.singlestorey'
|
|
}
|
|
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
|
|
define [WShape top] : glyph-construction
|
|
local wheight (top * 0.6)
|
|
|
|
include : dispiro
|
|
widths.lhs
|
|
flat SB top [heading DOWNWARD]
|
|
curl SB (top * 0.75) [heading DOWNWARD]
|
|
quadcontrols 0 0.3 6 unimportant
|
|
g4 (WShape.m1 - WShape.fine / 2 * HVCONTRAST) 0 [widths.lhs (WShape.fine * 0.8)]
|
|
|
|
# bottom cap 1
|
|
start-from (WShape.m1 + WShape.fine / 2 * HVCONTRAST) 0
|
|
line-to (WShape.m1 - WShape.fine / 2 * HVCONTRAST) 0
|
|
line-to WShape.m1 WShape.fine
|
|
|
|
include : dispiro
|
|
widths.rhs WShape.fine
|
|
flat (MIDDLE + WShape.fine / 2 * HVCONTRAST) wheight [heading DOWNWARD]
|
|
#quadcontrols 0 0.1 6 unimportant
|
|
g4 (WShape.m1 + WShape.fine / 2 * HVCONTRAST) 0 [widths.rhs WShape.fine]
|
|
include : dispiro
|
|
widths.lhs WShape.fine
|
|
flat (MIDDLE - WShape.fine / 2 * HVCONTRAST) wheight [heading DOWNWARD]
|
|
#quadcontrols 0 0.1 6 unimportant
|
|
curl (WShape.m2 - WShape.fine / 2 * HVCONTRAST) 0 [widths.lhs WShape.fine]
|
|
|
|
# bottom cap 2
|
|
start-from (WShape.m2 + WShape.fine / 2 * HVCONTRAST) 0
|
|
line-to (WShape.m2 - WShape.fine / 2 * HVCONTRAST) 0
|
|
line-to WShape.m2 WShape.fine
|
|
|
|
include : dispiro
|
|
widths.rhs
|
|
flat RIGHTSB top [heading DOWNWARD]
|
|
curl RIGHTSB (top * 0.75) [heading DOWNWARD]
|
|
quadcontrols 0 0.3 6 unimportant
|
|
g4 (WShape.m2 + WShape.fine / 2 * HVCONTRAST) 0 [widths.rhs (WShape.fine * 0.8)]
|
|
include : AIVSerifs top
|
|
set WShape.fine : adviceBlackness 6
|
|
set WShape.m1 : WIDTH * 0.325
|
|
set WShape.m2 : WIDTH * 0.675
|
|
|
|
sketch # W
|
|
set-width WIDTH
|
|
include markset.capital
|
|
include : WShape CAP
|
|
save 'W' 'W'
|
|
save 'cyrWe' 0x51C
|
|
|
|
sketch # w
|
|
set-width WIDTH
|
|
include markset.e
|
|
include : WShape XH
|
|
save 'w' 'w'
|
|
save 'cyrwe' 0x51D
|
|
|
|
turned nothing 0x28D 'w' MIDDLE (XH / 2)
|
|
|
|
define [WHooktopShape top] : glyph-construction
|
|
include : WShape top
|
|
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 RIGHTSB (top - HOOK) [heading DOWNWARD]
|
|
quadcontrols 0 0.3 6 unimportant g2
|
|
g4 (WShape.m2 + WShape.fine / 2 * HVCONTRAST) 0 [widths.rhs (WShape.fine * 0.8)]
|
|
include : VerticalHook (RIGHTSB - HALFSTROKE * HVCONTRAST) (top - HOOK) (HOOKX * 0.65) (-HOOK + HALFSTROKE)
|
|
|
|
sketch # Whooktop
|
|
include markset.capital
|
|
|
|
include : WHooktopShape CAP
|
|
save 'Whooktop' 0x2C72
|
|
|
|
sketch # whooktop
|
|
include markset.e
|
|
|
|
include : WHooktopShape XH
|
|
|
|
save 'whooktop' 0x2C73
|
|
|
|
sketch # ww
|
|
include : WShape (CAP / 2)
|
|
apply-transform : Upright
|
|
apply-transform : Translate 0 (CAP / 2)
|
|
apply-transform : Italify
|
|
include : WShape (CAP / 2)
|
|
save 'ww' 0x2AC
|
|
|
|
### X and x
|
|
sketch # X
|
|
set-width WIDTH
|
|
include markset.capital
|
|
|
|
include : xStrand SB 0 RIGHTSB CAP 0.1 0.4 0.28
|
|
include : xStrand SB CAP RIGHTSB 0 0.1 0.4 0.28
|
|
include : AIHSerifs CAP
|
|
save 'X' 'X'
|
|
save 'Chi' 0x3A7
|
|
save 'cyrHa' 0x425
|
|
|
|
sketch # x
|
|
include markset.e
|
|
local TURN (XH * 0.1)
|
|
|
|
include : xStrand SB 0 RIGHTSB XH 0.02 0.4 0.14
|
|
include : xStrand SB XH RIGHTSB 0 0.02 0.4 0.14
|
|
include : AIHSerifs XH
|
|
save 'x' 'x'
|
|
save 'cyrha' 0x445
|
|
|
|
sketch # chi
|
|
set-width WIDTH
|
|
include markset.p
|
|
|
|
include : xStrand SB DESCENDER RIGHTSB XH 0.05 0.4 0.11
|
|
include : xStrand SB XH RIGHTSB DESCENDER 0.05 0.4 0.11
|
|
save 'chi' 0x3C7
|
|
save 'latinchi' 0xAB53
|
|
|
|
composite 'cyrHadescender' glyphs.cyrHa [CyrDescender RIGHTSB] [into-unicode 0x4B2]
|
|
composite 'cyrhadescender' glyphs.cyrha [CyrDescender RIGHTSB] [into-unicode 0x4B3]
|
|
|
|
### Y
|
|
define [YShape top bot] : glyph-construction
|
|
local cross : mix [fallback bot 0] top 0.4
|
|
include : halfXStrand SB top MIDDLE cross 0.1 0.4 0.28
|
|
include : halfXStrand 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
|
|
set-width WIDTH
|
|
include markset.capital
|
|
include : YShape CAP
|
|
save 'Y' 'Y'
|
|
save 'Upsilon' 0x3A5
|
|
save 'cyrUe' 0x4AE
|
|
|
|
sketch # Yhooktop
|
|
include glyphs.Y AS_BASE
|
|
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]
|
|
|
|
save 'Yhooktop' 0x1B3
|
|
|
|
sketch # cyrue
|
|
include markset.p
|
|
include : YShape XH DESCENDER
|
|
|
|
save 'cyrue' 0x4AF
|
|
|
|
sketch # smcpY
|
|
include markset.e
|
|
include : YShape XH
|
|
save 'smcpY' 0x28F
|
|
|
|
### y
|
|
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 SLAB [linreg 18 0.97 126 0.85 STROKE] 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 * [if SLAB 0.15 0.1] + [if SLAB HALFSTROKE 0]
|
|
local yrstroker : RIGHTSB - HALFSTROKE * HVCONTRAST
|
|
local yshrink : linreg 18 1 126 0.85 STROKE
|
|
local slabysize : JUT * [linreg 18 0.85 126 1 STROKE]
|
|
local slabyvx : linreg 18 0.7 126 0.5 STROKE
|
|
define [yBaseKnots top bottom] : begin
|
|
local ds : (top - bottom) * pds
|
|
local ds2 : (top - bottom) * pds2 + [if SLAB (slabysize * slabyvx) 0]
|
|
return : 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.center : STROKE * [if SLAB yshrink 1]]
|
|
if SLAB : then : list
|
|
flat (yrstrokel - slabysize) (bottom + HALFSTROKE) [widths.center]
|
|
curl [Math.min (yrstrokel - slabysize - 0.1) (yrstrokel - HALFSTROKE - JUT)] (bottom + HALFSTROKE)
|
|
: else : list
|
|
quadcontrols 1 (1 - dpy2) 16
|
|
flat yrstrokel (bottom + ds2) [heading DOWNWARD]
|
|
curl yrstrokel bottom [heading DOWNWARD]
|
|
|
|
define [SmallYShape top bottom] : glyph-construction
|
|
local ds : (top - bottom) * pds
|
|
local ds2 : (top - bottom) * pds2 + [if SLAB (slabysize * slabyvx) 0]
|
|
include : tagged 'strokeR' : dispiro
|
|
widths.center
|
|
flat yrstroker top [heading DOWNWARD]
|
|
curl yrstroker (top - ds) [heading DOWNWARD]
|
|
quadcontrols 0 dpy1 16
|
|
yBaseKnots top bottom
|
|
end [function : set this.cleanmore true]
|
|
include : dispiro
|
|
widths.center
|
|
flat (WIDTH - yrstroker) top [heading DOWNWARD]
|
|
curl (WIDTH - yrstroker) (top - ds) [heading DOWNWARD]
|
|
quadcontrols 0 dpy1 16
|
|
flat [mix (WIDTH - yrstrokel) (WIDTH - yrstroker) px1] [mix (bottom + ds2) (top - ds) py1]
|
|
curl MIDDLE [mix (bottom + ds2) (top - ds) [linreg (1 - px2) (1 - py2) px1 py1 ((MIDDLE - yrstrokel) / (yrstroker - yrstrokel))]] [widths.center (STROKE * yshrink)]
|
|
end [function : set this.cleanmore true]
|
|
if SLAB : begin
|
|
include : AIVSerifs top
|
|
|
|
sketch # y.upright
|
|
include markset.p
|
|
include : SmallYShape XH DESCENDER
|
|
save 'y.upright'
|
|
|
|
|
|
sketch # y.italic
|
|
if SLAB
|
|
: then
|
|
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
|
|
: else
|
|
include glyphs.'y.upright' AS_BASE
|
|
save 'y.italic'
|
|
|
|
italic-variant 'y' 'y'
|
|
alias 'cyru' 0x443 'y'
|
|
|
|
turned nothing 0x28E 'y.upright' MIDDLE (XH / 2) markset.b
|
|
|
|
sketch # yhooktop
|
|
include glyphs.'y.upright' AS_BASE
|
|
eject-contour 'strokeR'
|
|
eject-contour 'serifRT'
|
|
|
|
include : tagged 'strokeR' : dispiro
|
|
widths.center
|
|
straight.left.start ([mix yrstrokel yrstroker px1] + HOOKX) (XH - HALFSTROKE)
|
|
yBaseKnots XH DESCENDER
|
|
end [function : set this.cleanmore true]
|
|
|
|
save 'yhooktop' 0x1B4
|
|
|
|
sketch # cyrU
|
|
include markset.capital
|
|
include : SmallYShape CAP 0
|
|
|
|
save 'cyrU' 0x423
|
|
|
|
sketch # lambda
|
|
include markset.b
|
|
local top CAP
|
|
local bottom 0
|
|
local ds : (top - bottom) * pds
|
|
local ds2 : (top - bottom) * pds2
|
|
include : tagged 'strokeR' : dispiro
|
|
widths.center
|
|
flat yrstroker bottom [heading UPWARD]
|
|
curl yrstroker (bottom + ds) [heading UPWARD]
|
|
quadcontrols 0 dpy1 16
|
|
flat [mix yrstroker yrstrokel0 (1 - px1)] [mix (top - ds2) (bottom + ds) py1]
|
|
curl [mix yrstroker yrstrokel0 px2] [mix (top - ds2) (bottom + ds) (1 - py20)]
|
|
quadcontrols 1 (1 - dpy20) 16
|
|
flat yrstrokel0 (top - ds2) [heading UPWARD]
|
|
curl yrstrokel0 top [heading UPWARD]
|
|
end [function : set this.cleanmore true]
|
|
|
|
include : dispiro
|
|
widths.center
|
|
flat (WIDTH - yrstroker) bottom [heading UPWARD]
|
|
curl (WIDTH - yrstroker) (bottom + ds) [heading UPWARD]
|
|
quadcontrols 0 dpy1 16
|
|
flat [mix (WIDTH - yrstrokel0) (WIDTH - yrstroker) px1] [mix (top - ds2) (bottom + ds) py1]
|
|
curl MIDDLE [mix (top - ds2) (bottom + ds) [linreg (1 - px2) (1 - py20) px1 py1 ((MIDDLE - yrstrokel0) / (yrstroker - yrstrokel0))]]
|
|
end [function : set this.cleanmore true]
|
|
|
|
save 'lambda' 0x3BB
|
|
|
|
sketch # lambdaslash
|
|
include glyphs.lambda AS_BASE
|
|
include : FlatSlashShape ([tp [Upright] glyphs.l.anchors.above].x) [mix 0 CAP 0.7] (OVERLAYSTROKE / 2)
|
|
save 'lambdaslash' 0x19B
|
|
|
|
### K and k
|
|
define [KShape top] : glyph-construction
|
|
local turn (top * 0.99)
|
|
|
|
local attach (top * [if SLAB 0.325 0.375])
|
|
local attach2 [if SLAB [mix SB RIGHTSB 0.48] MIDDLE]
|
|
|
|
local fine : adviceBlackness 3.5
|
|
include : dispiro
|
|
g4.down.start (RIGHTSB) top [widths.heading 0 (STROKE * [if SLAB 1.15 1.05] * (WIDTH * 2 / UPM)) DOWNWARD]
|
|
bezcontrols 0 [if SLAB 0.1 0.2] 0.5 [if SLAB 0.55 0.65] 8
|
|
g4 (SB + STROKE) attach [widths 0 fine]
|
|
include : dispiro
|
|
widths.center
|
|
g4.up.start (RIGHTSB - O - HALFSTROKE * HVCONTRAST) 0 [heading UPWARD]
|
|
quadcontrols 0 [if SLAB 0.125 0.25] 8
|
|
g4 attach2 (top * 0.61) [widths.center fine]
|
|
if SLAB : begin
|
|
include : RightwardTopSerif (RIGHTSB - (STROKE * [if SLAB 1.15 1.05] * (WIDTH * 2 / UPM) / 2 - HALFSTROKE) * HVCONTRAST * [if para.isItalic 1 0] - HALFSTROKE * 0.5 * HVCONTRAST) top (SIDEJUT + HALFSTROKE * 0.5 * HVCONTRAST)
|
|
include : RightwardBottomSerif (RIGHTSB - O * [if para.isItalic 1 0]) 0 SIDEJUT
|
|
|
|
sketch # K
|
|
set-width WIDTH
|
|
include markset.capital
|
|
include : VBarLeft SB 0 CAP
|
|
include : KShape CAP
|
|
if SLAB : begin
|
|
include : CenterTopSerif (SB + HALFSTROKE * HVCONTRAST) CAP JUT
|
|
include : CenterBottomSerif (SB + HALFSTROKE * HVCONTRAST) 0 JUT
|
|
save 'K' 'K'
|
|
save 'Kappa' 0x39A
|
|
save 'cyrKa' 0x41A
|
|
|
|
composite nothing glyphs.cyrKa [CyrDescender (RIGHTSB - O)] [into-unicode 0x49A]
|
|
|
|
sketch # k
|
|
set-width WIDTH
|
|
include markset.b
|
|
include : VBarLeft SB 0 CAP
|
|
include : KShape XH
|
|
if SLAB : begin
|
|
include : LeftwardTopSerif SB CAP SIDEJUT
|
|
if (!para.isItalic) : begin
|
|
include : CenterBottomSerif (SB + HALFSTROKE * HVCONTRAST) 0 JUT
|
|
tag-contour 'serifLB'
|
|
|
|
save 'k' 'k'
|
|
|
|
sketch # kappa
|
|
set-width WIDTH
|
|
include markset.e
|
|
include : VBarLeft SB 0 XH
|
|
include : KShape XH
|
|
if SLAB : begin
|
|
include : LeftwardTopSerif SB XH SIDEJUT
|
|
|
|
save 'kappa' 0x3BA
|
|
|
|
sketch # cyrka
|
|
set-width WIDTH
|
|
include markset.e
|
|
include : VBarLeft SB 0 XH
|
|
include : KShape XH
|
|
if SLAB : begin
|
|
include : CenterBottomSerif (SB + HALFSTROKE * HVCONTRAST) 0 JUT
|
|
include : CenterTopSerif (SB + HALFSTROKE * HVCONTRAST) XH JUT
|
|
save 'cyrka' 0x43A
|
|
save 'latinkappa' 0x138
|
|
composite nothing glyphs.cyrka [CyrDescender (RIGHTSB - O)] [into-unicode 0x49B]
|
|
|
|
|
|
sketch # Khooktop
|
|
include markset.capital
|
|
include : KShape CAP
|
|
include : VBarLeft SB 0 (CAP - HOOK - HALFSTROKE)
|
|
include : VerticalHook (SB + HALFSTROKE * HVCONTRAST) (CAP - HOOK - HALFSTROKE) HOOKX (-HOOK)
|
|
|
|
save 'Khooktop' 0x198
|
|
|
|
sketch # khooktop
|
|
include markset.b
|
|
include : KShape XH
|
|
include : VBarLeft SB 0 (CAP - HOOK - HALFSTROKE)
|
|
include : VerticalHook (SB + HALFSTROKE * HVCONTRAST) (CAP - HOOK - HALFSTROKE) HOOKX (-HOOK)
|
|
|
|
save 'khooktop' 0x199
|
|
turned nothing 0xA7B0 'K' MIDDLE (CAP / 2)
|
|
turned nothing 0x29E 'k' MIDDLE (XH / 2) markset.p
|
|
|
|
|
|
### B
|
|
define [BShape top] : glyph-construction
|
|
local bowl : top * 0.52 + HALFSTROKE
|
|
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
|
|
flat (barleft - O) top [heading RIGHTWARD]
|
|
curl (curvleftTop - CORRECTION_OMIDS) top
|
|
archv
|
|
g4 (RIGHTSB - SB * 0.5 - OX) [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) [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
|
|
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 mid : mix RIGHTSB SB 0.65
|
|
local midy : top * BARPOS
|
|
local smb : top - [mix (midy + HALFSTROKE) (top - O - STROKE) (SMOOTHA / (SMOOTHA + SMOOTHB))] + TANSLANT * HVCONTRAST * STROKE
|
|
local sma : [mix (STROKE + O) (midy - HALFSTROKE) (SMOOTHA / (SMOOTHA + SMOOTHB))] - TANSLANT * HVCONTRAST * STROKE
|
|
include : dispiro
|
|
widths.lhs
|
|
flat mid (midy - HALFSTROKE) [heading RIGHTWARD]
|
|
curl MIDDLE (midy - HALFSTROKE)
|
|
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 + HALFSTROKE)
|
|
curl mid (midy + HALFSTROKE) [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
|
|
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
|
|
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
|
|
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 top _mul bp] : glyph-construction
|
|
local mul : fallback _mul 1.25
|
|
local bowlTop (top * 1)
|
|
local bowlBottom ((top - STROKE) * [fallback bp PBARPOS] - HALFSTROKE)
|
|
|
|
local turn : mix bowlTop bowlBottom (SMOOTHB / (SMOOTHA + SMOOTHB))
|
|
local turnRadius : (bowlTop - bowlBottom) * 0.45
|
|
include : dispiro
|
|
widths.rhs
|
|
flat (SB * mul - O) bowlTop [heading RIGHTWARD]
|
|
curl (RIGHTSB - turnRadius - CORRECTION_OMIDS) bowlTop
|
|
archv
|
|
g4 (RIGHTSB - OX) turn
|
|
arcvh
|
|
flat (RIGHTSB - turnRadius + CORRECTION_OMIDS) bowlBottom
|
|
curl (SB * mul - O) bowlBottom [heading LEFTWARD]
|
|
include : VBarLeft (SB * mul) 0 top
|
|
tag-contour 'strokeL'
|
|
if SLAB : begin
|
|
include : LeftwardTopSerif (SB * mul) top SIDEJUT
|
|
tag-contour 'serifLT'
|
|
include : CenterBottomSerif (SB * mul + HALFSTROKE * HVCONTRAST) 0 JUT
|
|
|
|
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
|
|
|
|
### p
|
|
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'
|
|
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 [RShape top] : glyph-construction
|
|
local m : if SLAB (0.5 + HALFSTROKE / CAP) PBARPOS
|
|
include : PShape top 1 m
|
|
local right (RIGHTSB - O - [if SLAB (JUT / 8) 0])
|
|
include : dispiro
|
|
widths.center
|
|
g4.up.start (right - HALFSTROKE * HVCONTRAST) 0 [heading UPWARD]
|
|
quadcontrols 0 [if SLAB 0.3 0.4] 8
|
|
g4 MIDDLE ((top - STROKE) * m)
|
|
if SLAB : begin
|
|
include : RightwardBottomSerif (RIGHTSB - JUT / 8) 0 (SIDEJUT + JUT / 8)
|
|
|
|
sketch # R
|
|
set-width WIDTH
|
|
include markset.capital
|
|
include : RShape CAP
|
|
set-anchor 'overlay' BASE (SB + STROKE * HVCONTRAST) (CAP * PBARPOS - HALFSTROKE)
|
|
save 'R' 'R'
|
|
eject-contour 'strokeL'
|
|
save 'Rrotunda' 0xA75A
|
|
|
|
sketch # smcpR
|
|
include markset.e
|
|
include : RShape XH
|
|
save 'smcpR' 0x280
|
|
eject-contour 'strokeL'
|
|
save 'rrotunda' 0xA75B
|
|
|
|
sketch # Yr
|
|
include markset.if
|
|
local top : CAP * 0.85
|
|
local bp 0.45
|
|
include : PShape top 1 bp
|
|
include : VBarLeft SB (top - 1) CAP
|
|
|
|
local TURN (XH * 0.1)
|
|
local right (RIGHTSB - O)
|
|
include : dispiro
|
|
widths.center
|
|
g4.up.start (right - HALFSTROKE) DESCENDER [heading UPWARD]
|
|
quadcontrols 0 0.4 8
|
|
g4 MIDDLE ((top - STROKE) * bp)
|
|
|
|
save 'Yr' 0x1A6
|
|
define [CyrYaShape top] : glyph-construction
|
|
local bowlTop (top * 1)
|
|
local m : if SLAB (0.5 + HALFSTROKE / CAP) PBARPOS
|
|
local bowlBottom ((top - STROKE) * m - 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])
|
|
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) * m)
|
|
|
|
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
|
|
include : CyrYaShape CAP
|
|
|
|
save 'cyrYa' 0x42F
|
|
|
|
sketch # cyrya
|
|
include markset.e
|
|
include : CyrYaShape XH
|
|
|
|
save 'cyrya' 0x44F
|
|
turned 'invsmcpR' 0x281 'cyrya' MIDDLE (XH / 2)
|
|
|
|
### r
|
|
local rbar : SB + RBALANCE + STROKE * HVCONTRAST
|
|
local [rBottomSerif y] : tagged 'serifLB' : CenterBottomSerif (rbar - HALFSTROKE * HVCONTRAST + RBALANCE * 0.35) y (JUT + RBALANCE * 0.65)
|
|
local [rTopSerif y] : tagged 'serifLT' : LeftwardTopSerif (rbar - STROKE * HVCONTRAST) y (SIDEJUT + RBALANCE * 0.3)
|
|
|
|
sketch # r
|
|
set-width WIDTH
|
|
include markset.e
|
|
|
|
local fine : SHOULDERFINE * CTHIN
|
|
local rhookx (RIGHTSB + RBALANCE2 - OXE)
|
|
local mixp : 0.54 + 2 * TANSLANT * STROKE / WIDTH
|
|
local mixpin : 0.65 + TANSLANT * [linreg 72 0.1 108 0.5 STROKE]
|
|
local rmiddle : mix (rbar - fine) rhookx mixp
|
|
local rmiddlein : [mix rbar (rhookx - STROKE * HVCONTRAST * 1.05) mixpin] - CORRECTION_OMIDS
|
|
local skew : Math.max 0 : (rmiddle - rmiddlein) / STROKE - TANSLANT * [linreg 72 0.25 108 0.75 STROKE]
|
|
include : dispiro
|
|
widths.lhs
|
|
g4 rhookx (XH - RHOOK) [heading {.y [linreg 18 (-0.45) 126 (-0.5) STROKE] .x (-1.04)}]
|
|
alsothru (0.37 - TANSLANT * 0.1) 0.72
|
|
g4.left.mid (rmiddle - CORRECTION_OMIDS * [linreg 72 0.75 108 1 STROKE]) XO [widths.heading STROKE 0 {.y (-1) .x (-skew)}]
|
|
#alsothru 0.75 [linreg 18 0.25 126 0.23 STROKE]
|
|
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 SLAB : begin
|
|
include : rBottomSerif 0
|
|
include : rTopSerif XH
|
|
save 'r' 'r'
|
|
turned nothing 0x279 'r' MIDDLE (XH / 2) [compsiteMarkSet markset.e {.anchors {.bottomright {.type BASE .x RIGHTSB - RBALANCE .y 0}}}]
|
|
|
|
sketch # rlongleg
|
|
include markset.p
|
|
include glyphs.r false
|
|
eject-contour 'serifLB'
|
|
include : VBarRight rbar DESCENDER 0
|
|
if SLAB : include : rBottomSerif DESCENDER
|
|
save 'rlongleg' 0x27C
|
|
turned nothing 0x27A 'rlongleg' MIDDLE (XH / 2) [compsiteMarkSet markset.b {.anchors {.bottomright {.type BASE .x RIGHTSB - RBALANCE .y 0}}}]
|
|
|
|
sketch # rrtail
|
|
include markset.p
|
|
include glyphs.r false
|
|
eject-contour 'serifLB'
|
|
include : create-glyph : glyph-construction
|
|
include glyphs.rtailBR
|
|
apply-transform : Upright
|
|
apply-transform : Translate rbar 0
|
|
apply-transform : Italify
|
|
save 'rrtail' 0x27D
|
|
|
|
sketch # turnrrtail
|
|
include markset.p
|
|
include glyphs.r false
|
|
eject-contour 'serifLT'
|
|
include : FlipAround MIDDLE (XH / 2)
|
|
include : create-glyph : glyph-construction
|
|
include glyphs.rtailBR
|
|
apply-transform : Upright
|
|
apply-transform : Translate (RIGHTSB - RBALANCE) 0
|
|
apply-transform : Italify
|
|
|
|
save 'turnrrtail' 0x27B
|
|
|
|
sketch # rflap
|
|
include markset.e
|
|
local rhookx (RIGHTSB + RBALANCE2 - OXE)
|
|
local rmiddle : [mix rbar (rhookx - HALFSTROKE) 0.5] - CORRECTION_OMIDS
|
|
|
|
include : dispiro
|
|
widths.lhs
|
|
g4 rhookx (XH - RHOOK)
|
|
hookstart XO
|
|
flat (rbar - STROKE * HVCONTRAST) (XH - SMALLSMOOTHA)
|
|
curl (rbar - STROKE * HVCONTRAST) 0 [heading DOWNWARD]
|
|
if SLAB : include : rBottomSerif 0
|
|
|
|
save 'rflap' 0x27E
|
|
turned nothing 0x2C79 'rrtail' MIDDLE (XH / 2)
|
|
|
|
### C and c, also cyre
|
|
define [CShape top bot] : glyph-construction
|
|
include : dispiro
|
|
widths.lhs
|
|
g4 RIGHTSB (top - HOOK)
|
|
hookstart (top - O)
|
|
flat (SB + OX) (top - SMOOTHA)
|
|
curl (SB + OX) (bot + SMOOTHB)
|
|
hookend (bot + O)
|
|
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 nothing 0x186 'C' MIDDLE (CAP / 2)
|
|
turned nothing 0x254 'c' MIDDLE (XH / 2)
|
|
|
|
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 fine : adviceBlackness 3
|
|
local rinner : ((XH * 0.45) - fine * 1.5) / 2
|
|
local m1 : SB + O + STROKE * HVCONTRAST
|
|
local x2 : SB + HALFSTROKE * 0.6
|
|
local y2 : -XH * 0.05
|
|
include : dispiro
|
|
widths.lhs
|
|
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) WIDTH] nothing [linreg 500 (0) 375 (1) WIDTH]
|
|
|
|
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)
|
|
|
|
save 'cyrYe' 0x404
|
|
|
|
sketch # cyrye
|
|
include markset.e
|
|
include glyphs.c
|
|
include : HBar SB [mix RIGHTSB SB 0.25] (XH / 2)
|
|
|
|
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
|
|
list CShape
|
|
|
|
### G
|
|
define [GShape top sma smb] : glyph-construction
|
|
local ybar : top * 0.52 + STROKE * 0.25
|
|
include : dispiro
|
|
widths.lhs
|
|
g4 RIGHTSB (top - HOOK)
|
|
hookstart (top - O)
|
|
flat (SB + OX) (top - sma)
|
|
curl (SB + OX) smb
|
|
arcvh
|
|
g4 (MIDDLE + CORRECTION_OMIDS) O
|
|
archv
|
|
flat RIGHTSB sma
|
|
curl RIGHTSB ybar [heading UPWARD]
|
|
include : dispiro
|
|
flat MIDDLE ybar [widths 0 STROKE]
|
|
curl RIGHTSB ybar [heading RIGHTWARD]
|
|
|
|
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
|
|
sketch # g.doublestorey
|
|
include markset.p
|
|
local obot : XH * GBARPOS - O - HALFSTROKE
|
|
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 - HALFSTROKE
|
|
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'
|
|
|
|
save 'g.singlestorey'
|
|
save 'scriptg' 0x261
|
|
save 'cyrde.serbian'
|
|
|
|
select-variant 'g' 'g' 'doublestorey' {
|
|
.cv11 'g.doublestorey'
|
|
.cv12 'g.singlestorey'
|
|
.cv24 'g.opendoublestorey'
|
|
}
|
|
|
|
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
|
|
|
|
sketch # gbar
|
|
include glyphs.g AS_BASE
|
|
include : HBar [mix 0 SB 0.3] [mix WIDTH RIGHTSB 0.3] glyphs.g.anchors.overlay.y [Math.min [adviceBlackness 5] (0.5 / 3 * (CAP - STROKE * 4))]
|
|
save 'gbar' 0x1E5
|
|
|
|
### 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 # 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
|
|
sketch # Q
|
|
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
|
|
#start-from MIDDLE 0
|
|
#line-to (MIDDLE + WIDTH * 0.15 - HALFSTROKE * HVCONTRAST) (-CAP * 0.2)
|
|
#line-to (MIDDLE + WIDTH * 0.15 + HALFSTROKE * HVCONTRAST) (-CAP * 0.2)
|
|
#line-to (MIDDLE + STROKE * HVCONTRAST) 0
|
|
#line-to (MIDDLE + STROKE * (1 - 0.5 / 3) * HVCONTRAST) (STROKE * 0.5)
|
|
#reverse-last
|
|
save 'Q' 'Q'
|
|
save 'cyrQa' 0x51A
|
|
|
|
### q
|
|
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 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
|
|
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 top bottom stroke oper] : glyph-construction
|
|
include : dispiro
|
|
widths.lhs
|
|
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
|
|
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
|
|
define [MShape top] : glyph-construction
|
|
local topstroke : adviceBlackness 5
|
|
local halftopstroke : topstroke / 2
|
|
|
|
include : dispiro
|
|
flat SB 0 [widths.heading 0 STROKE UPWARD]
|
|
curl SB (top * 0.2) [heading UPWARD]
|
|
straight.up.end SB top [widths.heading 0 topstroke UPWARD]
|
|
include : dispiro
|
|
flat RIGHTSB 0 [widths.heading STROKE 0 UPWARD]
|
|
curl RIGHTSB (top * 0.2) [heading UPWARD]
|
|
straight.up.end RIGHTSB top [widths.heading topstroke 0 UPWARD]
|
|
include : dispiro
|
|
flat (SB + halftopstroke) top [widths.heading topstroke 0 DOWNWARD]
|
|
curl MIDDLE (top * 0.3) [widths.heading (topstroke / 2) (topstroke / 2) DOWNWARD]
|
|
include : dispiro
|
|
flat (RIGHTSB - halftopstroke) top [widths.heading 0 topstroke DOWNWARD]
|
|
curl MIDDLE (top * 0.3) [widths.heading (topstroke / 2) (topstroke / 2) DOWNWARD]
|
|
include : AIMSerifs top
|
|
|
|
sketch # M
|
|
set-width WIDTH
|
|
include markset.capital
|
|
include : MShape CAP
|
|
save 'M' 'M'
|
|
save 'Mu' 0x39C
|
|
save 'cyrEm' 0x41C
|
|
|
|
sketch # cyrem
|
|
include markset.e
|
|
include : MShape XH
|
|
save 'cyrem' 0x43C
|
|
|
|
### m
|
|
define [SmallMShape top bot mbot] : glyph-construction
|
|
local m1 : mix (SB + O) (MIDDLE + MVERTSTROKE / 2 * HVCONTRAST) 0.5
|
|
local m2 : mix (RIGHTSB - O) (MIDDLE - MVERTSTROKE / 2 * HVCONTRAST) 0.5
|
|
include : mShoulderSpiro
|
|
left -- (SB + O + MVERTSTROKE * HVCONTRAST)
|
|
right -- (MIDDLE + MVERTSTROKE / 2 * HVCONTRAST)
|
|
top -- top
|
|
bottom -- mbot
|
|
width -- MVERTSTROKE
|
|
fine -- (MVERTSTROKE * SHOULDERFINE / STROKE)
|
|
include : mShoulderSpiro
|
|
left -- (MIDDLE + MVERTSTROKE * 0.5 * HVCONTRAST)
|
|
right -- (RIGHTSB - O)
|
|
top -- top
|
|
bottom -- bot
|
|
width -- MVERTSTROKE
|
|
fine -- (MVERTSTROKE * SHOULDERFINE / STROKE)
|
|
include : VBarLeft (SB + O) bot top MVERTSTROKE
|
|
if SLAB : begin
|
|
include : LeftwardTopSerif SB top SIDEJUT
|
|
tag-contour 'serifLT'
|
|
if (!para.isItalic) : include : LeftwardBottomSerif SB bot SIDEJUT
|
|
include : RightwardBottomSerif RIGHTSB bot SIDEJUT
|
|
tag-contour 'serifRB'
|
|
|
|
sketch # m
|
|
set-width WIDTH
|
|
include markset.e
|
|
include : SmallMShape XH 0 0
|
|
save 'm.longleg'
|
|
save 'cyrte.italic'
|
|
sketch # m
|
|
set-width WIDTH
|
|
include markset.e
|
|
include : SmallMShape XH 0 [XH * 0.2]
|
|
save 'm.shortleg'
|
|
select-variant 'm' 'm' 'longleg' {
|
|
.'cv25' 'm.longleg'
|
|
.'cv26' 'm.shortleg'
|
|
}
|
|
composite 'cyrtedescender.italic' glyphs.'cyrte.italic' [CyrDescender RIGHTSB] markset.e
|
|
|
|
sketch # mltail
|
|
include markset.p
|
|
include glyphs.m
|
|
eject-contour 'serifRB'
|
|
include : VerticalHook (RIGHTSB - O - MVERTSTROKE / 2 * HVCONTRAST) 0 (-HOOKX) HOOK MVERTSTROKE
|
|
|
|
save 'mltail' 0x271
|
|
turned nothing 0x26F 'm' MIDDLE (XH / 2)
|
|
|
|
sketch # capitalTurnm
|
|
include markset.capital
|
|
include : SmallMShape CAP 0
|
|
include : FlipAround MIDDLE (CAP / 2)
|
|
save 'capitalTurnm' 0x19C
|
|
|
|
sketch # turnmleg
|
|
include markset.p
|
|
include glyphs.m
|
|
eject-contour 'serifLT'
|
|
include : FlipAround MIDDLE (XH / 2)
|
|
include : VBarRight (RIGHTSB - O) DESCENDER 0 MVERTSTROKE
|
|
save 'turnmleg' 0x270
|
|
|
|
### H
|
|
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 nothing glyphs.cyrEn [CyrDescender RIGHTSB] [into-unicode 0x4A2]
|
|
|
|
sketch # cyren
|
|
include markset.e
|
|
include : HShape XH
|
|
save 'cyren' 0x43D
|
|
save 'smcpH' 0x29C
|
|
composite nothing 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
|
|
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 top y] : glyph-construction
|
|
include : VBarLeft (SB * 1.5) 0 [fallback top CAP]
|
|
include : HBarTop (SB * 1.5 - O) RIGHTSB [fallback top CAP]
|
|
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]])
|
|
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
|
|
|
|
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 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 * 0.91 + STROKE * 0.25
|
|
sketch # f.upright
|
|
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) {.shift 0.1 .skew 0.5}
|
|
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
|
|
if SLAB : include : dispiro
|
|
widths.lhs
|
|
flat ([mix SB RIGHTSB 0.02] + HALFSTROKE * TANSLANT) 0
|
|
curl ([mix SB RIGHTSB 0.875] + HALFSTROKE * TANSLANT) 0
|
|
|
|
save 'f.upright'
|
|
save 'lenisf' 0xAB35
|
|
|
|
sketch # fltail
|
|
include glyphs.'longs.italic' AS_BASE
|
|
include : dispiro
|
|
widths.rhs
|
|
flat (MIDDLE - LONGJUT - HALFSTROKE * TANSLANT) fbar
|
|
curl (MIDDLE + LONGJUT - HALFSTROKE * TANSLANT) fbar
|
|
save 'f.italic'
|
|
save 'fltail' 0x192
|
|
|
|
italic-variant 'f' 'f'
|
|
turned 'turnf' 0x25F 'f' MIDDLE (XH / 2) markset.p
|
|
|
|
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
|
|
|
|
* {LongSShape}
|
|
|
|
### E
|
|
define [EShape top] : glyph-construction
|
|
include : FShape top
|
|
include : HBarBottom (SB * 1.5 - O) RIGHTSB 0
|
|
if SLAB : begin
|
|
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
|
|
|
|
### e
|
|
define [SmallEShape top stroke barpos curly] : glyph-construction
|
|
local barbottom (top * [fallback barpos EBARPOS] - HALFSTROKE)
|
|
local hookx (RIGHTSB - OXHOOK + TAILADJX * TANSLANT)
|
|
local hookmiddle : [mix (SB + O) hookx 0.55] + CORRECTION_OMIDS
|
|
|
|
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 nothing stroke
|
|
g4 (RIGHTSB - OX * [if para.isItalic 0 0.5]) AHOOK
|
|
include : HBarBottom (SB + (stroke / 2) + OX) (RIGHTSB - (stroke / 2) - OX) barbottom stroke
|
|
|
|
sketch # cyrie
|
|
include markset.e
|
|
include : SmallEShape XH STROKE
|
|
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 STROKE
|
|
include : FlipAround MIDDLE (CAP / 2)
|
|
save 'turnSmallE' 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 nothing stroke
|
|
g4 (SB + O) AHOOK
|
|
include : HBarBottom (SB + (stroke / 2)) (RIGHTSB - (stroke / 2)) barbottom stroke
|
|
|
|
sketch # reve
|
|
include markset.e
|
|
include : RevSmallEShape XH STROKE
|
|
save 'reve' 0x258
|
|
|
|
list SmallEShape
|
|
|
|
### T
|
|
define [TShape top] : glyph-construction
|
|
include : VBar MIDDLE 0 top
|
|
local l : SB + OXE
|
|
local r : RIGHTSB - OXE
|
|
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
|
|
define tcenter : MIDDLE - TBALANCE - STROKE * 0.5 * HVCONTRAST
|
|
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)
|
|
g4 hookx (bot + HOOK)
|
|
include g
|
|
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
|
|
set-width WIDTH
|
|
include markset.b
|
|
include : SmallTShape CAP 0
|
|
save 't' 't'
|
|
turned nothing 0x287 't' MIDDLE (XH / 2) markset.p
|
|
|
|
sketch # tltail
|
|
include markset.if
|
|
include glyphs.t
|
|
local attach : utp currentGlyph.gizmo glyphs.t.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 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
|
|
sketch # S
|
|
set-width WIDTH
|
|
include markset.capital
|
|
define smooth : adviceSSmooth CAP (-1)
|
|
include : dispiro
|
|
widths.lhs
|
|
g4 RIGHTSB (CAP - HOOK)
|
|
hookstart CAPO
|
|
g4 SB (CAP - smooth)
|
|
alsothru 0.5 0.5 [widths (ESS / 2) (ESS / 2)]
|
|
g4 RIGHTSB smooth [widths 0 STROKE]
|
|
hookend O
|
|
g4 SB HOOK
|
|
save 'S' 'S'
|
|
save 'cyrDze' 0x405
|
|
|
|
sketch # s
|
|
set-width WIDTH
|
|
include markset.e
|
|
define smooth : adviceSSmooth XH (-1 - [linreg 18 0 126 1 STROKE] * (3 - (WIDTH / 500) * 2.5 * [linreg 18 0 126 1 STROKE]))
|
|
include : dispiro
|
|
widths.lhs
|
|
g4 (RIGHTSB + OX / 4) (XH - SHOOK)
|
|
hookstart XO
|
|
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
|
|
g4 (SB - OX / 4) SHOOK
|
|
save 's' 's'
|
|
save 'cyrdze' 0x455
|
|
|
|
sketch # revS
|
|
include markset.capital
|
|
local smooth : adviceSSmooth CAP 1
|
|
include : dispiro
|
|
widths.rhs
|
|
g4 SB (CAP - HOOK)
|
|
hookstart CAPO
|
|
g4 RIGHTSB (CAP - smooth)
|
|
alsothru 0.5 0.5 [widths (ESS / 2) (ESS / 2)]
|
|
g4 SB smooth [widths STROKE 0]
|
|
hookend O
|
|
g4 RIGHTSB HOOK
|
|
|
|
save 'revS' 0x1A7
|
|
|
|
sketch # revs
|
|
include markset.e
|
|
local smooth : adviceSSmooth XH (1 + [linreg 18 0 126 1 STROKE] * (3.25 - (WIDTH / 500) * 2 * [linreg 18 0 126 1 STROKE]))
|
|
include : dispiro
|
|
widths.rhs
|
|
g4 SB (XH - SHOOK)
|
|
hookstart XO
|
|
g4 RIGHTSB (XH - smooth)
|
|
alsothru 0.5 0.5 [widths.center ESS]
|
|
g4 SB (smooth) [widths STROKE 0]
|
|
hookend O
|
|
g4 RIGHTSB SHOOK
|
|
|
|
save 'revs' 0x1A8
|
|
save 'cyrghe.italic'
|
|
|
|
sketch # srtail
|
|
include glyphs.rtailBR
|
|
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
|
|
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
|
|
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
|
|
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 Belt VShape VHooktopShape WShape WHooktopShape YShape yBaseKnots SmallYShape KShape BShape ItalicCyrveShape PShape RShape CyrYaShape CShape GShape NShape UShape LatinUpsilon2Shape MShape SmallMShape HShape FShape fovershoot LongSShape EShape SmallEShape RevSmallEShape TShape SmallTShape]
|