Optimize footprint by reducing aliasable glyphs

This commit is contained in:
be5invis 2020-11-09 03:45:02 -08:00
parent 73619b0d6d
commit 3d8e8ffd05
5 changed files with 52 additions and 28 deletions

View file

@ -20,6 +20,7 @@ glyph-block Autobuild-Transformed-Shared : begin
set name (name + j) set name (name + j)
return name return name
glyph-block-export suggestMappedName
define [suggestMappedName map key name] : begin define [suggestMappedName map key name] : begin
if map.(key) : return map.(key) if map.(key) : return map.(key)
local amended : suggestName name local amended : suggestName name
@ -538,6 +539,22 @@ glyph-block Autobuild-Transformed-Mathematical : begin
createMathDerivedSeriesImpl groupName tfm jobs createMathDerivedSeriesImpl groupName tfm jobs
define [CreateMathAliasableImpl groupName altGroupName tfm base letters overrides] : begin
if recursive : return nothing
local overrideMap : new Map (overrides || {})
foreach j [range 0 letters.length] : begin
local letter letters.(j)
local source : glyphStore.queryNameOfUnicode : letter.codePointAt 0
if (source && altGroupName) : set source "\(source)+\(altGroupName)"
local uDst : base + j
if [overrideMap.has letter] : set uDst [overrideMap.get letter]
if source : alias "\(source)+\(groupName)" uDst source
define [CreateMathAliasable cond groupName altGroupName tfm base letters overrides] : begin
if cond
CreateMathDerivatives groupName tfm base letters overrides
CreateMathAliasableImpl groupName altGroupName tfm base letters overrides
# Math bold # Math bold
CreateMathDerivatives 'mathbf' tfBold 0x1D400 UpperLatin CreateMathDerivatives 'mathbf' tfBold 0x1D400 UpperLatin
CreateMathDerivatives 'mathbf' tfBold 0x1D41A LowerLatin CreateMathDerivatives 'mathbf' tfBold 0x1D41A LowerLatin
@ -558,28 +575,29 @@ glyph-block Autobuild-Transformed-Mathematical : begin
CreateMathDerivatives 'mathbi' tfBoldItalic 0x1D736 LowerGreek CreateMathDerivatives 'mathbi' tfBoldItalic 0x1D736 LowerGreek
# Math Sans-serif # Math Sans-serif
CreateMathDerivatives 'mathss' tfSans 0x1D5A0 UpperLatin CreateMathAliasable SLAB 'mathss' null tfSans 0x1D5A0 UpperLatin
CreateMathDerivatives 'mathss' tfSans 0x1D5BA LowerLatin CreateMathAliasable SLAB 'mathss' null tfSans 0x1D5BA LowerLatin
CreateMathDerivatives 'mathss' tfSans 0x1D7E2 Digits CreateMathAliasable SLAB 'mathss' null tfSans 0x1D7E2 Digits
CreateMathDerivatives 'mathsi' tfSansItalic 0x1D608 UpperLatin CreateMathAliasable SLAB 'mathsi' 'mathit' tfSansItalic 0x1D608 UpperLatin
CreateMathDerivatives 'mathsi' tfSansItalic 0x1D622 LowerLatin CreateMathAliasable SLAB 'mathsi' 'mathit' tfSansItalic 0x1D622 LowerLatin
CreateMathDerivatives 'mathsb' tfSansBold 0x1D5D4 UpperLatin CreateMathAliasable SLAB 'mathsb' 'mathbf' tfSansBold 0x1D5D4 UpperLatin
CreateMathDerivatives 'mathsb' tfSansBold 0x1D5EE LowerLatin CreateMathAliasable SLAB 'mathsb' 'mathbf' tfSansBold 0x1D5EE LowerLatin
CreateMathDerivatives 'mathsb' tfSansBold 0x1D756 UpperGreek CreateMathAliasable SLAB 'mathsb' 'mathbf' tfSansBold 0x1D756 UpperGreek
CreateMathDerivatives 'mathsb' tfSansBold 0x1D770 LowerGreek CreateMathAliasable SLAB 'mathsb' 'mathbf' tfSansBold 0x1D770 LowerGreek
CreateMathDerivatives 'mathsb' tfSansBold 0x1D7EC Digits CreateMathAliasable SLAB 'mathsb' 'mathbf' tfSansBold 0x1D7EC Digits
CreateMathDerivatives 'mathsz' tfSansBoldItalic 0x1D63C UpperLatin CreateMathAliasable SLAB 'mathsz' 'mathbi' tfSansBoldItalic 0x1D63C UpperLatin
CreateMathDerivatives 'mathsz' tfSansBoldItalic 0x1D656 LowerLatin CreateMathAliasable SLAB 'mathsz' 'mathbi' tfSansBoldItalic 0x1D656 LowerLatin
CreateMathDerivatives 'mathsz' tfSansBoldItalic 0x1D790 UpperGreek CreateMathAliasable SLAB 'mathsz' 'mathbi' tfSansBoldItalic 0x1D790 UpperGreek
CreateMathDerivatives 'mathsz' tfSansBoldItalic 0x1D7AA LowerGreek CreateMathAliasable SLAB 'mathsz' 'mathbi' tfSansBoldItalic 0x1D7AA LowerGreek
# Math Typewriter # Math Typewriter
CreateMathDerivatives 'mathtt' tfTypeWriter 0x1D670 UpperLatin local doTypewriter : para.quasiProportionalDiversity > 0
CreateMathDerivatives 'mathtt' tfTypeWriter 0x1D68A LowerLatin CreateMathAliasable doTypewriter 'mathtt' null tfTypeWriter 0x1D670 UpperLatin
CreateMathDerivatives 'mathtt' tfTypeWriter 0x1D7F6 Digits CreateMathAliasable doTypewriter 'mathtt' null tfTypeWriter 0x1D68A LowerLatin
CreateMathAliasable doTypewriter 'mathtt' null tfTypeWriter 0x1D7F6 Digits
glyph-block Autobuild-Rhotic : begin glyph-block Autobuild-Rhotic : begin
glyph-block-import Marks : markFine glyph-block-import Marks : markFine

