From 1d4b78d7a37ea62274f7c6c3f9637cbe58e6fbaa Mon Sep 17 00:00:00 2001 From: be5invis Date: Sun, 20 Sep 2020 15:33:42 -0700 Subject: [PATCH] Add compile option to default to old-style figures (#397). --- README.md | 4 ++ changes/3.6.2.md | 1 + font-src/glyphs/number/index.ptl | 66 +++++++++++++++++--------------- params/parameters.toml | 13 +++++++ 4 files changed, 53 insertions(+), 31 deletions(-) create mode 100644 changes/3.6.2.md diff --git a/README.md b/README.md index 807d7ab3d..374d19be3 100644 --- a/README.md +++ b/README.md @@ -223,6 +223,10 @@ The current available styles for `design`/`upright`/`italic`/`oblique` options a - Recommended for Linux users who customize for their terminal fonts: certain applications, including FontConfig, recognizes a font as monospace if and only if its every non-combining glyphs having the same width. - `sp-fixed` : Apply `sp-force-monospace` and `no-ligation` together. +* Style for controlling digits' (figures') style: + - `default-to-old-style-figures`, `default-to-old-style-digits`: Default digit figures to old-style. + - `default-to-lining-figures`, `default-to-lining-digits`: Default digit figures to lining. + diff --git a/changes/3.6.2.md b/changes/3.6.2.md new file mode 100644 index 000000000..b2693d877 --- /dev/null +++ b/changes/3.6.2.md @@ -0,0 +1 @@ + * Add compile option to default to old-style figures (#397). \ No newline at end of file diff --git a/font-src/glyphs/number/index.ptl b/font-src/glyphs/number/index.ptl index d65069059..6b11a41b4 100644 --- a/font-src/glyphs/number/index.ptl +++ b/font-src/glyphs/number/index.ptl @@ -21,10 +21,14 @@ glyph-block Digits-Shared : begin e : MarkSet.OfZone {.top OnumHeight .bot 0} p : MarkSet.OfZone {.top OnumHeight .bot (OnumHeight - CAP)} + glyph-block-export CodeLnum CodeOnum + define [CodeLnum u] : if para.defaultToOldStyleFigures null u + define [CodeOnum u] : if para.defaultToOldStyleFigures u null + glyph-block Digits-Zero : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives - glyph-block-import Digits-Shared : OnumHeight OnumMarks + glyph-block-import Digits-Shared : OnumHeight OnumMarks CodeLnum CodeOnum define [ZeroSlashShape top] : begin local fine : 0.5 * OverlayStroke @@ -114,13 +118,13 @@ glyph-block Digits-Zero : begin include : refer-glyph "zero.onum.unslashed" include : ZeroLongDotShape OnumHeight - select-variant 'zero.lnum' '0' (follow -- 'zero') - select-variant 'zero.onum' (follow -- 'zero') + select-variant 'zero.lnum' [CodeLnum '0'] (follow -- 'zero') + select-variant 'zero.onum' [CodeOnum '0'] (follow -- 'zero') glyph-block Digits-One : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives - glyph-block-import Digits-Shared : OnumHeight OnumMarks + glyph-block-import Digits-Shared : OnumHeight OnumMarks CodeLnum CodeOnum define [OneShape top balance] : glyph-proc define topSW : adviceBlackness 3.5 @@ -157,13 +161,13 @@ glyph-block Digits-One : begin include : VBar Middle 0 OnumHeight set currentGlyph.autoRefPriority (-2) - select-variant 'one.lnum' '1' (follow -- 'one') - select-variant 'one.onum' (follow -- 'one') + select-variant 'one.lnum' [CodeLnum '1'] (follow -- 'one') + select-variant 'one.onum' [CodeOnum '1'] (follow -- 'one') glyph-block Digits-Two : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives - glyph-block-import Digits-Shared : OnumHeight OnumMarks + glyph-block-import Digits-Shared : OnumHeight OnumMarks CodeLnum CodeOnum define [TwoShape top] : glyph-proc define smooth : [adviceGlottalStopSmooth top 1] * 0.95 @@ -180,11 +184,11 @@ glyph-block Digits-Two : begin if SLAB : begin include : UpwardRightSerif RightSB 0 VJut - create-glyph 'two.lnum' '2' : glyph-proc + create-glyph 'two.lnum' [CodeLnum '2'] : glyph-proc include : MarkSet.capital include : TwoShape CAP - create-glyph 'two.onum' : glyph-proc + create-glyph 'two.onum' [CodeOnum '2'] : glyph-proc include : OnumMarks.e include : TwoShape OnumHeight @@ -193,7 +197,7 @@ glyph-block Digits-Two : begin glyph-block Digits-Three : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives - glyph-block-import Digits-Shared : OnumHeight OnumMarks ShiftDown + glyph-block-import Digits-Shared : OnumHeight OnumMarks ShiftDown CodeLnum CodeOnum glyph-block-import Letter-Latin-Ezh : EzhShape define [ThreeShape top] : glyph-proc @@ -231,15 +235,15 @@ glyph-block Digits-Three : begin include : EzhShape CAP 0 0.25 0.975 include : ShiftDown - select-variant 'three.lnum' '3' (follow -- 'three') - select-variant 'three.onum' (follow -- 'three') + select-variant 'three.lnum' [CodeLnum '3'] (follow -- 'three') + select-variant 'three.onum' [CodeOnum '3'] (follow -- 'three') turned 'turnDigitThree' 0x218B 'three.lnum' Middle (CAP / 2) glyph-block Digits-Four : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives - glyph-block-import Digits-Shared : OnumMarks ShiftDown + glyph-block-import Digits-Shared : OnumMarks ShiftDown CodeLnum CodeOnum define [FourStdShape top open crossing] : glyph-proc local yBar (top * 0.4) @@ -329,13 +333,13 @@ glyph-block Digits-Four : begin include : FourOpenShape CAP false include : ShiftDown - select-variant 'four.lnum' '4' (follow -- 'four') - select-variant 'four.onum' (follow -- 'four') + select-variant 'four.lnum' [CodeLnum '4'] (follow -- 'four') + select-variant 'four.onum' [CodeOnum '4'] (follow -- 'four') glyph-block Digits-Five : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives - glyph-block-import Digits-Shared : OnumMarks ShiftDown + glyph-block-import Digits-Shared : OnumMarks ShiftDown CodeLnum CodeOnum define [FiveShape top bp] : glyph-proc local t1 : top * bp * 0.8 @@ -361,11 +365,11 @@ glyph-block Digits-Five : begin include : DownwardRightSerif xright top VJut Rect (t2 / 2 + top * 0.015) (t2 / 2 - top * 0.015) 0 Middle - create-glyph 'five.lnum' '5' : glyph-proc + create-glyph 'five.lnum' [CodeLnum '5'] : glyph-proc include : MarkSet.capital include : FiveShape CAP designParameters.fiveBarPos - create-glyph 'five.onum' : glyph-proc + create-glyph 'five.onum' [CodeOnum '5'] : glyph-proc include : OnumMarks.p include : FiveShape CAP designParameters.fiveBarPos include : ShiftDown @@ -381,6 +385,7 @@ glyph-block Digits-Five : begin glyph-block Digits-Six : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives + glyph-block-import Digits-Shared : CodeLnum CodeOnum glyph-block-export OpenContourSixShape define [OpenContourSixShape charTop] : glyph-proc @@ -462,27 +467,24 @@ glyph-block Digits-Six : begin create-glyph 'six.lnum.openContour' : glyph-proc include : MarkSet.capital include : OpenContourSixShape CAP - create-aliased-glyph 'six.onum.openContour' create-glyph 'six.lnum.closedContour' : glyph-proc include : MarkSet.capital include : ClosedContourNineShape CAP include : FlipAround (Middle) (CAP / 2) - create-aliased-glyph 'six.onum.closedContour' create-glyph 'six.lnum.straightBar' : glyph-proc include : MarkSet.capital include : StraightBarSixShape CAP - create-aliased-glyph 'six.onum.straightBar' - select-variant 'six.lnum' '6' (follow -- 'six') - select-variant 'six.onum' (follow -- 'six') + select-variant 'six.lnum' [CodeLnum '6'] (follow -- 'six') + alias 'six.onum' [CodeOnum '6'] 'six.lnum' glyph-block Digits-Seven : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives - glyph-block-import Digits-Shared : OnumMarks ShiftDown + glyph-block-import Digits-Shared : OnumMarks ShiftDown CodeLnum CodeOnum define SevenXLeft : mix SB RightSB 0.28 define [SevenSwCor top] : [Math.hypot 1 ((RightSB - SevenXLeft - HalfStroke) / (top - Stroke))] * HVContrast @@ -531,12 +533,13 @@ glyph-block Digits-Seven : begin include : DownwardLeftSerif (SB + (OX - O)) CAP VJut include : ShiftDown - select-variant 'seven.lnum' '7' (follow -- 'seven') - select-variant 'seven.onum' (follow -- 'seven') + select-variant 'seven.lnum' [CodeLnum '7'] (follow -- 'seven') + select-variant 'seven.onum' [CodeOnum '7'] (follow -- 'seven') glyph-block Digits-Eight : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives + glyph-block-import Digits-Shared : CodeLnum CodeOnum local EightPr : StrokeWidthBlend 0.85 0.925 define [EightShape top] : begin @@ -560,10 +563,11 @@ glyph-block Digits-Eight : begin arcvh close - create-glyph 'eight.lnum' '8' : glyph-proc + create-glyph 'eight.lnum' [CodeLnum '8'] : glyph-proc include : MarkSet.capital include : EightShape CAP - create-aliased-glyph 'eight.onum' + + alias 'eight.onum' [CodeOnum '8'] 'eight.lnum' # There is an "eight without lower contour" shape used for /propto create-glyph 'rotetedpropto' : glyph-proc # rotetedpropto @@ -586,7 +590,7 @@ glyph-block Digits-Eight : begin glyph-block Digits-Nine : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives - glyph-block-import Digits-Shared : OnumHeight OnumMarks ShiftDown + glyph-block-import Digits-Shared : OnumHeight OnumMarks ShiftDown CodeLnum CodeOnum glyph-block-import Digits-Six : ClosedContourNineShape OpenContourSixShape StraightBarSixShape create-glyph 'nine.lnum.closedContour' : glyph-proc @@ -618,8 +622,8 @@ glyph-block Digits-Nine : begin include : StraightBarSixShape CAP include : FlipAround (Middle) (OnumHeight / 2) - select-variant 'nine.lnum' '9' (follow -- 'nine') - select-variant 'nine.onum' (follow -- 'nine') + select-variant 'nine.lnum' [CodeLnum '9'] (follow -- 'nine') + select-variant 'nine.onum' [CodeOnum '9'] (follow -- 'nine') glyph-block Digits-Ten : begin glyph-block-import CommonShapes diff --git a/params/parameters.toml b/params/parameters.toml index 056f2d140..0644d4de9 100644 --- a/params/parameters.toml +++ b/params/parameters.toml @@ -122,6 +122,19 @@ diversityF = 0.75 diversityI = 0.75 diversityII = 0.5 +###### Old-style figures +[default-to-old-style-figures] +defaultToOldStyleFigures = true + +[default-to-old-style-digits] +defaultToOldStyleFigures = true + +[default-to-lining-figures] +defaultToOldStyleFigures = false + +[default-to-lining-digits] +defaultToOldStyleFigures = false + ################################################################################################### ### Metric-override hives ### These hives are now discouraged in favor of 'metric-override' in build plans but they are