Add flat-hooked Long S and Eszet (#952).
This commit is contained in:
parent
61f070d690
commit
0787efe08c
4 changed files with 122 additions and 55 deletions
|
@ -7,4 +7,5 @@
|
|||
* Add flat-arc parenthesis (#941).
|
||||
* Fixed broken shape of Motion Serifed Cyrl/Shcha (#944).
|
||||
* Add vertical-sides variants of `W` and `w` (#950).
|
||||
* Add slant-sided `M` (#953).
|
||||
* Add slant-sided `M` (#953).
|
||||
* Add flat-hooked Long S and Eszet (#952).
|
|
@ -9,6 +9,7 @@ glyph-module
|
|||
glyph-block Letter-Latin-Eszet : begin
|
||||
glyph-block-import CommonShapes
|
||||
glyph-block-import Common-Derivatives
|
||||
glyph-block-import Letter-Shared-Shapes : FlatHookDepth
|
||||
glyph-block-import Letter-Latin-S : SNeck
|
||||
|
||||
local ymiddle : [mix 0 CAP 0.5] - HalfStroke
|
||||
|
@ -19,12 +20,21 @@ glyph-block Letter-Latin-Eszet : begin
|
|||
xmiddle - 1 - Stroke * TanSlope
|
||||
Math.max (SB + Stroke * 2) [mix SB RightSB (1 / 4)]
|
||||
|
||||
define [TraditionalBody slab tail] : glyph-proc
|
||||
define [TraditionalBody fFlathook slab tail] : glyph-proc
|
||||
include : MarkSet.b
|
||||
local l : SB * 1
|
||||
include : dispiro
|
||||
local xHook : [mix SB RightSB 0.75] + HalfStroke * HVContrast
|
||||
local hd : FlatHookDepth [DivFrame 1]
|
||||
if fFlathook
|
||||
: then : include : dispiro
|
||||
flat xHook CAP [widths.lhs]
|
||||
curl (l + hd.x) CAP
|
||||
archv
|
||||
flat l (CAP - hd.y)
|
||||
curl l 0 [heading Downward]
|
||||
: else : include : dispiro
|
||||
widths.lhs
|
||||
g4 ([mix SB RightSB 0.75] + HalfStroke * HVContrast) (CAP - Hook)
|
||||
g4 xHook (CAP - Hook)
|
||||
hookstart (CAP - O)
|
||||
flat l XH
|
||||
curl l 0 [heading Downward]
|
||||
|
@ -112,8 +122,10 @@ glyph-block Letter-Latin-Eszet : begin
|
|||
if tail : include : VerticalHook (SB + 0.5 * swOuter * HVContrast) 0 (-Hook * 1.2) Hook swOuter
|
||||
if slab : include : LeftwardBottomSerif SB 0 SideJut
|
||||
|
||||
create-glyph 'eszet.traditional' : TraditionalBody SLAB false
|
||||
create-glyph 'eszet.traditionalTailed' : TraditionalBody false true
|
||||
create-glyph 'eszet.traditional' : TraditionalBody false SLAB false
|
||||
create-glyph 'eszet.traditionalTailed' : TraditionalBody false false true
|
||||
create-glyph 'eszet.traditionalFlatHook' : TraditionalBody true SLAB false
|
||||
create-glyph 'eszet.traditionalFlatHookTailed' : TraditionalBody true false true
|
||||
create-glyph 'eszet.sulzbacher' : SulzbacherBody SLAB false
|
||||
create-glyph 'eszet.sulzbacherTailed' : SulzbacherBody false true
|
||||
create-glyph 'eszet.longSSLig' : LongSSLigBody SLAB false
|
||||
|
|
|
@ -26,7 +26,7 @@ glyph-block Letter-Latin-Lower-F : begin
|
|||
if SLAB : begin
|
||||
include : tagged 'serifMB' : CenterBottomSerif (Middle - FBalance) 0 Jut
|
||||
|
||||
create-glyph 'longs.upright' : glyph-proc
|
||||
create-glyph 'longs.upright.standard' : glyph-proc
|
||||
include : MarkSet.b
|
||||
local m : Middle - JBalance - HalfStroke * HVContrast
|
||||
local r : m + (Width * 0.5) + Stroke * HVContrast - OXHook
|
||||
|
@ -40,7 +40,28 @@ glyph-block Letter-Latin-Lower-F : begin
|
|||
if SLAB : begin
|
||||
include : tagged 'serifLB' : CenterBottomSerif (m + HalfStroke * HVContrast + RBalance * 0.35) 0 (Jut + RBalance * 0.65)
|
||||
|
||||
create-derived 'longsbar.upright' : glyph-proc
|
||||
create-derived 'longsbar.upright.standard' : glyph-proc
|
||||
include : HOverlayBar
|
||||
m + HalfStroke * HVContrast - LongJut * 0.75
|
||||
m + HalfStroke * HVContrast + LongJut * 0.75
|
||||
[mix (XH - Stroke) CAP 0.5] - HalfStroke
|
||||
|
||||
create-glyph 'longs.upright.flatHook' : glyph-proc
|
||||
include : MarkSet.b
|
||||
local hd : FlatHookDepth [DivFrame 1]
|
||||
local m : Middle - JBalance - HalfStroke * HVContrast
|
||||
include : dispiro
|
||||
widths.lhs
|
||||
flat RightSB CAP
|
||||
curl (m + hd.x) CAP
|
||||
archv
|
||||
flat m (CAP - hd.y)
|
||||
curl m 0 [heading Downward]
|
||||
set-base-anchor 'overlay' (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)
|
||||
|
||||
create-derived 'longsbar.upright.flatHook' : glyph-proc
|
||||
include : HOverlayBar
|
||||
m + HalfStroke * HVContrast - LongJut * 0.75
|
||||
m + HalfStroke * HVContrast + LongJut * 0.75
|
||||
|
@ -74,7 +95,8 @@ glyph-block Letter-Latin-Lower-F : begin
|
|||
Middle + LongJut * 0.75
|
||||
[mix Stroke Descender 0.5] + HalfStroke
|
||||
|
||||
|
||||
select-variant 'longs.upright'
|
||||
select-variant 'longsbar.upright' null (follow -- 'longs.upright')
|
||||
alias 'esh' 0x283 'longs.italic'
|
||||
|
||||
create-glyph 'eshcurlytail' 0x286 : glyph-proc
|
||||
|
|
|
@ -3055,10 +3055,28 @@ selector.z = "cursiveWithHorizontalCrossBar"
|
|||
selector."zReduced" = "cursive"
|
||||
|
||||
|
||||
|
||||
[prime.long-s]
|
||||
sampler = "ſ"
|
||||
samplerExplain = "Long-S"
|
||||
tag = "cv51"
|
||||
|
||||
[prime.long-s.variants.standard]
|
||||
rank = 1
|
||||
description = "Long-S with standard hook"
|
||||
selector."longs.upright" = "standard"
|
||||
|
||||
[prime.long-s.variants.flat-hook]
|
||||
rank = 2
|
||||
description = "Long-S with flat hook"
|
||||
selector."longs.upright" = "flatHook"
|
||||
|
||||
|
||||
|
||||
[prime.eszet]
|
||||
sampler = "ß"
|
||||
samplerExplain = "Eszet"
|
||||
tag = "cv51"
|
||||
tag = "cv52"
|
||||
|
||||
[prime.eszet.variants.traditional]
|
||||
rank = 1
|
||||
|
@ -3067,27 +3085,37 @@ selector.eszet = "traditional"
|
|||
|
||||
[prime.eszet.variants.traditional-tailed]
|
||||
rank = 2
|
||||
description = "Traditional, Fraktur-like Eszet (`ß`)"
|
||||
description = "Traditional, Fraktur-like Eszet (`ß`) with descending tail"
|
||||
selector.eszet = "traditionalTailed"
|
||||
|
||||
[prime.eszet.variants.sulzbacher]
|
||||
[prime.eszet.variants.traditional-flat-hook]
|
||||
rank = 3
|
||||
description = "Traditional, Fraktur-like Eszet (`ß`) with flat hook"
|
||||
selector.eszet = "traditionalFlatHook"
|
||||
|
||||
[prime.eszet.variants.traditional-flat-hook-tailed]
|
||||
rank = 4
|
||||
description = "Traditional, Fraktur-like Eszet (`ß`) with flat hook and descending tail"
|
||||
selector.eszet = "traditionalFlatHookTailed"
|
||||
|
||||
[prime.eszet.variants.sulzbacher]
|
||||
rank = 5
|
||||
description = "More modern, beta-like Eszet (`ß`)"
|
||||
selector.eszet = "sulzbacher"
|
||||
|
||||
[prime.eszet.variants.sulzbacher-tailed]
|
||||
rank = 4
|
||||
description = "More modern, beta-like Eszet (`ß`)"
|
||||
rank = 6
|
||||
description = "More modern, beta-like Eszet (`ß`) with descending tail"
|
||||
selector.eszet = "sulzbacherTailed"
|
||||
|
||||
[prime.eszet.variants.longs-s-lig]
|
||||
rank = 5
|
||||
rank = 7
|
||||
description = "Eszet (`ß`) shown as a ligature of long-S (`ſ`) and `s`"
|
||||
selector.eszet = "longSSLig"
|
||||
|
||||
[prime.eszet.variants.longs-s-lig-tailed]
|
||||
rank = 6
|
||||
description = "Eszet (`ß`) shown as a ligature of long-S (`ſ`) and `s`"
|
||||
rank = 8
|
||||
description = "Eszet (`ß`) shown as a ligature of long-S (`ſ`) and `s`, with descending tail"
|
||||
selector.eszet = "longSSLigTailed"
|
||||
|
||||
|
||||
|
@ -3096,7 +3124,7 @@ selector.eszet = "longSSLigTailed"
|
|||
sampler = "ΛΔ"
|
||||
samplerExplain = "Greek capital Lambda (`Λ`) and Greek capital Delta (`Δ`)"
|
||||
|
||||
tag = "cv52"
|
||||
tag = "cv53"
|
||||
|
||||
[prime.turn-v.variants.straight]
|
||||
rank = 1
|
||||
|
@ -3115,7 +3143,7 @@ selector."grek/Delta" = "curly"
|
|||
[prime.lower-alpha]
|
||||
sampler = "α"
|
||||
samplerExplain = "Greek lower Alpha"
|
||||
tag = "cv53"
|
||||
tag = "cv54"
|
||||
|
||||
[prime.lower-alpha.variants.crossing]
|
||||
rank = 1
|
||||
|
@ -3132,7 +3160,7 @@ selector."grek/alpha" = "tailedBarred"
|
|||
[prime.capital-gamma]
|
||||
sampler = "Γ"
|
||||
samplerExplain = "Greek capital Gamma"
|
||||
tag = "cv54"
|
||||
tag = "cv55"
|
||||
|
||||
[prime.capital-gamma.variants.standard]
|
||||
rank = 1
|
||||
|
@ -3153,7 +3181,7 @@ selector."cyrl/ghe.upright" = "motionSerifed"
|
|||
[prime.latn-epsilon]
|
||||
sampler = "ɛ"
|
||||
samplerExplain = "Latin small Epsilon"
|
||||
tag = "cv55"
|
||||
tag = "cv56"
|
||||
|
||||
[prime.latn-epsilon.variants.serifless]
|
||||
rank = 1
|
||||
|
@ -3178,7 +3206,7 @@ selector.'latn/epsilon' = 'inwardSerifed'
|
|||
[prime.latn-reverse-epsilon]
|
||||
sampler = "ɜ"
|
||||
samplerExplain = "Latin reverse Epsilon and Cyrillic Ze"
|
||||
tag = "cv56"
|
||||
tag = "cv57"
|
||||
|
||||
[prime.latn-reverse-epsilon.variants.serifless]
|
||||
rank = 1
|
||||
|
@ -3203,7 +3231,7 @@ selector.'cyrl/ze' = 'inwardSerifed'
|
|||
[prime.lower-iota]
|
||||
sampler = "ι"
|
||||
samplerExplain = "Greek lower Iota"
|
||||
tag = "cv57"
|
||||
tag = "cv58"
|
||||
|
||||
[prime.lower-iota.variants.zshaped]
|
||||
rank = 1
|
||||
|
@ -3240,7 +3268,7 @@ selector."grek/iota" = "serifedFlatTailed"
|
|||
[prime.lower-lambda]
|
||||
sampler = "λ"
|
||||
samplerExplain = "Greek small Lambda"
|
||||
tag = "cv58"
|
||||
tag = "cv59"
|
||||
|
||||
[prime.lower-lambda.variants.straight]
|
||||
rank = 1
|
||||
|
@ -3267,7 +3295,7 @@ selector."grek/lambda" = "curlyTurn"
|
|||
[prime.cyrl-ka]
|
||||
sampler = "к"
|
||||
samplerExplain = "Cyrillic Ka"
|
||||
tag = "cv59"
|
||||
tag = "cv60"
|
||||
|
||||
[prime.cyrl-ka.variants.straight]
|
||||
rank = 1
|
||||
|
@ -3322,7 +3350,7 @@ selector."cyrl/ka" = "symmetricConnectedMotionSerifed"
|
|||
[prime.cyrl-capital-u]
|
||||
sampler = "У"
|
||||
samplerExplain = "Cyrillic Capital U"
|
||||
tag = "cv60"
|
||||
tag = "cv61"
|
||||
|
||||
[prime.cyrl-capital-u.variants.straight]
|
||||
rank = 1
|
||||
|
@ -3426,7 +3454,7 @@ selector."cyrl/lje" = "cursive"
|
|||
|
||||
[prime.zero]
|
||||
sampler = "0"
|
||||
tag = "cv61"
|
||||
tag = "cv62"
|
||||
|
||||
[prime.zero.variants.unslashed]
|
||||
rank = 1
|
||||
|
@ -3482,7 +3510,7 @@ selector.zero = "longDottedOval"
|
|||
|
||||
[prime.one]
|
||||
sampler = "1"
|
||||
tag = "cv62"
|
||||
tag = "cv63"
|
||||
|
||||
[prime.one.variants.nobase]
|
||||
rank = 1
|
||||
|
@ -3523,7 +3551,7 @@ selector.one = "baseFlatTopSerif"
|
|||
|
||||
[prime.two]
|
||||
sampler = "2"
|
||||
tag = "cv63"
|
||||
tag = "cv64"
|
||||
|
||||
[prime.two.variants.straight-neck]
|
||||
rank = 1
|
||||
|
@ -3539,7 +3567,7 @@ selector.two = "curlyNeck"
|
|||
|
||||
[prime.three]
|
||||
sampler = "3"
|
||||
tag = "cv64"
|
||||
tag = "cv65"
|
||||
|
||||
[prime.three.variants.flattop]
|
||||
rank = 1
|
||||
|
@ -3555,7 +3583,7 @@ selector.three = "twoarcs"
|
|||
|
||||
[prime.four]
|
||||
sampler = "4"
|
||||
tag = "cv65"
|
||||
tag = "cv66"
|
||||
|
||||
[prime.four.variants.closed]
|
||||
rank = 1
|
||||
|
@ -3591,7 +3619,7 @@ selector.four = "openNonCrossing"
|
|||
|
||||
[prime.five]
|
||||
sampler = "5"
|
||||
tag = "cv66"
|
||||
tag = "cv67"
|
||||
|
||||
[prime.five.variants.vertical-upper-left-bar]
|
||||
rank = 1
|
||||
|
@ -3607,7 +3635,7 @@ selector.five = "obliqueUpperLeftBar"
|
|||
|
||||
[prime.six]
|
||||
sampler = "6"
|
||||
tag = "cv67"
|
||||
tag = "cv68"
|
||||
|
||||
[prime.six.variants.closed-contour]
|
||||
rank = 1
|
||||
|
@ -3628,7 +3656,7 @@ selector.six = "straightBar"
|
|||
|
||||
[prime.seven]
|
||||
sampler = "7"
|
||||
tag = "cv68"
|
||||
tag = "cv69"
|
||||
|
||||
[prime.seven.variants.straight-serifless]
|
||||
rank = 1
|
||||
|
@ -3694,7 +3722,7 @@ selector.seven = "curlyCrossbarSerifed"
|
|||
|
||||
[prime.eight]
|
||||
sampler = "8"
|
||||
tag = "cv69"
|
||||
tag = "cv70"
|
||||
|
||||
[prime.eight.variants.crossing]
|
||||
rank = 1
|
||||
|
@ -3715,7 +3743,7 @@ selector.eight = "crossingAsymmetric"
|
|||
|
||||
[prime.nine]
|
||||
sampler = "9"
|
||||
tag = "cv70"
|
||||
tag = "cv71"
|
||||
|
||||
[prime.nine.variants.closed-contour]
|
||||
rank = 1
|
||||
|
@ -3736,7 +3764,7 @@ selector.nine = "straightBar"
|
|||
|
||||
[prime.tilde]
|
||||
sampler = "~"
|
||||
tag = "cv71"
|
||||
tag = "cv72"
|
||||
|
||||
[prime.tilde.variants.high]
|
||||
rank = 1
|
||||
|
@ -3752,7 +3780,7 @@ selector.asciiTilde = "low"
|
|||
|
||||
[prime.asterisk]
|
||||
sampler = "*"
|
||||
tag = "cv72"
|
||||
tag = "cv73"
|
||||
|
||||
[prime.asterisk.variants.high]
|
||||
rank = 1
|
||||
|
@ -3794,7 +3822,7 @@ selector."asterisk/lowered" = "turnPentaLow"
|
|||
|
||||
[prime.underscore]
|
||||
sampler = "_"
|
||||
tag = "cv73"
|
||||
tag = "cv74"
|
||||
|
||||
[prime.underscore.variants.above-baseline]
|
||||
rank = 1
|
||||
|
@ -3815,7 +3843,7 @@ selector.underscore = "low"
|
|||
|
||||
[prime.paragraph-sign]
|
||||
sampler = "¶"
|
||||
tag = "cv74"
|
||||
tag = "cv75"
|
||||
|
||||
[prime.paragraph-sign.variants.high]
|
||||
rank = 1
|
||||
|
@ -3833,7 +3861,7 @@ selector.revertParagraph = "low"
|
|||
|
||||
[prime.caret]
|
||||
sampler = "^"
|
||||
tag = "cv75"
|
||||
tag = "cv76"
|
||||
|
||||
[prime.caret.variants.high]
|
||||
rank = 1
|
||||
|
@ -3854,7 +3882,7 @@ selector.asciiCaret = "low"
|
|||
|
||||
[prime.paren]
|
||||
sampler = "( )"
|
||||
tag = "cv76"
|
||||
tag = "cv77"
|
||||
|
||||
[prime.paren.variants.normal]
|
||||
rank = 1
|
||||
|
@ -3878,7 +3906,7 @@ selector.parenRight = "flatArc"
|
|||
|
||||
[prime.brace]
|
||||
sampler = "{ }"
|
||||
tag = "cv77"
|
||||
tag = "cv78"
|
||||
|
||||
[prime.brace.variants.straight]
|
||||
rank = 1
|
||||
|
@ -3896,7 +3924,7 @@ selector.braceRight = "curly"
|
|||
|
||||
[prime.number-sign]
|
||||
sampler = "#"
|
||||
tag = "cv78"
|
||||
tag = "cv79"
|
||||
|
||||
[prime.number-sign.variants.upright]
|
||||
rank = 1
|
||||
|
@ -3922,7 +3950,7 @@ selector.numberSign = "slantedOpen"
|
|||
|
||||
[prime.ampersand]
|
||||
sampler = "&"
|
||||
tag = "cv79"
|
||||
tag = "cv80"
|
||||
|
||||
[prime.ampersand.variants.closed]
|
||||
rank = 1
|
||||
|
@ -3963,7 +3991,7 @@ selector.ampersand = "flatTop"
|
|||
|
||||
[prime.at]
|
||||
sampler = "@"
|
||||
tag = "cv80"
|
||||
tag = "cv81"
|
||||
|
||||
[prime.at.variants.threefold]
|
||||
rank = 1
|
||||
|
@ -3984,7 +4012,7 @@ selector.at = "short"
|
|||
|
||||
[prime.dollar]
|
||||
sampler = "$"
|
||||
tag = "cv81"
|
||||
tag = "cv82"
|
||||
|
||||
[prime.dollar.variants.open]
|
||||
rank = 1
|
||||
|
@ -4020,7 +4048,7 @@ selector.dollar = "interruptedCap"
|
|||
|
||||
[prime.cent]
|
||||
sampler = "¢"
|
||||
tag = "cv82"
|
||||
tag = "cv83"
|
||||
|
||||
[prime.cent.variants.open]
|
||||
rank = 1
|
||||
|
@ -4041,7 +4069,7 @@ selector.cent = "barInterrupted"
|
|||
|
||||
[prime.percent]
|
||||
sampler = "%"
|
||||
tag = "cv83"
|
||||
tag = "cv84"
|
||||
|
||||
[prime.percent.variants.dots]
|
||||
rank = 1
|
||||
|
@ -4075,7 +4103,7 @@ selector."permille.WWID" = "ringsContinuousSlashAlsoConnected"
|
|||
|
||||
[prime.bar]
|
||||
sampler = "|"
|
||||
tag = "cv84"
|
||||
tag = "cv85"
|
||||
slopeDependent = true
|
||||
|
||||
[prime.bar.variants.natural-slope]
|
||||
|
@ -4092,7 +4120,7 @@ selector."bar.italic" = "forceUpright"
|
|||
|
||||
[prime.lig-ltgteq]
|
||||
sampler = "<= >="
|
||||
tag = "cv85"
|
||||
tag = "cv86"
|
||||
|
||||
[prime.lig-ltgteq.variants.flat]
|
||||
rank = 1
|
||||
|
@ -4110,7 +4138,7 @@ selector."eq.at-gteq.lig2" = "slanted"
|
|||
|
||||
[prime.ascii-single-quote]
|
||||
sampler = "'"
|
||||
tag = "cv86"
|
||||
tag = "cv87"
|
||||
|
||||
[prime.ascii-single-quote.variants.straight]
|
||||
rank = 1
|
||||
|
@ -4126,7 +4154,7 @@ selector.asciiSingleQuote = "raisedComma"
|
|||
|
||||
[prime.ascii-grave]
|
||||
sampler = "`"
|
||||
tag = "cv87"
|
||||
tag = "cv88"
|
||||
|
||||
[prime.ascii-grave.variants.straight]
|
||||
rank = 1
|
||||
|
@ -4147,7 +4175,7 @@ selector.asciiGrave = "raisedTurnComma"
|
|||
|
||||
[prime.question]
|
||||
sampler = "?"
|
||||
tag = "cv88"
|
||||
tag = "cv89"
|
||||
|
||||
[prime.question.variants.smooth]
|
||||
rank = 1
|
||||
|
@ -4218,6 +4246,7 @@ w = "straight"
|
|||
x = "straight-serifless"
|
||||
z = "straight-serifless"
|
||||
# Non-latin
|
||||
long-s = "standard"
|
||||
turn-v = "straight"
|
||||
lower-alpha = "crossing"
|
||||
capital-gamma = "standard"
|
||||
|
@ -4436,6 +4465,7 @@ description = "Consolas Style"
|
|||
[composite.ss03.design]
|
||||
capital-g = "toothless-corner-serifless-hooked"
|
||||
capital-k = "symmetric-touching"
|
||||
capital-m = "slanted-sides-hanging"
|
||||
a = "double-storey"
|
||||
d = "toothed-serifless"
|
||||
g = "double-storey"
|
||||
|
@ -4526,6 +4556,7 @@ description = "Fira Mono Style"
|
|||
[composite.ss05.design]
|
||||
capital-g = "toothless-corner-serifless-hooked"
|
||||
capital-k = "symmetric-touching"
|
||||
capital-m = "slanted-sides-hanging"
|
||||
a = "double-storey-tailed"
|
||||
e = "flat-crossbar"
|
||||
f = "serifless"
|
||||
|
@ -4891,6 +4922,7 @@ l = "serifed-flat-tailed"
|
|||
u = "toothless-rounded"
|
||||
w = "straight-flat-top"
|
||||
y = "straight"
|
||||
long-s = "flat-hook"
|
||||
lower-alpha = "tailed-barred"
|
||||
cyrl-ka = "symmetric-connected"
|
||||
cyrl-capital-u = "straight"
|
||||
|
@ -4936,7 +4968,7 @@ r = "compact-serifed"
|
|||
t = "flat-hook"
|
||||
u = "toothed"
|
||||
y = "straight-turn"
|
||||
eszet = "traditional"
|
||||
eszet = "traditional-flat-hook"
|
||||
lower-lambda = "straight-turn"
|
||||
cyrl-capital-u = "straight-turn"
|
||||
zero = "dotted"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue