Iosevka/font-src/otl/gsub-frac.ptl

46 lines
1.3 KiB
Text

$$include '../meta/macros.ptl'
import [NumeratorForm DenominatorForm] from"../support/gr.mjs"
# Name-driven feature pairs
export : define [buildFrac gsub glyphStore] : begin
local rec : gsub.beginBlock
define frac : gsub.addCommonFeature : gsub.createFeature 'frac'
define { chain-rule reverse-rule } : gsub.ChainRuleBuilder
define subSolidus : gsub.createLookup : object
.type 'gsub_single'
.substitutions : object ['solidus' 'fractionBar'] ['slash' 'fractionBar']
define digitSet { }
define numSet { }
define denSet { }
foreach { gid g } [glyphStore.namedEntries] : if (gid.(0) !== ".") : begin
local numForm : NumeratorForm.get g
local denForm : DenominatorForm.get g
if (numForm && denForm) : begin
digitSet.push gid
numSet.push numForm
denSet.push denForm
define subDen : gsub.createLookup : object
.type 'gsub_chaining'
.rules : list
chain-rule [{'fractionBar'}.concat denSet] [digitSet ~> denSet]
define subNum : gsub.createLookup : object
.type 'gsub_reverse'
.rules : list
reverse-rule [digitSet ~> numSet] [{'fractionBar'}.concat numSet]
frac.addLookup subSolidus
frac.addLookup subDen
frac.addLookup subNum
gsub.setDependency subSolidus subDen
gsub.setDependency subSolidus subNum
gsub.endBlock rec
define [objectIsNotEmpty obj] : obj && [Object.keys obj].length