diff --git a/changes/27.2.1.md b/changes/27.2.1.md index d68474deb..d34a03c33 100644 --- a/changes/27.2.1.md +++ b/changes/27.2.1.md @@ -2,4 +2,5 @@ * Fix `ss02`, `ss04`, `ss06`, `ss13`, `ss17`'s application on `i` and `j` (#2033). * Add tailed lower lambda (#2036). * Add `arrow-lr` ligation group for C-like's spaceship operators (#2041). +* Add raised cap-height cent sign (`¢`) variants to `VSAM` (#2044). * Fix `cv02`, `cv04`, `cv05`, `cv06`, `cv11`, `cv12`, `cv15`, `cv17`, `cv18`, `cv25`, `cv28`, `cv43`, `cv70`, `cv71`, `cv81`, and `cv82` for `ss17` under slab. diff --git a/font-src/glyphs/letter/latin/c.ptl b/font-src/glyphs/letter/latin/c.ptl index f4e79a208..3b9b3b59a 100644 --- a/font-src/glyphs/letter/latin/c.ptl +++ b/font-src/glyphs/letter/latin/c.ptl @@ -1,7 +1,7 @@ $$include '../../../meta/macros.ptl' import [mix linreg clamp fallback] from"../../../support/utils.mjs" -import [Dotless CvDecompose MathSansSerif] from"../../../support/gr.mjs" +import [DependentSelector CvDecompose MathSansSerif] from"../../../support/gr.mjs" glyph-module @@ -10,6 +10,7 @@ glyph-block Letter-Latin-C : begin glyph-block-import Common-Derivatives glyph-block-import Mark-Adjustment : ExtendAboveBaseAnchors ExtendBelowBaseAnchors glyph-block-import Mark-Shared-Metrics : markStroke + glyph-block-import Letter-Shared : CreateDependentComposite glyph-block-import Letter-Shared-Shapes : SerifFrame CurlyTail DToothlessRise glyph-block-import Letter-Shared-Shapes : SerifedArcStart SerifedArcEnd InwardSlabArcStart glyph-block-import Letter-Shared-Shapes : ArcStartSerif ArcEndSerif @@ -180,12 +181,27 @@ glyph-block Letter-Latin-C : begin create-glyph "c.\(suffix)" : glyph-proc include : MarkSet.e + local lf : CLetterForm [DivFrame 1] sty styBot XH 0 + ada -- SmallArchDepthA + adb -- SmallArchDepthB + include : lf.full + + create-glyph "c/centKernelStd.\(suffix)" : glyph-proc set-base-anchor 'cvDecompose' 0 0 local lf : CLetterForm [DivFrame 1] sty styBot XH 0 ada -- SmallArchDepthA adb -- SmallArchDepthB include : lf.full + create-glyph "c/centKernelCap.\(suffix)" : glyph-proc + set-base-anchor 'cvDecompose' 0 0 + local t : CAP / 2 + XH / 2 + local b : CAP / 2 - XH / 2 + local lf : CLetterForm [DivFrame 1] sty styBot t b + ada -- SmallArchDepthA + adb -- SmallArchDepthB + include : lf.full + create-glyph "revSmallC.\(suffix)" : glyph-proc include : MarkSet.e local lf : CLetterForm [DivFrame 1] sty styBot XH 0 @@ -294,6 +310,8 @@ glyph-block Letter-Latin-C : begin link-reduced-variant 'c/sansSerif' 'c' MathSansSerif link-reduced-variant 'c/turnDescBase' 'c' select-variant 'revSmallC' 0x2184 (follow -- 'c') + select-variant 'c/centKernelStd' (follow -- 'c') + select-variant 'c/centKernelCap' (follow -- 'c') alias 'cyrl/es' 0x441 'c' alias 'grek/lunateSmallSigma' 0x3F2 'c.serifless' select-variant 'turncSideways' 0x1D12 (follow -- 'c') @@ -333,43 +351,54 @@ glyph-block Letter-Latin-C : begin LetterBarOverlay.l SB (CAP * 0.6) derive-composites 'currency/euroSign' 0x20AC 'C' 'currency/euroSign/overlay' - create-glyph 'currency/centSignBar.open' : glyph-proc - set-width 0 - set-mark-anchor 'cvDecompose' 0 0 - include : dispiro - widths.center [AdviceStroke 3] - flat Middle (XH - HalfStroke) - curl Middle (XH - Descender / 2) [heading Upward] - include : dispiro - widths.center [AdviceStroke 3] - flat Middle (Descender / 2) [heading Upward] - curl Middle HalfStroke + define CentBarConfig : object + open { (Descender / 2) (XH - Descender / 2) 0 "std" } + through { (Descender / 2) (XH - Descender / 2) 1 "std" } + interrupted { (Descender / 2) (XH - Descender / 2) 2 "std" } + openCap { 0 CAP 0 "cap" } + throughCap { 0 CAP 1 "cap" } + interruptedCap { 0 CAP 2 "cap" } - create-glyph 'currency/centSignBar.through' : glyph-proc - include [refer-glyph 'currency/centSignBar.open'] AS_BASE ALSO_METRICS + foreach { suffix { bot top fillType selector } } [Object.entries CentBarConfig] : do + create-glyph "cent/bar.\(suffix)" : glyph-proc + define w : AdviceStroke 3 + define fine : AdviceStroke [StrokeWidthBlend 3 5.5] - define fine : AdviceStroke [StrokeWidthBlend 3 5] - include : VBar.m Middle (XH - HalfStroke) (0 + HalfStroke) fine + local yMid : mix bot top 0.5 + local fillBottom : yMid - XH / 2 + local fillTop : yMid + XH / 2 - create-glyph 'currency/centSignBar.barInterrupted' : glyph-proc - include [refer-glyph 'currency/centSignBar.open'] AS_BASE ALSO_METRICS + # Draw the outside subbars + include : dispiro + flat Middle fillTop [widths.center w] + curl Middle top [heading Upward] + include : dispiro + flat Middle fillBottom [widths.center w] + curl Middle bot [heading Downward] - define cofine : AdviceStroke 4 - define fine : AdviceStroke [StrokeWidthBlend 3 5] - define gap : Math.max (XH / 8) [AdviceStroke2 6 6 XH] - include : dispiro - flat Middle (XH - HalfStroke) [widths.center.heading cofine Downward] - curl Middle (XH / 2 + gap / 2) [widths.center.heading fine Downward] - include : dispiro - flat Middle (HalfStroke) [widths.center.heading cofine Upward] - curl Middle (XH / 2 - gap / 2) [widths.center.heading fine Upward] + include : match fillType + [Just 1] : VBar.m Middle fillBottom fillTop fine + [Just 2] : begin + define cofine : AdviceStroke 4 + define gap : Math.max (XH / 8) [AdviceStroke2 6 6 XH] - select-variant 'currency/centSignBar' (follow -- 'cent') + union + dispiro + flat Middle fillTop [widths.center.heading cofine Downward] + curl Middle (yMid + gap / 2) [widths.center.heading fine Downward] + dispiro + flat Middle fillBottom [widths.center.heading cofine Upward] + curl Middle (yMid - gap / 2) [widths.center.heading fine Upward] - create-glyph 'currency/centSign' 0xA2 : glyph-proc - include [refer-glyph 'c'] AS_BASE ALSO_METRICS - include [refer-glyph 'currency/centSignBar'] - CvDecompose.set currentGlyph { 'c' 'currency/centSignBar' } + __ : no-shape + + DependentSelector.set currentGlyph selector + + select-variant 'cent/bar' (follow -- 'cent') + + CreateDependentComposite 'cent/centSign' 0xA2 "cent/bar" : object + 'std' 'c/centKernelStd' + 'cap' 'c/centKernelCap' turned 'turnC' 0x186 'C' Middle (CAP / 2) turned 'turnc' 0x254 'c' Middle (XH / 2) diff --git a/font-src/glyphs/letter/latin/s.ptl b/font-src/glyphs/letter/latin/s.ptl index a6854d5e5..9a4aff886 100644 --- a/font-src/glyphs/letter/latin/s.ptl +++ b/font-src/glyphs/letter/latin/s.ptl @@ -248,7 +248,7 @@ glyph-block Letter-Latin-S : begin include : SAutoSlabStart doTS XH sw Hook include : SAutoSlabEnd doBS 0 sw Hook - create-glyph "DollarKernelStd.\(suffix)" : glyph-proc + create-glyph "S/dollarKernelStd.\(suffix)" : glyph-proc define top : CAP * 0.95 define bot : CAP * 0.05 local sw : AdviceStroke2 2 3 (top - bot) @@ -258,7 +258,7 @@ glyph-block Letter-Latin-S : begin include : SAutoSlabStart doTS top sw Hook include : SAutoSlabEnd doBS bot sw Hook - create-glyph "DollarKernelCap.\(suffix)" : glyph-proc + create-glyph "S/dollarKernelCap.\(suffix)" : glyph-proc define top : CAP * 0.88 define bot : CAP * 0.12 local sw : AdviceStroke2 2 3 (top - bot) @@ -350,8 +350,8 @@ glyph-block Letter-Latin-S : begin alias 'cyrl/DzeRev' 0xA644 'revS' alias 'cyrl/dzeRev' 0xA645 'revs' - select-variant 'DollarKernelStd' (follow -- 'S') - select-variant 'DollarKernelCap' (follow -- 'S') + select-variant 'S/dollarKernelStd' (follow -- 'S') + select-variant 'S/dollarKernelCap' (follow -- 'S') select-variant 'SSwash' 0x2C7E select-variant 'sSwash' 0x23F @@ -500,5 +500,5 @@ glyph-block Letter-Latin-S : begin select-variant 'dollar/bar' (follow -- 'dollar') CreateDependentComposite 'dollar' '$' "dollar/bar" : object - 'std' 'DollarKernelStd' - 'cap' 'DollarKernelCap' + 'std' 'S/dollarKernelStd' + 'cap' 'S/dollarKernelCap' diff --git a/params/variants.toml b/params/variants.toml index 5eaa91268..0a6370b7e 100644 --- a/params/variants.toml +++ b/params/variants.toml @@ -6667,17 +6667,17 @@ selector.dollar = "interrupted" [prime.dollar.variants.open-cap] rank = 4 -description = "Dollar symbol with open contour, not exceeding baseline and ascender" +description = "Dollar symbol with open contour, sized not exceeding baseline and ascender" selector.dollar = "openCap" [prime.dollar.variants.through-cap] rank = 5 -description = "Dollar symbol with strike-through vertical bar, not exceeding baseline and ascender" +description = "Dollar symbol with strike-through vertical bar, sized not exceeding baseline and ascender" selector.dollar = "throughCap" [prime.dollar.variants.interrupted-cap] rank = 6 -description = "Dollar symbol with interrupted strike-through vertical bar, not exceeding baseline and ascender" +description = "Dollar symbol with interrupted strike-through vertical bar, sized not exceeding baseline and ascender" selector.dollar = "interruptedCap" @@ -6826,7 +6826,22 @@ selector.cent = "through" [prime.cent.variants.bar-interrupted] rank = 3 description = "Cent sign (`¢`) with vertical bar breaks at center" -selector.cent = "barInterrupted" +selector.cent = "interrupted" + +[prime.cent.variants.open-cap] +rank = 4 +description = "Cent sign (`¢`) with open contour, sized not exceeding baseline and ascender" +selector.cent = "openCap" + +[prime.cent.variants.through-cap] +rank = 5 +description = "Cent sign (`¢`) with vertical bar all through the `c` part, sized not exceeding baseline and ascender" +selector.cent = "throughCap" + +[prime.cent.variants.bar-interrupted-cap] +rank = 6 +description = "Cent sign (`¢`) with vertical bar breaks at center, sized not exceeding baseline and ascender" +selector.cent = "interruptedCap" @@ -7473,6 +7488,7 @@ eight = "two-circles" nine = "closed-contour" asterisk = "hex-low" brace = "straight" +cent = "through-cap" guillemet = "straight" at = "fourfold" percent = "rings-continuous-slash" @@ -7546,6 +7562,7 @@ nine = "closed-contour" asterisk = "hex-mid" underscore = "low" brace = "straight" +cent = "through-cap" guillemet = "straight" number-sign = "slanted" at = "fourfold" @@ -7813,7 +7830,7 @@ brace = "straight" guillemet = "straight" number-sign = "slanted" at = "fourfold" -cent = "open" +cent = "open-cap" percent = "rings-continuous-slash" bar = "force-upright" pilcrow = "low" @@ -7891,6 +7908,7 @@ seven = "curly-serifless" nine = "closed-contour" asterisk = "hex-mid" paren = "large-contour" +cent = "through-cap" guillemet = "straight" number-sign = "slanted" at = "fourfold" @@ -8107,6 +8125,7 @@ asterisk = "penta-low" guillemet = "straight" number-sign = "slanted" dollar = "open" +cent = "through-cap" bar = "force-upright" pilcrow = "low" micro-sign = "tailed-serifless" @@ -8237,6 +8256,7 @@ tilde = "high" asterisk = "hex-high" caret = "high" brace = "straight" +cent = "through-cap" guillemet = "straight" percent = "rings-continuous-slash" @@ -8399,6 +8419,7 @@ nine = "closed-contour" guillemet = "straight" number-sign = "slanted" percent = "rings-continuous-slash" +cent = "through-cap" pilcrow = "low" micro-sign = "toothed-serifless" punctuation-dot = "square" @@ -8776,7 +8797,7 @@ number-sign = "slanted" ampersand = "upper-open" at = "fourfold" dollar = "interrupted" -cent = "bar-interrupted" +cent = "bar-interrupted-cap" pilcrow = "low" partial-derivative = "straight-bar" micro-sign = "tailed-serifless" @@ -8890,6 +8911,7 @@ eight = "two-circles" nine = "closed-contour" asterisk = "hex-mid" underscore = "low" +cent = "through-cap" guillemet = "straight" number-sign = "slanted" percent = "rings-continuous-slash" diff --git a/utility/export-data/coverage-export/gather-coverage-data.mjs b/utility/export-data/coverage-export/gather-coverage-data.mjs index cdb9e1473..9d57b02b4 100644 --- a/utility/export-data/coverage-export/gather-coverage-data.mjs +++ b/utility/export-data/coverage-export/gather-coverage-data.mjs @@ -69,7 +69,10 @@ export async function gatherCoverageData(covUpright, covItalic, covOblique) { } let featureSeries = []; - for (const [id, x] of featureSeriesStore.values()) featureSeries[id] = x; + for (const [id, x] of featureSeriesStore.values()) { + for (let gr of x.groups) gr.sort((a, b) => a.css.localeCompare(b.css)); + featureSeries[id] = x; + } return { unicodeCoverage, featureSeries }; } diff --git a/utility/export-data/index.mjs b/utility/export-data/index.mjs index d0b3be0c5..199fdd598 100644 --- a/utility/export-data/index.mjs +++ b/utility/export-data/index.mjs @@ -33,11 +33,9 @@ async function main(argv) { nonMergeSets: ligationData.nonMergeSets } }, - { spaces: 2 } + null, + 2 ) ); - await fs.promises.writeFile( - argv.exportPathCov, - JSON.stringify({ version, ...cl }, { spaces: 2 }) - ); + await fs.promises.writeFile(argv.exportPathCov, JSON.stringify({ version, ...cl }, null, 2)); }