From d4ca01badaf0b51f91d3fa855220f88f44ded417 Mon Sep 17 00:00:00 2001 From: be5invis Date: Thu, 19 Nov 2020 19:08:42 -0800 Subject: [PATCH] Added variant `r/earless-corner-serifed` and `r/earless-rounded-serifed`; Reordered `r`'s variant ranking and renamed `r/straight` to `r/serifless` (#742). --- README.md | 6 ++-- build-plans.toml | 2 +- changes/4.0.0-beta.3.md | 1 + font-src/glyphs/letter/latin.ptl | 51 ++++++++++++++++-------------- params/variants.toml | 54 ++++++++++++++++++++++---------- 5 files changed, 72 insertions(+), 42 deletions(-) diff --git a/README.md b/README.md index 160bdc848..d016a11d1 100644 --- a/README.md +++ b/README.md @@ -590,11 +590,13 @@ Subsection `variants` is used to configure character variants in the font. Prope + `q = 'earless-rounded'`, `cv25 = 5`: Earless (rounded top-left) single-storey `q`. + `q = 'earless-rounded-tailed'`, `cv25 = 6`: Earless (rounded top-left) single-storey `q` with curly tail. - Styles for `r`: - + `r = 'straight'`, `cv26 = 1`: Straight, serif-less `r` (default for Sans). + + `r = 'serifless'`, `cv26 = 1`: Straight, serif-less `r` (default for Sans). + `r = 'serifed'`, `cv26 = 2`: `r` with serif at both top and bottom (default for Slab Upright). + `r = 'top-serifed'`, `cv26 = 3`: `r` with serifs at top-left only (default for Slab Italic). + `r = 'earless-corner'`, `cv26 = 4`: Earless (corner top-left), serif-less `r`. - + `r = 'earless-rounded'`, `cv26 = 5`: Earless (rounded top-left), serif-less `r`. + + `r = 'earless-corner-serifed'`, `cv26 = 5`: Earless (corner top-left), serifed `r`. + + `r = 'earless-rounded'`, `cv26 = 6`: Earless (rounded top-left), serif-less `r`. + + `r = 'earless-rounded-serifed'`, `cv26 = 7`: Earless (rounded top-left), serifed `r`. - Styles for `t`: + `t = 'standard'`, `cv27 = 1`: Standard `t` shape (default). + `t = 'cross'`, `cv27 = 2`: Futura-like `t` shape. diff --git a/build-plans.toml b/build-plans.toml index d71c412fa..ce8b1e3fa 100644 --- a/build-plans.toml +++ b/build-plans.toml @@ -465,7 +465,7 @@ j = 'flat-hook-serifed' capital-i = 'serifed' capital-j = 'serifed' g = 'singlestorey' -r = 'straight' +r = 'serifless' a = 'doublestorey' d = 'toothed' u = 'toothed' diff --git a/changes/4.0.0-beta.3.md b/changes/4.0.0-beta.3.md index 2e4f9a568..9863c5e8d 100644 --- a/changes/4.0.0-beta.3.md +++ b/changes/4.0.0-beta.3.md @@ -1,3 +1,4 @@ + * \[**Breaking**\] Added variant `r/earless-corner-serifed` and `r/earless-rounded-serifed`; Reordered `r`'s variant ranking and renamed `r/straight` to `r/serifless` (#742). * Fix variant application of fraction 1/10 (U+2152, #736). * Make variant application effective on LATIN SMALL LETTER WITH STROKE (U+0167, #737). * Updated readme to reflect change in spacing parameter `force-monospace` to `fontconfig-mono`. diff --git a/font-src/glyphs/letter/latin.ptl b/font-src/glyphs/letter/latin.ptl index 5355682f3..d7f4f50b8 100644 --- a/font-src/glyphs/letter/latin.ptl +++ b/font-src/glyphs/letter/latin.ptl @@ -3434,7 +3434,7 @@ glyph-block Letter-Latin-Lower-R : begin set-base-anchor 'overlay' (rbar - Stroke * 0.25) (XH * 0.5) define [EarlessCornerLowerRShape df md doTopSerif doBottomSerif] : glyph-proc - define [object rbar rmiddle rHookX rHookY hookSuperness] : RDim df md + define [object rbar rmiddle rHookX rHookY hookSuperness rBottomSerif] : RDim df md include : dispiro widths.lhs g4.up.start rHookX (XH - rHookY - Stroke * 0.5) [heading Upward] @@ -3442,10 +3442,11 @@ glyph-block Letter-Latin-Lower-R : begin g4.left.mid (rmiddle - CorrectionOMidS) (XH - O) [heading Leftward] g4 (rbar - Stroke * HVContrast) (XH - DToothlessRise) include : VBarRight rbar 0 (XH - DToothlessRise) + if doBottomSerif : include : rBottomSerif 0 set-base-anchor 'overlay' (rbar - Stroke * 0.25) (XH * 0.5) define [EarlessRoundedLowerRShape df md doTopSerif doBottomSerif] : glyph-proc - define [object rbar rmiddle rHookX rHookY hookSuperness] : RDim df md + define [object rbar rmiddle rHookX rHookY hookSuperness rBottomSerif] : RDim df md local hx : Math.max rHookX (rbar + 1.25 * Stroke) include : dispiro widths.lhs @@ -3453,16 +3454,19 @@ glyph-block Letter-Latin-Lower-R : begin hookstart (XH - O) flat (rbar - Stroke * HVContrast) (XH - SmallSmoothA) curl (rbar - Stroke * HVContrast) 0 [heading Downward] + if doBottomSerif : include : rBottomSerif 0 set-base-anchor 'overlay' (rbar - Stroke * 0.25) (XH * 0.5) create-glyph : glyph-proc set-width dfR.width include : dfR.markSet.e - create-derived "r.straight" : StandardLowerRShape dfN rStraight 0 0 - create-derived "r.serifed" : StandardLowerRShape dfN rSerifed 1 1 - create-derived "r.top-serifed" : StandardLowerRShape dfN rSerifed 1 0 - create-derived "r.earlessCorner" : EarlessCornerLowerRShape dfN rEarless 0 0 - create-derived "r.earlessRounded" : EarlessRoundedLowerRShape dfN rEarless 0 0 + create-derived "r.serifless" : StandardLowerRShape dfN rStraight 0 0 + create-derived "r.serifed" : StandardLowerRShape dfN rSerifed 1 1 + create-derived "r.top-serifed" : StandardLowerRShape dfN rSerifed 1 0 + create-derived "r.earlessCorner" : EarlessCornerLowerRShape dfN rEarless 0 0 + create-derived "r.earlessCornerSerifed" : EarlessCornerLowerRShape dfN rEarless 0 1 + create-derived "r.earlessRounded" : EarlessRoundedLowerRShape dfN rEarless 0 0 + create-derived "r.earlessRoundedSerifed" : EarlessRoundedLowerRShape dfN rEarless 0 1 create-glyph 'r.narrow' : glyph-proc set-width dfR.width @@ -3498,27 +3502,31 @@ glyph-block Letter-Latin-Lower-R : begin turned 'turnr' 0x279 'r' HalfAdvance (XH / 2) [TurnRMarks 'e'] do - define [SmallRLongLegShape F df mode doTopSerif] : glyph-proc + define [SmallRLongLegShape F df mode doTopSerif doBottomSerif] : glyph-proc set-width df.width include : df.markSet.p define [object rbar rBottomSerif] : RDim df mode include : F df mode doTopSerif 0 eject-contour 'serifLB' include : VBarRight rbar Descender 0 - if SLAB : include : rBottomSerif Descender + if doBottomSerif : include : rBottomSerif Descender - create-glyph 'rlongleg.straight' - SmallRLongLegShape StandardLowerRShape dfN rStraight 0 + create-glyph 'rlongleg.serifless' + SmallRLongLegShape StandardLowerRShape dfN rStraight 0 0 create-glyph 'rlongleg.serifed' - SmallRLongLegShape StandardLowerRShape dfN rSerifed 1 + SmallRLongLegShape StandardLowerRShape dfN rSerifed 1 1 create-glyph 'rlongleg.top-serifed' - SmallRLongLegShape StandardLowerRShape dfN rSerifed 1 + SmallRLongLegShape StandardLowerRShape dfN rSerifed 1 0 create-glyph 'rlongleg.earlessCorner' - SmallRLongLegShape EarlessCornerLowerRShape dfN rEarless 0 + SmallRLongLegShape EarlessCornerLowerRShape dfN rEarless 0 0 + create-glyph 'rlongleg.earlessCornerSerifed' + SmallRLongLegShape EarlessCornerLowerRShape dfN rEarless 0 1 create-glyph 'rlongleg.earlessRounded' - SmallRLongLegShape EarlessRoundedLowerRShape dfN rEarless 0 + SmallRLongLegShape EarlessRoundedLowerRShape dfN rEarless 0 0 + create-glyph 'rlongleg.earlessRoundedSerifed' + SmallRLongLegShape EarlessRoundedLowerRShape dfN rEarless 0 1 create-glyph 'rlongleg.narrow' - SmallRLongLegShape NarrowLowerRshape dfR rNarrow 0 + SmallRLongLegShape NarrowLowerRshape dfR rNarrow 0 0 select-variant 'rlongleg' 0x27C (follow -- 'r') @@ -3536,10 +3544,8 @@ glyph-block Letter-Latin-Lower-R : begin include : Upright include : Translate rbar 0 include : Italify - create-glyph 'rrtail.straight' + create-glyph 'rrtail.serifless' SmallRRTailShape StandardLowerRShape dfN rStraight 0 - create-glyph 'rrtail.serifed' - SmallRRTailShape StandardLowerRShape dfN rSerifed 1 create-glyph 'rrtail.top-serifed' SmallRRTailShape StandardLowerRShape dfN rSerifed 1 create-glyph 'rrtail.earlessCorner' @@ -3548,7 +3554,7 @@ glyph-block Letter-Latin-Lower-R : begin SmallRRTailShape EarlessRoundedLowerRShape dfN rEarless 0 create-glyph 'rrtail.narrow' SmallRRTailShape NarrowLowerRshape dfR rNarrow 0 - select-variant 'rrtail' 0x27D (follow -- 'r') + select-variant 'rrtail' 0x27D turned 'smallLetterTurnedRWithTail' 0x2C79 'rrtail' HalfAdvance (XH / 2) : glyph-proc local df : DivFrame (currentGlyph.advanceWidth / Width) @@ -3568,7 +3574,7 @@ glyph-block Letter-Latin-Lower-R : begin include : Translate (df.rightSB - rbar + df.leftSB + Stroke * HVContrast) 0 include : Italify - create-glyph 'turnrrtail.straight' + create-glyph 'turnrrtail.serifless' TurnRRTailShape StandardLowerRShape dfN rStraight 0 create-glyph 'turnrrtail.serifed' TurnRRTailShape StandardLowerRShape dfN rSerifed 1 @@ -3576,10 +3582,9 @@ glyph-block Letter-Latin-Lower-R : begin TurnRRTailShape StandardLowerRShape dfN rSerifed 0 create-glyph 'turnrrtail.narrow' TurnRRTailShape NarrowLowerRshape dfR rNarrow 0 - select-variant 'turnrrtail' 0x27B - create-glyph 'rflap.straight' : glyph-proc + create-glyph 'rflap.serifless' : glyph-proc set-width dfN.width include : dfN.markSet.e define [object rBottomSerif] : RDim dfN rEarless diff --git a/params/variants.toml b/params/variants.toml index 766db9686..e8eaf9022 100644 --- a/params/variants.toml +++ b/params/variants.toml @@ -866,17 +866,19 @@ selector.q = 'earlessRoundedTailed' sampler = 'r' tag = 'cv26' -[prime.r.variants.straight] +[prime.r.variants.serifless] rank = 1 description = 'Straight, serif-less `r`' -selector.r = "straight" -selector."turnrrtail" = "straight" -selector."rflap" = "straight" +selector.r = "serifless" +selector.rrtail = "serifless" +selector."turnrrtail" = "serifless" +selector."rflap" = "serifless" [prime.r.variants.serifed] rank = 2 description = '`r` with serif at both top and bottom' selector.r = "serifed" +selector.rrtail = "top-serifed" selector."turnrrtail" = "serifed" selector."rflap" = "serifed" @@ -884,22 +886,47 @@ selector."rflap" = "serifed" rank = 3 description = '`r` with serifs at top-left only' selector.r = "top-serifed" +selector.rrtail = "top-serifed" selector."turnrrtail" = "top-serifed" -selector."rflap" = "straight" +selector."rflap" = "serifless" [prime.r.variants.earless-corner] rank = 4 description = 'Earless (corner top-left), serif-less `r`' selector.r = "earlessCorner" -selector."turnrrtail" = "straight" -selector."rflap" = "straight" +selector.rrtail = "earlessCorner" +selector."turnrrtail" = "serifless" +selector."rflap" = "serifless" + +[prime.r.variants.earless-corner-serifed] +rank = 5 +description = 'Earless (corner top-left), serifed `r`' +selector.r = "earlessCornerSerifed" +selector.rrtail = "earlessCorner" +selector."turnrrtail" = "serifed" +selector."rflap" = "serifed" [prime.r.variants.earless-rounded] -rank = 5 +rank = 6 description = 'Earless (rounded top-left), serif-less `r`' selector.r = "earlessRounded" -selector."turnrrtail" = "straight" -selector."rflap" = "straight" +selector.rrtail = "earlessRounded" +selector."turnrrtail" = "serifless" +selector."rflap" = "serifless" + +[prime.r.variants.earless-rounded-serifed] +rank = 7 +description = 'Earless (rounded top-left), serifed `r`' +selector.r = "earlessRoundedSerifed" +selector.rrtail = "earlessRounded" +selector."turnrrtail" = "serifed" +selector."rflap" = "serifed" + +[prime.r.variants.narrow] +selector.r = "narrow" +selector.rrtail = "narrow" +selector."turnrrtail" = "narrow" +selector."rflap" = "narrow" @@ -1678,11 +1705,6 @@ selector.dotlessj = "narrow" [prime.j.variants.narrow-serifed] selector.dotlessj = "narrowSerifed" -[prime.r.variants.narrow] -selector.r = "narrow" -selector."turnrrtail" = "narrow" -selector."rflap" = "narrow" - # This is a special variant selector that controls digit form [prime.digit-form.variants.lining] selector.__defaultDigitForm = "lining" @@ -1709,7 +1731,7 @@ b = 'toothed' g = 'singlestorey' p = 'eared' q = 'straight' -r = 'straight' +r = 'serifless' t = 'standard' v = 'straight' w = 'straight'