Iosevka/glyphs/common-shapes.patel

139 lines
No EOL
4.5 KiB
Text

### COMMON SHAPES
define [Ring u d l r] : begin {
local my [[u + d] / 2]
local mx [[l + r] / 2]
local s : new Stroke
:.set-transform globalTransform
:.start-from mx d
:.cubic-to [mx + [l - mx] * BKAPPA] d l [my + [d - my] * BKAPPA] l my
:.cubic-to l [my + [u - my] * BKAPPA] [mx + [l - mx] * BKAPPA] u mx u
:.cubic-to [mx + [r - mx] * BKAPPA] u r [my + [u - my] * BKAPPA] r my
:.cubic-to r [my + [d - my] * BKAPPA] [mx + [r - mx] * BKAPPA] d mx d
return s.points
}
define [ORing u d l r smooth] : begin {
local myu [u - smooth]
local myd [d + smooth]
local mx [[l + r] / 2]
local s : new Stroke
:.set-transform globalTransform
:.start-from mx d
:.cubic-to [mx + [l - mx] * BKAPPA] d l [myd + [d - myd] * BKAPPA] l myd
:.line-to l myu
:.cubic-to l [myu + [u - myu] * BKAPPA] [mx + [l - mx] * BKAPPA] u mx u
:.cubic-to [mx + [r - mx] * BKAPPA] u r [myu + [u - myu] * BKAPPA] r myu
:.line-to r myd
:.cubic-to r [myd + [d - myd] * BKAPPA] [mx + [r - mx] * BKAPPA] d mx d
return s.points
}
define [leftwardTopSerif x y length] : begin {
return : new Stroke
:.set-transform globalTransform
:.start-from [x + HALFSTROKE] y
:.heads-to LEFTWARD
:.set-width STROKE 0
:.line-to [x - length - globalTransform.yx * STROKE] y
:.to-outline
}
define [leftwardBottomSerif x y length] : begin {
return : new Stroke
:.set-transform globalTransform
:.start-from [x + HALFSTROKE] y
:.heads-to LEFTWARD
:.set-width 0 STROKE
:.line-to [x - length + globalTransform.yx * STROKE] y
:.to-outline
}
define [rightwardTopSerif x y length] : begin {
return : new Stroke
:.set-transform globalTransform
:.start-from [x - HALFSTROKE] y
:.heads-to RIGHTWARD
:.set-width 0 STROKE
:.line-to [x + length - globalTransform.yx * STROKE] y
:.to-outline
}
define [rightwardBottomSerif x y length] : begin {
return : new Stroke
:.set-transform globalTransform
:.start-from [x - HALFSTROKE] y
:.heads-to RIGHTWARD
:.set-width STROKE 0
:.line-to [x + length + globalTransform.yx * STROKE] y
:.to-outline
}
define [sStrand leftlimit rightlimit _expansion _roundp] : begin {
local expansion : _expansion || 0.25
local roundsize : [SMOOTHA * [_roundp || 0.4]] * [if [leftlimit < rightlimit] [-1] 1]
local roundleft [leftlimit - roundsize]
local roundright [rightlimit + roundsize]
local sxleft [SB + HALFSTROKE + [RIGHTSB - SB - STROKE] * [0.5 - expansion]]
local sxright [WIDTH - sxleft]
local syleft [roundleft + [roundright - roundleft] * [0.5 - expansion]]
local syright [roundleft + [roundright - roundleft] * [0.5 + expansion]]
return : new Stroke
:.set-transform globalTransform
:.start-from [SB + HALFSTROKE] leftlimit
:.set-width HALFSTROKE HALFSTROKE
:.curve-to [SB + HALFSTROKE] roundleft sxleft syleft
:.line-to sxright syright
:.curve-to [RIGHTSB - HALFSTROKE] roundright [RIGHTSB - HALFSTROKE] rightlimit
:.to-outline
}
define [nBowl left middle right fine] : begin {
local bandLeft : new Stroke
:.set-transform globalTransform
:.start-from right 0
:.heads-to UPWARD
:.set-width STROKE 0
:.line-to right [XH - SMALLSMOOTHB]
:.arc-vh-to middle XO
:.heads-to LEFTWARD
:.to-outline
local bandRight : new Stroke
:.set-transform globalTransform
:.start-from middle [XO - STROKE]
:.set-width 0 STROKE
:.heads-to LEFTWARD
:.arc-hv-to left [XH - SMALLSMOOTHA]
:.heads-to DOWNWARD
:.set-width 0 fine
:.to-outline
return : bandLeft.concat bandRight
}
define [sHookUpper top smooth hook] : begin {
return : new Stroke
:.set-transform globalTransform
:.start-from [RIGHTSB - OXHOOK] [top - hook]
:.set-width STROKE 0
:.curve-to [MIDDLE + KAPPA_HOOK * [MIDDLE - para.sb]] [top - O] MIDDLE [top - O]
:.heads-to LEFTWARD
:.arc-hv-to SB [top - smooth]
:.to-outline
}
define [twoHookUpper top smooth hook] : begin {
return : new Stroke
:.set-transform globalTransform
:.start-from [SB + OXHOOK] [top - hook]
:.set-width 0 STROKE
:.curve-to [MIDDLE - KAPPA_HOOK * [MIDDLE - para.sb]] [top - O] MIDDLE [top - O]
:.heads-to RIGHTWARD
:.arc-hv-to RIGHTSB [top - smooth]
:.to-outline
}
define [sHookLower bottom smooth hook] : begin {
return : new Stroke
:.set-transform globalTransform
:.start-from RIGHTSB smooth
:.set-width 0 STROKE
:.arc-vh-to MIDDLE [bottom + O]
:.heads-to LEFTWARD
:.curve-to [MIDDLE - KAPPA_HOOK * [MIDDLE - para.sb]] [bottom + O] [SB + OXHOOK] [bottom + hook]
:.to-outline
}