Merge branch 'dev'
|
@ -111,9 +111,9 @@ The current available styles for `design`/`upright`/`italic`/`oblique` options a
|
|||
- All glyphs wider than one letter would be deleted.
|
||||
- In case of your OS or editor cannot handle ligatures correctly, you can disable ligations with it.
|
||||
- `termlig` : Similar to `term`, the font is exact monospace to make `fontconfig` happy, while ligations are still present.
|
||||
- `nolig` : Disable ligation only.
|
||||
- `type` : Make some symbols, like arrows (`→`) and mathematical operators full-width.
|
||||
- `stress-fw` : When included, full-width characters varying form `U+FF00` to `U+FFFF` will be boxed to present a clear distinguish between ASCII and Full-width.
|
||||
- `no-ligation` : Disable ligation only.
|
||||
- `no-cv-ss` : Prevent generation of `cv##` and `ss##` features.
|
||||
- `type` : Make some symbols, like arrows (`→`) full-width.
|
||||
* All registered `ss##` and `cv##` feature tags, including:
|
||||
* `ss01`~`ss10` : Predefined stylistic sets based on other Monospace fonts.
|
||||
* `cv01`~`cv53` : Standalone character variants.
|
||||
|
|
|
@ -123,16 +123,26 @@ design = ["term", "ss11"]
|
|||
|
||||
[buildPlans.iosevka-aile]
|
||||
family = "Iosevka Aile"
|
||||
design = ["type", "shape-straight-bar", "diversity-1", "v-at-fourfold", "v-j-straight", 'v-capital-i-straight', 'v-capital-j-straight']
|
||||
upright = ["v-i-line", "v-l-line"]
|
||||
italic = ["v-i-tailed", "v-l-tailed"]
|
||||
design = ["type", "shape-straight-bar", "v-at-fourfold", "v-j-narrow", 'v-capital-i-straight', 'v-capital-j-straight', 'v-g-singlestorey', 'v-r-narrow', "no-cv-ss", "no-ligation"]
|
||||
upright = ["v-i-line", "v-l-line", 'v-f-narrow', 'v-t-narrow']
|
||||
italic = ["v-i-line", "v-l-line", 'v-f-narrow', 'v-t-narrow']
|
||||
|
||||
[buildPlans.iosevka-aile.post]
|
||||
design = ['wd-expanded', "diversity-2"]
|
||||
|
||||
[buildPlans.iosevka-etoile]
|
||||
family = "Iosevka Etoile"
|
||||
design = ["type", "slab", "shape-straight-bar", "diversity-1", "v-at-fourfold", 'v-j-serifed']
|
||||
design = ["type", "slab", "shape-straight-bar", "diversity-1", "v-at-fourfold", 'v-j-serifed', 'no-cv-ss', "no-cv-ss", "no-ligation"]
|
||||
upright = ['v-i-serifed', 'v-l-serifed']
|
||||
italic = ['v-i-italic', 'v-l-italic']
|
||||
|
||||
[buildPlans.iosevka-extended]
|
||||
family = "Iosevka Extended"
|
||||
design = ["shape-straight-bar"]
|
||||
|
||||
[buildPlans.iosevka-extended.post]
|
||||
design = ['wd-expanded']
|
||||
|
||||
# Export plans
|
||||
# This mapping affects the process of creating ZIP archives only
|
||||
[exportPlans]
|
||||
|
@ -166,6 +176,9 @@ iosevka-ss10 = "iosevka-ss10"
|
|||
iosevka-term-ss10 = "iosevka-term-ss10"
|
||||
iosevka-ss11 = "iosevka-ss11"
|
||||
iosevka-term-ss11 = "iosevka-term-ss11"
|
||||
experimental-iosevka-aile = "iosevka-aile"
|
||||
experimental-iosevka-extended = "iosevka-extended"
|
||||
experimental-iosevka-etoile = "iosevka-etoile"
|
||||
|
||||
# TTC collection plans
|
||||
[collectPlans.iosevka]
|
||||
|
|
|
@ -41,7 +41,7 @@ export as build : define [buildFont para recursive recursiveCodes] : begin
|
|||
return nothing
|
||||
|
||||
define metrics : calculateMetrics para
|
||||
define [object globalTransform MIDDLE CAP XH SB RIGHTSB CONTRAST STROKE SUPERNESS WIDTH TANSLANT OVERLAYPOS DESCENDER MVERTSTROKE_D symbolMid parenTop parenBot operTop operBot plusTop plusBot tackTop tackBot] metrics
|
||||
define [object globalTransform UPM MIDDLE CAP XH SB RIGHTSB CONTRAST STROKE SUPERNESS WIDTH TANSLANT OVERLAYPOS DESCENDER MVERTSTROKE_D symbolMid parenTop parenBot operTop operBot plusTop plusBot tackTop tackBot adviceBlackness] metrics
|
||||
|
||||
# Anchor parameters
|
||||
define [object MARK BASE] Anchor
|
||||
|
@ -94,13 +94,17 @@ export as build : define [buildFont para recursive recursiveCodes] : begin
|
|||
|
||||
define markset : MarksetDiv 1
|
||||
|
||||
define [DivFrame _div] : begin
|
||||
define [DivFrame _div _hPack] : begin
|
||||
local div : fallback _div 1
|
||||
local hPack : Math.max 2 [fallback _hPack 0]
|
||||
local sbMul : Math.min 1 : (WIDTH * div - hPack * [adviceBlackness hPack div]) / (2 * hPack * SB)
|
||||
return : object
|
||||
div div
|
||||
width : WIDTH * div
|
||||
middle : MIDDLE * div
|
||||
rightSB : WIDTH * div - SB
|
||||
sb : SB * sbMul
|
||||
leftSB : SB * sbMul
|
||||
rightSB : WIDTH * div - SB * sbMul
|
||||
mvs : MVERTSTROKE_D div
|
||||
markSet: MarksetDiv div
|
||||
|
||||
|
@ -198,8 +202,9 @@ export as build : define [buildFont para recursive recursiveCodes] : begin
|
|||
|
||||
# Space
|
||||
sketch # space
|
||||
set-width WIDTH
|
||||
include markset.e
|
||||
local df : DivFrame para.diversityF
|
||||
set-width df.width
|
||||
include df.markSet.e
|
||||
save 'space' ' '
|
||||
|
||||
# IDKY, but wrapping "metrics" prevents Node.js on Arch modifying it.
|
||||
|
|
|
@ -298,7 +298,7 @@ export : define [apply] : begin
|
|||
local pendingGlyphs : records.map : [record] => record.1
|
||||
return : Miniature
|
||||
glyphs -- [pendingGlyphs.reduce : [a b] => [a.concat b]]
|
||||
crowd -- [fallback para.smallCrowd 3.75]
|
||||
crowd -- 5
|
||||
scale -- 0.65
|
||||
unfair -- true
|
||||
|
||||
|
@ -503,9 +503,10 @@ export : define [apply] : begin
|
|||
local pendingGlyphs : records.map : [record] => record.1
|
||||
local miniatureFont : Miniature
|
||||
glyphs -- pendingGlyphs
|
||||
crowd -- [fallback para.smallCrowd 3.5]
|
||||
crowd -- 4
|
||||
scale -- 0.7
|
||||
unfair -- true
|
||||
mono -- true
|
||||
foreach {unicode glyphid pri} [items-of records] : create-glyph [suggestName : 'sup' + glyphid] : glyph-construction
|
||||
if unicode : assign-unicode unicode
|
||||
local middle : miniatureFont.(glyphid).advanceWidth / 2
|
||||
|
@ -522,9 +523,10 @@ export : define [apply] : begin
|
|||
local pendingGlyphs : records.map : [record] => record.1
|
||||
local miniatureFont : Miniature
|
||||
glyphs -- pendingGlyphs
|
||||
crowd -- [fallback para.smallCrowd 3.5]
|
||||
crowd -- 4
|
||||
scale -- 0.7
|
||||
unfair -- true
|
||||
mono -- true
|
||||
foreach {unicode glyphid pri} [items-of records] : create-glyph [suggestName : 'sub' + glyphid] : glyph-construction
|
||||
if unicode : assign-unicode unicode
|
||||
local middle : miniatureFont.(glyphid).advanceWidth / 2
|
||||
|
@ -543,6 +545,10 @@ export : define [apply] : begin
|
|||
set forkedParams.cap0 para.cap
|
||||
set forkedParams.cap XH
|
||||
set forkedParams.xheight (XH * XH / CAP)
|
||||
set forkedParams.diversityM 1
|
||||
set forkedParams.diversityF 1
|
||||
set forkedParams.diversityI 1
|
||||
set forkedParams.diversityII 1
|
||||
local sf : Fork pendingGlyphs forkedParams
|
||||
foreach {unicode glyphid tfm} [items-of records] : create-glyph [suggestName : 'smcp' + glyphid] : glyph-construction
|
||||
if unicode : assign-unicode unicode
|
||||
|
@ -554,9 +560,10 @@ export : define [apply] : begin
|
|||
local pendingGlyphs : records.map : [record] => record.1
|
||||
local miniatureFont : Miniature
|
||||
glyphs -- pendingGlyphs
|
||||
crowd -- [fallback para.smallCrowd2 3.5]
|
||||
crowd -- 4
|
||||
scale -- 0.7
|
||||
unfair -- true
|
||||
mono -- true
|
||||
foreach {unicode glyphid} [items-of records] : create-glyph [suggestName : 'comb' + glyphid] : glyph-construction
|
||||
set-width 0
|
||||
if unicode : assign-unicode unicode
|
||||
|
@ -924,9 +931,9 @@ export : define [apply] : begin
|
|||
if wide : begin
|
||||
sketch
|
||||
include df2.(c2)
|
||||
include : Translate WIDTH 0
|
||||
include : Translate df1.(c1).advanceWidth 0
|
||||
include df1.(c1)
|
||||
set-width UPM
|
||||
set-width (df1.(c1).advanceWidth + df2.(c2).advanceWidth)
|
||||
save glyphName unicode
|
||||
: else
|
||||
local kern : SB * 7/8 * (shrink1 + shrink2)
|
||||
|
@ -984,7 +991,7 @@ export : define [apply] : begin
|
|||
list 0xAE {'R'} FULLWIDTH2
|
||||
list 0x2117 {'P'} FULLWIDTH2
|
||||
list 0x24EA {'zero'} FULLWIDTH1
|
||||
if [not para.disableVariants] : compositions.push { null {'space'} FULLWIDTH1 }
|
||||
compositions.push { null {'space'} FULLWIDTH1 }
|
||||
foreach [j : range 1 till 20] : compositions.push : list
|
||||
0x2460 + j - 1
|
||||
[(j+'').split ''].map : c => unicodeGlyphs.(['0'.charCodeAt 0] + (c - 0)).name
|
||||
|
@ -1017,7 +1024,7 @@ export : define [apply] : begin
|
|||
|
||||
if [not recursive] : let : begin
|
||||
local compositions {}
|
||||
if [not para.disableVariants] : compositions.push { null {'space'} FULLWIDTH1 }
|
||||
compositions.push { null {'space'} FULLWIDTH1 }
|
||||
foreach [j : range 0 26] : compositions.push {(0x1F130 + j) {unicodeGlyphs.(['A'.charCodeAt 0] + j).name} FULLWIDTH1}
|
||||
createBoxedGlyphs compositions
|
||||
|
||||
|
@ -1028,7 +1035,7 @@ export : define [apply] : begin
|
|||
|
||||
if [not recursive] : let : begin
|
||||
local compositions {}
|
||||
if [not para.disableVariants] : compositions.push { null {'space'} FULLWIDTH1 }
|
||||
compositions.push { null {'space'} FULLWIDTH1 }
|
||||
foreach [j : range 1 till 10] : compositions.push : list
|
||||
0x24F5 + j - 1
|
||||
[(j+'').split ''].map : c => unicodeGlyphs.(['0'.charCodeAt 0] + (c - 0)).name
|
||||
|
@ -1037,7 +1044,7 @@ export : define [apply] : begin
|
|||
|
||||
if [not recursive] : let : begin
|
||||
local compositions {}
|
||||
if [not para.disableVariants] : compositions.push { null {'space'} FULLWIDTH1 }
|
||||
compositions.push { null {'space'} FULLWIDTH1 }
|
||||
foreach [j : range 1 till 20] : compositions.push : list
|
||||
0x2474 + j - 1
|
||||
[(j+'').split ''].map : c => unicodeGlyphs.(['0'.charCodeAt 0] + (c - 0)).name
|
||||
|
@ -1103,14 +1110,6 @@ export : define [apply] : begin
|
|||
if para.fullwidth_codes : foreach [j : items-of para.fullwidth_codes] : begin
|
||||
if (unicodeGlyphs.(j) && unicodeGlyphs.(j).advanceWidth < 1000) : begin
|
||||
a.push {j unicodeGlyphs.(j).name}
|
||||
|
||||
if (!para.noCJKV || para.makeFFXX) : begin
|
||||
foreach [j : range 1 0x5f] : begin
|
||||
if [not unicodeGlyphs.(0xff00 + j)] : begin
|
||||
a.push {(0xff00 + j) unicodeGlyphs.(0x20 + j).name}
|
||||
a.push {0xFFE0 'cent'}
|
||||
a.push {0xFFE1 'sterling'}
|
||||
a.push {0xFFE5 'yen'}
|
||||
* a
|
||||
|
||||
if para.stressFW : begin
|
||||
|
|
|
@ -18,15 +18,15 @@ export : define [apply] : begin
|
|||
set introduced true
|
||||
return : if introduced fs null
|
||||
|
||||
define [select-variant name unicode altname altmap] : begin
|
||||
define [select-variant] : params [name unicode [to-name name] transform [follow name]] : begin
|
||||
if (pickHash && [not pickHash.(name)]) : return nothing
|
||||
local variant : variantSelector.(name) || para.defaultVariant.(name)
|
||||
local variant : variantSelector.(follow) || para.defaultVariant.(follow)
|
||||
if [not variant] : begin
|
||||
throw : new Error "Variant for \(name) is not assigned."
|
||||
if (altmap && altmap.(variant)) : set variant altmap.(variant)
|
||||
if (transform && transform.(variant)) : set variant transform.(variant)
|
||||
local chosenGlyph glyphs.((name + '.' + variant))
|
||||
|
||||
create-glyph [fallback altname name] : glyph-construction
|
||||
create-glyph [fallback to-name name] : glyph-construction
|
||||
include chosenGlyph AS_BASE ALSO_METRICS
|
||||
if unicode : assign-unicode unicode
|
||||
set currentGlyph.featureSelector : queryFeatureSelector name para
|
||||
|
@ -282,25 +282,25 @@ export : define [apply] : begin
|
|||
define [LeftwardTopSerif x y length _sw] : glyph-construction
|
||||
local sw : fallback _sw STROKE
|
||||
include : dispiro
|
||||
flat (x + HALFSTROKE * HVCONTRAST) y [widths.heading sw 0 LEFTWARD]
|
||||
flat (x + sw / 2 * HVCONTRAST) y [widths.heading sw 0 LEFTWARD]
|
||||
curl (x - length - TANSLANT * (sw * SERIF_SHIFT_X)) y
|
||||
|
||||
define [LeftwardBottomSerif x y length _sw] : glyph-construction
|
||||
local sw : fallback _sw STROKE
|
||||
include : dispiro
|
||||
flat (x + HALFSTROKE * HVCONTRAST) y [widths.heading 0 sw LEFTWARD]
|
||||
flat (x + sw / 2 * HVCONTRAST) y [widths.heading 0 sw LEFTWARD]
|
||||
curl (x - length + TANSLANT * (sw * SERIF_SHIFT_X)) y
|
||||
|
||||
define [RightwardTopSerif x y length _sw] : glyph-construction
|
||||
local sw : fallback _sw STROKE
|
||||
include : dispiro
|
||||
flat (x - HALFSTROKE * HVCONTRAST) y [widths.heading 0 sw RIGHTWARD]
|
||||
flat (x - sw / 2 * HVCONTRAST) y [widths.heading 0 sw RIGHTWARD]
|
||||
curl (x + length - TANSLANT * (sw * SERIF_SHIFT_X)) y
|
||||
|
||||
define [RightwardBottomSerif x y length _sw] : glyph-construction
|
||||
local sw : fallback _sw STROKE
|
||||
include : dispiro
|
||||
flat (x - HALFSTROKE * HVCONTRAST) y [widths.heading sw 0 RIGHTWARD]
|
||||
flat (x - sw / 2 * HVCONTRAST) y [widths.heading sw 0 RIGHTWARD]
|
||||
curl (x + length + TANSLANT * (sw * SERIF_SHIFT_X)) y
|
||||
|
||||
define [CenterTopSerif x y length _sw] : glyph-construction
|
||||
|
@ -416,8 +416,6 @@ export : define [apply] : begin
|
|||
curl rightx righty
|
||||
end [function : set this.cleanmore true]
|
||||
|
||||
|
||||
|
||||
define [xStrand _leftx lefty _rightx righty turn straight tension] : glyph-construction
|
||||
local middlex : mix _leftx _rightx 0.5
|
||||
local middley : mix lefty righty 0.5
|
||||
|
@ -445,7 +443,7 @@ export : define [apply] : begin
|
|||
|
||||
define [mShoulderSpiro] : params [left right top bottom width fine diversity] : glyph-construction
|
||||
local fix : TANSLANT * STROKE * HVCONTRAST * width / STROKE
|
||||
local sm : SMALLSMOOTH * 0.7
|
||||
local sm : SMALLSMOOTH * 0.7 * [fallback diversity 1]
|
||||
include : spiro-outline
|
||||
corner (right - width * HVCONTRAST) bottom
|
||||
curl (right - width * HVCONTRAST) (top - sm + fix)
|
||||
|
@ -670,7 +668,7 @@ export : define [apply] : begin
|
|||
: else : throw ex
|
||||
return forkFont.glyfMap
|
||||
|
||||
define [Miniature] : params [glyphs crowd scale [slantAngle para.slantAngle] unfair [sbscale 0.5]] : begin
|
||||
define [Miniature] : params [glyphs crowd scale [slantAngle para.slantAngle] unfair [sbscale (WIDTH / UPM)] [mono false]] : begin
|
||||
local forkedPara : Object.create para
|
||||
forkedPara.stroke = [adviceBlackness crowd] / scale
|
||||
forkedPara.ess = para.ess * forkedPara.stroke / para.stroke
|
||||
|
@ -679,6 +677,8 @@ export : define [apply] : begin
|
|||
forkedPara.sb = SB * sbscale
|
||||
forkedPara.slantAngle = slantAngle
|
||||
forkedPara.unfair = unfair
|
||||
if mono : begin
|
||||
forkedPara.diversityM = 1
|
||||
return : Fork glyphs forkedPara
|
||||
|
||||
define [Thinner glyphs p] : begin
|
||||
|
@ -688,9 +688,6 @@ export : define [apply] : begin
|
|||
forkedPara.jut = JUT * p
|
||||
forkedPara.longjut = LONGJUT * p
|
||||
forkedPara.diversityM = 1
|
||||
forkedPara.diversityM = 1
|
||||
forkedPara.diversityI = 1
|
||||
forkedPara.diversityF = 1
|
||||
#forkedPara.hookx = HOOKX * p
|
||||
return : Fork glyphs forkedPara
|
||||
|
||||
|
|
|
@ -754,18 +754,19 @@ export : define [apply] : begin
|
|||
set-width 0
|
||||
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
||||
|
||||
local hsw : [adviceBlackness 3.5] / STROKE * markHalfStroke
|
||||
local extend : (belowMarkTop - belowMarkBot - markHalfStroke) * 1.25
|
||||
|
||||
include : dispiro
|
||||
g4.down.start (markMiddle - extend) belowMarkTop [widths.heading markHalfStroke markHalfStroke DOWNWARD]
|
||||
g4.down.start (markMiddle - extend) belowMarkTop [widths.heading hsw hsw DOWNWARD]
|
||||
arcvh
|
||||
g4.right.mid [mix markMiddle (markMiddle - extend) 0.5] (belowMarkBot + markHalfStroke) [heading RIGHTWARD]
|
||||
g4.right.mid [mix markMiddle (markMiddle - extend) 0.5] (belowMarkBot + hsw) [heading RIGHTWARD]
|
||||
archv
|
||||
g4.up.end markMiddle belowMarkTop [heading UPWARD]
|
||||
include : dispiro
|
||||
g4.down.start markMiddle belowMarkTop [widths.heading markHalfStroke markHalfStroke DOWNWARD]
|
||||
g4.down.start markMiddle belowMarkTop [widths.heading hsw hsw DOWNWARD]
|
||||
arcvh
|
||||
g4.right.mid [mix markMiddle (markMiddle + extend) 0.5] (belowMarkBot + markHalfStroke) [heading RIGHTWARD]
|
||||
g4.right.mid [mix markMiddle (markMiddle + extend) 0.5] (belowMarkBot + hsw) [heading RIGHTWARD]
|
||||
archv
|
||||
g4.up.end (markMiddle + extend) belowMarkTop [heading UPWARD]
|
||||
|
||||
|
@ -1177,13 +1178,14 @@ export : define [apply] : begin
|
|||
local fine : 0.3 * OVERLAYSTROKE
|
||||
local dx : WIDTH * 0
|
||||
local dy : WIDTH * 0.3
|
||||
local gap : Math.max (fine * 2) (WIDTH / 8)
|
||||
set-anchor 'slash' MARK markMiddle (XH / 2) markMiddle (XH / 2)
|
||||
include : dispiro
|
||||
flat (MIDDLE - dx - WIDTH - fine * 2) (XH / 2 - dy) [widths fine fine]
|
||||
curl (MIDDLE + dx - WIDTH - fine * 2) (XH / 2 + dy)
|
||||
flat (MIDDLE - dx - WIDTH - gap) (XH / 2 - dy) [widths fine fine]
|
||||
curl (MIDDLE + dx - WIDTH - gap) (XH / 2 + dy)
|
||||
include : dispiro
|
||||
flat (MIDDLE - dx - WIDTH + fine * 2) (XH / 2 - dy) [widths fine fine]
|
||||
curl (MIDDLE + dx - WIDTH + fine * 2) (XH / 2 + dy)
|
||||
flat (MIDDLE - dx - WIDTH + gap) (XH / 2 - dy) [widths fine fine]
|
||||
curl (MIDDLE + dx - WIDTH + gap) (XH / 2 + dy)
|
||||
save 'arrDblVStrokeOver'
|
||||
|
||||
sketch # slashOver
|
||||
|
|
|
@ -280,7 +280,7 @@ export : define [apply] : begin
|
|||
arrow ArrowShape 'arrowrightSK' null (arrowSB + fine / 2) symbolMid arrowRSB symbolMid
|
||||
arrow ArrowShape 'arrowupSK' null arrowMidX (arrowBot + fine / 2) arrowMidX arrowTop
|
||||
arrow ArrowShape 'arrowdownSK' null arrowMidX (arrowTop - fine / 2) arrowMidX arrowBot
|
||||
arrow ArrowShape 'arrowupleftTK' null arrowRSB arrowBot arrowSB (arrowTop - fine * 1.5)
|
||||
arrow ArrowShape 'arrowupleftTK' null arrowRSB arrowBot arrowSB (arrowTop - [Math.max (arrowWidth / 8) (fine * 1.5)])
|
||||
|
||||
composite 'arrowbarleft' glyphs.arrowleftK [VBar arrowSB (symbolMid - arrowSize) (symbolMid + arrowSize) fine] [into-unicode 0x21E4]
|
||||
composite 'arrowbarright' glyphs.arrowrightK [VBar arrowRSB (symbolMid - arrowSize) (symbolMid + arrowSize) fine] [into-unicode 0x21E5]
|
||||
|
|
|
@ -181,9 +181,11 @@ export : define [apply] : begin
|
|||
save 'liraSymbol' 0x20A4
|
||||
|
||||
sketch # won
|
||||
include glyphs.W AS_BASE
|
||||
include : HOverlayBar [mix SB 0 0.7] [mix RIGHTSB WIDTH 0.7] (CAP * 0.6)
|
||||
include : HOverlayBar [mix SB 0 0.7] [mix RIGHTSB WIDTH 0.7] (CAP * 0.35)
|
||||
local df : DivFrame para.diversityM
|
||||
set-width df.width
|
||||
include glyphs.W AS_BASE ALSO_METRICS
|
||||
include : HOverlayBar [mix SB 0 0.7] [mix df.rightSB df.width 0.7] (CAP * 0.6)
|
||||
include : HOverlayBar [mix SB 0 0.7] [mix df.rightSB df.width 0.7] (CAP * 0.35)
|
||||
save 'won' 0x20A9
|
||||
|
||||
sketch # frenchFranc
|
||||
|
|
|
@ -15,9 +15,11 @@ export : define [apply] : begin
|
|||
save 'micro' 0xB5
|
||||
|
||||
sketch # forall
|
||||
include : LambdaShape OPERATORSTROKE
|
||||
include : LambdaShape CAP OPERATORSTROKE para.straightBar
|
||||
eject-contour 'serif'
|
||||
include : HBar (SB + OPERATORSTROKE) (RIGHTSB - OPERATORSTROKE) (XH / 2) OPERATORSTROKE
|
||||
include : intersection
|
||||
DeltaMaskShape CAP OPERATORSTROKE para.straightBar
|
||||
HBar 0 WIDTH (XH / 2) OPERATORSTROKE
|
||||
include : FlipAround MIDDLE (CAP / 2)
|
||||
|
||||
save 'forall' 0x2200
|
||||
|
@ -44,10 +46,7 @@ export : define [apply] : begin
|
|||
|
||||
sketch # increment
|
||||
include markset.capital
|
||||
include : LambdaShape OPERATORSTROKE
|
||||
eject-contour 'serif'
|
||||
include : HBarBottom (SB + (OPERATORSTROKE / 2)) (RIGHTSB - (OPERATORSTROKE / 2)) 0 OPERATORSTROKE
|
||||
|
||||
include : DeltaShape CAP OPERATORSTROKE para.straightBar
|
||||
save 'increment' 0x2206
|
||||
turned 'nabla' 0x2207 'increment' MIDDLE (CAP / 2)
|
||||
|
||||
|
|
|
@ -232,7 +232,7 @@ export : define [apply] : begin
|
|||
include : VBarLeft (l + hsp) (nsBot - (MIDDLE - l - hsp) * skew) (nsTop - (MIDDLE - l - hsp) * skew) fine
|
||||
include : VBarRight (r - hsp) (nsBot - (MIDDLE - r + hsp) * skew) (nsTop - (MIDDLE - r + hsp) * skew) fine
|
||||
save-glyph 'flatTone' 0x266D : sketch
|
||||
local yTerminal : mix nsBot nsTop 0.5
|
||||
local yTerminal : mix nsBot nsTop 0.55
|
||||
local curly 0.65
|
||||
local curly2 1.1
|
||||
local curly3 0.3
|
||||
|
@ -245,7 +245,7 @@ export : define [apply] : begin
|
|||
widths.lhs fine
|
||||
g4 l (nsBot - 1)
|
||||
alsothru 0.5 curly3
|
||||
g4.up.mid (r - O + 1) ([mix nsBot yTerminal curly] + (r - l) * skew) [widths.lhs (fine + 1)]
|
||||
g4.up.mid (r - O + 1) ([mix nsBot yTerminal curly] + (r - l) * skew - TANSLANT * para.smoothadjust) [widths.lhs (fine + 1)]
|
||||
g4.left.mid ([mix l r 0.5] - CORRECTION_OMIDX * fine) ([mix nsBot yTerminal curly2] + (r - l) * skew / 2 + 1)
|
||||
g4 l (yTerminal + 1)
|
||||
difference
|
||||
|
@ -253,7 +253,7 @@ export : define [apply] : begin
|
|||
corner l (nsBot - UPM)
|
||||
corner l nsBot
|
||||
alsothru 0.5 curly3
|
||||
g4.up.mid (r - O) ([mix nsBot yTerminal curly] + (r - l) * skew)
|
||||
g4.up.mid (r - O) ([mix nsBot yTerminal curly] + (r - l) * skew - TANSLANT * para.smoothadjust)
|
||||
g4.left.mid ([mix l r 0.5] - CORRECTION_OMIDX * fine) ([mix nsBot yTerminal curly2] + (r - l) * skew / 2)
|
||||
corner l yTerminal
|
||||
corner l (yTerminal + 1)
|
||||
|
@ -271,7 +271,7 @@ export : define [apply] : begin
|
|||
corner (l - UPM) nsTop
|
||||
corner (l - UPM) (nsBot - UPM)
|
||||
save-glyph 'neutralTone' 0x266E : sketch
|
||||
local k 0.25
|
||||
local k : 0.25 - (STROKE * 0.25 / (nsTop - nsBot))
|
||||
local kr 0.5
|
||||
local ll (l + hsp * kr)
|
||||
local rr (r - hsp * kr)
|
||||
|
@ -487,8 +487,9 @@ export : define [apply] : begin
|
|||
local startY : symbolMid - offsetY * (n - 1) / 2
|
||||
local bar : adviceBlackness n
|
||||
local fine : adviceBlackness 5
|
||||
include : HBar SB (MIDDLE - fine / 2 * HVCONTRAST) (startY + offsetY * m) bar
|
||||
include : HBar (MIDDLE + fine / 2 * HVCONTRAST) RIGHTSB (startY + offsetY * m) bar
|
||||
local gap : Math.max (WIDTH / 8) (fine)
|
||||
include : HBar SB (MIDDLE - gap / 2 * HVCONTRAST) (startY + offsetY * m) bar
|
||||
include : HBar (MIDDLE + gap / 2 * HVCONTRAST) RIGHTSB (startY + offsetY * m) bar
|
||||
|
||||
define [yang m n] : glyph-construction
|
||||
local offsetY : (2 / 3) * (operBot - operTop) / n
|
||||
|
|
|
@ -251,12 +251,6 @@ export : define [apply] : begin
|
|||
include : FlipAround MIDDLE (CAP / 2)
|
||||
save 'gnaborretni' 0x2E18
|
||||
|
||||
if (!para.noCJKV) : sketch # dwquestion
|
||||
set-width UPM
|
||||
include : QuestionShape CAP questionBottom (UPM * 0.25) (UPM * 0.75)
|
||||
include : Ring (DOTSIZE - O) O (UPM / 2 - DOTRADIUS + O) (UPM / 2 + DOTRADIUS - O) true
|
||||
save 'dwquestion' 0xFF1F
|
||||
|
||||
sketch # questionDown
|
||||
set-width WIDTH
|
||||
include glyphs.question
|
||||
|
@ -551,7 +545,9 @@ export : define [apply] : begin
|
|||
Italify
|
||||
|
||||
select-variant 'asterisk' '*'
|
||||
select-variant 'asterisk' nothing 'asterisk.dfltlow' {.high 'low' .hexhigh 'hexlow'}
|
||||
select-variant 'asterisk' nothing
|
||||
to-name -- 'asterisk.dfltlow'
|
||||
transform -- {.high 'low' .hexhigh 'hexlow'}
|
||||
|
||||
do "Slashes and numbersign"
|
||||
define slashDefautLeft : SB + HALFSTROKE
|
||||
|
@ -1009,8 +1005,8 @@ export : define [apply] : begin
|
|||
local m : mix l r (1 / 2)
|
||||
local sma : SMOOTHA * 0.5 * para.diversityM
|
||||
local smb : SMOOTHB * 0.5 * para.diversityM
|
||||
local sw : adviceBlackness 4 para.diversityM
|
||||
local fine : adviceBlackness 5 para.diversityM
|
||||
local sw : adviceBlackness2 5 4 CAP para.diversityM
|
||||
local fine : adviceBlackness2 5 5 CAP para.diversityM
|
||||
local cor : HVCONTRAST / [Math.sqrt (1 - [Math.pow ((r - l - sw) / (CAP - 0)) 2])]
|
||||
local pTerm : (fine / 2) / [Math.hypot CAP (r - l)]
|
||||
local pFine : 1 / 2 - (STROKE / 2) / [Math.hypot CAP (r - l)]
|
||||
|
@ -1045,9 +1041,9 @@ export : define [apply] : begin
|
|||
local l2 : r1 + gap
|
||||
local r2 : l2 + fill
|
||||
local l3 : r2 + gap
|
||||
local swp : adviceBlackness 6
|
||||
local smap : SMOOTHA * (1/3)
|
||||
local smbp : SMOOTHB * (1/3)
|
||||
local swp : adviceBlackness2 5 6.5 CAP para.diversityM
|
||||
local smap : SMOOTHA * (1/3) * para.diversityM
|
||||
local smbp : SMOOTHB * (1/3) * para.diversityM
|
||||
include : OShape otop 0 l1 r1 swp smap smbp
|
||||
include : OShape otop 0 l2 r2 swp smap smbp
|
||||
include : OShape otop 0 l3 r3 swp smap smbp
|
||||
|
@ -1079,79 +1075,3 @@ export : define [apply] : begin
|
|||
alias 'mdfRevComma' 0x2BD 'revertSingleQuote'
|
||||
alias 'mdfStress' 0x2C8 'singleQuote'
|
||||
turned 'mdfSecondaryStress' 0x2CC 'singleQuote' MIDDLE (XH / 2)
|
||||
|
||||
|
||||
if [not para.noCJKV] : do 'Double-width punctuations'
|
||||
dwc nothing 0xFF01 'exclam'
|
||||
dwc nothing 0xFF1A 'colon'
|
||||
dwc nothing 0xFF1B 'semicolon'
|
||||
dwl nothing 0xFF0C 'comma'
|
||||
dwl nothing 0xFF0E 'period'
|
||||
|
||||
local parenDist (WIDTH * 0.15)
|
||||
dwr nothing 0xFF08 'parenLeft' (-parenDist)
|
||||
dwl nothing 0xFF09 'parenRight' (parenDist)
|
||||
composite 'opbdParenLeft' glyphs.parenLeft [Translate (-parenDist) 0]
|
||||
composite 'opbdParenRight' glyphs.parenRight [Translate (parenDist) 0]
|
||||
|
||||
local r : Math.max PERIODRADIUS (WIDTH * 0.225)
|
||||
local ry : r * 0.25
|
||||
sketch
|
||||
include : CircleDotAt MIDDLE ry (r + PERIODRADIUS * 0.5)
|
||||
include : CircleDotAt MIDDLE ry (r - PERIODRADIUS * 0.4)
|
||||
reverse-last
|
||||
branch
|
||||
set-width FULLWIDTH1
|
||||
save "dwlcjkperiod" 0x3002
|
||||
branch
|
||||
save 'cjkperiod' 0xFF61
|
||||
sketch
|
||||
local k 0.9
|
||||
include : dispiro
|
||||
widths.center
|
||||
g4 (MIDDLE - r * 1.1) (ry + r * (k - 0.2))
|
||||
quadcontrols 0.5 0.45
|
||||
g4 (MIDDLE + r) (ry + r * (-k - 0.35))
|
||||
branch
|
||||
set-width FULLWIDTH1
|
||||
save "dwlcjkcomma" 0x3001
|
||||
branch
|
||||
save 'cjkcomma' 0xFF64
|
||||
|
||||
local cjkqd 0.75
|
||||
local cjkqd2 0.97
|
||||
local ideotop : para.ideoMid + (parenTop - symbolMid)
|
||||
local ideobot : para.ideoMid - (parenTop - symbolMid)
|
||||
sketch # cjkSingleQuoteLeft
|
||||
include : HBarTop [mix SB RIGHTSB designParameters.bracketOutside] [mix SB RIGHTSB designParameters.bracketInside] [mix ideobot ideotop cjkqd2]
|
||||
include : VBarLeft [mix SB RIGHTSB designParameters.bracketOutside] [mix ideotop ideobot cjkqd] [mix ideobot ideotop cjkqd2]
|
||||
save 'cjkSingleQuoteLeft' 0xFF62
|
||||
sketch # cjkSingleQuoteRight
|
||||
include glyphs.cjkSingleQuoteLeft
|
||||
include : FlipAround MIDDLE symbolMid
|
||||
save 'cjkSingleQuoteRight' 0xFF63
|
||||
|
||||
sketch # cjkDoubleQuoteLeft
|
||||
local sw : adviceBlackness 6
|
||||
local dw : [Math.max (WIDTH * 0.175) [adviceBlackness 3.25]] + sw * 2
|
||||
local outside : mix SB RIGHTSB designParameters.bracketOutside
|
||||
local inside : mix SB RIGHTSB designParameters.bracketInside
|
||||
local top : mix ideobot ideotop cjkqd2
|
||||
local bottom : mix ideotop ideobot cjkqd
|
||||
|
||||
include : VBarLeft outside bottom top sw
|
||||
include : HBarTop outside inside top sw
|
||||
include : VBarRight inside top (top - dw) sw
|
||||
include : HBarBottom outside (outside + dw) bottom sw
|
||||
include : VBarRight (outside + dw) bottom (top - dw + sw) sw
|
||||
include : HBarBottom (outside + dw) inside (top - dw) sw
|
||||
save 'cjkDoubleQuoteLeft'
|
||||
sketch # cjkSingleQuoteRight
|
||||
include glyphs.cjkDoubleQuoteLeft
|
||||
include : FlipAround MIDDLE symbolMid
|
||||
save 'cjkDoubleQuoteRight'
|
||||
|
||||
dwr nothing 0x300C 'cjkSingleQuoteLeft'
|
||||
dwl nothing 0x300D 'cjkSingleQuoteRight'
|
||||
dwr nothing 0x300E 'cjkDoubleQuoteLeft'
|
||||
dwl nothing 0x300F 'cjkDoubleQuoteRight'
|
Before Width: | Height: | Size: 137 KiB After Width: | Height: | Size: 137 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 124 KiB After Width: | Height: | Size: 124 KiB |
Before Width: | Height: | Size: 413 KiB After Width: | Height: | Size: 414 KiB |
Before Width: | Height: | Size: 184 KiB After Width: | Height: | Size: 184 KiB |
Before Width: | Height: | Size: 175 KiB After Width: | Height: | Size: 175 KiB |
Before Width: | Height: | Size: 349 KiB After Width: | Height: | Size: 350 KiB |
Before Width: | Height: | Size: 706 KiB After Width: | Height: | Size: 704 KiB |
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 333 KiB After Width: | Height: | Size: 333 KiB |
|
@ -101,10 +101,12 @@ export : define [calculateMetrics para] : begin
|
|||
define ONEBALANCE : fallback para.onebalance 0
|
||||
|
||||
# derived metrics
|
||||
define FULLWIDTH : if (para.spacing >= 2) UPM WIDTH
|
||||
define FULLWIDTH1 : if (para.spacing >= 1) UPM WIDTH
|
||||
define FULLWIDTH2 : if (para.spacing >= 2) UPM WIDTH
|
||||
define FULLWIDTH3 : if (para.spacing >= 3) UPM WIDTH
|
||||
define NO_DIVERSITY : para.diversityM == 1 && para.diversityF == 1 && para.diversityI == 1 && para.diversityII == 1
|
||||
define fullWidthRaw : if NO_DIVERSITY (WIDTH * 2) UPM
|
||||
define FULLWIDTH : if (para.spacing >= 2) fullWidthRaw WIDTH
|
||||
define FULLWIDTH1 : if (para.spacing >= 1) fullWidthRaw WIDTH
|
||||
define FULLWIDTH2 : if (para.spacing >= 2) fullWidthRaw WIDTH
|
||||
define FULLWIDTH3 : if (para.spacing >= 3) fullWidthRaw WIDTH
|
||||
|
||||
define OXE : OX - O
|
||||
define ESS : STROKE * [fallback para.essx CONTRAST]
|
||||
|
@ -134,6 +136,7 @@ export : define [calculateMetrics para] : begin
|
|||
# We will estimate blackness using lower-case 'e'
|
||||
define WHITENESS : ((XH - STROKE * 3) * (RIGHTSB - SB) * (1 / 3)) / (XH * (RIGHTSB - SB))
|
||||
define [adviceBlackness crowdedness div] : Math.min STROKE (((WIDTH * [fallback div 1]) - SB * 2) * (1 - WHITENESS) / (crowdedness * HVCONTRAST))
|
||||
define [adviceBlackness2 cowX cowY refH div] : Math.min [adviceBlackness cowX (refH / WIDTH)] [adviceBlackness cowY div]
|
||||
define [MVERTSTROKE_D div] : adviceBlackness [fallback para.lllcrowdedness (3 + 1 / 3)] div
|
||||
define MVERTSTROKE : MVERTSTROKE_D 1
|
||||
define OVERLAYSTROKE : adviceBlackness 3.75
|
||||
|
@ -144,8 +147,9 @@ export : define [calculateMetrics para] : begin
|
|||
define SUPERNESS : fallback para.superness 2
|
||||
define [superxy x] : Math.pow (1 - [Math.pow x SUPERNESS]) (1 / SUPERNESS)
|
||||
|
||||
define [adviceSSmooth y sign] : begin
|
||||
local ss : y * 0.21 + STROKE * 0.22 * [clamp 1 2 : linreg 126 1 137 1.025 STROKE] + 0.035 * (RIGHTSB - SB)
|
||||
define [adviceSSmooth y sign _stroke] : begin
|
||||
local stroke : fallback _stroke STROKE
|
||||
local ss : y * 0.21 + stroke * 0.22 * [clamp 1 2 : linreg 126 1 137 1.025 stroke] + 0.035 * (RIGHTSB - SB)
|
||||
return : ss + sign * TANSLANT * para.smoothadjust * (ss / SMALLSMOOTH)
|
||||
define [adviceGlottalStopSmooth y sign] : ((y - STROKE) * 0.24 + STROKE * 0.625) + sign * TANSLANT * para.smoothadjust
|
||||
define [shoulderMidSlope _fine _stroke _dir] : 0.5 * HVCONTRAST * ([fallback _stroke STROKE] - [fallback _fine SHOULDERFINE]) / [fallback _stroke STROKE] + [fallback _dir 1] * TANSLANT
|
||||
|
@ -160,7 +164,7 @@ export : define [calculateMetrics para] : begin
|
|||
TAILADJX TAILADJY LBALANCE IBALANCE LBALANCE2 IBALANCE2 JBALANCE JBALANCE2 TBALANCE TBALANCE2 RBALANCE RBALANCE2
|
||||
FBALANCE ONEBALANCE FULLWIDTH FULLWIDTH1 FULLWIDTH2 FULLWIDTH3 OXE ESS ESSQUESTION XO CAPO HALFSTROKE RIGHTSB FWRSB
|
||||
MIDDLE FWMIDDLE CAPMIDDLE CAP_SMOOTH DOTRADIUS PERIODRADIUS SIDEJUT SMOOTHA SMOOTHB SMALLSMOOTHA SMALLSMOOTHB CORRECTION_OMIDX CORRECTION_OMIDS
|
||||
WHITENESS adviceBlackness MVERTSTROKE MVERTSTROKE_D OVERLAYSTROKE OPERATORSTROKE GEOMETRYSTROKE SHOULDERFINE SUPERNESS superxy
|
||||
WHITENESS adviceBlackness adviceBlackness2 MVERTSTROKE MVERTSTROKE_D OVERLAYSTROKE OPERATORSTROKE GEOMETRYSTROKE SHOULDERFINE SUPERNESS superxy
|
||||
adviceSSmooth adviceGlottalStopSmooth shoulderMidSlope]
|
||||
|
||||
export : define [setFontMetrics para metrics font] : begin
|
||||
|
|
|
@ -66,12 +66,10 @@ define [buildGSUB para glyphs glyphList markGlyphs] : begin
|
|||
return subtable
|
||||
|
||||
buildCCMP chain-rule markGlyphs commonList features lookups
|
||||
if [not para.disableLigation] : do
|
||||
if para.enableLigation : do
|
||||
define plm : progLigNameMap
|
||||
set plm.calt : para.customLigSet || plm.(para.defLigSet) || plm.calt
|
||||
buildLigations chain-rule lookupOrder commonList features lookups plm glyphs
|
||||
if (para.spacing > 0 && [not para.noCJKV]) : begin
|
||||
buildOPBD chain-rule lookupOrder commonList features lookups
|
||||
|
||||
# locl, SRB
|
||||
local srbSubtable null
|
||||
|
@ -107,7 +105,7 @@ define [buildGSUB para glyphs glyphList markGlyphs] : begin
|
|||
set lookups.locl_bgr {.type 'gsub_single' .subtables {bgrSubtable}}
|
||||
set features.locl_bgr {'locl_bgr'}
|
||||
|
||||
if [not para.disableVariants] : begin
|
||||
if para.enableCvSs : begin
|
||||
# cvxx
|
||||
foreach [glyph : items-of glyphList] : if glyph.featureSelector : begin
|
||||
local fs glyph.featureSelector
|
||||
|
|
|
@ -139,9 +139,9 @@ define-macro glyph-module-entry : syntax-rules
|
|||
|
||||
overmarks `[define [object markExtend markHalfStroke markStress markFine markMiddle markDotsRadius aboveMarkTop aboveMarkBot aboveMarkMid belowMarkBot belowMarkTop commaOvershoot commaOvershoot2 commaAboveRadius TildeShape] $capture.overmarks]
|
||||
|
||||
letterBasic `[define [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] $capture.letterBasic]
|
||||
letterBasic `[define [object ISerifShape IotaShape LShape VShape YShape yBaseKnots SmallYShape KShape PShape NShape UShape FShape LongSShape EShape SmallEShape RevSmallEShape] $capture.letterBasic]
|
||||
|
||||
letterExt `[define [object LambdaShape SigmaShape PiShape EzhShape] $capture.letterExt]
|
||||
letterExt `[define [object LambdaShape DeltaShape DeltaMaskShape SigmaShape PiShape EzhShape] $capture.letterExt]
|
||||
geometricSymbols `[define [object ArrowShape] $capture.geometricSymbols]
|
||||
|
||||
local opts : _opts.map formOf
|
||||
|
@ -160,7 +160,7 @@ define-macro glyph-module-entry : syntax-rules
|
|||
TAILADJX TAILADJY LBALANCE IBALANCE LBALANCE2 IBALANCE2 JBALANCE JBALANCE2 TBALANCE TBALANCE2 RBALANCE RBALANCE2
|
||||
FBALANCE ONEBALANCE FULLWIDTH FULLWIDTH1 FULLWIDTH2 FULLWIDTH3 OXE ESS ESSQUESTION XO CAPO HALFSTROKE RIGHTSB FWRSB
|
||||
MIDDLE FWMIDDLE CAPMIDDLE CAP_SMOOTH DOTRADIUS PERIODRADIUS SIDEJUT SMOOTHA SMOOTHB SMALLSMOOTHA SMALLSMOOTHB CORRECTION_OMIDX CORRECTION_OMIDS
|
||||
WHITENESS adviceBlackness MVERTSTROKE MVERTSTROKE_D OVERLAYSTROKE OPERATORSTROKE GEOMETRYSTROKE SHOULDERFINE SUPERNESS superxy
|
||||
WHITENESS adviceBlackness adviceBlackness2 MVERTSTROKE MVERTSTROKE_D OVERLAYSTROKE OPERATORSTROKE GEOMETRYSTROKE SHOULDERFINE SUPERNESS superxy
|
||||
adviceSSmooth adviceGlottalStopSmooth shoulderMidSlope] metrics
|
||||
define [object
|
||||
g4 g2 corner flat curl close end straight
|
||||
|
|
|
@ -110,7 +110,7 @@ export : define [assignFontNames para metrics font] : begin
|
|||
bold : not : not isBold
|
||||
italic : not : not (isItalic || isOblique)
|
||||
|
||||
if (para.diversityM == 1 && para.diversityF == 1 && para.diversityI == 1) : begin
|
||||
if (para.diversityM == 1 && para.diversityF == 1 && para.diversityI == 1 && para.diversityII == 1) : begin
|
||||
set font.OS_2.panose.3 9 # Monospaced
|
||||
set font.post.isFixedPitch true
|
||||
: else : begin
|
||||
|
|
|
@ -11,17 +11,11 @@
|
|||
"stylus": "stylus"
|
||||
},
|
||||
"dependencies": {
|
||||
"bezier-js": "^2.2.3",
|
||||
"caryll-shapeops": "^0.3.1",
|
||||
"change-case": "^3.0.2",
|
||||
"colors": "^1.3.3",
|
||||
"libspiro-js": "^0.3.1",
|
||||
"megaminx": "^0.9.0",
|
||||
"object-assign": "^4.1.1",
|
||||
"otfcc-ttcize": "^0.8.0",
|
||||
"pad": "^1.1.0",
|
||||
"patel": "^0.33.1",
|
||||
"patrisika-scopes": "^0.11.1",
|
||||
"primitive-quadify-off-curves": "^0.4.0",
|
||||
"toml": "^2.3.2",
|
||||
"topsort": "0.0.2",
|
||||
|
@ -32,6 +26,9 @@
|
|||
"yargs": "^12.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"colors": "^1.3.3",
|
||||
"patel": "^0.33.1",
|
||||
"patrisika-scopes": "^0.11.1",
|
||||
"eslint": "^5.2.0",
|
||||
"stylus": "^0.54.5"
|
||||
}
|
||||
|
|
|
@ -81,13 +81,17 @@ powerlineShiftX = 0 # Horizontal shift
|
|||
# Full-width codes
|
||||
fullwidth_codes = []
|
||||
|
||||
# Comment the line below to enable CJKV glyph generation
|
||||
noCJKV = true
|
||||
|
||||
# Diversity widths
|
||||
diversityM = 1
|
||||
diversityF = 1
|
||||
diversityI = 1
|
||||
diversityII = 1
|
||||
|
||||
# Whether to generate CV-SS features
|
||||
enableCvSs = true
|
||||
|
||||
# Whether to generate ligation
|
||||
enableLigation = true
|
||||
|
||||
[verbose]
|
||||
verbose = true
|
||||
|
@ -222,15 +226,12 @@ sb = 1.1
|
|||
### Spacings
|
||||
[term]
|
||||
spacing = 0
|
||||
disableLigation = true
|
||||
enableLigation = false
|
||||
|
||||
# Term variant with ligations
|
||||
[termlig]
|
||||
spacing = 0
|
||||
|
||||
[nolig]
|
||||
disableLigation = true
|
||||
|
||||
[type]
|
||||
inherits = ["xx-type"]
|
||||
spacing = 2
|
||||
|
@ -244,8 +245,8 @@ spacing = 3
|
|||
# HANDLE WITH EXTREME CARE
|
||||
# Expanded : I heard someone want it being wider...
|
||||
[wd-expanded.multiplies]
|
||||
width = 1.15
|
||||
sb = 1.15
|
||||
width = 1.152 # 576mem for normal char
|
||||
sb = 1.375
|
||||
[expanded]
|
||||
inherits = ['wd-expanded']
|
||||
|
||||
|
@ -263,7 +264,23 @@ straightBar = 1
|
|||
|
||||
[diversity-1]
|
||||
diversityM = 1.25
|
||||
diversityF = 1.00
|
||||
diversityI = 0.75
|
||||
diversityII = 0.75
|
||||
|
||||
[diversity-2]
|
||||
diversityM = 1.25
|
||||
diversityF = 0.75
|
||||
diversityI = 0.75
|
||||
diversityII = 0.5
|
||||
|
||||
[no-ligation]
|
||||
enableLigation = false
|
||||
[nolig] # For compatibility
|
||||
enableLigation = false
|
||||
|
||||
[no-cv-ss]
|
||||
enableCvSs = false
|
||||
|
||||
###### Full-width codes
|
||||
[xx-type]
|
||||
|
@ -328,10 +345,6 @@ fullwidth_codes = [
|
|||
8712, #∈
|
||||
]
|
||||
|
||||
# stress-fw : force distinguish full-widths
|
||||
[stress-fw]
|
||||
stressFW = true
|
||||
|
||||
# Default ligation set configuration
|
||||
[ligset-haskell]
|
||||
defLigSet = "XHS0"
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
extern isFinite
|
||||
import 'bezier-js' as Bezier
|
||||
import './point' as Point
|
||||
import './transform' as : Transform && [object [transformPoint tp] [untransform utp] inverse]
|
||||
import './anchor' as Anchor
|
||||
|
|
|
@ -259,30 +259,40 @@ permille = "rings"
|
|||
basepoint = "rings"
|
||||
tag = "cv63"
|
||||
|
||||
# "Untagged" variants, used for Aile, etc.
|
||||
|
||||
[simple.v-i-tailed]
|
||||
dotlessi = 'tailed'
|
||||
tag = "cv64"
|
||||
|
||||
[simple.v-j-straight]
|
||||
dotlessj = "straight"
|
||||
tag = "cv65"
|
||||
|
||||
[simple.v-capital-i-straight]
|
||||
I = "straight"
|
||||
tag = "cv66"
|
||||
I = "line" # set on purpose to use II diversity
|
||||
|
||||
[simple.v-capital-i-serifed]
|
||||
I = "serifed"
|
||||
tag = "cv67"
|
||||
|
||||
[simple.v-capital-j-straight]
|
||||
J = "straight"
|
||||
tag = "cv68"
|
||||
|
||||
[simple.v-capital-j-serifed]
|
||||
J = 'serifed'
|
||||
tag = "cv69"
|
||||
|
||||
[simple.v-f-narrow]
|
||||
f = 'narrow'
|
||||
|
||||
[simple.v-t-narrow]
|
||||
t = 'narrow'
|
||||
|
||||
[simple.v-r-standard]
|
||||
r = "standard"
|
||||
|
||||
[simple.v-r-narrow]
|
||||
r = "narrow"
|
||||
|
||||
[simple.v-j-narrow]
|
||||
dotlessj = "narrow"
|
||||
|
||||
[default]
|
||||
design = [
|
||||
|
@ -305,6 +315,7 @@ design = [
|
|||
'v-percent-rings',
|
||||
'v-capital-i-serifed',
|
||||
'v-capital-j-serifed',
|
||||
'v-r-standard',
|
||||
'others'
|
||||
]
|
||||
upright = [
|
||||
|
|
|
@ -235,6 +235,7 @@ const BuildTTF = files(`${BUILD}/*/*.ttf`, async (target, path) => {
|
|||
await run(GC, ["-i", ttfTmp], ["-o", otd]);
|
||||
await run("otfccbuild", otd, "-o", path.full, "-O3", "--keep-average-char-width", "-q");
|
||||
await rm(otdTmp);
|
||||
await rm(ttfTmp);
|
||||
await rm(otd);
|
||||
});
|
||||
const BuildCM = files(`${BUILD}/*/*.charmap`, async (target, path) => {
|
||||
|
|