View file

@ -50,9 +50,11 @@ glyph-block Common-Derivatives : begin
if [not goal] : throw : new Error "Cannot find glyph '\(id)'" if [not goal] : throw : new Error "Cannot find glyph '\(id)'"
this.includeGlyph goal copyAnchors copyWidth this.includeGlyph goal copyAnchors copyWidth
define [with-related-glyphs sourceGid dstGid unicode Fn] : if [glyph-is-needed sourceGid] : begin define [with-related-glyphs sourceGid dstGid dstUnicode Fn] : begin
if [not : glyph-is-needed sourceGid] : return nothing
local glyphSrc : glyphStore.queryByName sourceGid local glyphSrc : glyphStore.queryByName sourceGid
local glyphDst : create-glyph dstGid unicode : glyph-proc local glyphDst : create-glyph dstGid dstUnicode : glyph-proc
include : Fn sourceGid null include : Fn sourceGid null
if glyphDst : foreach [gr : items-of : AnyDerivingCv.query glyphSrc] : begin if glyphDst : foreach [gr : items-of : AnyDerivingCv.query glyphSrc] : begin
@ -60,12 +62,16 @@ glyph-block Common-Derivatives : begin
create-glyph [gr.amendName dstGid] : glyph-proc create-glyph [gr.amendName dstGid] : glyph-proc
include : Fn [gr.get glyphSrc] gr.tag include : Fn [gr.get glyphSrc] gr.tag
define [alias newid unicode id] : begin define [alias dstGid dstUnicode sourceGid] : begin
if [not newid] : throw : new Error "Target ID not specified" if [not dstGid] : throw : new Error "Target ID not specified"
with-related-glyphs id newid unicode if [not : glyph-is-needed sourceGid] : return nothing
lambda [src sel] : glyph-proc
include [refer-glyph src] AS_BASE ALSO_METRICS local glyphSrc : glyphStore.queryByNameEnsured sourceGid
currentGlyph.cloneRankFromGlyph [query-glyph src] local glyphDst : create-glyph dstGid dstUnicode : glyph-proc
include [refer-glyph sourceGid] AS_BASE ALSO_METRICS
if glyphDst : foreach [gr : items-of : AnyDerivingCv.query glyphSrc] : begin
gr.set glyphDst [gr.get glyphSrc]
define [turned newid unicode id _x _y mark] : begin define [turned newid unicode id _x _y mark] : begin
if [not newid] : throw : new Error "Target ID not specified" if [not newid] : throw : new Error "Target ID not specified"

View file

@ -122,8 +122,7 @@ export : define [calculateMetrics para] : begin
define OneBalance : fallback para.onebalance 0 define OneBalance : fallback para.onebalance 0
# derived metrics # derived metrics
define MONOSPACE : para.diversityM == 1 && para.diversityF == 1 && para.diversityI == 1 && para.diversityII == 1 define WideWidth0 : if (para.quasiProportionalDiversity === 0) (Width * 2) UPM
define WideWidth0 : if MONOSPACE (Width * 2) UPM
define WideWidth1 : if (para.spacing >= 1) WideWidth0 Width define WideWidth1 : if (para.spacing >= 1) WideWidth0 Width
define WideWidth2 : if (para.spacing >= 2) WideWidth0 Width define WideWidth2 : if (para.spacing >= 2) WideWidth0 Width

View file

@ -192,7 +192,7 @@ export : define [assignFontNames para metrics font] : begin
if (minorVersion > 99 || patchVersion > 9) : throw : new Error "Version number overflow" if (minorVersion > 99 || patchVersion > 9) : throw : new Error "Version number overflow"
set font.head.fontRevision : majorVersion + (minorVersion * 10 + patchVersion) / 1000 set font.head.fontRevision : majorVersion + (minorVersion * 10 + patchVersion) / 1000
if (para.diversityM == 1 && para.diversityF == 1 && para.diversityI == 1 && para.diversityII == 1) : begin if (para.quasiProportionalDiversity === 0) : begin
set font.OS_2.panose.bProportion 9 # Monospaced set font.OS_2.panose.bProportion 9 # Monospaced
set font.post.isFixedPitch true set font.post.isFixedPitch true
: else : begin : else : begin

View file

@ -13,6 +13,7 @@ function initPara(data, argv) {
apply(para, data, ["shapeWidth"], { shapeWidth: argv.shape.width }); apply(para, data, ["shapeWidth"], { shapeWidth: argv.shape.width });
apply(para, data, [`s-${argv.shape.slope}`]); apply(para, data, [`s-${argv.shape.slope}`]);
apply(para, data, [`diversity-${argv.shape.quasiProportionalDiversity}`]); apply(para, data, [`diversity-${argv.shape.quasiProportionalDiversity}`]);
para.quasiProportionalDiversity = argv.shape.quasiProportionalDiversity || 0;
if (argv.featureControl.noCvSs) para.enableCvSs = false; if (argv.featureControl.noCvSs) para.enableCvSs = false;
if (argv.featureControl.noLigation) para.enableLigation = false; if (argv.featureControl.noLigation) para.enableLigation = false;
return para; return para;