diff --git a/README.md b/README.md index 44065c0472..0aed41163b 100644 --- a/README.md +++ b/README.md @@ -195,7 +195,7 @@ Since version 2.0, Iosevka would no longer support building via `makefile`. To i - + 3. Run `npm run build -- contents::` and the built fonts would be avaliable in `dist/`. Aside from `contents::`, other options are: @@ -314,6 +314,7 @@ The current available styles for `design`/`upright`/`italic`/`oblique` options a * Styles for `a`: * `v-a-doublestorey`, `cv01`: Double-storey `a` (default for Upright). * `v-a-singlestorey`, `cv02`: Single-storey `a` (default for Italic). + * `v-a-singlestorey-tailed`, `VXBS`: Single-storey `a` with curly tail. * Styles for `b`: * `v-b-toothed`, `VXBK`: `b` with bottom-left tooth (default). * `v-b-toothless-corner`, `VXBL`: `b` without botton-left tooth, with a corner transition. @@ -373,6 +374,7 @@ The current available styles for `design`/`upright`/`italic`/`oblique` options a * Styles for `u`: * `v-u-with-bar`, `cv89`: Normal `u` with right bar (default). * `v-u-without-bar`, `cv90`: Normal `u` without right bar, like a smaller uppercase `U`. + * `v-u-tailed`, `VXBT`: `u` with right bar and a slightly curly tail. * Styles for `v`, `V`: * `v-v-straight`, `cv71`: Standard, straight `V` and `v` (default). * `v-v-curly`, `cv72`:  Slightly curly `V` and `v`, like Iosevka 2.x. diff --git a/changes/3.3.1.md b/changes/3.3.1.md new file mode 100644 index 0000000000..59daa624dd --- /dev/null +++ b/changes/3.3.1.md @@ -0,0 +1,4 @@ + * Add a slightly-curly tailed `a` and `u` (#631, #636). + * Add triangle operators, bowtie operators and diagonal ellipsis. + * Refine the crossbar width of `7` in `v-seven-crossbar` variant (#634). + * Fix the broken shape of U-horns. \ No newline at end of file diff --git a/font-src/gen/build-glyphs.ptl b/font-src/gen/build-glyphs.ptl index 44467d423f..684fd2f84b 100644 --- a/font-src/gen/build-glyphs.ptl +++ b/font-src/gen/build-glyphs.ptl @@ -3,7 +3,6 @@ import '../support/point' as Point import './kits/spiro-kit' as spirokit import './kits/boole-kit' as BooleKit import '../support/anchor' as Anchor -import '../support/monotonic-interpolate' as smoothreg import [mix linreg clamp fallback] from '../support/utils' import [calculateMetrics setFontMetrics MarksetDiv GenDivFrame] from '../meta/aesthetics' diff --git a/font-src/glyphs/letter-latin.ptl b/font-src/glyphs/letter-latin.ptl index 116565a5d1..bcab76f8be 100644 --- a/font-src/glyphs/letter-latin.ptl +++ b/font-src/glyphs/letter-latin.ptl @@ -39,6 +39,15 @@ glyph-block Letter-Shared : begin if [not sel] : assign-unicode unicode include [f src sel] AS_BASE ALSO_METRICS +glyph-block Letter-Shared-Shapes : begin + glyph-block-import CommonShapes + + glyph-block-export RightwardTailedBar + define [RightwardTailedBar low high] : dispiro + flat RightSB high [widths.rhs.heading Stroke Downward] + curl RightSB (low + Hook * 0.5 + Stroke + O * 2) + g4 (RightSB + Hook * 0.25) (low + Stroke * 0.75 + O * 2) + glyph-block Letter-Latin-Upper-I : begin glyph-block-import CommonShapes glyph-block-import Overmarks @@ -949,6 +958,7 @@ glyph-block Letter-Latin-Upper-A : begin glyph-block Letter-Latin-Lower-A : begin glyph-block-import CommonShapes glyph-block-import Overmarks + glyph-block-import Letter-Shared-Shapes : RightwardTailedBar sketch # a.doublestorey set-width Width @@ -998,6 +1008,14 @@ glyph-block Letter-Latin-Lower-A : begin set-base-anchor 'bottomright' [mix SB RightSB 1.075] 0 save 'a.singlestorey' + sketch # a.singlestoreyTailed + set-width Width + include MarkSet.e + set-base-anchor 'trailing' (RightSB - markHalfStroke) 0 + include : OBarRightShape + include : RightwardTailedBar 0 XH + save 'a.singlestoreyTailed' + select-variant 'a' 'a' alias 'cyra' 0x430 'a' @@ -3918,22 +3936,32 @@ glyph-block Letter-Latin-Upper-U : begin glyph-block Letter-Latin-Lower-U : begin glyph-block-import CommonShapes glyph-block-import Overmarks + glyph-block-import Letter-Shared-Shapes : RightwardTailedBar sketch # u set-width Width include MarkSet.e set-base-anchor 'trailing' (RightSB - markHalfStroke) 0 - include : refer-glyph "n" - eject-contour 'serifRB' - eject-contour 'serifLB' - currentGlyph.reTagContour 'serifLT' 'serifRB' + include : nShoulder + left -- (SB + Stroke * HVContrast) + right -- RightSB + fine -- ShoulderFine include : FlipAround Middle (XH / 2) - if SLAB : begin - include : LeftwardTopSerif (RightSB - Stroke * HVContrast) XH SideJut - include : LeftwardTopSerif SB XH SideJut + branch + include : VBarRight RightSB 0 XH + if SLAB : begin + include : LeftwardTopSerif (RightSB - Stroke * HVContrast) XH SideJut + include : LeftwardTopSerif SB XH SideJut + include : RightwardBottomSerif RightSB 0 SideJut + save 'u.withBar' - save 'u.withBar' + branch + include : RightwardTailedBar 0 XH + if SLAB : begin + include : LeftwardTopSerif (RightSB - Stroke * HVContrast) XH SideJut + include : LeftwardTopSerif SB XH SideJut + save 'u.tailed' create-glyph 'upsilon' 0x3C5 : glyph-construction include MarkSet.e diff --git a/font-src/glyphs/numbers.ptl b/font-src/glyphs/numbers.ptl index a64cba7d84..a1b3f16ce0 100644 --- a/font-src/glyphs/numbers.ptl +++ b/font-src/glyphs/numbers.ptl @@ -480,10 +480,10 @@ glyph-block Numbers : begin define [SevenCrossbarShape top] : glyph-construction local cor : SevenSwCor top local m : mix SevenXLeft (RightSB - HalfStroke * cor) 0.5 - include : HOverlayBar + include : HBar m - Stroke * cor * 0.25 - LongJut * 0.8 m + Stroke * cor * 0.25 + LongJut * 0.7 - mix 0 (top - HalfStroke) 0.5 + mix 0 (top - Stroke * 0.25) 0.5 sketch # seven.lnum include MarkSet.capital diff --git a/font-src/glyphs/symbol-math.ptl b/font-src/glyphs/symbol-math.ptl index 0edc1fb2d3..af9c9c4179 100644 --- a/font-src/glyphs/symbol-math.ptl +++ b/font-src/glyphs/symbol-math.ptl @@ -293,44 +293,77 @@ glyph-block Symbol-Math-Arith : begin refer-glyph 'plus' DotAt Middle (symbolMid * 2 - OperatorStroke / 2) (DotRadius + gap) - sketch # multiply - local radius : (RightSB - SB) / 2 - include : dispiro - widths.center OperatorStroke - flat (Middle - radius) (symbolMid - radius) - curl (Middle + radius) (symbolMid + radius) - save 'multiplyStroke1' - sketch # multiply - local radius : (RightSB - SB) / 2 - include : dispiro - widths.center OperatorStroke - flat (Middle + radius) (symbolMid - radius) - curl (Middle - radius) (symbolMid + radius) - save 'multiplyStroke2' - sketch # multiply - local radius : (RightSB - SB) / 2 - include : dispiro - widths.center GeometryStroke - flat (Middle - radius) (symbolMid - radius) - curl (Middle + radius) (symbolMid + radius) - save 'innerMultiplyStroke1' - sketch # multiply - local radius : (RightSB - SB) / 2 - include : dispiro - widths.center GeometryStroke - flat (Middle + radius) (symbolMid - radius) - curl (Middle - radius) (symbolMid + radius) - save 'innerMultiplyStroke2' + define MultiplyHalfHeight : (RightSB - SB) / 2 + define swBowtie : adviceBlackness 4 + define [MultiplyMask p1 p2] : spiro-outline + corner (Middle - p1 * MultiplyHalfHeight) (symbolMid - p1 * MultiplyHalfHeight) + corner (Middle + p2 * MultiplyHalfHeight) (symbolMid + p2 * MultiplyHalfHeight) + corner (Middle + p2 * MultiplyHalfHeight) (symbolMid - p2 * MultiplyHalfHeight) + corner (Middle - p1 * MultiplyHalfHeight) (symbolMid + p1 * MultiplyHalfHeight) + + define [MultiplyStroke1Shape s p1 p2] : dispiro + widths.center s + flat (Middle - p1 * MultiplyHalfHeight) (symbolMid - p1 * MultiplyHalfHeight) + curl (Middle + p2 * MultiplyHalfHeight) (symbolMid + p2 * MultiplyHalfHeight) + + define [MultiplyStroke2Shape s p1 p2] : dispiro + widths.center s + flat (Middle - p1 * MultiplyHalfHeight) (symbolMid + p1 * MultiplyHalfHeight) + curl (Middle + p2 * MultiplyHalfHeight) (symbolMid - p2 * MultiplyHalfHeight) + + create-glyph 'multiply' 0xD7 : glyph-construction + include : MultiplyStroke1Shape OperatorStroke 1 1 + include : MultiplyStroke2Shape OperatorStroke 1 1 + + create-glyph 'bowtie' 0x22C8 : glyph-construction + include : union + intersection + MultiplyMask 1 1 + union + VBarLeft SB (symbolMid - MultiplyHalfHeight) (symbolMid + MultiplyHalfHeight) swBowtie + VBarRight RightSB (symbolMid - MultiplyHalfHeight) (symbolMid + MultiplyHalfHeight) swBowtie + intersection + Rect parenTop parenBot SB RightSB + union + MultiplyStroke1Shape swBowtie 1 1 + MultiplyStroke2Shape swBowtie 1 1 - sketch # multiply - include : refer-glyph "multiplyStroke1" - include : refer-glyph "multiplyStroke2" - save 'multiply' 0xD7 + create-glyph 'bowtieLeft' 0x22C9 : glyph-construction + include : union + intersection + MultiplyMask 1 1 + VBarLeft SB (symbolMid - MultiplyHalfHeight) (symbolMid + MultiplyHalfHeight) swBowtie + intersection + Rect parenTop parenBot SB [mix SB RightSB 2] + union + MultiplyStroke1Shape swBowtie 1 1 + MultiplyStroke2Shape swBowtie 1 1 + + create-glyph 'bowtieRight' 0x22CA : glyph-construction + include : union + intersection + MultiplyMask 1 1 + VBarRight RightSB (symbolMid - MultiplyHalfHeight) (symbolMid + MultiplyHalfHeight) swBowtie + intersection + Rect parenTop parenBot [mix RightSB SB 2] RightSB + union + MultiplyStroke1Shape swBowtie 1 1 + MultiplyStroke2Shape swBowtie 1 1 + + create-glyph 'leftSemidirectProduct' 0x22CB : glyph-construction + include : MultiplyStroke1Shape OperatorStroke 1 0 + include : MultiplyStroke2Shape OperatorStroke 1 1 + + create-glyph 'rightSemidirectProduct' 0x22CC : glyph-construction + include : MultiplyStroke1Shape OperatorStroke 1 1 + include : MultiplyStroke2Shape OperatorStroke 0 1 + + create-glyph 'innerMultiplyStroke1' : glyph-construction + include : MultiplyStroke1Shape GeometryStroke 1 1 - sketch # innerMultiply - include : refer-glyph "innerMultiplyStroke1" - include : refer-glyph "innerMultiplyStroke2" - save 'innerMultiply' + create-glyph 'innerMultiply' : glyph-construction + include : MultiplyStroke1Shape GeometryStroke 1 1 + include : MultiplyStroke2Shape GeometryStroke 1 1 sketch # divide include : refer-glyph "minus" @@ -810,6 +843,8 @@ glyph-block Symbol-Math-Relation : begin corner r top Rect ([mix top bot 0.5] + gap / 2) ([mix top bot 0.5] - gap / 2) (l + O) (r - O) + define [NormalSubsetShape top bot l r s] : LigationLessShape top bot l r s s 0 + define [GreaterShape top bot l r s] : union GreaterShapeA top bot l r [fallback s OperatorStroke] GreaterShapeB top bot l r [fallback s OperatorStroke] @@ -829,6 +864,8 @@ glyph-block Symbol-Math-Relation : begin corner l top Rect ([mix top bot 0.5] + gap / 2) ([mix top bot 0.5] - gap / 2) (l + O) (r - O) + define [NormalSupersetShape top bot l r s] : LigationGreaterShape top bot l r s s 0 + # Sym parameters local approxDist : EqualHalfSpace * 1.75 local symMag : (operTop - symbolMid) * 0.17 @@ -846,14 +883,17 @@ glyph-block Symbol-Math-Relation : begin flat (Middle + dist) (symbolBottom - dist + swo) [heading Downward] flat (Middle - dist) (symbolBottom - dist - swo) [heading Downward] - sketch # less + create-glyph 'less' '<' : glyph-construction include : LessShape (symbolMid + dH) (symbolMid - dH) SB RightSB - save 'less' '<' - sketch # greater - include [refer-glyph 'less'] AS_BASE - include : FlipAround Middle symbolMid - save 'greater' '>' + create-glyph 'normalSubsetOf' 0x22B2 : glyph-construction + include : NormalSubsetShape (symbolMid + dH) (symbolMid - dH) SB RightSB + + create-glyph 'greater' '>' : glyph-construction + include : GreaterShape (symbolMid + dH) (symbolMid - dH) SB RightSB + + create-glyph 'normalSupersetOf' 0x22B3 : glyph-construction + include : NormalSupersetShape (symbolMid + dH) (symbolMid - dH) SB RightSB sketch # lesseq include : LessShape (symbolMid + dH + lessEqDist) (symbolMid - dH + lessEqDist) SB RightSB @@ -876,6 +916,10 @@ glyph-block Symbol-Math-Relation : begin include : LessShapeB (symbolMid + dH - lessEqDist) (symbolMid - dH - lessEqDist) SB RightSB OperatorStroke save 'lesseqslant' 0x2A7D + create-glyph 'normalSubsetEq' 0x22B4 : glyph-construction + include : NormalSubsetShape (symbolMid + dH + lessEqDist) (symbolMid - dH + lessEqDist) SB RightSB + include : HBar SB RightSB (symbolMid - dH - lessEqDist) OperatorStroke + sketch # greatereq include : GreaterShape (symbolMid + dH + lessEqDist) (symbolMid - dH + lessEqDist) SB RightSB branch @@ -897,6 +941,10 @@ glyph-block Symbol-Math-Relation : begin include : GreaterShapeB (symbolMid + dH - lessEqDist) (symbolMid - dH - lessEqDist) SB RightSB OperatorStroke save 'greatereqslant' 0x2A7E + create-glyph 'normalSupersetEq' 0x22B5 : glyph-construction + include : NormalSupersetShape (symbolMid + dH + lessEqDist) (symbolMid - dH + lessEqDist) SB RightSB + include : HBar SB RightSB (symbolMid - dH - lessEqDist) OperatorStroke + # Ligation sketch define l : 0.3 * Width @@ -1201,6 +1249,8 @@ glyph-block Symbol-Math-Negation : begin notGlyph null 0x22AF 'doubleForces' notGlyph.left null 0x226E 'less' notGlyph.right null 0x226F 'greater' + notGlyph.left null 0x22EA 'normalSubsetOf' + notGlyph.right null 0x22EB 'normalSupersetOf' notGlyph.left null 0x2280 'precedes' notGlyph.right null 0x2281 'succeeds' notGlyph null 0x2241 'sym' [mix symbolMid bgopTop 0.75] [mix symbolMid bgopBot 0.75] @@ -1219,6 +1269,8 @@ glyph-block Symbol-Math-Negation : begin notGlyph.right null 0x2271 'greatereq' notGlyph.left null 0x2274 'lesssym' notGlyph.right null 0x2275 'greatersym' + notGlyph.left null 0x22EC 'normalSubsetEq' + notGlyph.right null 0x22ED 'normalSupersetEq' notGlyph.left null 0x22E0 'precedeseqslant' notGlyph.right null 0x22E1 'succeedseqslant' notGlyph null 0x2278 'lessgreater' diff --git a/font-src/glyphs/symbol-punctuation.ptl b/font-src/glyphs/symbol-punctuation.ptl index 9445327a32..9ab2de0ac3 100644 --- a/font-src/glyphs/symbol-punctuation.ptl +++ b/font-src/glyphs/symbol-punctuation.ptl @@ -1391,12 +1391,13 @@ glyph-block Symbol-Punctuation-Ellipsis : begin define [EllipsisDotRadius darkness space] : begin return : 0.5 * [adviceBlackness darkness (space / Width)] * PeriodSize / Stroke - define [VerticalThreeDotsShape x bottom top] : glyph-construction + define [VerticalThreeDotsShape l r p bottom top] : glyph-construction local radius : EllipsisDotRadius 5 (top - bottom) - local mid : mix bottom top 0.5 - include : DotAt x (bottom + radius) (radius - O) - include : DotAt x mid (radius - O) - include : DotAt x (top - radius) (radius - O) + local xMid : mix l r 0.5 + local yMid : mix bottom top 0.5 + include : DotAt [mix xMid l p] (bottom + radius) (radius - O) + include : DotAt xMid yMid (radius - O) + include : DotAt [mix xMid r p] (top - radius) (radius - O) for-width-kinds WideWidth1 "Ellipsis" sketch # onedotLeader @@ -1431,11 +1432,20 @@ glyph-block Symbol-Punctuation-Ellipsis : begin sketch # mathCVDots set-width MosaicWidth - include : VerticalThreeDotsShape (MosaicWidth / 2) operBot operTop - save [MangleName 'mathCVDots'] [MangleUnicode 0x22EE] + local left : mix 0 MosaicWidth (1 / 6) + local right : mix 0 MosaicWidth (5 / 6) + branch + include : VerticalThreeDotsShape left right 0 operBot operTop + save [MangleName 'mathCVDots'] [MangleUnicode 0x22EE] + branch + include : VerticalThreeDotsShape left right (-1) operBot operTop + save [MangleName 'mathCD1Dots'] [MangleUnicode 0x22F0] + branch + include : VerticalThreeDotsShape left right (+1) operBot operTop + save [MangleName 'mathCD2Dots'] [MangleUnicode 0x22F1] sketch # tricolon - include : VerticalThreeDotsShape Middle 0 XH + include : VerticalThreeDotsShape 0 Width 0 0 XH save 'tricolon' 0x205D glyph-block Symbol-Punctuation-Percentages : begin diff --git a/font-src/support/parameters.js b/font-src/support/parameters.js index a042fb6f44..bb40e865c1 100644 --- a/font-src/support/parameters.js +++ b/font-src/support/parameters.js @@ -70,30 +70,39 @@ function hiveBlend(hive, value) { return generatedHive; } -function numericConfigExists(x) { - return x != null && isFinite(x); +function numericFieldHandler(sink, key, x) { + if (x != null && isFinite(x)) sink[key] = x; } -function applyMetricOverride(para, mo) { - if (numericConfigExists(mo.leading)) { - para.leading = mo.leading; - } - if (numericConfigExists(mo.winMetricAscenderPad)) { - para.winMetricAscenderPad = mo.winMetricAscenderPad; - } - if (numericConfigExists(mo.winMetricDescenderPad)) { - para.winMetricDescenderPad = mo.winMetricDescenderPad; - } - if (numericConfigExists(mo.powerlineScaleY)) { - para.powerlineScaleY = mo.powerlineScaleY; - } - if (numericConfigExists(mo.powerlineScaleX)) { - para.powerlineScaleX = mo.powerlineScaleX; - } - if (numericConfigExists(mo.powerlineShiftY)) { - para.powerlineShiftY = mo.powerlineShiftY; - } - if (numericConfigExists(mo.powerlineShiftX)) { - para.powerlineShiftX = mo.powerlineShiftX; +function subObjectHandler(sink, key, obj) { + sink[key] = {}; + createMetricDataSet(sink[key], obj); +} +const metricOverrideHandlers = { + cap: numericFieldHandler, + xheight: numericFieldHandler, + sb: numericFieldHandler, + leading: numericFieldHandler, + winMetricAscenderPad: numericFieldHandler, + winMetricDescenderPad: numericFieldHandler, + powerlineScaleY: numericFieldHandler, + powerlineScaleX: numericFieldHandler, + powerlineShiftY: numericFieldHandler, + powerlineShiftX: numericFieldHandler, + multiplies: subObjectHandler, + adds: subObjectHandler +}; +function createMetricDataSet(sink, mo) { + for (const key in mo) { + if (metricOverrideHandlers[key]) { + metricOverrideHandlers[key](sink, key, mo[key]); + } else { + console.error(`Metric override key ${key} is not supported. Skipping it.`); + } } } +function applyMetricOverride(para, mo) { + const overrideObj = { metricOverride: {} }; + createMetricDataSet(overrideObj.metricOverride, mo); + apply(para, overrideObj, ["metricOverride"]); +} exports.applyMetricOverride = applyMetricOverride; diff --git a/images/charvars.png b/images/charvars.png index 7cd4166bfd..cc9657f887 100644 Binary files a/images/charvars.png and b/images/charvars.png differ diff --git a/images/iosevka-aile.png b/images/iosevka-aile.png index d91b54eb3a..0a1d01b273 100644 Binary files a/images/iosevka-aile.png and b/images/iosevka-aile.png differ diff --git a/images/iosevka-curly-slab.png b/images/iosevka-curly-slab.png index ac656d7c82..4dd3ea4993 100644 Binary files a/images/iosevka-curly-slab.png and b/images/iosevka-curly-slab.png differ diff --git a/images/iosevka-curly.png b/images/iosevka-curly.png index d269d32051..1179faa777 100644 Binary files a/images/iosevka-curly.png and b/images/iosevka-curly.png differ diff --git a/images/iosevka-etoile.png b/images/iosevka-etoile.png index 3b4968ba12..8139d4c524 100644 Binary files a/images/iosevka-etoile.png and b/images/iosevka-etoile.png differ diff --git a/images/iosevka-fixed-curly-slab.png b/images/iosevka-fixed-curly-slab.png index 349fd75643..dc888a05e9 100644 Binary files a/images/iosevka-fixed-curly-slab.png and b/images/iosevka-fixed-curly-slab.png differ diff --git a/images/iosevka-fixed-curly.png b/images/iosevka-fixed-curly.png index 19ba4d78ef..6b0eb1d231 100644 Binary files a/images/iosevka-fixed-curly.png and b/images/iosevka-fixed-curly.png differ diff --git a/images/iosevka-fixed-slab.png b/images/iosevka-fixed-slab.png index 2ac329979b..53dbf4417e 100644 Binary files a/images/iosevka-fixed-slab.png and b/images/iosevka-fixed-slab.png differ diff --git a/images/iosevka-fixed-ss01.png b/images/iosevka-fixed-ss01.png index ab9d63e3e5..3b13a51831 100644 Binary files a/images/iosevka-fixed-ss01.png and b/images/iosevka-fixed-ss01.png differ diff --git a/images/iosevka-fixed-ss02.png b/images/iosevka-fixed-ss02.png index dc47f0a01f..697bd95847 100644 Binary files a/images/iosevka-fixed-ss02.png and b/images/iosevka-fixed-ss02.png differ diff --git a/images/iosevka-fixed-ss03.png b/images/iosevka-fixed-ss03.png index 6c07502e0d..da9cb77437 100644 Binary files a/images/iosevka-fixed-ss03.png and b/images/iosevka-fixed-ss03.png differ diff --git a/images/iosevka-fixed-ss04.png b/images/iosevka-fixed-ss04.png index d02cc26c4b..052fac7552 100644 Binary files a/images/iosevka-fixed-ss04.png and b/images/iosevka-fixed-ss04.png differ diff --git a/images/iosevka-fixed-ss05.png b/images/iosevka-fixed-ss05.png index 9683553564..11774416ef 100644 Binary files a/images/iosevka-fixed-ss05.png and b/images/iosevka-fixed-ss05.png differ diff --git a/images/iosevka-fixed-ss06.png b/images/iosevka-fixed-ss06.png index e381c9025e..18031577c7 100644 Binary files a/images/iosevka-fixed-ss06.png and b/images/iosevka-fixed-ss06.png differ diff --git a/images/iosevka-fixed-ss07.png b/images/iosevka-fixed-ss07.png index 29e86c1c57..84c8d1a9cb 100644 Binary files a/images/iosevka-fixed-ss07.png and b/images/iosevka-fixed-ss07.png differ diff --git a/images/iosevka-fixed-ss08.png b/images/iosevka-fixed-ss08.png index 770e3b1203..666dbcfd94 100644 Binary files a/images/iosevka-fixed-ss08.png and b/images/iosevka-fixed-ss08.png differ diff --git a/images/iosevka-fixed-ss09.png b/images/iosevka-fixed-ss09.png index 6311868e41..1a6a65e88a 100644 Binary files a/images/iosevka-fixed-ss09.png and b/images/iosevka-fixed-ss09.png differ diff --git a/images/iosevka-fixed-ss10.png b/images/iosevka-fixed-ss10.png index d16f64d7d4..fb3b11698b 100644 Binary files a/images/iosevka-fixed-ss10.png and b/images/iosevka-fixed-ss10.png differ diff --git a/images/iosevka-fixed-ss11.png b/images/iosevka-fixed-ss11.png index ba2348ac1a..7efe07bf61 100644 Binary files a/images/iosevka-fixed-ss11.png and b/images/iosevka-fixed-ss11.png differ diff --git a/images/iosevka-fixed-ss12.png b/images/iosevka-fixed-ss12.png index a52bb3a3ad..8f4e443b97 100644 Binary files a/images/iosevka-fixed-ss12.png and b/images/iosevka-fixed-ss12.png differ diff --git a/images/iosevka-fixed-ss13.png b/images/iosevka-fixed-ss13.png index 928b5126a0..4ebf2336aa 100644 Binary files a/images/iosevka-fixed-ss13.png and b/images/iosevka-fixed-ss13.png differ diff --git a/images/iosevka-fixed-ss14.png b/images/iosevka-fixed-ss14.png index 212acc1850..3d9d070cb8 100644 Binary files a/images/iosevka-fixed-ss14.png and b/images/iosevka-fixed-ss14.png differ diff --git a/images/iosevka-fixed.png b/images/iosevka-fixed.png index df3cf63775..3c10205872 100644 Binary files a/images/iosevka-fixed.png and b/images/iosevka-fixed.png differ diff --git a/images/iosevka-slab.png b/images/iosevka-slab.png index a8dc150fcf..112d3905d3 100644 Binary files a/images/iosevka-slab.png and b/images/iosevka-slab.png differ diff --git a/images/iosevka-sparkle.png b/images/iosevka-sparkle.png index 01df94e7aa..a04ae1a4a7 100644 Binary files a/images/iosevka-sparkle.png and b/images/iosevka-sparkle.png differ diff --git a/images/iosevka-ss01.png b/images/iosevka-ss01.png index cae7f74a76..9db5a3dc19 100644 Binary files a/images/iosevka-ss01.png and b/images/iosevka-ss01.png differ diff --git a/images/iosevka-ss02.png b/images/iosevka-ss02.png index 8c3de0b3a0..6ea541f6d5 100644 Binary files a/images/iosevka-ss02.png and b/images/iosevka-ss02.png differ diff --git a/images/iosevka-ss03.png b/images/iosevka-ss03.png index 3547cd16a9..1a2cc4c087 100644 Binary files a/images/iosevka-ss03.png and b/images/iosevka-ss03.png differ diff --git a/images/iosevka-ss04.png b/images/iosevka-ss04.png index 9d47d79bdb..5c20c79e4d 100644 Binary files a/images/iosevka-ss04.png and b/images/iosevka-ss04.png differ diff --git a/images/iosevka-ss05.png b/images/iosevka-ss05.png index d9c2aaf248..b41d080c5d 100644 Binary files a/images/iosevka-ss05.png and b/images/iosevka-ss05.png differ diff --git a/images/iosevka-ss06.png b/images/iosevka-ss06.png index 1f04421b3c..1f4a811f14 100644 Binary files a/images/iosevka-ss06.png and b/images/iosevka-ss06.png differ diff --git a/images/iosevka-ss07.png b/images/iosevka-ss07.png index 57b080e7c2..b97d9d3b39 100644 Binary files a/images/iosevka-ss07.png and b/images/iosevka-ss07.png differ diff --git a/images/iosevka-ss08.png b/images/iosevka-ss08.png index a49af8362c..5dfb0e945b 100644 Binary files a/images/iosevka-ss08.png and b/images/iosevka-ss08.png differ diff --git a/images/iosevka-ss09.png b/images/iosevka-ss09.png index 690f07f466..01b43309da 100644 Binary files a/images/iosevka-ss09.png and b/images/iosevka-ss09.png differ diff --git a/images/iosevka-ss10.png b/images/iosevka-ss10.png index 24acf45b14..7cbec94cbd 100644 Binary files a/images/iosevka-ss10.png and b/images/iosevka-ss10.png differ diff --git a/images/iosevka-ss11.png b/images/iosevka-ss11.png index 1d21f6d246..9a90b4a34e 100644 Binary files a/images/iosevka-ss11.png and b/images/iosevka-ss11.png differ diff --git a/images/iosevka-ss12.png b/images/iosevka-ss12.png index 960a63d867..91603be2d6 100644 Binary files a/images/iosevka-ss12.png and b/images/iosevka-ss12.png differ diff --git a/images/iosevka-ss13.png b/images/iosevka-ss13.png index 1bdad4fd18..109f5560a2 100644 Binary files a/images/iosevka-ss13.png and b/images/iosevka-ss13.png differ diff --git a/images/iosevka-ss14.png b/images/iosevka-ss14.png index e8e6104a0a..da03ecdf36 100644 Binary files a/images/iosevka-ss14.png and b/images/iosevka-ss14.png differ diff --git a/images/iosevka-term-curly-slab.png b/images/iosevka-term-curly-slab.png index 0a51c42bc2..2ad3c94b72 100644 Binary files a/images/iosevka-term-curly-slab.png and b/images/iosevka-term-curly-slab.png differ diff --git a/images/iosevka-term-curly.png b/images/iosevka-term-curly.png index f88268334a..f61f24d24e 100644 Binary files a/images/iosevka-term-curly.png and b/images/iosevka-term-curly.png differ diff --git a/images/iosevka-term-slab.png b/images/iosevka-term-slab.png index c3023e96df..a044450c25 100644 Binary files a/images/iosevka-term-slab.png and b/images/iosevka-term-slab.png differ diff --git a/images/iosevka-term-ss01.png b/images/iosevka-term-ss01.png index e1250d36cb..ebb1a3dc27 100644 Binary files a/images/iosevka-term-ss01.png and b/images/iosevka-term-ss01.png differ diff --git a/images/iosevka-term-ss02.png b/images/iosevka-term-ss02.png index 12c78a111c..a3a36e85fd 100644 Binary files a/images/iosevka-term-ss02.png and b/images/iosevka-term-ss02.png differ diff --git a/images/iosevka-term-ss03.png b/images/iosevka-term-ss03.png index 8df94e5db8..4a84329a87 100644 Binary files a/images/iosevka-term-ss03.png and b/images/iosevka-term-ss03.png differ diff --git a/images/iosevka-term-ss04.png b/images/iosevka-term-ss04.png index e1320a429b..4813017257 100644 Binary files a/images/iosevka-term-ss04.png and b/images/iosevka-term-ss04.png differ diff --git a/images/iosevka-term-ss05.png b/images/iosevka-term-ss05.png index f366d40684..1e235179f7 100644 Binary files a/images/iosevka-term-ss05.png and b/images/iosevka-term-ss05.png differ diff --git a/images/iosevka-term-ss06.png b/images/iosevka-term-ss06.png index e8094e0d16..f949be0e41 100644 Binary files a/images/iosevka-term-ss06.png and b/images/iosevka-term-ss06.png differ diff --git a/images/iosevka-term-ss07.png b/images/iosevka-term-ss07.png index 0b4a91c56c..8c9230c272 100644 Binary files a/images/iosevka-term-ss07.png and b/images/iosevka-term-ss07.png differ diff --git a/images/iosevka-term-ss08.png b/images/iosevka-term-ss08.png index d176d2a450..b434c999e4 100644 Binary files a/images/iosevka-term-ss08.png and b/images/iosevka-term-ss08.png differ diff --git a/images/iosevka-term-ss09.png b/images/iosevka-term-ss09.png index c8b101d257..6efe18d9bf 100644 Binary files a/images/iosevka-term-ss09.png and b/images/iosevka-term-ss09.png differ diff --git a/images/iosevka-term-ss10.png b/images/iosevka-term-ss10.png index d508aa3151..17ac69ae49 100644 Binary files a/images/iosevka-term-ss10.png and b/images/iosevka-term-ss10.png differ diff --git a/images/iosevka-term-ss11.png b/images/iosevka-term-ss11.png index b2cce4ba15..c0f1e37b78 100644 Binary files a/images/iosevka-term-ss11.png and b/images/iosevka-term-ss11.png differ diff --git a/images/iosevka-term-ss12.png b/images/iosevka-term-ss12.png index ee8d1912fc..774e270b8e 100644 Binary files a/images/iosevka-term-ss12.png and b/images/iosevka-term-ss12.png differ diff --git a/images/iosevka-term-ss13.png b/images/iosevka-term-ss13.png index f57c41c96e..a02dc48912 100644 Binary files a/images/iosevka-term-ss13.png and b/images/iosevka-term-ss13.png differ diff --git a/images/iosevka-term-ss14.png b/images/iosevka-term-ss14.png index 88a049d762..5a54a5d61d 100644 Binary files a/images/iosevka-term-ss14.png and b/images/iosevka-term-ss14.png differ diff --git a/images/iosevka-term.png b/images/iosevka-term.png index 30f516c34f..30918ad9c9 100644 Binary files a/images/iosevka-term.png and b/images/iosevka-term.png differ diff --git a/images/iosevka.png b/images/iosevka.png index 1bacd460cd..98f5f8a041 100644 Binary files a/images/iosevka.png and b/images/iosevka.png differ diff --git a/images/languages.png b/images/languages.png index 89d227ae74..ce7253273d 100644 Binary files a/images/languages.png and b/images/languages.png differ diff --git a/images/ligations.png b/images/ligations.png index aa52b93c32..2d855ffdc5 100644 Binary files a/images/ligations.png and b/images/ligations.png differ diff --git a/images/matrix.png b/images/matrix.png index f0f001fcdf..0794cc11f3 100644 Binary files a/images/matrix.png and b/images/matrix.png differ diff --git a/images/preview-all.png b/images/preview-all.png index b385a93f85..6e8c0e04aa 100644 Binary files a/images/preview-all.png and b/images/preview-all.png differ diff --git a/images/stylesets.png b/images/stylesets.png index 17e81aebfb..45467f5ede 100644 Binary files a/images/stylesets.png and b/images/stylesets.png differ diff --git a/images/weights.png b/images/weights.png index 85b647ad4e..28866184ea 100644 Binary files a/images/weights.png and b/images/weights.png differ diff --git a/package.json b/package.json index cfa5a9cbcc..74c5198360 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "iosevka", - "version": "3.3.0", + "version": "3.3.1", "main": "./font-src/index.js", "scripts": { "build": "verda -f verdafile.js", diff --git a/params/parameters.toml b/params/parameters.toml index 3395499928..ed0da67513 100644 --- a/params/parameters.toml +++ b/params/parameters.toml @@ -11,7 +11,6 @@ naming.description = 'Spatial efficient monospace font family for programming. B leading = 1250 # Default line height times 1000. descenderPad = 0 # Additional line height, added to descender. -width = 500 # Character width. DON'T EDIT THIS. Use `wd-#` selectors below. cap = 735 # Cap height (as well as ascender). xheight = 530 # X-height. #descender = -205 # Depth of descender. Currently unused. @@ -66,10 +65,6 @@ verbose = true ###### Slab variant [slab] slab = true -onebalance = 10 -overshootx = -16 -[slab.multiplies] -sb = 1.1 ###### Spacings # Terminal variant diff --git a/params/shape-width.toml b/params/shape-width.toml index 082e4b5c36..e94ea49ebb 100644 --- a/params/shape-width.toml +++ b/params/shape-width.toml @@ -1,5 +1,6 @@ +[shapeWidth.blend.500] +width = 500 [shapeWidth.multiplies.blend.500] -width = 1 stroke = 1 sb = 1 jut = 1 @@ -9,6 +10,8 @@ rbalance = 1 tbalance = 1 smallsmooth = 1 +[shapeWidth.blend.664] +width = 664 [shapeWidth.multiplies.blend.664] width = 1.328 # 664 for normal char stroke = 1.103 # Make strokes a little thicker @@ -20,8 +23,9 @@ rbalance = 1.236 tbalance = 1.210 smallsmooth = 1.103 +[shapeWidth.blend.618] +width = 618 [shapeWidth.multiplies.blend.618] -width = 1.236 # 618 for normal char stroke = 1.075 # Make strokes a little thicker sb = 1.539 jut = 1.233 @@ -31,8 +35,9 @@ rbalance = 1.236 tbalance = 1.154 smallsmooth = 1.075 +[shapeWidth.blend.576] +width = 576 [shapeWidth.multiplies.blend.576] -width = 1.152 # 576mem for normal char stroke = 1.050 # Make strokes a little thicker sb = 1.333 jut = 1.150 @@ -42,8 +47,9 @@ rbalance = 1.152 tbalance = 1.100 smallsmooth = 1.050 +[shapeWidth.blend.537] +width = 537 [shapeWidth.multiplies.blend.537] -width = 1.074 # 537mem for normal char stroke = 1.023 # Make strokes a little thicker sb = 1.154 jut = 1.072 @@ -53,8 +59,9 @@ rbalance = 1.074 tbalance = 1.049 smallsmooth = 1.023 +[shapeWidth.blend.466] +width = 466 [shapeWidth.multiplies.blend.466] -width = 0.932 # 466mem for normal char stroke = 0.975 sb = 0.866 jut = 0.933 @@ -64,8 +71,9 @@ rbalance = 0.931 tbalance = 0.953 smallsmooth = 0.975 +[shapeWidth.blend.434] +width = 434 [shapeWidth.multiplies.blend.434] -width = 0.868 # 434mem for normal char stroke = 0.952 sb = 0.750 jut = 0.870 diff --git a/params/variants.toml b/params/variants.toml index 43315dacbd..8c7d866595 100644 --- a/params/variants.toml +++ b/params/variants.toml @@ -99,6 +99,12 @@ sampler = 'a' description = 'Single-storey `a`' variant.a = 'singlestorey' +[simple.v-a-singlestorey-tailed] +tag = 'VXBS' +sampler = 'a' +description = 'Single-storey `a` with curly tail' +variant.a = 'singlestoreyTailed' + [simple.v-f-straight] tag = "cv52" sampler = 'f' @@ -383,6 +389,12 @@ sampler = "u" description = "Normal `u` without right bar, like a smaller uppercase `U`" variant.u = "withoutBar" +[simple.v-u-tailed] +tag = "VXBT" +sampler = "u" +description = "`u` with right bar and a slightly curly tail" +variant.u = "tailed" + [simple.v-v-straight] tag = "cv71" sampler = 'vV' diff --git a/snapshot/index.html b/snapshot/index.html index e16ee778af..950f1a5a35 100644 --- a/snapshot/index.html +++ b/snapshot/index.html @@ -83,6 +83,10 @@

This page is used for taking snapshots of Iosevka only.

cv02
a
+
  • +
    VXBS
    +
    a
    +
  • @@ -360,6 +364,10 @@

    This page is used for taking snapshots of Iosevka only.

    cv90
    u
  • +
  • +
    VXBT
    +
    u
    +
  • diff --git a/verdafile.js b/verdafile.js index b3fc0b8812..72177293f7 100644 --- a/verdafile.js +++ b/verdafile.js @@ -153,18 +153,12 @@ function validateAndShimBuildPlans(prefix, bp, dWeights, dSlopes, dWidths) { } if (!bp.pre) bp.pre = {}; - if (!bp.post) bp.post = {}; if (!bp.pre.design) bp.pre.design = bp.design || []; if (!bp.pre.upright) bp.pre.upright = bp.upright || []; if (!bp.pre.oblique) bp.pre.oblique = bp.oblique || []; if (!bp.pre.italic) bp.pre.italic = bp.italic || []; - if (!bp.post.design) bp.post.design = []; - if (!bp.post.upright) bp.post.upright = []; - if (!bp.post.oblique) bp.post.oblique = []; - if (!bp.post.italic) bp.post.italic = []; - bp.weights = bp.weights || dWeights; bp.slopes = bp.slopes || bp.slants || dSlopes; bp.widths = bp.widths || dWidths; @@ -836,7 +830,7 @@ phony(`release`, async target => { ////// Script Building ////// /////////////////////////////////////////////////////////// -const MARCOS = [fu`meta/macros.ptl`]; +const MARCOS = [fu`font-src/meta/macros.ptl`]; const ScriptsUnder = oracle.make( (ext, dir) => `${ext}-scripts-under::${dir}`, (target, ext, dir) => FileList({ under: dir, pattern: `**/*.${ext}` })(target) @@ -862,7 +856,7 @@ const ScriptJS = file.glob(`font-src/**/*.js`, async (target, path) => { const [jsFromPtl] = await target.need(JavaScriptFromPtl); if (jsFromPtl.indexOf(path.full) >= 0) { const ptl = path.full.replace(/\.js$/g, ".ptl"); - if (/^glyphs\//.test(path.full)) { + if (/\/glyphs\//.test(path.full)) { await target.need(MARCOS); } await target.need(fu`${ptl}`);