Add (#2452)
- MATHEMATICAL FRAKTUR CAPITAL B (`U+1D505`). - MATHEMATICAL FRAKTUR CAPITAL M (`U+1D510`). - MATHEMATICAL FRAKTUR CAPITAL N (`U+1D511`). - MATHEMATICAL FRAKTUR CAPITAL P (`U+1D513`). - MATHEMATICAL FRAKTUR CAPITAL V (`U+1D519`). - MATHEMATICAL FRAKTUR CAPITAL W (`U+1D51A`).
This commit is contained in:
parent
8f945312fb
commit
58530575cb
7 changed files with 273 additions and 14 deletions
|
@ -1,7 +1,3 @@
|
||||||
* Add separate variant selectors for Cyrillic Capital En/Er (`VXAA`, `VXAB`).
|
|
||||||
* Add variant selectors for Greek lower Beta/Gamma/Nu/Upsilon (`VXAC`, `VXAD`, `VXAE`, `VXAF`).
|
|
||||||
* Optimize glyph for VERTICAL LINE WITH MIDDLE DOT (`U+2327`).
|
|
||||||
* Improve `k` (`cv46`) and `x` (`cv58`) variants used by `ss03`, `ss08`, `ss09`, `ss10`, `ss12`, `ss14`, and `ss18` under slab italic.
|
|
||||||
* Add characters:
|
* Add characters:
|
||||||
- BLACK-LETTER CAPITAL H (`U+210C`) (#714).
|
- BLACK-LETTER CAPITAL H (`U+210C`) (#714).
|
||||||
- BLACK-LETTER CAPITAL I (`U+2111`) (#714).
|
- BLACK-LETTER CAPITAL I (`U+2111`) (#714).
|
||||||
|
@ -12,9 +8,19 @@
|
||||||
- LATIN SMALL LETTER BLACKLETTER O (`U+AB3D`) (#2443).
|
- LATIN SMALL LETTER BLACKLETTER O (`U+AB3D`) (#2443).
|
||||||
- LATIN SMALL LETTER BLACKLETTER O WITH STROKE (`U+AB3E`) (#2443).
|
- LATIN SMALL LETTER BLACKLETTER O WITH STROKE (`U+AB3E`) (#2443).
|
||||||
- MATHEMATICAL FRAKTUR CAPITAL A (`U+1D504`) (#444).
|
- MATHEMATICAL FRAKTUR CAPITAL A (`U+1D504`) (#444).
|
||||||
|
- MATHEMATICAL FRAKTUR CAPITAL B (`U+1D505`) (#444).
|
||||||
- MATHEMATICAL FRAKTUR CAPITAL E (`U+1D508`) (#444).
|
- MATHEMATICAL FRAKTUR CAPITAL E (`U+1D508`) (#444).
|
||||||
- MATHEMATICAL FRAKTUR CAPITAL G (`U+1D50A`) (#444).
|
- MATHEMATICAL FRAKTUR CAPITAL G (`U+1D50A`) (#444).
|
||||||
- MATHEMATICAL FRAKTUR CAPITAL J (`U+1D50D`) (#444).
|
- MATHEMATICAL FRAKTUR CAPITAL J (`U+1D50D`) (#444).
|
||||||
- MATHEMATICAL FRAKTUR CAPITAL K (`U+1D50E`) (#444).
|
- MATHEMATICAL FRAKTUR CAPITAL K (`U+1D50E`) (#444).
|
||||||
|
- MATHEMATICAL FRAKTUR CAPITAL M (`U+1D510`) (#444).
|
||||||
|
- MATHEMATICAL FRAKTUR CAPITAL N (`U+1D511`) (#444).
|
||||||
|
- MATHEMATICAL FRAKTUR CAPITAL P (`U+1D513`) (#444).
|
||||||
|
- MATHEMATICAL FRAKTUR CAPITAL V (`U+1D519`) (#444).
|
||||||
|
- MATHEMATICAL FRAKTUR CAPITAL W (`U+1D51A`) (#444).
|
||||||
- MATHEMATICAL FRAKTUR SMALL E (`U+1D522`) (#444).
|
- MATHEMATICAL FRAKTUR SMALL E (`U+1D522`) (#444).
|
||||||
- MATHEMATICAL FRAKTUR SMALL O (`U+1D52C`) (#444).
|
- MATHEMATICAL FRAKTUR SMALL O (`U+1D52C`) (#444).
|
||||||
|
* Add separate variant selectors for Cyrillic Capital En/Er (`VXAA`, `VXAB`).
|
||||||
|
* Add variant selectors for Greek lower Beta/Gamma/Nu/Upsilon (`VXAC`, `VXAD`, `VXAE`, `VXAF`).
|
||||||
|
* Optimize glyph for VERTICAL LINE WITH MIDDLE DOT (`U+2327`).
|
||||||
|
* Improve `k` (`cv46`) and `x` (`cv58`) variants used by `ss03`, `ss08`, `ss09`, `ss10`, `ss12`, `ss14`, and `ss18` under slab italic.
|
||||||
|
|
|
@ -5,9 +5,11 @@ export : define [apply] : begin
|
||||||
run-glyph-module "./fraktur/common.mjs"
|
run-glyph-module "./fraktur/common.mjs"
|
||||||
|
|
||||||
run-glyph-module "./fraktur/upper-a.mjs"
|
run-glyph-module "./fraktur/upper-a.mjs"
|
||||||
|
run-glyph-module "./fraktur/upper-bvw.mjs"
|
||||||
run-glyph-module "./fraktur/upper-ceg.mjs"
|
run-glyph-module "./fraktur/upper-ceg.mjs"
|
||||||
run-glyph-module "./fraktur/upper-hkr.mjs"
|
run-glyph-module "./fraktur/upper-hkr.mjs"
|
||||||
run-glyph-module "./fraktur/upper-ij.mjs"
|
run-glyph-module "./fraktur/upper-ij.mjs"
|
||||||
|
run-glyph-module "./fraktur/upper-mnp.mjs"
|
||||||
run-glyph-module "./fraktur/upper-z.mjs"
|
run-glyph-module "./fraktur/upper-z.mjs"
|
||||||
|
|
||||||
run-glyph-module "./fraktur/lower-e.mjs"
|
run-glyph-module "./fraktur/lower-e.mjs"
|
||||||
|
|
|
@ -37,10 +37,9 @@ glyph-block LetterLike-Fraktur-Common : begin
|
||||||
public [new profile knots] : begin
|
public [new profile knots] : begin
|
||||||
this.profile = profile
|
this.profile = profile
|
||||||
this.knots = knots
|
this.knots = knots
|
||||||
|
|
||||||
public [applyToGlyph glyph] : begin
|
public [applyToGlyph glyph] : begin
|
||||||
local defaultProfile : this.profile.getPenShape glyph.gizmo
|
local defaultProfile : this.profile.getPenShape glyph.gizmo
|
||||||
local collector : new PenKnotCollector glyph.gizmo defaultProfile
|
local collector : new PenKnotCollector glyph.gizmo defaultProfile this.profile.fixed
|
||||||
local c : spiro-collect collector this.knots
|
local c : spiro-collect collector this.knots
|
||||||
|
|
||||||
local proxy : new FrakturProxy glyph.gizmo defaultProfile collector
|
local proxy : new FrakturProxy glyph.gizmo defaultProfile collector
|
||||||
|
@ -56,6 +55,7 @@ glyph-block LetterLike-Fraktur-Common : begin
|
||||||
# simplify the math.
|
# simplify the math.
|
||||||
class FrakturProfile
|
class FrakturProfile
|
||||||
public [new thick thin] : begin
|
public [new thick thin] : begin
|
||||||
|
this.fixed = false
|
||||||
# .thick is the half length of the flat tip, projected to the X/Y axis
|
# .thick is the half length of the flat tip, projected to the X/Y axis
|
||||||
this.thick = 0.25 * [Math.sqrt 2] * thick
|
this.thick = 0.25 * [Math.sqrt 2] * thick
|
||||||
# .thin is the half width of the thin tip, projected to the X/Y axis
|
# .thin is the half width of the thin tip, projected to the X/Y axis
|
||||||
|
@ -92,15 +92,30 @@ glyph-block LetterLike-Fraktur-Common : begin
|
||||||
define frakThick : 1.0 * Stroke
|
define frakThick : 1.0 * Stroke
|
||||||
define frakFine : 1.0 * [AdviceStroke 4] # For decoration
|
define frakFine : 1.0 * [AdviceStroke 4] # For decoration
|
||||||
|
|
||||||
|
class MaskingProfile
|
||||||
|
public [new dx dy] : begin
|
||||||
|
this.fixed = true
|
||||||
|
this.dx = dx
|
||||||
|
this.dy = dy
|
||||||
|
public [getPenShape gizmo] : begin
|
||||||
|
local tf : gizmo.applyOffsetXY this.dx this.dy
|
||||||
|
list [new Vec2 0 0] [new Vec2 tf.x tf.y]
|
||||||
|
|
||||||
glyph-block-export S
|
glyph-block-export S
|
||||||
define S : new FrakturProfile frakThick (0.875 * frakThin)
|
define S : new FrakturProfile frakThick (0.875 * frakThin)
|
||||||
|
|
||||||
|
glyph-block-export M
|
||||||
|
define M : new FrakturProfile [AdviceStroke 3 para.diversityM] (0.875 * frakThin)
|
||||||
|
|
||||||
glyph-block-export F
|
glyph-block-export F
|
||||||
define F : new FrakturProfile frakFine (0.875 * frakThin)
|
define F : new FrakturProfile frakFine (0.875 * frakThin)
|
||||||
|
|
||||||
glyph-block-export T
|
glyph-block-export T
|
||||||
define T : new FrakturProfile frakThin (0.875 * frakThin)
|
define T : new FrakturProfile frakThin (0.875 * frakThin)
|
||||||
|
|
||||||
|
glyph-block-export CutMaskLeft
|
||||||
|
define CutMaskLeft : new MaskingProfile (-VERY-FAR) 0
|
||||||
|
|
||||||
# Key metrics
|
# Key metrics
|
||||||
glyph-block-export DecoSizeX DecoSizeY FHook Wave.DepthY Wave.DepthX LbFootRise
|
glyph-block-export DecoSizeX DecoSizeY FHook Wave.DepthY Wave.DepthX LbFootRise
|
||||||
define DecoSizeX : 0.15 * (RightSB - SB)
|
define DecoSizeX : 0.15 * (RightSB - SB)
|
||||||
|
@ -117,19 +132,32 @@ glyph-block LetterLike-Fraktur-Common : begin
|
||||||
define Wave : namespace
|
define Wave : namespace
|
||||||
export : define DepthY : 0.4 * SHook - 0.25 * S.thick
|
export : define DepthY : 0.4 * SHook - 0.25 * S.thick
|
||||||
export : define DepthX : 1 * DecoSizeX
|
export : define DepthX : 1 * DecoSizeX
|
||||||
|
export : define LTDecoSize : 0.75 * DecoSizeX
|
||||||
|
|
||||||
export : define [vc waveDepth] : Interpolator vcWaveBlender [object waveDepth]
|
export : define [h] : Interpolator hBlender
|
||||||
define [vcWaveBlender before after args] : begin
|
define [hBlender before after] : begin
|
||||||
|
return : list
|
||||||
|
g2 [mix before.x after.x 0.375] after.y
|
||||||
|
g2 [mix before.x after.x 0.625] before.y
|
||||||
|
|
||||||
|
export : define [vc waveDepth] : Interpolator vcBlender [object waveDepth]
|
||||||
|
define [vcBlender before after args] : begin
|
||||||
local [object waveDepth] args
|
local [object waveDepth] args
|
||||||
return : list
|
return : list
|
||||||
g2 (before.x + 0.5 * waveDepth) [mix before.y after.y 0.375]
|
g2 (before.x + 0.5 * waveDepth) [mix before.y after.y 0.375]
|
||||||
g2 (after.x - 0.5 * waveDepth) [mix before.y after.y 0.625]
|
g2 (after.x - 0.5 * waveDepth) [mix before.y after.y 0.625]
|
||||||
|
|
||||||
export : define [h] : Interpolator hWaveBlender [object h]
|
export : define [v] : Interpolator vBlender
|
||||||
define [hWaveBlender before after] : begin
|
define [vBlender before after] : begin
|
||||||
return : list
|
return : list
|
||||||
g2 [mix before.x after.x 0.375] after.y
|
g2 after.x [mix before.y after.y 0.375]
|
||||||
g2 [mix before.x after.x 0.625] before.y
|
g2 before.x [mix before.y after.y 0.625]
|
||||||
|
|
||||||
|
export : define [vDistAfter d] : Interpolator vDistAfterBlender [object d]
|
||||||
|
define [vDistAfterBlender before after args] : begin
|
||||||
|
return : list
|
||||||
|
g2 after.x [mix before.y after.y 0.375]
|
||||||
|
g2 (after.x - args.d) [mix before.y after.y 0.625]
|
||||||
|
|
||||||
glyph-block-export PHexTop
|
glyph-block-export PHexTop
|
||||||
define PHexTop : 0.5 + 0.5 * ([Math.max DecoSizeX frakThin] / (RightSB - SB))
|
define PHexTop : 0.5 + 0.5 * ([Math.max DecoSizeX frakThin] / (RightSB - SB))
|
||||||
|
|
135
packages/font-glyphs/src/letter-like/fraktur/upper-bvw.ptl
Normal file
135
packages/font-glyphs/src/letter-like/fraktur/upper-bvw.ptl
Normal file
|
@ -0,0 +1,135 @@
|
||||||
|
$$include '../../meta/macros.ptl'
|
||||||
|
|
||||||
|
import [mix fallback] from "@iosevka/util"
|
||||||
|
|
||||||
|
glyph-module
|
||||||
|
|
||||||
|
glyph-block LetterLike-Fraktur-Upper-BVW : begin
|
||||||
|
glyph-block-import Common-Derivatives
|
||||||
|
glyph-block-import CommonShapes
|
||||||
|
glyph-block-import LetterLike-Fraktur-Common : FrakDf S M F fraktur-stroke change-profile
|
||||||
|
glyph-block-import LetterLike-Fraktur-Common : DecoSizeX DecoSizeY SlopeA SlopeB
|
||||||
|
glyph-block-import LetterLike-Fraktur-Common : Wave LbFootRise FHook PHexTop PHexBot
|
||||||
|
glyph-block-import LetterLike-Fraktur-Common : CutMaskLeft
|
||||||
|
|
||||||
|
define [deriveBoxes box] : begin
|
||||||
|
local body : box.padLeft (+1.50 * DecoSizeX)
|
||||||
|
local deco : box.padLeft (-0.25 * DecoSizeX)
|
||||||
|
return { body deco }
|
||||||
|
|
||||||
|
define [StartStroke mode box profile pRight] : glyph-proc
|
||||||
|
local { body deco } : deriveBoxes box
|
||||||
|
|
||||||
|
local [knots] : list
|
||||||
|
g2.ru.start (post@) ([deco.yp 0.625] - 2 * F.thick) [change-profile F]
|
||||||
|
~~~ [Wave.vc Wave.LTDecoSize]
|
||||||
|
g2.ru.mid deco.left (post@ <-> DecoSizeY) [change-profile M]
|
||||||
|
arch.rhs (sw -- S.thick) (blendPre -- null) deco.top 0.4
|
||||||
|
match mode
|
||||||
|
[Just "P"] : list
|
||||||
|
flat body.left [mix@ 0.375]
|
||||||
|
virt pre@ body.bot
|
||||||
|
curl body.left Descender
|
||||||
|
_ : list
|
||||||
|
straight.down.mid body.left [mix@ 0.375]
|
||||||
|
corner deco.left [post@slope SlopeB]
|
||||||
|
virt [body.xp : pRight * PHexBot] body.bot
|
||||||
|
|
||||||
|
local s : include : fraktur-stroke profile [knots]
|
||||||
|
return : object
|
||||||
|
lbKnot : s.last
|
||||||
|
maskLeft : function [] : fraktur-stroke CutMaskLeft [knots]
|
||||||
|
|
||||||
|
create-glyph 'frak/B' 0x1D505 : glyph-proc
|
||||||
|
local df : include : FrakDf 1
|
||||||
|
include : df.markSet.capital
|
||||||
|
|
||||||
|
local box : S.box CAP 0 df.leftSB df.rightSB
|
||||||
|
local { body deco } : deriveBoxes box
|
||||||
|
|
||||||
|
local leftStroke : include : StartStroke 'B' box S 1
|
||||||
|
local rightStroke : include : difference
|
||||||
|
union
|
||||||
|
fraktur-stroke S
|
||||||
|
corner leftStroke.lbKnot.x leftStroke.lbKnot.y
|
||||||
|
corner [body.xp PHexBot] body.bot
|
||||||
|
decor@ : g2.up.mid body.right [mix@ 0.5]
|
||||||
|
corner [body.xp 0.625] [body.yp 0.55]
|
||||||
|
fraktur-stroke S
|
||||||
|
corner deco.left [post@slope SlopeA]
|
||||||
|
corner [body.xp PHexTop] body.top
|
||||||
|
decor@ : g2.down.mid body.right [mix@ 0.5]
|
||||||
|
corner [body.xp 0.625] [body.yp 0.55]
|
||||||
|
corner deco.left [pre@slope : 0.5 * SlopeA]
|
||||||
|
leftStroke.maskLeft
|
||||||
|
|
||||||
|
create-glyph 'frak/P' 0x1D513 : glyph-proc
|
||||||
|
local df : include : FrakDf 1
|
||||||
|
include : df.markSet.capDesc
|
||||||
|
|
||||||
|
local box : S.box CAP 0 df.leftSB df.rightSB
|
||||||
|
local { body deco } : deriveBoxes box
|
||||||
|
|
||||||
|
local leftStroke : include : StartStroke "P" box S 1
|
||||||
|
|
||||||
|
local rightStroke : include : difference
|
||||||
|
fraktur-stroke S
|
||||||
|
g2 deco.left (post@ <+> Wave.DepthY)
|
||||||
|
~~~ [g2 [deco.xp 0.21] (pre@ <+> Wave.DepthY)]
|
||||||
|
g2 [deco.xp 0.625] body.bottom
|
||||||
|
~~~ [Wave.vDistAfter : 1.5 * Wave.DepthX]
|
||||||
|
[g2c.sr SlopeA].end (body.right + 0.25 * DecoSizeX) ([body.yp 0.75] + S.thick)
|
||||||
|
~~~ [curl [pre@tang-in 1] [pre@tang-in SlopeB]]
|
||||||
|
g2 (pre@ <-> Wave.DepthX) [mix@ 0.5]
|
||||||
|
arch.rhs (sw -- S.thick) (blendPre -- {}) body.top
|
||||||
|
corner (body.left - S.thick) (pre@ <-> ArchDepthA)
|
||||||
|
intersection [leftStroke.maskLeft] [MaskAbove body.yMid]
|
||||||
|
|
||||||
|
create-glyph 'frak/V' 0x1D519 : glyph-proc
|
||||||
|
local df : include : FrakDf 1
|
||||||
|
include : df.markSet.capital
|
||||||
|
|
||||||
|
local box : S.box CAP 0 df.leftSB df.rightSB
|
||||||
|
local { body deco } : deriveBoxes box
|
||||||
|
|
||||||
|
local leftStroke : include : StartStroke 'V' box S 1
|
||||||
|
local rightStroke : include : difference
|
||||||
|
fraktur-stroke S
|
||||||
|
corner leftStroke.lbKnot.x leftStroke.lbKnot.y
|
||||||
|
[cg2.sr SlopeA].start [body.xp PHexBot] body.bottom
|
||||||
|
~~~ [Wave.vDistAfter : 1.5 * Wave.DepthX]
|
||||||
|
[g2c.sr SlopeA].end (body.right + 0.25 * DecoSizeX) ([body.yp 0.75] + S.thick)
|
||||||
|
~~~ [curl [pre@tang-in 1] [pre@tang-in SlopeB]]
|
||||||
|
g2 (pre@ <-> Wave.DepthX) [mix@ 0.5]
|
||||||
|
arch.rhs (sw -- S.thick) (blendPre -- {}) body.top
|
||||||
|
corner (body.left - S.thick) (pre@ <-> ArchDepthA)
|
||||||
|
leftStroke.maskLeft
|
||||||
|
|
||||||
|
create-glyph 'frak/W' 0x1D51A : glyph-proc
|
||||||
|
local df : include : FrakDf para.diversityM 3
|
||||||
|
include : df.markSet.capital
|
||||||
|
|
||||||
|
local box : M.box CAP 0 df.leftSB df.rightSB
|
||||||
|
local { body deco } : deriveBoxes box
|
||||||
|
|
||||||
|
local leftStroke : include : StartStroke 'W' box M 0.5 1
|
||||||
|
|
||||||
|
local rightStroke : include : fraktur-stroke M
|
||||||
|
corner leftStroke.lbKnot.x leftStroke.lbKnot.y
|
||||||
|
corner [deco.xp : 0.5 * PHexBot] box.bottom
|
||||||
|
corner deco.xMid [post@slope SlopeB]
|
||||||
|
[cg2.sr SlopeA].start [deco.xp : mix 0.5 1 PHexBot] body.bot
|
||||||
|
~~~ [Wave.vDistAfter : 0.75 * Wave.DepthX]
|
||||||
|
[g2c.sr SlopeA].end (body.right + 0.5 * DecoSizeX) ([body.yp 0.75] + S.thick)
|
||||||
|
~~~ [curl [pre@tang-in 1] [pre@tang-in SlopeB]]
|
||||||
|
g2 (pre@ <-> 0.75 * Wave.DepthX) [mix@ 0.5]
|
||||||
|
arch.rhs (sw -- M.thick) (blendPre -- {}) body.top
|
||||||
|
corner body.xMid (body.top - 0.5 * Wave.DepthY)
|
||||||
|
~~~ [arch.rhs (sw -- M.thick) (blendPre -- {}) (blendPost -- {}) body.top]
|
||||||
|
corner body.left pre@
|
||||||
|
|
||||||
|
local middleStroke : include : fraktur-stroke M
|
||||||
|
virt [deco.xp : mix 0.5 1 PHexBot] body.bot
|
||||||
|
corner deco.xMid [pre@slope SlopeB]
|
||||||
|
~~~ [Wave.vDistAfter : 0.375 * Wave.DepthX]
|
||||||
|
corner body.xMid (body.top - 0.5 * Wave.DepthY)
|
|
@ -92,7 +92,7 @@ glyph-block LetterLike-Fraktur-Upper-HKR : begin
|
||||||
# Left stroke
|
# Left stroke
|
||||||
include : fraktur-stroke F
|
include : fraktur-stroke F
|
||||||
g2.ru.start post@ ([rDeco.yp 0.625] - 2 * F.thick)
|
g2.ru.start post@ ([rDeco.yp 0.625] - 2 * F.thick)
|
||||||
~~~ [Wave.vc Wave.DepthX]
|
~~~ [Wave.vc Wave.LTDecoSize]
|
||||||
g2.ru.mid rDeco.left (post@ <-> DecoSizeY) [change-profile S]
|
g2.ru.mid rDeco.left (post@ <-> DecoSizeY) [change-profile S]
|
||||||
arch.rhs (blendPre -- {}) rBody.top 0.625
|
arch.rhs (blendPre -- {}) rBody.top 0.625
|
||||||
flat rBody.left (pre@ <-> 0.6 * ArchDepthA)
|
flat rBody.left (pre@ <-> 0.6 * ArchDepthA)
|
||||||
|
|
86
packages/font-glyphs/src/letter-like/fraktur/upper-mnp.ptl
Normal file
86
packages/font-glyphs/src/letter-like/fraktur/upper-mnp.ptl
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
$$include '../../meta/macros.ptl'
|
||||||
|
|
||||||
|
import [mix fallback] from "@iosevka/util"
|
||||||
|
|
||||||
|
glyph-module
|
||||||
|
|
||||||
|
glyph-block LetterLike-Fraktur-Upper-MNP : begin
|
||||||
|
glyph-block-import Common-Derivatives
|
||||||
|
glyph-block-import CommonShapes
|
||||||
|
glyph-block-import LetterLike-Fraktur-Common : FrakDf S M F T fraktur-stroke change-profile
|
||||||
|
glyph-block-import LetterLike-Fraktur-Common : DecoSizeX DecoSizeY SlopeA SlopeB CutMaskLeft
|
||||||
|
glyph-block-import LetterLike-Fraktur-Common : Wave LbFootRise FHook PHexTop PHexBot
|
||||||
|
|
||||||
|
define [deriveBoxes box] : begin
|
||||||
|
local body : box.padLeft (+1.50 * DecoSizeX)
|
||||||
|
local deco : box.padLeft (-0.25 * DecoSizeX)
|
||||||
|
return { body deco }
|
||||||
|
|
||||||
|
define [LeftStroke box profile] : glyph-proc
|
||||||
|
local { body deco } : deriveBoxes box
|
||||||
|
|
||||||
|
local [knots] : list
|
||||||
|
g2.ru.start (post@) ([deco.yp 0.625] - 2 * F.thick) [change-profile F]
|
||||||
|
~~~ [Wave.vc Wave.LTDecoSize]
|
||||||
|
g2.ru.mid deco.left (post@ <-> DecoSizeY) [change-profile profile]
|
||||||
|
arch.rhs (sw -- profile.thick) (blendPre -- null) deco.top 0.4
|
||||||
|
flat body.left (pre@ <-> ArchDepthA)
|
||||||
|
curl pre@ (post@ <+> ArchDepthB)
|
||||||
|
corner (deco.left + 0.5 * DecoSizeX) deco.bot
|
||||||
|
corner (pre@ <-> DecoSizeX) (pre@ <+> DecoSizeY)
|
||||||
|
|
||||||
|
local s : include : fraktur-stroke profile [knots]
|
||||||
|
|
||||||
|
return : object
|
||||||
|
maskLeft : function [] : fraktur-stroke CutMaskLeft [knots]
|
||||||
|
|
||||||
|
|
||||||
|
create-glyph 'frak/M' 0x1D510 : glyph-proc
|
||||||
|
local df : include : FrakDf para.diversityM 3
|
||||||
|
include : df.markSet.capital
|
||||||
|
|
||||||
|
local box : M.box CAP 0 df.leftSB df.rightSB
|
||||||
|
local { body deco } : deriveBoxes box
|
||||||
|
|
||||||
|
local leftStroke : include : LeftStroke box M
|
||||||
|
|
||||||
|
local rightStroke : include : fraktur-stroke M
|
||||||
|
corner (post@ <+> DecoSizeX) (post@ <+> DecoSizeY)
|
||||||
|
corner (body.right + 0.25 * DecoSizeX) body.bottom
|
||||||
|
~~~ [straight.up.mid (pre@ <-> Wave.DepthX) [mix@ 0.5]]
|
||||||
|
corner (pre@ <+> 0.25 * DecoSizeX) ([body.yp 0.75] + S.thick)
|
||||||
|
~~~ [curl [pre@tang-in 1] [pre@tang-in SlopeB]]
|
||||||
|
g2 (pre@ <-> 0.75 * Wave.DepthX) [mix@ 0.5]
|
||||||
|
arch.rhs (sw -- M.thick) (blendPre -- {}) body.top
|
||||||
|
corner (body.xMid - 0.25 * Wave.DepthX) (body.top - 0.5 * Wave.DepthY)
|
||||||
|
~~~ [arch.rhs (sw -- M.thick) (blendPre -- {}) (blendPost -- {}) body.top]
|
||||||
|
corner body.left pre@
|
||||||
|
|
||||||
|
local middleStroke : include : fraktur-stroke M
|
||||||
|
corner (post@ <-> DecoSizeX) (post@ <+> DecoSizeY)
|
||||||
|
corner deco.xMid deco.bot
|
||||||
|
flat post@ [mix@ 0.5]
|
||||||
|
# flat post@ (pre@ <+> ArchDepthB)
|
||||||
|
flat post@ ([body.yp 0.75] + S.thick)
|
||||||
|
curl (body.xMid - 0.25 * Wave.DepthX) (body.top - 0.5 * Wave.DepthY)
|
||||||
|
|
||||||
|
create-glyph 'frak/N' 0x1D511 : glyph-proc
|
||||||
|
local df : include : FrakDf 1
|
||||||
|
include : df.markSet.capital
|
||||||
|
|
||||||
|
local box : S.box CAP 0 df.leftSB df.rightSB
|
||||||
|
local { body deco } : deriveBoxes box
|
||||||
|
|
||||||
|
local leftStroke : include : LeftStroke box S
|
||||||
|
|
||||||
|
local rightStroke : include : difference
|
||||||
|
fraktur-stroke S
|
||||||
|
corner (post@ <+> DecoSizeX) (post@ <+> DecoSizeY)
|
||||||
|
corner (body.right + 0.25 * DecoSizeX) body.bottom
|
||||||
|
~~~ [straight.up.mid (pre@ <-> Wave.DepthX) [mix@ 0.5]]
|
||||||
|
corner pre@ ([body.yp 0.75] + S.thick)
|
||||||
|
~~~ [curl [pre@tang-in 1] [pre@tang-in SlopeB]]
|
||||||
|
g2 (pre@ <-> Wave.DepthX) [mix@ 0.5]
|
||||||
|
arch.rhs (sw -- S.thick) (blendPre -- {}) body.top
|
||||||
|
corner (body.left - S.thick) (pre@ <-> ArchDepthA)
|
||||||
|
leftStroke.maskLeft
|
|
@ -6,11 +6,12 @@ import { Point } from "./point.mjs";
|
||||||
import { MonoKnot } from "./spiro-to-outline.mjs";
|
import { MonoKnot } from "./spiro-to-outline.mjs";
|
||||||
|
|
||||||
export class PenKnotCollector {
|
export class PenKnotCollector {
|
||||||
constructor(gizmo, defaultProfile) {
|
constructor(gizmo, defaultProfile, fProfileFixed) {
|
||||||
this.gizmo = gizmo;
|
this.gizmo = gizmo;
|
||||||
this.m_profile = defaultProfile;
|
this.m_profile = defaultProfile;
|
||||||
this.m_lastKnot = null;
|
this.m_lastKnot = null;
|
||||||
this.m_finished = false;
|
this.m_finished = false;
|
||||||
|
this.m_profileFixed = fProfileFixed;
|
||||||
|
|
||||||
this.knots = [];
|
this.knots = [];
|
||||||
this.closed = false;
|
this.closed = false;
|
||||||
|
@ -35,6 +36,7 @@ export class PenKnotCollector {
|
||||||
setContrast() {}
|
setContrast() {}
|
||||||
|
|
||||||
setProfile(profile) {
|
setProfile(profile) {
|
||||||
|
if (this.m_profileFixed) return;
|
||||||
if (profile.length !== this.m_profile.length)
|
if (profile.length !== this.m_profile.length)
|
||||||
throw new Error("Pen profile length mismatch");
|
throw new Error("Pen profile length mismatch");
|
||||||
if (this.m_lastKnot) this.m_lastKnot.profile = profile;
|
if (this.m_lastKnot) this.m_lastKnot.profile = profile;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue