diff --git a/changes/4.0.0.md b/changes/4.0.0.md index 267497524..53494b005 100644 --- a/changes/4.0.0.md +++ b/changes/4.0.0.md @@ -12,6 +12,7 @@ * Add Variants: - `u`/`toothless-corner` (#706). - Curly variants of `Z` / `z` (#362). + - Toothless-corner variant of `G` and Ampersand (`&`). * Update `ss09` style for capital G to Toothless (#726). * Add ligation set for Verilog (#710). * Add more alternative exclamation-related ligation sets (`exeqeq-dotted`, `eqexeq-dotted`, `eqexeq-dl-dotted`) (#748). @@ -30,3 +31,4 @@ * Fix centering of `Q` variants when occurred in enclosures (#751). * Fix broken descender connection of `cyrl/tse` (U+0446) under Italic (#754). * Fix missing serifs in earless-corner `m` variants (#752). + * Remove slight curvature of italic single-storey `a` (#755). \ No newline at end of file diff --git a/font-src/glyphs/letter/latin.ptl b/font-src/glyphs/letter/latin.ptl index 9a24cb183..2648d03e1 100644 --- a/font-src/glyphs/letter/latin.ptl +++ b/font-src/glyphs/letter/latin.ptl @@ -92,7 +92,7 @@ glyph-block Letter-Shared-Shapes : begin glyph-block-export DToothlessRise glyph-block-export DMBlend - define DToothlessRise : Hook * 0.375 + Stroke / 16 + define DToothlessRise : Hook * 0.25 + Stroke / 16 define DMBlend 0.80 glyph-block-export CurlyTail @@ -1295,8 +1295,8 @@ glyph-block Letter-Latin-Lower-A : begin include : MarkSet.e set-base-anchor 'trailing' (RightSB - markHalfStroke) 0 include : union - ADoubleStoreyHookAndBar (DToothlessRise * OverlayPos) - ADoubleStoreyArc 1 (DToothlessRise * OverlayPos) + ADoubleStoreyHookAndBar DToothlessRise + ADoubleStoreyArc 1 DToothlessRise create-glyph 'a.doubleStoreyToothlessRounded' : glyph-proc set-width Width @@ -1311,17 +1311,8 @@ glyph-block Letter-Latin-Lower-A : begin include : MarkSet.e set-base-anchor 'trailing' (RightSB - markHalfStroke) 0 include : OBarRightShape - if SLAB - : then : begin - include : VBarRight RightSB 0 XH - include : tagged 'serifRB' : RightwardBottomSerif RightSB 0 SideJut - : else : begin - include : dispiro - widths.rhs - flat RightSB XH [heading Downward] - curl RightSB SmoothA [heading Downward] - g4 [mix SB RightSB (1 + 0.4 * TanSlope)] 0 [heading Downward] - set-base-anchor 'bottomright' [mix SB RightSB 1.075] 0 + include : VBarRight RightSB 0 XH + if SLAB : include : tagged 'serifRB' : RightwardBottomSerif RightSB 0 SideJut create-glyph 'a.singleStoreyTailed' : glyph-proc set-width Width @@ -3827,8 +3818,18 @@ glyph-block Letter-Latin-C : begin glyph-block Letter-Latin-Upper-G : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives + glyph-block-import Letter-Shared-Shapes : DToothlessRise DMBlend - define [GShape fTooth top sma smb] : glyph-proc + define TOOTHED 0 + define TOOTHLESS-CORNER 1 + define TOOTHLESS-ROUNDED 2 + + define GConfig : list + list 'toothed' TOOTHED 1 + list 'toothlessCorner' TOOTHLESS-CORNER 1 + list 'toothlessRounded' TOOTHLESS-ROUNDED 1 + + define [GShape toothShape fCrossBar top sma smb] : glyph-proc local yBar : top * 0.52 + Stroke * 0.25 local fine ShoulderFine local sb : shoulderMidSlope fine nothing (-1) @@ -3841,24 +3842,28 @@ glyph-block Letter-Latin-Upper-G : begin curl (SB + OX) smb arcvh - if fTooth - : then : knots.push - g4.right.mid (Middle + (CorrectionOMidX - sb) * Stroke) O [widths.heading Stroke 0 {.y (1) .x (sb)}] - archv - straight.up.end (RightSB - (Stroke - fine) * HVContrast) sma [widths.heading fine 0 Upward] - : else : knots.push - g4 (Middle + CorrectionOMidS) O - flat RightSB sma - curl RightSB yBar [heading Upward] + match toothShape + [Just TOOTHED] : knots.push + g4.right.mid (Middle + (CorrectionOMidX - sb) * Stroke) O [widths.heading Stroke 0 {.y (1) .x (sb)}] + archv + straight.up.end (RightSB - (Stroke - fine) * HVContrast) sma [widths.heading fine 0 Upward] + [Just TOOTHLESS-CORNER] : knots.push + g4 (Middle + CorrectionOMidS) O + g4 RightSB DToothlessRise + [Just TOOTHLESS-ROUNDED] : knots.push + g4 (Middle + CorrectionOMidS) O + flat RightSB sma + curl RightSB yBar [heading Upward] include : union dispiro.apply null knots - HBarTop Middle RightSB yBar - if fTooth - then : union + if fCrossBar [HBarTop Middle RightSB yBar] [glyph-proc] + match toothShape + [Just TOOTHED] : union VBarRight RightSB (sma + O) yBar VBarRight RightSB sma 0 [Math.max [AdviceStroke 5] (Stroke - fine / 2)] - else : glyph-proc + [Just TOOTHLESS-CORNER] : VBarRight RightSB DToothlessRise yBar + [Just TOOTHLESS-ROUNDED] : glyph-proc define [HookTopShapeOfG top] : union VBarRight (RightSB - OXHook) (top - Hook) top @@ -3866,27 +3871,16 @@ glyph-block Letter-Latin-Upper-G : begin define [OverlayBarOfG top] : HOverlayBar [mix SB RightSB 0.5] [mix RightSB Width 0.7] [mix 0 (top / 2) 0.55] - create-glyph : glyph-proc - include : MarkSet.capital - create-derived 'G.toothed' : glyph-proc - include : GShape true CAP SmoothA SmoothB - create-derived 'Ghooktop.toothed' : HookTopShapeOfG CAP - create-derived 'Gbar.toothed' : OverlayBarOfG CAP - - create-derived 'G.toothless' : glyph-proc - include : GShape false CAP SmoothA SmoothB - create-derived 'Ghooktop.toothless' : HookTopShapeOfG CAP - create-derived 'Gbar.toothless' : OverlayBarOfG CAP - - create-glyph : glyph-proc - include : MarkSet.e - create-derived 'smcpG.toothed' : glyph-proc - include : GShape true XH SmoothA SmoothB - create-derived 'smcpGhooktop.toothed' : HookTopShapeOfG XH - - create-derived 'smcpG.toothless' : glyph-proc - include : GShape false XH SmoothA SmoothB - create-derived 'smcpGhooktop.toothless' : HookTopShapeOfG XH + foreach { suffix shape fCrossBar } [items-of GConfig] : begin + create-glyph "G.\(suffix)" : glyph-proc + include : MarkSet.capital + include : GShape shape fCrossBar CAP SmoothA SmoothB + create-derived "Ghooktop.\(suffix)" : HookTopShapeOfG CAP + create-derived "Gbar.\(suffix)" : OverlayBarOfG CAP + create-glyph "smcpG.\(suffix)" : glyph-proc + include : MarkSet.e + include : GShape shape fCrossBar XH SmoothA SmoothB + create-derived "smcpGhooktop.\(suffix)" : HookTopShapeOfG XH select-variant 'G' 'G' select-variant 'smcpG' 0x262 (follow -- 'G') diff --git a/font-src/glyphs/symbol/arrow.ptl b/font-src/glyphs/symbol/arrow.ptl index 50ef46ecd..ec8dfb177 100644 --- a/font-src/glyphs/symbol/arrow.ptl +++ b/font-src/glyphs/symbol/arrow.ptl @@ -13,20 +13,19 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 define arrowHeight : para.arrowHeight * (Width - SB / 2) * [Math.pow (MosaicWidth / MosaicUnitWidth) (1 / 3)] define arrowWidth : Math.min (MosaicWidth - SB / 2) arrowHeight + define arrowTop : [mix OperBot OperTop (1 / 2)] + arrowHeight / 2 + define arrowBot : [mix OperBot OperTop (1 / 2)] - arrowHeight / 2 define arrowMidX : MosaicWidth / 2 define arrowSB : (MosaicWidth - arrowWidth) / 2 define arrowRSB : MosaicWidth - arrowSB - define hwArrowRSB : Width - arrowSB - define hwArrowMidX : Width / 2 define o : O * 2 - define arrowSize : (Width - SB) * DesignParameters.arrow_size * [Math.pow (arrowWidth / Width) 0.4] - [AdviceStroke 5] / 4 - define halfstroke : OperatorStroke / 2 + define arrowHeadSize : (Width - SB) * DesignParameters.arrow_size * [Math.pow (arrowWidth / Width) 0.4] - [AdviceStroke 5] / 4 + define arrowSw OperatorStroke + define halfArrowSw : arrowSw / 2 define fine : AdviceStroke 3.5 define terminal : AdviceStroke 5 - define arrowTop : [mix OperBot OperTop (1 / 2)] + arrowHeight / 2 - define arrowBot : [mix OperBot OperTop (1 / 2)] - arrowHeight / 2 - define doubleArrowStemWidth : arrowSize * 1.1 + define doubleArrowStemWidth : arrowHeadSize * 1.1 define waveArrowAmplitude : (Width - SB) * DesignParameters.arrow_size * 1.1 # Diagonal arrow params @@ -37,30 +36,30 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 define arrowDiagBot : mix arrowMidX arrowBot diagPropY define arrowDiagTop : mix arrowMidX arrowTop diagPropY - define [ArrowBar x1 y1 x2 y2 halfstroke w] : glyph-proc + define [ArrowBar x1 y1 x2 y2 halfSw w] : glyph-proc include : PointingTo x1 y1 x2 y2 : lambda [mag] : begin - local p : (mag - o - halfstroke * [fallback w 1.1]) / mag + local p : (mag - o - halfSw * [fallback w 1.1]) / mag dispiro - widths.center (halfstroke * 2) + widths.center (halfSw * 2) flat (mag * (1 - p)) 0 curl mag 0 end : function [set this.contrast 1] - define [DashArrowBar x1 y1 x2 y2 halfstroke gap stop w] : glyph-proc + define [DashArrowBar x1 y1 x2 y2 halfSw gap stop w] : glyph-proc include : PointingTo x1 y1 x2 y2 : lambda [mag] : glyph-proc - local p : (mag - o - halfstroke * [fallback w 1.1]) / mag + local p : (mag - o - halfSw * [fallback w 1.1]) / mag local deltaT : (gap + stop) / mag for [local t 0] (t < p) [set t : t + deltaT] : include : dispiro - widths.center (halfstroke * 2) + widths.center (halfSw * 2) flat [mix (mag * (1 - p)) mag t] 0 curl [mix (mag * (1 - p)) mag : Math.min p (t + stop / mag)] 0 end : function [set this.contrast 1] - define [HookArrowBar x1 y1 x2 y2 halfstroke s w] : glyph-proc + define [HookArrowBar x1 y1 x2 y2 halfSw s w] : glyph-proc include : PointingTo x1 y1 x2 y2 : lambda [mag] : begin - local p : (mag - o - halfstroke * [fallback w 1.1]) / mag + local p : (mag - o - halfSw * [fallback w 1.1]) / mag dispiro - widths.center (halfstroke * 2) + widths.center (halfSw * 2) g4 (mag - [Math.abs s] / 2 - 0.1) s g4 (mag - [Math.abs s] / 2) s archv @@ -75,7 +74,7 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 RHSHalfArrowHead x1 y1 x2 y2 0 _size define [RHSHalfArrowHead x1 y1 x2 y2 width _size] : new-glyph : glyph-proc - local size : fallback _size arrowSize + local size : fallback _size arrowHeadSize include : PointingTo x1 y1 x2 y2 : lambda [mag] : begin dispiro function [set this.gizmo [Transform.Id]] @@ -85,7 +84,7 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 end : function [set this.contrast 1] define [LHSHalfArrowHead x1 y1 x2 y2 width _size] : new-glyph : glyph-proc - local size : fallback _size arrowSize + local size : fallback _size arrowHeadSize include : PointingTo x1 y1 x2 y2 : lambda [mag] : begin dispiro function [set this.gizmo [Transform.Id]] @@ -99,7 +98,7 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 LHSHalfArrowHeadMaskOut x1 y1 x2 y2 0 _size define [RHSHalfArrowHeadMaskOut x1 y1 x2 y2 width _size] : new-glyph : glyph-proc - local size : fallback _size arrowSize + local size : fallback _size arrowHeadSize include : PointingTo x1 y1 x2 y2 : lambda [mag] : spiro-outline function [set this.gizmo [Transform.Id]] corner O (-width / 2) @@ -108,7 +107,7 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 corner o (-width / 2) define [LHSHalfArrowHeadMaskOut x1 y1 x2 y2 width _size] : new-glyph : glyph-proc - local size : fallback _size arrowSize + local size : fallback _size arrowHeadSize include : PointingTo x1 y1 x2 y2 : lambda [mag] : spiro-outline function [set this.gizmo [Transform.Id]] corner O (+width / 2) @@ -125,16 +124,16 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 define [ArrowShape x1 y1 x2 y2 size] : glyph-proc include : ArrowHead x1 y1 x2 y2 size - include : ArrowBar x1 y1 x2 y2 halfstroke + include : ArrowBar x1 y1 x2 y2 halfArrowSw define [DashArrowShape x1 y1 x2 y2 size] : glyph-proc local gap : AdviceStroke 6 include : ArrowHead x1 y1 x2 y2 size - include : DashArrowBar x1 y1 x2 y2 halfstroke gap [Math.max (Width / 5) (gap * 3)] + include : DashArrowBar x1 y1 x2 y2 halfArrowSw gap [Math.max (Width / 5) (gap * 3)] define [HookArrowShape mul] : lambda [x1 y1 x2 y2 size] : glyph-proc include : ArrowHead x1 y1 x2 y2 size - include : HookArrowBar x1 y1 x2 y2 halfstroke (arrowSize * mul) + include : HookArrowBar x1 y1 x2 y2 halfArrowSw (arrowHeadSize * mul) define [ThickArrowShape color] : lambda [x1 y1 x2 y2] : glyph-proc local headLen : MosaicUnitWidth * [Math.sqrt MosaicWidthScalar] * 0.4 @@ -175,13 +174,13 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 ArrowBar x1 y1 x2 y2 halfBarWidth 2 define [HalfArrowShape side] : lambda [x1 y1 x2 y2 size] : glyph-proc - include : side x1 y1 x2 y2 (halfstroke * 2) size - include : ArrowBar x1 y1 x2 y2 halfstroke 1.75 + include : side x1 y1 x2 y2 arrowSw size + include : ArrowBar x1 y1 x2 y2 halfArrowSw 1.75 define [DoubleArrowBarShape w x1 y1 x2 y2] : glyph-proc include : PointingTo x1 y1 x2 y2 : lambda [mag] : glyph-proc local p : (mag - o - w / 2 + O) / mag - local fine : Math.min (w / 3) (halfstroke * 2) + local fine : Math.min (w / 3) arrowSw local coFine : w / 2 - fine / 2 include : dispiro @@ -207,7 +206,7 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 define [htArrowShape x1 y1 x2 y2 size] : glyph-proc local mag : Math.hypot (y2 - y1) (x2 - x1) - local p1 : (size - o - halfstroke * 1.1) / mag + local p1 : (size - o - halfArrowSw * 1.1) / mag local p2 : size / mag include : ArrowShape [mix x1 x2 p1] [mix y1 y2 p1] x2 y2 size include : ArrowHead x1 y1 [mix x1 x2 p2] [mix y1 y2 p2] size @@ -216,7 +215,7 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 create-glyph id unicode : glyph-proc set-width [fallback width MosaicWidth] set-base-anchor 'slash' [mix x1 x2 (2/5)] [mix y1 y2 (2/5)] - include : shape x1 y1 x2 y2 arrowSize + include : shape x1 y1 x2 y2 arrowHeadSize define [DoubleArrow shape id unicode x1 y1 x2 y2] create-glyph id unicode : glyph-proc @@ -224,8 +223,8 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 set-base-anchor 'slash' [mix x1 x2 (1/2)] [mix y1 y2 (1/2)] local xm : mix x1 x2 0.5 local ym : mix y1 y2 0.5 - include : shape xm ym x1 y1 arrowSize - include : shape xm ym x2 y2 arrowSize + include : shape xm ym x1 y1 arrowHeadSize + include : shape xm ym x2 y2 arrowHeadSize define [MkAngleArrow shape bar id unicode x1 y1 x2 y2 x3 y3 size] create-glyph id unicode : glyph-proc @@ -258,8 +257,8 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 MkArrow [HookArrowShape 1] [MangleName 'hookarrowdownleft'] [MangleUnicode 0x2926] arrowDiagRSB arrowDiagTop arrowDiagSB arrowDiagBot do "Half Circle Arrow" - local arcSW : Math.min OperatorStroke [AdviceStroke 4 MosaicWidthScalar] - local headSize : mix arcSW arrowSize 0.5 + local arcSW : Math.min arrowSw [AdviceStroke 4 MosaicWidthScalar] + local headSize : mix arcSW arrowHeadSize 0.5 local hsx0 : HVContrast * arcSW / 2 local hsx : hsx0 + headSize / 2 local hsx2 : hsx0 + (MosaicWidthScalar / 4) * headSize @@ -318,18 +317,18 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 curl (arrowMidX + headSize) (arrowTop - hsy) [heading Rightward] do "Bend and Angle arrows" - define bendSize : mix OperatorStroke arrowSize 0.75 + define bendSize : mix arrowSw arrowHeadSize 0.75 define bendL : mix arrowMidX arrowSB [Math.max (bendSize / (arrowMidX - arrowSB)) : Math.pow 0.6 (2 / MosaicWidthScalar)] define bendR : mix arrowMidX arrowRSB [Math.max (bendSize / (arrowMidX - arrowSB)) : Math.pow 0.6 (2 / MosaicWidthScalar)] - define [VBR x1 y1 x2 y2] : VBarRight x1 y1 y2 OperatorStroke - define [VBL x1 y1 x2 y2] : VBarLeft x1 y1 y2 OperatorStroke - define [HBT x1 y1 x2 y2] : HBarTop x1 x2 y1 OperatorStroke + define [VBR x1 y1 x2 y2] : VBarRight x1 y1 y2 arrowSw + define [VBL x1 y1 x2 y2] : VBarLeft x1 y1 y2 arrowSw + define [HBT x1 y1 x2 y2] : HBarTop x1 x2 y1 arrowSw MkAngleArrow ArrowShape VBR [MangleName 'MkArrow-up-angle-bend-left'] [MangleUnicode 0x21b0] bendR arrowBot bendR (arrowTop - bendSize) bendL (arrowTop - bendSize) bendSize MkAngleArrow ArrowShape VBL [MangleName 'MkArrow-up-angle-bend-right'] [MangleUnicode 0x21b1] bendL arrowBot bendL (arrowTop - bendSize) bendR (arrowTop - bendSize) bendSize MkAngleArrow ArrowShape VBR [MangleName 'MkArrow-down-angle-bend-left'] [MangleUnicode 0x21b2] bendR arrowTop bendR (arrowBot + bendSize) bendL (arrowBot + bendSize) bendSize MkAngleArrow ArrowShape VBL [MangleName 'MkArrow-down-angle-bend-right'] [MangleUnicode 0x21b3] bendL arrowTop bendL (arrowBot + bendSize) bendR (arrowBot + bendSize) bendSize - MkAngleArrow ArrowShape HBT [MangleName 'MkArrow-right-angle-down'] [MangleUnicode 0x21b4] arrowSB arrowTop (arrowRSB - arrowSize) arrowTop (arrowRSB - arrowSize) arrowBot arrowSize - MkAngleArrow ArrowShape VBR [MangleName 'MkArrow-down-angle-left'] [MangleUnicode 0x21b5] arrowRSB arrowTop arrowRSB (arrowBot + arrowSize) arrowSB (arrowBot + arrowSize) arrowSize + MkAngleArrow ArrowShape HBT [MangleName 'MkArrow-right-angle-down'] [MangleUnicode 0x21b4] arrowSB arrowTop (arrowRSB - arrowHeadSize) arrowTop (arrowRSB - arrowHeadSize) arrowBot arrowHeadSize + MkAngleArrow ArrowShape VBR [MangleName 'MkArrow-down-angle-left'] [MangleUnicode 0x21b5] arrowRSB arrowTop arrowRSB (arrowBot + arrowHeadSize) arrowSB (arrowBot + arrowHeadSize) arrowHeadSize do "Half-head Arrows" MkArrow [HalfArrowShape RHSHalfArrowHead] [MangleName 'arrowleftHR'] [MangleUnicode 0x21BC] arrowRSB SymbolMid arrowSB SymbolMid @@ -342,7 +341,7 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 MkArrow [HalfArrowShape RHSHalfArrowHead] [MangleName 'arrowdownHR'] [MangleUnicode 0x21C3] arrowMidX arrowTop arrowMidX arrowBot do "Wave arrows" - define WaveSw : halfstroke * 2 + define WaveSw arrowSw define WaveShape : CreateWaveShape waveArrowAmplitude * 0.4 + WaveSw / 4 * MosaicWidthScalar begin WaveSw @@ -350,7 +349,7 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 define freeCoT : arrowSB / MosaicWidth define connectedCoT : (arrowSB / MosaicWidth) + (9 / 32) * MosaicWidthScalar local mag : arrowRSB - arrowSB - local p : (mag - o - halfstroke * 1.1) / mag + local p : (mag - o - halfArrowSw * 1.1) / mag create-glyph [MangleName 'waveArrowLeftRight'] [MangleUnicode 0x21AD] : glyph-proc set-width MosaicWidth include : WaveShape @@ -428,39 +427,39 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 create-glyph [MangleName 'arrowbarleft'] [MangleUnicode 0x21E4] : composite-proc refer-glyph : MangleName 'arrowleftK' - VBar arrowSB (SymbolMid - arrowSize) (SymbolMid + arrowSize) fine + VBar arrowSB (SymbolMid - arrowHeadSize) (SymbolMid + arrowHeadSize) fine create-glyph [MangleName 'arrowbarright'] [MangleUnicode 0x21E5] : composite-proc refer-glyph : MangleName 'arrowrightK' - VBar arrowRSB (SymbolMid - arrowSize) (SymbolMid + arrowSize) fine + VBar arrowRSB (SymbolMid - arrowHeadSize) (SymbolMid + arrowHeadSize) fine create-glyph [MangleName 'arrowbarup'] [MangleUnicode 0x2912] : composite-proc refer-glyph : MangleName 'arrowupK' - HBar (arrowMidX - arrowSize) (arrowMidX + arrowSize) arrowTop fine + HBar (arrowMidX - arrowHeadSize) (arrowMidX + arrowHeadSize) arrowTop fine create-glyph [MangleName 'arrowbardown'] [MangleUnicode 0x2913] : composite-proc refer-glyph : MangleName 'arrowdownK' - HBar (arrowMidX - arrowSize) (arrowMidX + arrowSize) arrowBot fine + HBar (arrowMidX - arrowHeadSize) (arrowMidX + arrowHeadSize) arrowBot fine create-glyph [MangleName 'bararrowleft'] [MangleUnicode 0x21A4] : composite-proc refer-glyph : MangleName 'arrowleftSK' - VBar arrowRSB (SymbolMid - arrowSize) (SymbolMid + arrowSize) fine + VBar arrowRSB (SymbolMid - arrowHeadSize) (SymbolMid + arrowHeadSize) fine create-glyph [MangleName 'bararrowright'] [MangleUnicode 0x21A6] : composite-proc refer-glyph : MangleName 'arrowrightSK' - VBar arrowSB (SymbolMid - arrowSize) (SymbolMid + arrowSize) fine + VBar arrowSB (SymbolMid - arrowHeadSize) (SymbolMid + arrowHeadSize) fine create-glyph [MangleName 'bararrowup'] [MangleUnicode 0x21A5] : composite-proc refer-glyph : MangleName 'arrowupSK' - HBar (arrowMidX - arrowSize) (arrowMidX + arrowSize) arrowBot fine + HBar (arrowMidX - arrowHeadSize) (arrowMidX + arrowHeadSize) arrowBot fine create-glyph [MangleName 'bararrowdown'] [MangleUnicode 0x21A7] : composite-proc refer-glyph : MangleName 'arrowdownSK' - HBar (arrowMidX - arrowSize) (arrowMidX + arrowSize) arrowTop fine + HBar (arrowMidX - arrowHeadSize) (arrowMidX + arrowHeadSize) arrowTop fine do "Double-headed Arrows" DoubleArrow ArrowShape [MangleName 'arrowleftright'] [MangleUnicode 0x2194] arrowSB SymbolMid arrowRSB SymbolMid DoubleArrow ArrowShape [MangleName 'arrowupdown'] [MangleUnicode 0x2195] arrowMidX arrowTop arrowMidX arrowBot - DoubleArrow ArrowShape [MangleName 'arrowupdown.bottomSpaceLeft'] nothing arrowMidX arrowTop arrowMidX (arrowBot + OperatorStroke * 1.5) + DoubleArrow ArrowShape [MangleName 'arrowupdown.bottomSpaceLeft'] nothing arrowMidX arrowTop arrowMidX (arrowBot + arrowSw * 1.5) DoubleArrow ArrowShape [MangleName 'arrowupleftdownright'] [MangleUnicode 0x2921] arrowDiagSB arrowDiagTop arrowDiagRSB arrowDiagBot DoubleArrow ArrowShape [MangleName 'arrowuprightdownleft'] [MangleUnicode 0x2922] arrowDiagRSB arrowDiagTop arrowDiagSB arrowDiagBot create-glyph [MangleName 'arrowUpDownBar'] [MangleUnicode 0x21A8] : composite-proc refer-glyph : MangleName 'arrowupdown.bottomSpaceLeft' - HBarBottom arrowSB arrowRSB arrowBot OperatorStroke + HBarBottom arrowSB arrowRSB arrowBot arrowSw do "Double-line Double-headed Arrows" define dasw doubleArrowStemWidth DoubleArrow [DoubleArrowShape dasw] [MangleName 'dblarrowleftright'] [MangleUnicode 0x21D4] arrowSB SymbolMid arrowRSB SymbolMid @@ -528,18 +527,18 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 refer-glyph 'arrDblHStrokeOver' do "Stacked Arrows" - local hcDist : Math.max (halfstroke * 5) (arrowWidth / 2) - VCombine [MangleName 'uni21C4'] [MangleUnicode 0x21C4] [MangleName 'arrowright'] [MangleName 'arrowleft'] (arrowSize * 1.75) + local hcDist : Math.max (halfArrowSw * 5) (arrowWidth / 2) + VCombine [MangleName 'uni21C4'] [MangleUnicode 0x21C4] [MangleName 'arrowright'] [MangleName 'arrowleft'] (arrowHeadSize * 1.75) HCombine [MangleName 'uni21C5'] [MangleUnicode 0x21C5] [MangleName 'arrowup'] [MangleName 'arrowdown'] hcDist - VCombine [MangleName 'uni21C6'] [MangleUnicode 0x21C6] [MangleName 'arrowleft'] [MangleName 'arrowright'] (arrowSize * 1.75) - VCombine [MangleName 'uni21C7'] [MangleUnicode 0x21C7] [MangleName 'arrowleft'] [MangleName 'arrowleft'] (arrowSize * 1.75) + VCombine [MangleName 'uni21C6'] [MangleUnicode 0x21C6] [MangleName 'arrowleft'] [MangleName 'arrowright'] (arrowHeadSize * 1.75) + VCombine [MangleName 'uni21C7'] [MangleUnicode 0x21C7] [MangleName 'arrowleft'] [MangleName 'arrowleft'] (arrowHeadSize * 1.75) HCombine [MangleName 'uni21C8'] [MangleUnicode 0x21C8] [MangleName 'arrowup'] [MangleName 'arrowup'] hcDist - VCombine [MangleName 'uni21C9'] [MangleUnicode 0x21C9] [MangleName 'arrowright'] [MangleName 'arrowright'] (arrowSize * 1.75) + VCombine [MangleName 'uni21C9'] [MangleUnicode 0x21C9] [MangleName 'arrowright'] [MangleName 'arrowright'] (arrowHeadSize * 1.75) HCombine [MangleName 'uni21CA'] [MangleUnicode 0x21CA] [MangleName 'arrowdown'] [MangleName 'arrowdown'] hcDist HCombine [MangleName 'uni21F5'] [MangleUnicode 0x21F5] [MangleName 'arrowdown'] [MangleName 'arrowup'] hcDist - VCombine [MangleName 'uni21CB'] [MangleUnicode 0x21CB] [MangleName 'arrowleftHR'] [MangleName 'arrowrightHR'] (arrowSize) - VCombine [MangleName 'uni21CC'] [MangleUnicode 0x21CC] [MangleName 'arrowrightHL'] [MangleName 'arrowleftHL'] (arrowSize) - VCombine [MangleName 'uni21B9'] [MangleUnicode 0x21B9] [MangleName 'arrowbarleft'] [MangleName 'arrowbarright'] (arrowSize * 1.75) + VCombine [MangleName 'uni21CB'] [MangleUnicode 0x21CB] [MangleName 'arrowleftHR'] [MangleName 'arrowrightHR'] (arrowHeadSize) + VCombine [MangleName 'uni21CC'] [MangleUnicode 0x21CC] [MangleName 'arrowrightHL'] [MangleName 'arrowleftHL'] (arrowHeadSize) + VCombine [MangleName 'uni21B9'] [MangleUnicode 0x21B9] [MangleName 'arrowbarleft'] [MangleName 'arrowbarright'] (arrowHeadSize * 1.75) do "Legacy computing arrows" define bodyWidth : Math.min arrowWidth (arrowHeight * 0.6) @@ -552,9 +551,9 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 include : ArrowHead x1 y1 x2 y2 include : intersection Rect arrowTop arrowBot 0 x1 - ArrowBar x1 y1 x2 y2 halfstroke + ArrowBar x1 y1 x2 y2 halfArrowSw include : intersection - VBarRight x1 arrowBot arrowTop (halfstroke * 2) + VBarRight x1 arrowBot arrowTop arrowSw spiro-outline corner x1 y1 corner x2 y2 @@ -570,30 +569,30 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 include : ArrowHead x1 y1 x2 y2 include : intersection Rect [mix y1 y2 (1 / 2)] arrowBot 0 x1 - ArrowBar x1 y1 x2 y2 halfstroke + ArrowBar x1 y1 x2 y2 halfArrowSw include : intersection Rect [mix y1 y2 1] arrowTop x2 x1 dispiro - widths halfstroke halfstroke + widths halfArrowSw halfArrowSw flat x2 y2 curl [mix x2 x1 (2/3)] [mix y2 y1 (2/3)] g4.up.mid - x1 - halfstroke * HVContrast - [mix y2 (arrowTop - halfstroke) 0.75] - halfstroke * 0.6 + x1 - halfArrowSw * HVContrast + [mix y2 (arrowTop - halfArrowSw) 0.75] - halfArrowSw * 0.6 arcvh - flat [mix x2 (x1 - halfstroke * HVContrast) 0.5] (arrowTop - halfstroke) - curl x2 (arrowTop - halfstroke) [heading Leftward] + flat [mix x2 (x1 - halfArrowSw * HVContrast) 0.5] (arrowTop - halfArrowSw) + curl x2 (arrowTop - halfArrowSw) [heading Leftward] create-glyph [MangleName 'uni21B8'] [MangleUnicode 0x21B8] : glyph-proc set-width MosaicWidth - define totalHeight : bodyWidth * 1.2 + OperatorStroke + define totalHeight : bodyWidth * 1.2 + arrowSw define x1 : arrowMidX + bodyWidth / 2 define y1 : SymbolMid - totalHeight / 2 define x2 : arrowMidX - bodyWidth / 2 define y2 : SymbolMid - totalHeight / 2 + bodyWidth include : ArrowShape x1 y1 x2 y2 - include : HBar x1 x2 (SymbolMid + totalHeight / 2) OperatorStroke + include : HBar x1 x2 (SymbolMid + totalHeight / 2) arrowSw if (MosaicWidthScalar == 1) : begin glyph-block-export ArrowShape diff --git a/font-src/glyphs/symbol/geometric.ptl b/font-src/glyphs/symbol/geometric.ptl index 77eb9525e..faa348927 100644 --- a/font-src/glyphs/symbol/geometric.ptl +++ b/font-src/glyphs/symbol/geometric.ptl @@ -5,125 +5,136 @@ import [DesignParameters] from '../../meta/aesthetics' glyph-module +glyph-block Symbol-Geometric-Shared : begin + glyph-block-export GeometricDim + define [GeometricDim s] : begin + local size : 0.5 * Width * s - 0.625 * SB * s * s + return : object + Scalar s + Size size + Width : Width * s + Left : 0.5 * Width * s - size + MidX : 0.5 * Width * s + Right : 0.5 * Width * s + size + Top : SymbolMid + size + MidY SymbolMid + Bot : SymbolMid - size + glyph-block Symbol-Geometric : for-width-kinds WideWidth1 glyph-block-import CommonShapes glyph-block-import Common-Derivatives + glyph-block-import Symbol-Geometric-Shared : GeometricDim - define Geom : let [size (0.5 * MosaicWidth - 0.625 * SB * MosaicWidthScalar * MosaicWidthScalar)] : object - Left : MosaicMiddle - size - Right : MosaicMiddle + size - Top : SymbolMid + size - Bot : SymbolMid - size - Size : begin size + define Geom : GeometricDim MosaicWidthScalar - define [UpperHalfMask] : Rect (SymbolMid + Geom.Size * 2) SymbolMid 0 MosaicWidth - define [LowerHalfMask] : Rect SymbolMid (SymbolMid - Geom.Size * 2) 0 MosaicWidth - define [LeftHalfMask] : Rect (SymbolMid + Geom.Size * 2) (SymbolMid - Geom.Size * 2) 0 MosaicMiddle - define [RightHalfMask] : Rect (SymbolMid + Geom.Size * 2) (SymbolMid - Geom.Size * 2) MosaicMiddle MosaicWidth + define [UpperHalfMask] : Rect (Geom.MidY + Geom.Size * 2) Geom.MidY 0 Geom.Width + define [LowerHalfMask] : Rect Geom.MidY (Geom.MidY - Geom.Size * 2) 0 Geom.Width + define [LeftHalfMask] : Rect (Geom.MidY + Geom.Size * 2) (Geom.MidY - Geom.Size * 2) 0 Geom.MidX + define [RightHalfMask] : Rect (Geom.MidY + Geom.Size * 2) (Geom.MidY - Geom.Size * 2) Geom.MidX Geom.Width define [UpperLeftQuarterMark] : intersection [UpperHalfMask] [LeftHalfMask] define [UpperRightQuarterMark] : intersection [UpperHalfMask] [RightHalfMask] define [LowerLeftQuarterMark] : intersection [LowerHalfMask] [LeftHalfMask] define [LowerRightQuarterMark] : intersection [LowerHalfMask] [RightHalfMask] define [UpperLeftHalfMark] : spiro-outline - corner (MosaicMiddle + Geom.Size * 2) (SymbolMid + Geom.Size * 2) - corner (MosaicMiddle - Geom.Size * 2) (SymbolMid + Geom.Size * 2) - corner (MosaicMiddle - Geom.Size * 2) (SymbolMid - Geom.Size * 2) + corner (Geom.MidX + Geom.Size * 2) (Geom.MidY + Geom.Size * 2) + corner (Geom.MidX - Geom.Size * 2) (Geom.MidY + Geom.Size * 2) + corner (Geom.MidX - Geom.Size * 2) (Geom.MidY - Geom.Size * 2) define [LowerRightHalfMark] : spiro-outline - corner (MosaicMiddle + Geom.Size * 2) (SymbolMid + Geom.Size * 2) - corner (MosaicMiddle - Geom.Size * 2) (SymbolMid - Geom.Size * 2) - corner (MosaicMiddle + Geom.Size * 2) (SymbolMid - Geom.Size * 2) + corner (Geom.MidX + Geom.Size * 2) (Geom.MidY + Geom.Size * 2) + corner (Geom.MidX - Geom.Size * 2) (Geom.MidY - Geom.Size * 2) + corner (Geom.MidX + Geom.Size * 2) (Geom.MidY - Geom.Size * 2) define [UpperRightHalfMark] : spiro-outline - corner (MosaicMiddle + Geom.Size * 2) (SymbolMid + Geom.Size * 2) - corner (MosaicMiddle - Geom.Size * 2) (SymbolMid + Geom.Size * 2) - corner (MosaicMiddle + Geom.Size * 2) (SymbolMid - Geom.Size * 2) + corner (Geom.MidX + Geom.Size * 2) (Geom.MidY + Geom.Size * 2) + corner (Geom.MidX - Geom.Size * 2) (Geom.MidY + Geom.Size * 2) + corner (Geom.MidX + Geom.Size * 2) (Geom.MidY - Geom.Size * 2) define [LowerLeftHalfMark] : spiro-outline - corner (MosaicMiddle - Geom.Size * 2) (SymbolMid - Geom.Size * 2) - corner (MosaicMiddle - Geom.Size * 2) (SymbolMid + Geom.Size * 2) - corner (MosaicMiddle + Geom.Size * 2) (SymbolMid - Geom.Size * 2) + corner (Geom.MidX - Geom.Size * 2) (Geom.MidY - Geom.Size * 2) + corner (Geom.MidX - Geom.Size * 2) (Geom.MidY + Geom.Size * 2) + corner (Geom.MidX + Geom.Size * 2) (Geom.MidY - Geom.Size * 2) define [StdBlackShape fn name unicode props] : begin local pp : fallback props {.} create-glyph [MangleName name] [MangleUnicode unicode] : glyph-proc - set-width MosaicWidth + set-width Geom.Width include : fn - fallback pp.cx MosaicMiddle - fallback pp.cy SymbolMid + fallback pp.cx Geom.MidX + fallback pp.cy Geom.MidY Geom.Size * [fallback pp.size 1] begin 0 define [StdWhiteShape fn name unicode props] : begin local pp : fallback props {.} create-glyph [MangleName name] [MangleUnicode unicode] : glyph-proc - set-width MosaicWidth + set-width Geom.Width include : difference fn - fallback pp.cx MosaicMiddle - fallback pp.cy SymbolMid + fallback pp.cx Geom.MidX + fallback pp.cy Geom.MidY Geom.Size * [fallback pp.size 1] begin 0 fn - fallback pp.cx MosaicMiddle - fallback pp.cy SymbolMid + fallback pp.cx Geom.MidX + fallback pp.cy Geom.MidY Geom.Size * [fallback pp.size 1] - [fallback pp.sw GeometryStroke] fallback pp.sw GeometryStroke define [StdWhiteContainingBlackShape fn name unicode props] : begin local pp : fallback props {.} create-glyph [MangleName name] [MangleUnicode unicode] : glyph-proc - set-width MosaicWidth + set-width Geom.Width local sw : fallback pp.sw GeometryStroke include : fn - fallback pp.cx MosaicMiddle - fallback pp.cy SymbolMid + fallback pp.cx Geom.MidX + fallback pp.cy Geom.MidY 0.5 * (Geom.Size * [fallback pp.size 1] - sw) begin 0 include : difference fn - fallback pp.cx MosaicMiddle - fallback pp.cy SymbolMid + fallback pp.cx Geom.MidX + fallback pp.cy Geom.MidY Geom.Size * [fallback pp.size 1] begin 0 fn - fallback pp.cx MosaicMiddle - fallback pp.cy SymbolMid + fallback pp.cx Geom.MidX + fallback pp.cy Geom.MidY Geom.Size * [fallback pp.size 1] - sw begin sw define [StdDoubleWhite fn name unicode props] : begin local pp : fallback props {.} create-glyph [MangleName name] [MangleUnicode unicode] : glyph-proc - set-width MosaicWidth + set-width Geom.Width local sw : fallback pp.sw GeometryStroke include : difference fn - fallback pp.cx MosaicMiddle - fallback pp.cy SymbolMid + fallback pp.cx Geom.MidX + fallback pp.cy Geom.MidY 0.5 * (Geom.Size * [fallback pp.size 1] - sw) begin 0 fn - fallback pp.cx MosaicMiddle - fallback pp.cy SymbolMid + fallback pp.cx Geom.MidX + fallback pp.cy Geom.MidY 0.5 * (Geom.Size * [fallback pp.size 1] - sw) - sw begin sw include : difference fn - fallback pp.cx MosaicMiddle - fallback pp.cy SymbolMid + fallback pp.cx Geom.MidX + fallback pp.cy Geom.MidY Geom.Size * [fallback pp.size 1] begin 0 fn - fallback pp.cx MosaicMiddle - fallback pp.cy SymbolMid + fallback pp.cx Geom.MidX + fallback pp.cy Geom.MidY Geom.Size * [fallback pp.size 1] - sw begin sw define [ConvexWhitePolygon fn name unicode props] : begin local pp : fallback props {.} create-glyph [MangleName name] [MangleUnicode unicode] : glyph-proc - set-width MosaicWidth + set-width Geom.Width local sh : new-glyph : fn - fallback pp.cx MosaicMiddle - fallback pp.cy SymbolMid + fallback pp.cx Geom.MidX + fallback pp.cy Geom.MidY Geom.Size * [fallback pp.size 1] begin 0 local outlines : glyph-proc : begin @@ -139,14 +150,14 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 include : intersection sh outlines - define SizeLarge {.size [DesignParameters.GeometricLargeX MosaicWidth MosaicUnitWidth]} + define SizeLarge {.size [DesignParameters.GeometricLargeX Geom.Width MosaicUnitWidth]} define SizeMedium {.size DesignParameters.geometric_medium_x} - define SizeMediumSmall {.size DesignParameters.geometric_medium_small_x .sw [Math.min GeometryStroke : AdviceStroke 5 MosaicWidthScalar]} - define SizeSmall {.size DesignParameters.geometric_small_x .sw [Math.min GeometryStroke : AdviceStroke 6 MosaicWidthScalar]} - define SizeVerySmall {.size DesignParameters.geometric_very_small_x .sw [Math.min GeometryStroke : AdviceStroke 7 MosaicWidthScalar]} + define SizeMediumSmall {.size DesignParameters.geometric_medium_small_x .sw [Math.min GeometryStroke : AdviceStroke 5 Geom.Scalar]} + define SizeSmall {.size DesignParameters.geometric_small_x .sw [Math.min GeometryStroke : AdviceStroke 6 Geom.Scalar]} + define SizeVerySmall {.size DesignParameters.geometric_very_small_x .sw [Math.min GeometryStroke : AdviceStroke 7 Geom.Scalar]} - define ObliqueSW : Math.min GeometryStroke : AdviceStroke 5.25 MosaicWidthScalar - define SmallObliqueSW : Math.min GeometryStroke : AdviceStroke 6.25 MosaicWidthScalar + define ObliqueSW : Math.min GeometryStroke : AdviceStroke 5.25 Geom.Scalar + define SmallObliqueSW : Math.min GeometryStroke : AdviceStroke 6.25 Geom.Scalar define SizeOblique { .sw ObliqueSW } define SizeMediumOblique { .size DesignParameters.geometric_medium_x .sw SmallObliqueSW } define SizeSmallOblique { .size DesignParameters.geometric_small_x .sw SmallObliqueSW } @@ -361,7 +372,7 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 StdBlackShape BlackCircleShape 'blackCircle' 0x25CF StdWhiteShape BlackCircleShape 'whiteCircle' 0x25CB StdWhiteContainingBlackShape BlackCircleShape 'whiteCircleWithCenter' 0x25C9 - StdDoubleWhite BlackCircleShape 'doubleWhiteCircle' 0x25CE {.sw [Math.min GeometryStroke : AdviceStroke 4 MosaicWidthScalar]} + StdDoubleWhite BlackCircleShape 'doubleWhiteCircle' 0x25CE {.sw [Math.min GeometryStroke : AdviceStroke 4 Geom.Scalar]} StdBlackShape BlackCircleShape 'blackSmallCircle' null SizeSmall StdWhiteShape BlackCircleShape 'whiteSmallCircle' null SizeSmall StdBlackShape BlackCircleShape 'blackMediumCircle' 0x26AB SizeMedium @@ -370,44 +381,44 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 StdWhiteShape BlackCircleShape 'whiteLargeCircle' 0x25EF SizeLarge create-glyph [MangleName 'blackLeftHalfCircle'] [MangleUnicode 0x25D6] : glyph-proc - set-width MosaicWidth + set-width Geom.Width include : intersection refer-glyph : MangleName 'blackCircle' LeftHalfMask create-glyph [MangleName 'blackRightHalfCircle'] [MangleUnicode 0x25D7] : glyph-proc - set-width MosaicWidth + set-width Geom.Width include : intersection refer-glyph : MangleName 'blackCircle' RightHalfMask create-glyph [MangleName 'blackUpperHalfCircle'] [MangleUnicode 0x2BCA] : glyph-proc - set-width MosaicWidth + set-width Geom.Width include : intersection refer-glyph : MangleName 'blackCircle' UpperHalfMask create-glyph [MangleName 'blackBottomHalfCircle'] [MangleUnicode 0x2BCB] : glyph-proc - set-width MosaicWidth + set-width Geom.Width include : intersection refer-glyph : MangleName 'blackCircle' LowerHalfMask create-glyph [MangleName 'dottedCircle'] [MangleUnicode 0x25CC] : glyph-proc - set-width MosaicWidth - include : [DivFrame MosaicWidthScalar].markSet.plus - local n : 12 * [Math.ceil MosaicWidthScalar] + set-width Geom.Width + include : [DivFrame Geom.Scalar].markSet.plus + local n : 12 * [Math.ceil Geom.Scalar] local fine : AdviceStroke 10 foreach j [range 0 n] : begin local angle : Math.PI * 2 * j / n - local cx : MosaicMiddle + (Geom.Right - MosaicMiddle) * [Math.cos angle] - local cy : SymbolMid + (Geom.Right - MosaicMiddle) * [Math.sin angle] + local cx : Geom.MidX + (Geom.Right - Geom.MidX) * [Math.cos angle] + local cy : Geom.MidY + (Geom.Right - Geom.MidX) * [Math.sin angle] include : CircleRingAt cx cy fine create-glyph [MangleName 'dottedSquare'] [MangleUnicode 0x2B1A] : glyph-proc - set-width MosaicWidth - include : [DivFrame MosaicWidthScalar].markSet.plus - local n : 4 * [Math.ceil MosaicWidthScalar] + set-width Geom.Width + include : [DivFrame Geom.Scalar].markSet.plus + local n : 4 * [Math.ceil Geom.Scalar] local fine : AdviceStroke 10 local box : object Left : Geom.Left + fine @@ -443,7 +454,7 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 StdBlackShape [RegularPolygonFill 8 1 1.05 0.128] 'blackOctagon' 0x2BC4 StdBlackShape [RegularPolygonFill 5 2 1.1 0] 'blackStar' 0x2605 StdWhiteShape [RegularPolygonFill 5 2 1.1 0] 'whiteStar' 0x2606 - begin {.sw ([AdviceStroke 5.5 : Math.sqrt MosaicWidthScalar] * [Math.sqrt 5])} + begin {.sw ([AdviceStroke 5.5 : Math.sqrt Geom.Scalar] * [Math.sqrt 5])} do "Stars and Asterisks" define StarCfg : list @@ -454,32 +465,32 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 * {.sides 12 .skip 1 .name 'twelvePointedBlackStar' .unicode 0x2739 .pMag 1.05 .phase 0 .pShrink 0.5} foreach [[object sides skip name unicode pMag phase pShrink] : items-of StarCfg] : do create-glyph [MangleName name] [MangleUnicode unicode] : glyph-proc - set-width MosaicWidth + set-width Geom.Width local corners {} foreach [j : range 0 (2 * sides)] : begin local angle : Math.PI * j * skip / sides + phase local mag : [if (j % 2) pShrink 1] * pMag corners.push : corner - MosaicMiddle + Geom.Size * mag * [Math.sin angle] - SymbolMid + Geom.Size * mag * [Math.cos angle] + Geom.MidX + Geom.Size * mag * [Math.sin angle] + Geom.MidY + Geom.Size * mag * [Math.cos angle] include : spiro-outline corners - define HeavySw : Math.max ([AdviceStroke 4.5 MosaicWidthScalar] * 1.5) (Width * 0.13 * [Math.sqrt MosaicWidthScalar]) + define HeavySw : Math.max ([AdviceStroke 4.5 Geom.Scalar] * 1.5) (Width * 0.13 * [Math.sqrt Geom.Scalar]) define AsteriskCfg : list * {.sides 4 .name 'heavyGreekCross' .cThin 1 .unicode 0x271A .phase 0 .sw HeavySw .pMag 1} * {.sides 6 .name 'heavyAsterisk' .cThin 0.9 .unicode 0x2731 .phase 0 .sw HeavySw .pMag 1} - * {.sides 8 .name 'eightSpokedAsterisk' .cThin 0.75 .unicode 0x2733 .phase 0 .sw [AdviceStroke 7.5 : Math.sqrt MosaicWidthScalar] .pMag 1} - * {.sides 16 .name 'sixteenSpokedAsterisk' .cThin 0.75 .unicode 0x273A .phase 0 .sw [AdviceStroke 8 : Math.sqrt MosaicWidthScalar] .pMag 1} + * {.sides 8 .name 'eightSpokedAsterisk' .cThin 0.75 .unicode 0x2733 .phase 0 .sw [AdviceStroke 7.5 : Math.sqrt Geom.Scalar] .pMag 1} + * {.sides 16 .name 'sixteenSpokedAsterisk' .cThin 0.75 .unicode 0x273A .phase 0 .sw [AdviceStroke 8 : Math.sqrt Geom.Scalar] .pMag 1} foreach [[object sides name unicode phase sw cThin pMag] : items-of AsteriskCfg] : do create-glyph [MangleName name] [MangleUnicode unicode] : glyph-proc - set-width MosaicWidth + set-width Geom.Width foreach [j : range 0 sides] : begin local angle : 2 * Math.PI * j / sides + phase include : dispiro - corner MosaicMiddle SymbolMid [widths.center (sw * cThin)] + corner Geom.MidX Geom.MidY [widths.center (sw * cThin)] corner - MosaicMiddle + pMag * Geom.Size * [Math.sin (angle + Math.PI)] - SymbolMid + pMag * Geom.Size * [Math.cos (angle + Math.PI)] + Geom.MidX + pMag * Geom.Size * [Math.sin (angle + Math.PI)] + Geom.MidY + pMag * Geom.Size * [Math.cos (angle + Math.PI)] widths.center sw do "Dice" @@ -494,11 +505,11 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 foreach { unicode dots } [items-of diceCombinations] : begin create-glyph [MangleName "dice_\(unicode)"] [MangleUnicode unicode] : glyph-proc include [refer-glyph : MangleName 'whiteSquare'] AS_BASE ALSO_METRICS - define dr : DotRadius / Stroke * [AdviceStroke 7 MosaicWidthScalar] - define xLeftEx : MosaicMiddle - Geom.Size + GeometryStroke - define xRightEx : MosaicMiddle + Geom.Size - GeometryStroke - define yBottomEx : SymbolMid + Geom.Size - GeometryStroke - define yTopEx : SymbolMid - Geom.Size + GeometryStroke + define dr : DotRadius / Stroke * [AdviceStroke 7 Geom.Scalar] + define xLeftEx : Geom.MidX - Geom.Size + GeometryStroke + define xRightEx : Geom.MidX + Geom.Size - GeometryStroke + define yBottomEx : Geom.MidY + Geom.Size - GeometryStroke + define yTopEx : Geom.MidY - Geom.Size + GeometryStroke define xLeft : mix xLeftEx xRightEx (1 / 5) define xRight : mix xLeftEx xRightEx (4 / 5) define yBottom : mix yBottomEx yTopEx (1 / 5) @@ -511,24 +522,24 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 do "Rounded" create-glyph [MangleName 'roundwhitesquare'] [MangleUnicode 0x25A2] : glyph-proc - set-width MosaicWidth + set-width Geom.Width define cr : Geom.Size - GeometryStroke * 2 include : dispiro widths.lhs GeometryStroke - flat (MosaicMiddle + 1) (SymbolMid + Geom.Size) [heading Leftward] - curl (MosaicMiddle - cr) (SymbolMid + Geom.Size) [heading Leftward] + flat (Geom.MidX + 1) (Geom.MidY + Geom.Size) [heading Leftward] + curl (Geom.MidX - cr) (Geom.MidY + Geom.Size) [heading Leftward] archv - flat (MosaicMiddle - Geom.Size) (SymbolMid + cr) [heading Downward] - curl (MosaicMiddle - Geom.Size) (SymbolMid - cr) [heading Downward] + flat (Geom.MidX - Geom.Size) (Geom.MidY + cr) [heading Downward] + curl (Geom.MidX - Geom.Size) (Geom.MidY - cr) [heading Downward] arcvh - flat (MosaicMiddle - cr) (SymbolMid - Geom.Size) [heading Rightward] - curl (MosaicMiddle + cr) (SymbolMid - Geom.Size) [heading Rightward] + flat (Geom.MidX - cr) (Geom.MidY - Geom.Size) [heading Rightward] + curl (Geom.MidX + cr) (Geom.MidY - Geom.Size) [heading Rightward] archv - flat (MosaicMiddle + Geom.Size) (SymbolMid - cr) [heading Upward] - curl (MosaicMiddle + Geom.Size) (SymbolMid + cr) [heading Upward] + flat (Geom.MidX + Geom.Size) (Geom.MidY - cr) [heading Upward] + curl (Geom.MidX + Geom.Size) (Geom.MidY + cr) [heading Upward] arcvh - flat (MosaicMiddle + cr) (SymbolMid + Geom.Size) [heading Leftward] - curl (MosaicMiddle - 1) (SymbolMid + Geom.Size) [heading Leftward] + flat (Geom.MidX + cr) (Geom.MidY + Geom.Size) [heading Leftward] + curl (Geom.MidX - 1) (Geom.MidY + Geom.Size) [heading Leftward] define [ThickRoundedArrowBar x1 y1 x2 y2 r w] : glyph-proc include : PointingTo x1 y1 x2 y2 : lambda [mag] : spiro-outline @@ -544,7 +555,7 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 archv close create-glyph [MangleName "whiteHeavySaltireWithRoundedCorners"] [MangleUnicode 0x1FBC0 WideWidth2] : glyph-proc - set-width MosaicWidth + set-width Geom.Width local inner : [Math.max [AdviceStroke 3] (Width / 8)] / 2 local thick : AdviceStroke 4 local left : Geom.Left + (inner + thick) @@ -562,8 +573,8 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 do "Shaded hollow squares" define [HShadeShape] : begin define lineWidth : Math.min GeometryStroke ((Geom.Size * 2 - GeometryStroke * 2) * 1 / 11) - define top : SymbolMid + Geom.Size - GeometryStroke + lineWidth / 2 - define bot : SymbolMid - (top - SymbolMid) + define top : Geom.MidY + Geom.Size - GeometryStroke + lineWidth / 2 + define bot : Geom.MidY - (top - Geom.MidY) return : union dispiro widths.center lineWidth @@ -579,7 +590,7 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 curl Geom.Right [mix top bot 0.75] [heading Rightward] create-glyph [MangleName 'hShadeSquare'] [MangleUnicode 0x25A4] : glyph-proc - set-width MosaicWidth + set-width Geom.Width include : union refer-glyph : MangleName 'whiteSquare' intersection @@ -588,8 +599,8 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 define [VShadeShape] : begin define lineWidth : Math.min GeometryStroke ((Geom.Size * 2 - GeometryStroke * 2) * 1 / 11) - define r : MosaicWidth / 2 + Geom.Size - GeometryStroke + lineWidth / 2 - define l : MosaicWidth / 2 - (r - MosaicWidth / 2) + define r : Geom.Width / 2 + Geom.Size - GeometryStroke + lineWidth / 2 + define l : Geom.Width / 2 - (r - Geom.Width / 2) return : union dispiro widths.center lineWidth @@ -605,9 +616,9 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 curl [mix l r 0.75] Geom.Bot [heading Downward] define [VBarShadeShape] : begin - define lineWidth : Math.min GeometryStroke [AdviceStroke 5 MosaicWidthScalar] - define r : MosaicWidth / 2 + Geom.Size - GeometryStroke + lineWidth / 2 - define l : MosaicWidth / 2 - (r - MosaicWidth / 2) + define lineWidth : Math.min GeometryStroke [AdviceStroke 5 Geom.Scalar] + define r : Geom.Width / 2 + Geom.Size - GeometryStroke + lineWidth / 2 + define l : Geom.Width / 2 - (r - Geom.Width / 2) return : union dispiro widths.center lineWidth @@ -615,7 +626,7 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 curl [mix l r 0.5] Geom.Bot [heading Downward] create-glyph [MangleName 'vShadeSquare'] [MangleUnicode 0x25A5] : glyph-proc - set-width MosaicWidth + set-width Geom.Width include : union refer-glyph : MangleName 'whiteSquare' intersection @@ -623,7 +634,7 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 VShadeShape create-glyph [MangleName 'vBarSquare'] [MangleUnicode 0x25EB] : glyph-proc - set-width MosaicWidth + set-width Geom.Width include : union refer-glyph : MangleName 'whiteSquare' intersection @@ -631,15 +642,15 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 VBarShadeShape create-glyph [MangleName 'hvShadeSquare'] [MangleUnicode 0x25A6] : glyph-proc - set-width MosaicWidth + set-width Geom.Width include : union refer-glyph : MangleName 'hShadeSquare' refer-glyph : MangleName 'vShadeSquare' define [DDiagShadeShape] : begin define lineWidth : Math.min GeometryStroke ((Geom.Size * 2 - GeometryStroke * 2) * 1 / 11) - define top : SymbolMid + Geom.Size - define bot : SymbolMid - (top - SymbolMid) + define top : Geom.MidY + Geom.Size + define bot : Geom.MidY - (top - Geom.MidY) return : glyph-proc foreach [j : range (-10) till 10] : include : dispiro widths.center lineWidth @@ -648,8 +659,8 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 define [UDiagShadeShape] : begin define lineWidth : Math.min GeometryStroke ((Geom.Size * 2 - GeometryStroke * 2) * 1 / 11) - define top : SymbolMid + Geom.Size - define bot : SymbolMid - (top - SymbolMid) + define top : Geom.MidY + Geom.Size + define bot : Geom.MidY - (top - Geom.MidY) return : glyph-proc foreach [j : range (-10) till 10] : include : dispiro widths.center lineWidth @@ -657,7 +668,7 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 curl Geom.Right [mix top bot (j / 4 - 1)] [heading Rightward] create-glyph [MangleName 'dDiagShadeSquare'] [MangleUnicode 0x25A7] : glyph-proc - set-width MosaicWidth + set-width Geom.Width include : union refer-glyph : MangleName 'whiteSquare' intersection @@ -665,7 +676,7 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 DDiagShadeShape create-glyph [MangleName 'uDiagShadeSquare'] [MangleUnicode 0x25A8] : glyph-proc - set-width MosaicWidth + set-width Geom.Width include : union refer-glyph : MangleName 'whiteSquare' intersection @@ -673,13 +684,13 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 UDiagShadeShape create-glyph [MangleName 'udDiagShadeSquare'] [MangleUnicode 0x25A9] : glyph-proc - set-width MosaicWidth + set-width Geom.Width include : union refer-glyph : MangleName 'dDiagShadeSquare' refer-glyph : MangleName 'uDiagShadeSquare' create-glyph [MangleName 'vShadeCircle'] [MangleUnicode 0x25CD] : glyph-proc - set-width MosaicWidth + set-width Geom.Width include : union refer-glyph : MangleName 'whiteCircle' intersection [refer-glyph : MangleName 'blackCircleO'] [VShadeShape] @@ -694,7 +705,7 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 list 0x25D5 0 1 1 1 foreach [{u LT LB RT RB} : items-of partialCircleQuarters] : begin create-glyph [MangleName ('uni' + u)] [MangleUnicode u] : glyph-proc - set-width MosaicWidth + set-width Geom.Width include : union refer-glyph : MangleName 'whiteCircle' intersection @@ -714,7 +725,7 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 list 0x25E1 0 1 0 1 foreach [{u LT LB RT RB} : items-of arcQuarters] : begin create-glyph [MangleName ('uni' + u)] [MangleUnicode u] : glyph-proc - set-width MosaicWidth + set-width Geom.Width include : intersection refer-glyph : MangleName 'whiteCircle' new-glyph : glyph-proc @@ -733,7 +744,7 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 list 0x25EA 0 0 0 0 0 0 0 1 foreach [{u LT LB RT RB LTh LBh RTh RBh} : items-of squareParts] : begin create-glyph [MangleName ('uni' + u)] [MangleUnicode u] : glyph-proc - set-width MosaicWidth + set-width Geom.Width include : union refer-glyph : MangleName 'whiteSquare' intersection @@ -756,7 +767,7 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 list 0x2B19 0 1 0 1 foreach [{u LT LB RT RB LTh LBh RTh RBh} : items-of diamondParts] : begin create-glyph [MangleName ('uni' + u)] [MangleUnicode u] : glyph-proc - set-width MosaicWidth + set-width Geom.Width include : union refer-glyph : MangleName 'whiteDiamond' intersection @@ -775,7 +786,7 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 list 0x29E9 0 1 0 1 foreach [{u UP DN LH RH} : items-of triangleParts] : begin create-glyph [MangleName ('uni' + u)] [MangleUnicode u] : glyph-proc - set-width MosaicWidth + set-width Geom.Width include : union glyph-proc if UP : include : refer-glyph : MangleName 'whiteTriangleUp' @@ -797,7 +808,7 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 foreach { u lh rh bord } [items-of starParts] : begin create-glyph [MangleName ('uni' + u)] [MangleUnicode u] : glyph-proc - set-width MosaicWidth + set-width Geom.Width if bord : include [refer-glyph : MangleName 'whiteStar'] if lh : include : intersection [LeftHalfMask] [refer-glyph : MangleName 'blackStar'] if rh : include : intersection [RightHalfMask] [refer-glyph : MangleName 'blackStar'] @@ -817,13 +828,13 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 local hh : GeometryStroke / 2 * HVContrast local hv : GeometryStroke / 2 local s GeometryStroke - set-width MosaicWidth + set-width Geom.Width include : union refer-glyph [MangleName frame] - if L [HBar (MosaicMiddle - Geom.Size + hh) (MosaicMiddle + hh) SymbolMid s] [glyph-proc] - if R [HBar (MosaicMiddle + Geom.Size - hh) (MosaicMiddle - hh) SymbolMid s] [glyph-proc] - if T [VBar MosaicMiddle (SymbolMid + Geom.Size - hv) (SymbolMid - hv) s] [glyph-proc] - if B [VBar MosaicMiddle (SymbolMid - Geom.Size + hv) (SymbolMid + hv) s] [glyph-proc] + if L [HBar (Geom.MidX - Geom.Size + hh) (Geom.MidX + hh) Geom.MidY s] [glyph-proc] + if R [HBar (Geom.MidX + Geom.Size - hh) (Geom.MidX - hh) Geom.MidY s] [glyph-proc] + if T [VBar Geom.MidX (Geom.MidY + Geom.Size - hv) (Geom.MidY - hv) s] [glyph-proc] + if B [VBar Geom.MidX (Geom.MidY - Geom.Size + hv) (Geom.MidY + hv) s] [glyph-proc] do "Sun and Gear" define [EightPointingRaysShape r] : glyph-proc @@ -833,55 +844,55 @@ glyph-block Symbol-Geometric : for-width-kinds WideWidth1 local s : Math.sin theta include : dispiro widths.center rayWidth - corner (MosaicMiddle + c * r) (SymbolMid + s * r) - corner (MosaicMiddle + c * Geom.Size) (SymbolMid + s * Geom.Size) + corner (Geom.MidX + c * r) (Geom.MidY + s * r) + corner (Geom.MidX + c * Geom.Size) (Geom.MidY + s * Geom.Size) - define rayWidth : AdviceStroke 8 MosaicWidthScalar + define rayWidth : AdviceStroke 8 Geom.Scalar define rayInnerRadius : Geom.Size * 0.56 define dotRadius : Geom.Size * 0.44 create-glyph [MangleName 'blackSunWithRays'] [MangleUnicode 0x2600] : glyph-proc - set-width MosaicWidth + set-width Geom.Width include : EightPointingRaysShape rayInnerRadius - include : RingAt MosaicMiddle SymbolMid dotRadius + include : RingAt Geom.MidX Geom.MidY dotRadius create-glyph [MangleName 'whiteSunWithRays'] [MangleUnicode 0x263C] : glyph-proc - set-width MosaicWidth + set-width Geom.Width include : EightPointingRaysShape rayInnerRadius - include : RingStrokeAt MosaicMiddle SymbolMid dotRadius rayWidth + include : RingStrokeAt Geom.MidX Geom.MidY dotRadius rayWidth create-glyph [MangleName 'gear'] [MangleUnicode 0x2699] : glyph-proc - set-width MosaicWidth + set-width Geom.Width local gearRingRad : mix rayInnerRadius Geom.Size 0.4 include : EightPointingRaysShape (gearRingRad - rayWidth / 2) - include : RingStrokeAt MosaicMiddle SymbolMid gearRingRad rayWidth - include : RingAt MosaicMiddle SymbolMid (0.4 * (gearRingRad - rayWidth)) + include : RingStrokeAt Geom.MidX Geom.MidY gearRingRad rayWidth + include : RingAt Geom.MidX Geom.MidY (0.4 * (gearRingRad - rayWidth)) do "Miscellaneous" create-glyph [MangleName 'dottedWhiteTriangle'] [MangleUnicode 0x25EC] : glyph-proc - set-width MosaicWidth + set-width Geom.Width include : refer-glyph : MangleName 'whiteTriangleUp' - include : CircleDotAt MosaicMiddle (SymbolMid - Geom.Size / 3) [Math.min (MosaicWidth / 8 ) PeriodRadius] + include : CircleDotAt Geom.MidX (Geom.MidY - Geom.Size / 3) [Math.min (Geom.Width / 8 ) PeriodRadius] create-glyph [MangleName 'uni25D8'] [MangleUnicode 0x25D8] : glyph-proc - set-width MosaicWidth + set-width Geom.Width include : difference refer-glyph : MangleName 'blackLongRectangle' refer-glyph : MangleName 'blackCircle' create-glyph [MangleName 'uni25D9'] [MangleUnicode 0x25D9] : glyph-proc - set-width MosaicWidth + set-width Geom.Width include : difference refer-glyph : MangleName 'blackLongRectangle' refer-glyph : MangleName 'whiteCircle' create-glyph [MangleName 'uni25DA'] [MangleUnicode 0x25DA] : glyph-proc - set-width MosaicWidth + set-width Geom.Width include : intersection refer-glyph : MangleName 'uni25D9' UpperHalfMask create-glyph [MangleName 'uni25DB'] [MangleUnicode 0x25DB] : glyph-proc - set-width MosaicWidth + set-width Geom.Width include : intersection refer-glyph : MangleName 'uni25D9' LowerHalfMask \ No newline at end of file diff --git a/font-src/glyphs/symbol/punctuation.ptl b/font-src/glyphs/symbol/punctuation.ptl index b25da21fd..d910b7105 100644 --- a/font-src/glyphs/symbol/punctuation.ptl +++ b/font-src/glyphs/symbol/punctuation.ptl @@ -494,6 +494,7 @@ glyph-block Symbol-Punctuation-Ampersand : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives glyph-block-import Letter-Latin-Ezh : RevEzhShape + glyph-block-import Letter-Shared-Shapes : DToothlessRise define sw : AdviceStroke2 3 3 CAP define fineAmp : AdviceStroke 3.5 @@ -622,7 +623,25 @@ glyph-block Symbol-Punctuation-Ampersand : begin define xEtCenterBarRight : mix xEtRight Width 0.5 define yEtRightBarTop : mix (yEtMiddle + sw / 2) (CAP - SHook) 0.375 - create-glyph 'ampersand.et' : union + create-glyph 'ampersand.etToothlessCorner' : union + dispiro + g4 (xEtRight + O) (CAP - SHook) [widths.lhs] + hookstart (CAP - O) + g4 xEtLeft (CAP - smaEt) + arcvh + flat Middle (yEtMiddle - (fineEt - sw / 2)) [widths.heading fineEt 0 Rightward] + curl xEtCenterBarRight (yEtMiddle - (fineEt - sw / 2)) [heading Rightward] + dispiro + flat xEtCenterBarRight (yEtMiddle + (fineEt - sw / 2)) [widths.heading fineEt 0 Leftward] + curl Middle (yEtMiddle + (fineEt - sw / 2)) [heading Leftward] + archv + g4 (xEtLeft + O * 2) smbEt [widths.lhs] + arcvh + g4 (xEtBottom + CorrectionOMidS) O + g4 xEtRight DToothlessRise + VBarRight xEtRight DToothlessRise yEtRightBarTop + + create-glyph 'ampersand.etToothlessRounded' : union dispiro g4 (xEtRight + O) (CAP - SHook) [widths.lhs] hookstart (CAP - O) diff --git a/font-src/meta/macros.ptl b/font-src/meta/macros.ptl index 138ad5d19..d4491505a 100644 --- a/font-src/meta/macros.ptl +++ b/font-src/meta/macros.ptl @@ -2,6 +2,19 @@ define-operator "--" 890 'right' : syntax-rules `(@l -- @r) [atom l] : dirty `[new $NamedParameterPair$ @{".quote" [formOf l]} @r] +### Macro for identity match +define-macro Just : begin + local m : syntax-rules + `[Just @x] : dirty x + + set coinit.initFn : lambda [m] : begin + set m.toPattern : lambda [form env w] : match form + `[Just @x] : object + whether : lambda [t] : ex `(@t === @x) env + assign : lambda [t locallyQ] : ex `[begin] env + + return m + define-macro params : syntax-rules `[params @_pairs @body] : begin local ta : env.newt diff --git a/params/variants.toml b/params/variants.toml index 3c5ed7393..f977baaea 100644 --- a/params/variants.toml +++ b/params/variants.toml @@ -60,10 +60,15 @@ rank = 1 description = "Toothed G" selector.G = "toothed" -[prime.capital-g.variants.toothless] +[prime.capital-g.variants.toothless-corner] rank = 2 -description = "Toothless G" -selector.G = "toothless" +description = "Corner toothless G" +selector.G = "toothlessCorner" + +[prime.capital-g.variants.toothless-rounded] +rank = 3 +description = "Round toothless G" +selector.G = "toothlessRounded" @@ -1559,18 +1564,23 @@ rank = 3 description = 'Ampersand (`&`) with an open contour at lower half' selector.ampersand = 'lowerOpen' -[prime.ampersand.variants.et] -rank = 4 -description = 'Ampersand (`&`) drawn like a ligature of Ɛ and t' -selector.ampersand = 'et' - [prime.ampersand.variants.et-toothed] -rank = 5 +rank = 4 description = 'Ampersand (`&`) drawn like a ligature of Ɛ and t with tooth' selector.ampersand = 'etToothed' -[prime.ampersand.variants.flat-top] +[prime.ampersand.variants.et-toothless-corner] +rank = 5 +description = 'Ampersand (`&`) drawn like a ligature of Ɛ and t without tooth (corner)' +selector.ampersand = 'etToothlessCorner' + +[prime.ampersand.variants.et-toothless-rounded] rank = 6 +description = 'Ampersand (`&`) drawn like a ligature of Ɛ and t without tooth (rounded)' +selector.ampersand = 'etToothlessRounded' + +[prime.ampersand.variants.flat-top] +rank = 7 description = 'Ampersand (`&`) drawn with a flat top' selector.ampersand = 'flatTop' @@ -1861,18 +1871,19 @@ tag = 'ss02' description = "Anonymous Pro Style" [composite.ss02.design] -at = 'fourfold' -a = 'doublestorey' -brace = 'straight' -k = 'straight' -l = 'serifed' -i = 'serifed' -y = 'straight-turn' -asterisk = 'hexlow' -one = 'base' -seven = 'serifed' -six = 'closed-contour' -nine = 'closed-contour' +capital-g = "toothless-rounded" +capital-j = "serifless" +a = "doublestorey" +d = "toothed" +i = "serifed" +k = "straight" +l = "serifed" +y = "straight-turn" +eszet = "longs-s-lig" +one = "base" +six = "closed-contour" +nine = "closed-contour" +asterisk = "hexlow" percent = "rings-connected" @@ -1930,22 +1941,24 @@ tag = 'ss05' description = 'Fira Mono Style' [composite.ss05.design] -at = 'short' -underscore = 'low' -a = 'doublestorey' -g = 'opendoublestorey' -i = 'serifed' -k = 'straight' -l = 'serifed-tailed' -y = 'straight-turn' -number-sign = 'slanted' -zero = 'dotted' -one = 'base' -ampersand = 'et' -four = 'semi-open' -six = 'closed-contour' -nine = 'open-contour' +capital-g = "toothless-corner" +a = "doublestorey-tailed" +g = "opendoublestorey" +i = "serifed" +l = "serifed-tailed" +r = "serifed" +y = "straight-turn" +one = "base" +six = "closed-contour" +nine = "open-contour" +asterisk = "hexlow" +underscore = "low" +brace = "straight" +number-sign = "slanted" +ampersand = "et-toothless-corner" +at = "short" percent = "rings-connected" +lig-ltgteq = "slanted" @@ -2035,25 +2048,31 @@ tag = 'ss09' description = 'Source Code Pro Style' [composite.ss09.design] -capital-g = 'toothless' -at = 'threefold' -k = 'straight' -l = 'serifed-tailed' -y = 'straight-turn' -asterisk = 'low' -zero = 'dotted' -dollar = 'open' -number-sign = 'slanted' -one = 'base' -six = 'closed-contour' -nine = 'closed-contour' +capital-g = "toothless-corner" +k = "straight" +l = "serifed-tailed" +y = "straight-turn" +zero = "dotted" +one = "base" +six = "closed-contour" +nine = "closed-contour" +asterisk = "low" +underscore = "low" +brace = "straight" +dollar = "open" +bar = "force-upright" [composite.ss09.upright-oblique] -i = 'hooky' +a = "doublestorey" +d = "toothed" g = 'doublestorey' +i = 'hooky' [composite.ss09.italic] -g = 'singlestorey' +a = "singlestorey" +d = "toothed" +g = "singlestorey" +i = "serifed-tailed" @@ -2099,26 +2118,38 @@ tag = 'ss12' description = 'Ubuntu Mono Style' [composite.ss12.design] +capital-g = "toothless-corner" a = "doublestorey-toothless-corner" b = "toothless-corner" -d = "toothless-corner" g = "earless-corner" i = "serifed-tailed" +k = "straight" l = "serifed-tailed" -m = "earless-corner-double-arch-shortleg" +m = "shortleg" n = "earless-corner-straight" p = "earless-corner" q = "earless-corner" r = "earless-corner" -u = "toothless-corner" y = "straight-turn" +eszet = "longs-s-lig" zero = "dotted" +one = "base" six = "open-contour" nine = "open-contour" +underscore = "low" +brace = "straight" number-sign = "slanted" dollar = "open" percent = "rings-connected" -underscore = "low" + +[composite.ss12.upright-oblique] +d = "toothless-corner" +u = "toothless-corner" + +[composite.ss12.italic] +d = "tailed" +u = "tailed" + [composite.ss13] @@ -2147,7 +2178,7 @@ description = 'JetBrains Mono Style' [composite.ss14.design] capital-q = "straight" -capital-g = "toothless" +capital-g = "toothless-rounded" f = "flat-hook-crossbar-at-x-height" i = "serifed" l = "serifed-flat-tailed"