diff --git a/changes/4.0.0-beta.2.md b/changes/4.0.0-beta.2.md index 808c3be87..f49c5efa2 100644 --- a/changes/4.0.0-beta.2.md +++ b/changes/4.0.0-beta.2.md @@ -5,6 +5,7 @@ * Fix inconsistent italic serif of U+0463 CYRILLIC SMALL LETTER YAT (#729). * Fix dotless form of mathematical derived letters if it ia aliased (#731). * Fix inconsistent serif on Bulgarian U+044E CYRILLIC SMALL LETTER YU (#732). + * Fix variant selector of Cyrillic TE’s italics to better respect `m`’s tailed-ness (#734). * Fix middle bar placement of U+2180 under quasi-proportional. * Add Characters: * U+1D6A4 MATHEMATICAL ITALIC SMALL DOTLESS I, U+1D6A5 MATHEMATICAL ITALIC SMALL DOTLESS J (#730). diff --git a/font-src/glyphs/letter/latin.ptl b/font-src/glyphs/letter/latin.ptl index 5e9986dfd..837567855 100644 --- a/font-src/glyphs/letter/latin.ptl +++ b/font-src/glyphs/letter/latin.ptl @@ -5876,7 +5876,6 @@ glyph-block Letter-Latin-Lower-F : begin define fbar : XH * DesignParameters.fBarPosToXH + Stroke * DesignParameters.fbarStrokeAdj - define fbarFH : XH * DesignParameters.fBarPosToXH + Stroke * DesignParameters.fbarStrokeAdjFH define [SmallFBottomSerif] : dispiro widths.lhs flat ([mix SB RightSB 0.02] + HalfStroke * TanSlope) 0 @@ -5944,29 +5943,29 @@ glyph-block Letter-Latin-Lower-F : begin create-glyph 'f.serifless' : glyph-proc include : MarkSet.b - include : StandardSmallFShape [DivFrame 1] 0.95 fbarFH + include : StandardSmallFShape [DivFrame 1] 0.95 fbar create-glyph 'f.phoneticLeft' : glyph-proc include : MarkSet.b - include : StandardSmallFShape [DivFrame 1] 1 fbarFH + include : StandardSmallFShape [DivFrame 1] 1 fbar if SLAB : include : SmallFBottomSerif create-glyph 'f.serifed' : glyph-proc include : MarkSet.b - include : StandardSmallFShape [DivFrame 1] 0.95 fbarFH + include : StandardSmallFShape [DivFrame 1] 0.95 fbar include : SmallFBottomSerif create-glyph 'fltail' 0x192 : glyph-proc include : MarkSet.if - include : StandardSmallFShape [DivFrame 1] 1 fbarFH 2 + include : StandardSmallFShape [DivFrame 1] 1 fbar 2 create-glyph 'f.tailed' : glyph-proc include : MarkSet.if - include : StandardSmallFShape [DivFrame 1] 1 fbarFH 2 + include : StandardSmallFShape [DivFrame 1] 1 fbar 2 create-glyph 'f.extended' : glyph-proc include : MarkSet.if - include : StandardSmallFShape [DivFrame 1] 0.95 fbarFH 1 + include : StandardSmallFShape [DivFrame 1] 0.95 fbar 1 create-glyph 'f.seriflessCrossbarAtXHeight' : glyph-proc include : MarkSet.b @@ -5989,11 +5988,11 @@ glyph-block Letter-Latin-Lower-F : begin define df : DivFrame para.diversityF set-width df.width include : df.markSet.b - include : NarrowFShape df 0.5 fbarFH + include : NarrowFShape df 0.5 fbar create-glyph 'f.flatHook' : glyph-proc include : MarkSet.b - include : NarrowFShape [DivFrame 1] 1 fbarFH + include : NarrowFShape [DivFrame 1] 1 fbar create-glyph 'f.flatHookCrossbarAtXHeight' : glyph-proc include : MarkSet.b @@ -6001,7 +6000,7 @@ glyph-block Letter-Latin-Lower-F : begin create-glyph 'f.flatHookSerifed' : glyph-proc include : MarkSet.b - include : NarrowFShape [DivFrame 1] 1 fbarFH + include : NarrowFShape [DivFrame 1] 1 fbar include : WithTransform [Translate ((RightSB - SB) * 0.035) 0] : SmallFBottomSerif create-glyph 'f.flatHookSerifedCrossbarAtXHeight' : glyph-proc @@ -6011,7 +6010,7 @@ glyph-block Letter-Latin-Lower-F : begin create-glyph 'f.flatHookTailed' : glyph-proc include : MarkSet.if - include : NarrowFShape [DivFrame 1] 1 fbarFH 2 + include : NarrowFShape [DivFrame 1] 1 fbar 2 create-glyph 'f.flatHookTailedCrossbarAtXHeight' : glyph-proc include : MarkSet.if @@ -6019,7 +6018,7 @@ glyph-block Letter-Latin-Lower-F : begin create-glyph 'f.flatHookExtended' : glyph-proc include : MarkSet.if - include : NarrowFShape [DivFrame 1] 1 fbarFH 1 + include : NarrowFShape [DivFrame 1] 1 fbar 1 create-glyph 'f.flatHookExtendedCrossbarAtXHeight' : glyph-proc include : MarkSet.if diff --git a/font-src/meta/aesthetics.ptl b/font-src/meta/aesthetics.ptl index b839b65a6..2c52a0b45 100644 --- a/font-src/meta/aesthetics.ptl +++ b/font-src/meta/aesthetics.ptl @@ -324,7 +324,6 @@ export : define DesignParameters : object upperEBarPos : lambda [slab] : if slab 0.52 0.53 # Fine adjustments fbarStrokeAdj 0.25 - fbarStrokeAdjFH 0.125 superness 2.275 tightHookSuperness 2.30 diff --git a/params/variants.toml b/params/variants.toml index 2640a3377..766db9686 100644 --- a/params/variants.toml +++ b/params/variants.toml @@ -656,13 +656,13 @@ selector."cyrl/te.italic" = "normal" rank = 7 description = "Earless (corner top-left) `m` with normal middle leg touching baseline, and a curly tail" selector.m = 'earlessCornerDoubleArchTailed' -selector."cyrl/te.italic" = "normal" +selector."cyrl/te.italic" = "tailed" [prime.m.variants.earless-corner-double-arch-shortleg-tailed] rank = 8 description = "Earless (corner top-left) `m` with a shorter middle leg like Ubuntu Mono, and a curly tail" selector.m = 'earlessCornerDoubleArchShortlegTailed' -selector."cyrl/te.italic" = "normal" +selector."cyrl/te.italic" = "tailed" [prime.m.variants.earless-rounded-double-arch] rank = 9 @@ -680,13 +680,13 @@ selector."cyrl/te.italic" = "normal" rank = 11 description = "Earless (rounded top-left) `m` with normal middle leg touching baseline, and a curly tail" selector.m = 'earlessRoundedDoubleArchTailed' -selector."cyrl/te.italic" = "normal" +selector."cyrl/te.italic" = "tailed" [prime.m.variants.earless-rounded-double-arch-shortleg-tailed] rank = 12 description = "Earless (rounded top-left) `m` with a shorter middle leg like Ubuntu Mono, and a curly tail" selector.m = 'earlessRoundedDoubleArchShortlegTailed' -selector."cyrl/te.italic" = "normal" +selector."cyrl/te.italic" = "tailed" [prime.m.variants.earless-single-arch] rank = 13 @@ -704,13 +704,13 @@ selector."cyrl/te.italic" = "normal" rank = 15 description = "Earless (single-arch) `m` with normal middle leg touching baseline, and a curly tail" selector.m = 'earlessSingleArchTailed' -selector."cyrl/te.italic" = "normal" +selector."cyrl/te.italic" = "tailed" [prime.m.variants.earless-single-arch-shortleg-tailed] rank = 16 description = "Earless (single-arch) `m` with a shorter middle leg like Ubuntu Mono, and a curly tail" selector.m = 'earlessSingleArchShortlegTailed' -selector."cyrl/te.italic" = "normal" +selector."cyrl/te.italic" = "tailed" [prime.m.variants.motion-serifed] rank = 17 @@ -728,13 +728,13 @@ selector."cyrl/te.italic" = "motionSerifed" rank = 19 description = "`m` with motion serifs, normal middle leg touching baseline, and a curly tail" selector.m = 'motionSerifedTailed' -selector."cyrl/te.italic" = "motionSerifed" +selector."cyrl/te.italic" = "motionSerifedTailed" [prime.m.variants.motion-serifed-shortleg-tailed] rank = 20 description = "`m` with motion serifs, a shorter middle leg like Ubuntu Mono, and a curly tail" selector.m = 'motionSerifedShortlegTailed' -selector."cyrl/te.italic" = "motionSerifed" +selector."cyrl/te.italic" = "motionSerifedTailed" diff --git a/verdafile.js b/verdafile.js index ecfaaaed6..30b23cbf3 100644 --- a/verdafile.js +++ b/verdafile.js @@ -857,7 +857,7 @@ const JavaScriptFromPtl = computed("scripts-js-from-ptl", async target => { return ptl.map(x => replaceExt(".js", x)); }); function replaceExt(extNew, file) { - return Path.join(Path.dirname(file), Path.basename(file, Path.extname(file)) + extNew); + return Path.posix.join(Path.dirname(file), Path.basename(file, Path.extname(file)) + extNew); } const CompiledJs = file.make( @@ -871,13 +871,15 @@ const CompiledJs = file.make( ); const Scripts = task("scripts", async target => { await target.need(Parameters); - const [_jsFromPtl] = await target.need(JavaScriptFromPtl); - const [js] = await target.need(ScriptFiles("js")); - const jsFromPtl = new Set(_jsFromPtl); + const [jsFromPtlList] = await target.need(JavaScriptFromPtl); + const [jsList] = await target.need(ScriptFiles("js")); + const jsFromPtlSet = new Set(jsFromPtlList); let subGoals = []; - for (const item of jsFromPtl) subGoals.push(CompiledJs(item)); - for (const item of js) if (!jsFromPtl.has(js)) subGoals.push(sfu(item)); + for (const js of jsList) { + if (jsFromPtlSet.has(js)) subGoals.push(CompiledJs(js)); + else subGoals.push(sfu(js)); + } await target.need(subGoals); }); const UtilScripts = task("util-scripts", async target => {