Cleanup code for orthographic italics. Now variant selector could influence the upright and italic counterpart individually -- though currently they aren't.

This commit is contained in:
be5invis 2020-11-10 20:52:55 -08:00
parent 69b3c2aca9
commit 040c1ff08c
11 changed files with 161 additions and 292 deletions

View file

@ -12,6 +12,9 @@ glyph-block Autobuild-Transformed-Shared : begin
glyph-block-import CommonShapes glyph-block-import CommonShapes
glyph-block-import Common-Derivatives glyph-block-import Common-Derivatives
glyph-block-export wrapName
define [wrapName groupID baseName] "\(groupID){\(baseName)}"
define [suggestName _name] : begin define [suggestName _name] : begin
local name _name local name _name
if [query-glyph name] : begin if [query-glyph name] : begin
@ -28,20 +31,21 @@ glyph-block Autobuild-Transformed-Shared : begin
return amended return amended
glyph-block-export extendRelatedGlyphs glyph-block-export extendRelatedGlyphs
define [extendRelatedGlyphs records suffix] : begin define [extendRelatedGlyphs groupID records] : begin
local relatedRecords {} local relatedRecords {}
local relSets {} local relSets {}
local targetNameMap {.} local targetNameMap {.}
foreach [record : items-of records] : begin foreach [record : items-of records] : begin
local srcName record.1 local srcName record.1
suggestMappedName targetNameMap srcName (srcName + '+' + suffix)
local dstName : srcName + '+' + suffix local dstName : wrapName groupID srcName
suggestMappedName targetNameMap srcName dstName
local tree : getGrTree srcName {DotlessOrNot AnyCv} query-glyph local tree : getGrTree srcName {DotlessOrNot AnyCv} query-glyph
foreach [{gr origSrcName relSrcName} : items-of tree] : if [query-glyph relSrcName] : begin foreach [{gr origSrcName relSrcName} : items-of tree] : if [query-glyph relSrcName] : begin
local origDstName : suggestMappedName targetNameMap origSrcName (origSrcName + '+' + suffix) local origDstName : suggestMappedName targetNameMap origSrcName [wrapName groupID origSrcName]
local relDstName : suggestMappedName targetNameMap relSrcName (relSrcName + '+' + suffix) local relDstName : suggestMappedName targetNameMap relSrcName [wrapName groupID relSrcName]
local relatedRecord : record.slice 0 local relatedRecord : record.slice 0
set relatedRecord.0 null set relatedRecord.0 null
@ -69,7 +73,7 @@ glyph-block Autobuild-Transformed : begin
glyph-block-import Autobuild-Transformed-Shared : extendRelatedGlyphs link-relations glyph-block-import Autobuild-Transformed-Shared : extendRelatedGlyphs link-relations
define [createSuperscripts _records] : begin define [createSuperscripts _records] : begin
local {records relSets targetNameMap} : extendRelatedGlyphs _records 'sup' local {records relSets targetNameMap} : extendRelatedGlyphs 'sup' _records
local pendingGlyphs : records.map : [record] => record.1 local pendingGlyphs : records.map : [record] => record.1
local miniatureFont : Miniature local miniatureFont : Miniature
glyphs -- pendingGlyphs glyphs -- pendingGlyphs
@ -93,7 +97,7 @@ glyph-block Autobuild-Transformed : begin
link-relations relSets link-relations relSets
define [createSubscripts _records] : begin define [createSubscripts _records] : begin
local {records relSets targetNameMap} : extendRelatedGlyphs _records 'sub' local {records relSets targetNameMap} : extendRelatedGlyphs 'sub' _records
local pendingGlyphs : records.map : [record] => record.1 local pendingGlyphs : records.map : [record] => record.1
local miniatureFont : Miniature local miniatureFont : Miniature
glyphs -- pendingGlyphs glyphs -- pendingGlyphs
@ -115,7 +119,7 @@ glyph-block Autobuild-Transformed : begin
link-relations relSets link-relations relSets
define [createSMCPs _records] : begin define [createSMCPs _records] : begin
local {records relSets targetNameMap} : extendRelatedGlyphs _records 'smcp' local {records relSets targetNameMap} : extendRelatedGlyphs 'smcp' _records
local pendingGlyphs : records.map : [record] => record.1 local pendingGlyphs : records.map : [record] => record.1
local forkedParams : Object.create para local forkedParams : Object.create para
set forkedParams.cap0 para.cap set forkedParams.cap0 para.cap
@ -133,7 +137,7 @@ glyph-block Autobuild-Transformed : begin
link-relations relSets link-relations relSets
define [createMedievalCombs defaultLow defaultHigh _records] : begin define [createMedievalCombs defaultLow defaultHigh _records] : begin
local { records relSets targetNameMap } : extendRelatedGlyphs _records 'medievalAbove' local { records relSets targetNameMap } : extendRelatedGlyphs 'medievalAbove' _records
local pendingGlyphs : records.map : [record] => record.1 local pendingGlyphs : records.map : [record] => record.1
local miniatureFont : Miniature local miniatureFont : Miniature
glyphs -- pendingGlyphs glyphs -- pendingGlyphs
@ -166,7 +170,7 @@ glyph-block Autobuild-Transformed : begin
link-relations relSets link-relations relSets
define [createMedievalBelowCombs _records] : begin define [createMedievalBelowCombs _records] : begin
local { records relSets targetNameMap } : extendRelatedGlyphs _records 'medievalBelow' local { records relSets targetNameMap } : extendRelatedGlyphs 'medievalBelow' _records
local pendingGlyphs : records.map : [record] => record.1 local pendingGlyphs : records.map : [record] => record.1
local miniatureFont : Miniature local miniatureFont : Miniature
glyphs -- pendingGlyphs glyphs -- pendingGlyphs
@ -189,22 +193,6 @@ glyph-block Autobuild-Transformed : begin
link-relations relSets link-relations relSets
define [createObliqueBlackboardBold _records] : begin
local { records relSets targetNameMap } : extendRelatedGlyphs _records 'obliqueBlackBoard'
local pendingGlyphs : records.map : [record] => record.1
local miniatureFont : Miniature
glyphs -- pendingGlyphs
slopeAngle -- para.derivedSlopeAngle
crowd -- 2
scale -- 1
mono -- true
sbscale -- 1
foreach {unicode glyphid} [items-of records] : if [not : query-glyph targetNameMap.(glyphid)]
create-glyph targetNameMap.(glyphid) unicode : glyph-proc
include [miniatureFont.queryByName glyphid] AS_BASE ALSO_METRICS
link-relations relSets
if [not recursive] : createSuperscripts : list if [not recursive] : createSuperscripts : list
list 0x2070 'zero.lnum' list 0x2070 'zero.lnum'
list 0x00B9 'one.lnum' list 0x00B9 'one.lnum'
@ -482,21 +470,14 @@ glyph-block Autobuild-Transformed : begin
list 0x1AC0 'turnw' list 0x1AC0 'turnw'
list 0x1DCA 'r' list 0x1DCA 'r'
if [not recursive] : createObliqueBlackboardBold : list
list 0x2145 'mathbb/D'
list 0x2146 'mathbb/d'
list 0x2147 'mathbb/e'
list 0x2148 'mathbb/i'
list 0x2149 'mathbb/j'
glyph-block Autobuild-Transformed-Mathematical : begin glyph-block Autobuild-Transformed-Mathematical : begin
glyph-block-import CommonShapes glyph-block-import CommonShapes
glyph-block-import Common-Derivatives glyph-block-import Common-Derivatives
glyph-block-import Recursive-Build : Fork Miniature glyph-block-import Recursive-Build : Fork Miniature
glyph-block-import Autobuild-Transformed-Shared : extendRelatedGlyphs link-relations glyph-block-import Autobuild-Transformed-Shared : extendRelatedGlyphs link-relations wrapName
define [createMathDerivedSeriesImpl groupName tfm _records] : begin define [createMathDerivedSeriesImpl groupName tfm _records] : begin
local { records relSets targetNameMap } : extendRelatedGlyphs _records groupName local { records relSets targetNameMap } : extendRelatedGlyphs groupName _records
local pendingGlyphs : records.map : [record] => record.1 local pendingGlyphs : records.map : [record] => record.1
local forked : Fork pendingGlyphs [para.reinit tfm] local forked : Fork pendingGlyphs [para.reinit tfm]
foreach {unicode glyphid} [items-of records] : if [not : query-glyph targetNameMap.(glyphid)] foreach {unicode glyphid} [items-of records] : if [not : query-glyph targetNameMap.(glyphid)]
@ -525,6 +506,7 @@ glyph-block Autobuild-Transformed-Mathematical : begin
define LowerLatin : Array.from 'abcdefghijklmnopqrstuvwxyz' define LowerLatin : Array.from 'abcdefghijklmnopqrstuvwxyz'
define UpperGreek : Array.from 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡϴΣΤΥΦΧΨΩ∇' define UpperGreek : Array.from 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡϴΣΤΥΦΧΨΩ∇'
define LowerGreek : Array.from 'αβγδεζηθικλμνξοπρςστυφχψω∂ϵϑϰϕϱϖ' # Some are missing though define LowerGreek : Array.from 'αβγδεζηθικλμνξοπρςστυφχψω∂ϵϑϰϕϱϖ' # Some are missing though
define ObliqueBlackboardBolds : Array.from '𝔻𝕕𝕖𝕚𝕛'
define [CreateMathDerivatives groupName tfm base letters overrides] : begin define [CreateMathDerivatives groupName tfm base letters overrides] : begin
if recursive : return nothing if recursive : return nothing
@ -545,10 +527,10 @@ glyph-block Autobuild-Transformed-Mathematical : begin
foreach j [range 0 letters.length] : begin foreach j [range 0 letters.length] : begin
local letter letters.(j) local letter letters.(j)
local source : glyphStore.queryNameOfUnicode : letter.codePointAt 0 local source : glyphStore.queryNameOfUnicode : letter.codePointAt 0
if (source && altGroupName) : set source "\(source)+\(altGroupName)" if (source && altGroupName) : set source : wrapName altGroupName source
local uDst : base + j local uDst : base + j
if [overrideMap.has letter] : set uDst [overrideMap.get letter] if [overrideMap.has letter] : set uDst [overrideMap.get letter]
if source : alias "\(source)+\(groupName)" uDst source if source : alias [wrapName groupName source] uDst source
define [CreateMathAliasable cond groupName altGroupName tfm base letters overrides] : begin define [CreateMathAliasable cond groupName altGroupName tfm base letters overrides] : begin
if cond if cond
@ -568,6 +550,7 @@ glyph-block Autobuild-Transformed-Mathematical : begin
CreateMathDerivatives 'mathit' tfItalic 0x1D6E2 UpperGreek CreateMathDerivatives 'mathit' tfItalic 0x1D6E2 UpperGreek
CreateMathDerivatives 'mathit' tfItalic 0x1D6FC LowerGreek CreateMathDerivatives 'mathit' tfItalic 0x1D6FC LowerGreek
# Math Bold Italic # Math Bold Italic
CreateMathDerivatives 'mathbi' tfBoldItalic 0x1D468 UpperLatin CreateMathDerivatives 'mathbi' tfBoldItalic 0x1D468 UpperLatin
CreateMathDerivatives 'mathbi' tfBoldItalic 0x1D482 LowerLatin CreateMathDerivatives 'mathbi' tfBoldItalic 0x1D482 LowerLatin
@ -599,6 +582,9 @@ glyph-block Autobuild-Transformed-Mathematical : begin
CreateMathAliasable doTypewriter 'mathtt' null tfTypeWriter 0x1D68A LowerLatin CreateMathAliasable doTypewriter 'mathtt' null tfTypeWriter 0x1D68A LowerLatin
CreateMathAliasable doTypewriter 'mathtt' null tfTypeWriter 0x1D7F6 Digits CreateMathAliasable doTypewriter 'mathtt' null tfTypeWriter 0x1D7F6 Digits
# Italic blackboard bold
CreateMathDerivatives 'mathit' tfItalic 0x2145 ObliqueBlackboardBolds
glyph-block Autobuild-Rhotic : begin glyph-block Autobuild-Rhotic : begin
glyph-block-import Marks : markFine glyph-block-import Marks : markFine
glyph-block-import CommonShapes glyph-block-import CommonShapes

View file

@ -12,34 +12,29 @@ glyph-module
glyph-block Common-Derivatives : begin glyph-block Common-Derivatives : begin
glyph-block-import CommonShapes : FlipAround glyph-block-import CommonShapes : FlipAround
define [ApplyCv g follow para name transform] : begin define [ApplyCv g follow para name] : begin
foreach { kPrime prime } para.variants.primes : foreach h [prime.variants.values] : begin foreach { kPrime prime } para.variants.primes : foreach h [prime.variants.values] : begin
local suffix : h.resolveFor para follow local suffix : h.resolveFor para follow
if (suffix && transform && transform.(suffix)) : set suffix transform.(suffix)
if suffix : begin if suffix : begin
local dstName : [fallback name follow] + '.' + suffix local dstName : [fallback name follow] + '.' + suffix
local dst : glyphStore.queryByName dstName local dst : glyphStore.queryByName dstName
if dst : g.dependsOn dst if dst : g.dependsOn dst
if (h.tag && h.rank) : [Cv h.tag h.rank].set g dstName if (h.tag && h.rank) : [Cv h.tag h.rank].set g dstName
define [select-variant] : params [name unicode [to-name name] transform [follow name]] : begin define [select-variant] : params [name unicode [shapeFrom name] [follow name]] : begin
if [not : glyph-is-needed name] : return nothing if [not : glyph-is-needed shapeFrom] : return nothing
local variant para.variantSelector.(follow) local variant para.variantSelector.(follow)
if [not variant] : begin if [not variant] : throw : new Error "Variant for \(name) is not assigned."
throw : new Error "Variant for \(name) is not assigned."
if (transform && transform.(variant)) : set variant transform.(variant) create-glyph name unicode : glyph-proc
include [refer-glyph (shapeFrom + '.' + variant)] AS_BASE ALSO_METRICS
ApplyCv currentGlyph follow para shapeFrom
set this.autoRefPriority [query-glyph (shapeFrom + '.' + variant)].autoRefPriority
create-glyph [fallback to-name name] unicode : glyph-proc define [orthographic-italic name unicode] : if para.isItalic
include [refer-glyph (name + '.' + variant)] AS_BASE ALSO_METRICS alias name unicode (name + '.italic')
ApplyCv currentGlyph follow para name transform alias name unicode (name + '.upright')
set this.autoRefPriority [query-glyph (name + '.' + variant)].autoRefPriority
define [italic-variant name unicode] : begin
create-glyph name unicode : composite-proc : if para.isItalic
refer-glyph (name + '.italic')
refer-glyph (name + '.upright')
define [glyph-is-needed name] : [not pickHash] || pickHash.(name) define [glyph-is-needed name] : [not pickHash] || pickHash.(name)
@ -108,7 +103,7 @@ glyph-block Common-Derivatives : begin
if [not newid] : throw : new Error "Target ID not specified" if [not newid] : throw : new Error "Target ID not specified"
return : VCombine newid unicode id id spacing return : VCombine newid unicode id id spacing
glyph-block-export select-variant italic-variant refer-glyph query-glyph with-related-glyphs glyph-block-export select-variant orthographic-italic refer-glyph query-glyph with-related-glyphs
glyph-block-export alias turned HDual HCombine VDual VCombine glyph-is-needed glyph-block-export alias turned HDual HCombine VDual VCombine glyph-is-needed
glyph-block Recursive-Build : begin glyph-block Recursive-Build : begin

View file

@ -162,17 +162,9 @@ glyph-block Letter-Cyrillic-I : begin
include : MarkSet.e include : MarkSet.e
include : CyrIShape XH include : CyrIShape XH
alias 'cyrl/i.italicToothed' null 'u.toothed' select-variant 'cyrl/i.italic' (shapeFrom -- 'u')
alias 'cyrl/i.italicMotionSerifed' null 'u.motionSerifed' alias 'cyrl/i.BGR' null 'cyrl/i.italic'
alias 'cyrl/i.italicMotionSerifedTailed' null 'u.motionSerifedTailed' orthographic-italic 'cyrl/i' 0x438
alias 'cyrl/i.italicTailed' null 'u.tailed'
select-variant 'cyrl/i' 0x438
alias 'cyrl/i.BGR.toothed' null 'u.toothed'
alias 'cyrl/i.BGR.motionSerifed' null 'u.motionSerifed'
alias 'cyrl/i.BGR.motionSerifedTailed' null 'u.motionSerifedTailed'
alias 'cyrl/i.BGR.tailed' null 'u.tailed'
select-variant 'cyrl/i.BGR'
with-related-glyphs 'cyrl/i.BGR' 'cyrl/ibreve.BGR' null : lambda [src sel] : glyph-proc with-related-glyphs 'cyrl/i.BGR' 'cyrl/ibreve.BGR' null : lambda [src sel] : glyph-proc
include [refer-glyph src] AS_BASE ALSO_METRICS include [refer-glyph src] AS_BASE ALSO_METRICS
@ -204,20 +196,19 @@ glyph-block Letter-Cyrillic-Tse : begin
include : MarkSet.e include : MarkSet.e
include : CyrTseShape XH include : CyrTseShape XH
create-glyph 'cyrl/tse.italicToothed' : glyph-proc create-glyph 'cyrl/tse.italic.toothed' : glyph-proc
include [refer-glyph "u.toothed"] AS_BASE include [refer-glyph "u.toothed"] AS_BASE
eject-contour 'serifRB' eject-contour 'serifRB'
include : CyrDescender RightSB (shift -- 0.05) include : CyrDescender RightSB (shift -- 0.05)
create-aliased-glyph 'cyrl/tse.BGR.toothed'
create-glyph 'cyrl/tse.italicMotionSerifed' : glyph-proc create-glyph 'cyrl/tse.italic.motionSerifed' : glyph-proc
include [refer-glyph "u.motionSerifed"] AS_BASE include [refer-glyph "u.motionSerifed"] AS_BASE
eject-contour 'serifRB' eject-contour 'serifRB'
include : CyrDescender RightSB (shift -- 0.05) include : CyrDescender RightSB (shift -- 0.05)
create-aliased-glyph 'cyrl/tse.BGR.motionSerifed'
select-variant 'cyrl/tse' 0x446 select-variant 'cyrl/tse.italic'
select-variant 'cyrl/tse.BGR' alias 'cyrl/tse.BGR' null 'cyrl/tse.italic'
orthographic-italic 'cyrl/tse' 0x446
glyph-block Letter-Cyrillic-Dzhe : begin glyph-block Letter-Cyrillic-Dzhe : begin
glyph-block-import CommonShapes glyph-block-import CommonShapes
@ -241,23 +232,24 @@ glyph-block Letter-Cyrillic-Dzhe : begin
include : MarkSet.p include : MarkSet.p
include : CyrDzheShape XH include : CyrDzheShape XH
create-glyph 'cyrl/dzhe.italicToothed' : glyph-proc create-glyph 'cyrl/dzhe.italic.toothed' : glyph-proc
include [refer-glyph 'u.toothed'] AS_BASE ALSO_METRICS include [refer-glyph 'u.toothed'] AS_BASE ALSO_METRICS
include [refer-glyph 'descenderBarBelow'] include [refer-glyph 'descenderBarBelow']
create-glyph 'cyrl/dzhe.italicTailed' : glyph-proc create-glyph 'cyrl/dzhe.italic.tailed' : glyph-proc
include [refer-glyph 'u.tailed'] AS_BASE ALSO_METRICS include [refer-glyph 'u.tailed'] AS_BASE ALSO_METRICS
include [refer-glyph 'descenderBarBelow'] include [refer-glyph 'descenderBarBelow']
create-glyph 'cyrl/dzhe.italicMotionSerifed' : glyph-proc create-glyph 'cyrl/dzhe.italic.motionSerifed' : glyph-proc
include [refer-glyph 'u.motionSerifed'] AS_BASE ALSO_METRICS include [refer-glyph 'u.motionSerifed'] AS_BASE ALSO_METRICS
include [refer-glyph 'descenderBarBelow'] include [refer-glyph 'descenderBarBelow']
create-glyph 'cyrl/dzhe.italicMotionSerifedTailed' : glyph-proc create-glyph 'cyrl/dzhe.italic.motionSerifedTailed' : glyph-proc
include [refer-glyph 'u.motionSerifedTailed'] AS_BASE ALSO_METRICS include [refer-glyph 'u.motionSerifedTailed'] AS_BASE ALSO_METRICS
include [refer-glyph 'descenderBarBelow'] include [refer-glyph 'descenderBarBelow']
select-variant 'cyrl/dzhe' 0x45F select-variant 'cyrl/dzhe.italic'
orthographic-italic 'cyrl/dzhe' 0x45F
glyph-block Letter-Cyrillic-De : begin glyph-block Letter-Cyrillic-De : begin
@ -311,7 +303,7 @@ glyph-block Letter-Cyrillic-De : begin
quadcontrols 0 0.8 quadcontrols 0 0.8
g4 (SB + Stroke * 1.1) CAP g4 (SB + Stroke * 1.1) CAP
italic-variant 'cyrl/de' 0x434 orthographic-italic 'cyrl/de' 0x434
alias 'cyrl/de.BGR' null 'g.singleStorey' alias 'cyrl/de.BGR' null 'g.singleStorey'
@ -592,8 +584,8 @@ glyph-block Letter-Cyrillic-Sha : begin
include : df.markSet.e include : df.markSet.e
include : CyrShaShape XH df include : CyrShaShape XH df
turned 'cyrl/sha.italicToothed' null 'm.normal' [DivFrame para.diversityM 3].middle (XH / 2) turned 'cyrl/sha.italic.toothed' null 'm.normal' [DivFrame para.diversityM 3].middle (XH / 2)
create-glyph 'cyrl/sha.italicTailed' : glyph-proc create-glyph 'cyrl/sha.italic.tailed' : glyph-proc
local df : DivFrame para.diversityM 3 local df : DivFrame para.diversityM 3
include [refer-glyph 'm.normal'] AS_BASE include [refer-glyph 'm.normal'] AS_BASE
eject-contour 'barL' eject-contour 'barL'
@ -601,8 +593,8 @@ glyph-block Letter-Cyrillic-Sha : begin
include : FlipAround df.middle (XH / 2) include : FlipAround df.middle (XH / 2)
include : RightwardTailedBar df.rightSB 0 XH (sw -- df.mvs) include : RightwardTailedBar df.rightSB 0 XH (sw -- df.mvs)
turned 'cyrl/sha.italicMotionSerifed' null 'm.motionSerifed' [DivFrame para.diversityM 3].middle (XH / 2) turned 'cyrl/sha.italic.motionSerifed' null 'm.motionSerifed' [DivFrame para.diversityM 3].middle (XH / 2)
create-glyph 'cyrl/sha.italicMotionSerifedTailed' : glyph-proc create-glyph 'cyrl/sha.italic.motionSerifedTailed' : glyph-proc
local df : DivFrame para.diversityM 3 local df : DivFrame para.diversityM 3
include [refer-glyph 'm.motionSerifed'] AS_BASE include [refer-glyph 'm.motionSerifed'] AS_BASE
eject-contour 'barL' eject-contour 'barL'
@ -610,13 +602,9 @@ glyph-block Letter-Cyrillic-Sha : begin
include : FlipAround df.middle (XH / 2) include : FlipAround df.middle (XH / 2)
include : RightwardTailedBar df.rightSB 0 XH (sw -- df.mvs) include : RightwardTailedBar df.rightSB 0 XH (sw -- df.mvs)
select-variant 'cyrl/sha' 0x448 select-variant 'cyrl/sha.italic'
alias 'cyrl/sha.BGR' null 'cyrl/sha.italic'
alias 'cyrl/sha.BGR.toothed' null 'cyrl/sha.italicToothed' orthographic-italic 'cyrl/sha' 0x448
alias 'cyrl/sha.BGR.tailed' null 'cyrl/sha.italicTailed'
alias 'cyrl/sha.BGR.motionSerifed' null 'cyrl/sha.italicMotionSerifed'
alias 'cyrl/sha.BGR.motionSerifedTailed' null 'cyrl/sha.italicMotionSerifedTailed'
select-variant 'cyrl/sha.BGR'
define [CyrShchaShape top df] : glyph-proc define [CyrShchaShape top df] : glyph-proc
include : CyrShaShape top df include : CyrShaShape top df
@ -638,19 +626,19 @@ glyph-block Letter-Cyrillic-Sha : begin
create-glyph 'cyrl/shcha.italic' : glyph-proc create-glyph 'cyrl/shcha.italic' : glyph-proc
local df : DivFrame para.diversityM 3 local df : DivFrame para.diversityM 3
set-width df.width set-width df.width
include [refer-glyph 'cyrl/sha.italicToothed'] AS_BASE include [refer-glyph 'cyrl/sha.italic.toothed'] AS_BASE
include : CyrDescender df.rightSB (shift -- 0.05) include : CyrDescender df.rightSB (shift -- 0.05)
italic-variant 'cyrl/shcha' 0x449 orthographic-italic 'cyrl/shcha' 0x449
alias 'cyrl/shcha.BGR' null 'cyrl/shcha.italic' alias 'cyrl/shcha.BGR' null 'cyrl/shcha.italic'
create-glyph 'cyrl/te.SRB' : glyph-proc create-glyph 'cyrl/te.SRB' : glyph-proc
local df : DivFrame para.diversityM 3 local df : DivFrame para.diversityM 3
set-width df.width set-width df.width
include [refer-glyph 'cyrl/sha.italicToothed'] AS_BASE include [refer-glyph 'cyrl/sha.italic.toothed'] AS_BASE
include : refer-glyph "macronAbove" include : refer-glyph "macronAbove"
select-variant 'cyrl/te' 0x442 orthographic-italic 'cyrl/te' 0x442
glyph-block Letter-Cyrillic-Che : begin glyph-block Letter-Cyrillic-Che : begin
glyph-block-import CommonShapes glyph-block-import CommonShapes

View file

@ -92,7 +92,7 @@ glyph-block Letter-Greek-Upper-Gamma: begin
include [refer-glyph 'dotlessi'] AS_BASE include [refer-glyph 'dotlessi'] AS_BASE
include : refer-glyph "macronAbove" include : refer-glyph "macronAbove"
italic-variant 'cyrl/ghe' 0x433 orthographic-italic 'cyrl/ghe' 0x433
define [CyrGeShape top] : glyph-proc define [CyrGeShape top] : glyph-proc
include : GammaShape top include : GammaShape top
@ -119,8 +119,8 @@ glyph-block Letter-Greek-Upper-Gamma: begin
include [refer-glyph 'cyrl/ghe.italic'] AS_BASE include [refer-glyph 'cyrl/ghe.italic'] AS_BASE
include : FlatSlashShape Middle (XH / 2) (OverlayStroke / 2) (-0.2) 0.75 include : FlatSlashShape Middle (XH / 2) (OverlayStroke / 2) (-0.2) 0.75
italic-variant 'cyrl/ge' 0x491 orthographic-italic 'cyrl/ge' 0x491
italic-variant 'cyrl/ghayn' 0x493 orthographic-italic 'cyrl/ghayn' 0x493
create-glyph 'cyrl/GheDescender' 0x4F6 : composite-proc create-glyph 'cyrl/GheDescender' 0x4F6 : composite-proc
refer-glyph 'cyrl/Ghe' refer-glyph 'cyrl/Ghe'
@ -132,7 +132,7 @@ glyph-block Letter-Greek-Upper-Gamma: begin
CyrDescender (GammaBarLeft + Stroke * HVContrast) (sideJut -- MidJutCenter - HalfStroke * HVContrast) CyrDescender (GammaBarLeft + Stroke * HVContrast) (sideJut -- MidJutCenter - HalfStroke * HVContrast)
MarkSet.p MarkSet.p
italic-variant 'cyrl/gheDescender' 0x4F7 orthographic-italic 'cyrl/gheDescender' 0x4F7
glyph-block Letter-Greek-Lower-Gamma : begin glyph-block Letter-Greek-Lower-Gamma : begin
@ -511,12 +511,12 @@ glyph-block Letter-Greek-Pi : begin
include : MarkSet.e include : MarkSet.e
include : PiShape [DivFrame 1] XH 0 (shrinkRate -- 0.05) (endShrink -- 0.05) include : PiShape [DivFrame 1] XH 0 (shrinkRate -- 0.05) (endShrink -- 0.05)
create-glyph 'cyrl/pe.SRB': glyph-proc with-related-glyphs 'u' 'cyrl/pe.SRB' null : lambda [src sel] : glyph-proc
include [refer-glyph 'u'] AS_BASE include [refer-glyph src] AS_BASE
include : refer-glyph "macronAbove" include : refer-glyph "macronAbove"
alias 'cyrl/Pe' 0x41F 'grek/Pi' alias 'cyrl/Pe' 0x41F 'grek/Pi'
select-variant 'cyrl/pe' 0x43f orthographic-italic 'cyrl/pe' 0x43f
create-glyph 'grek/pi' 0x3C0 : glyph-proc create-glyph 'grek/pi' 0x3C0 : glyph-proc
include : MarkSet.e include : MarkSet.e

View file

@ -2580,7 +2580,7 @@ glyph-block Letter-Latin-Upper-B : begin
include : MarkSet.e include : MarkSet.e
include : BShape XH include : BShape XH
italic-variant 'cyrl/ve' 0x432 orthographic-italic 'cyrl/ve' 0x432
alias 'smcpB' 0x299 'cyrl/ve.upright' alias 'smcpB' 0x299 'cyrl/ve.upright'
alias 'closeturnepsilon' 0x25E 'cyrl/ve.italic' alias 'closeturnepsilon' 0x25E 'cyrl/ve.italic'
@ -4554,14 +4554,7 @@ glyph-block Letter-Latin-Lower-N : begin
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0 set-base-anchor 'trailing' (RightSB - markHalfStroke) 0
select-variant 'n' 'n' select-variant 'n' 'n'
alias 'cyrl/pe.italicStraight' null 'n.straight' select-variant 'cyrl/pe.italic' (shapeFrom -- 'n')
alias 'cyrl/pe.italicTailed' null 'n.tailed'
alias 'cyrl/pe.italicMotionSerifedStraight' null 'n.motionSerifedStraight'
alias 'cyrl/pe.italicMotionSerifedTailed' null 'n.motionSerifedTailed'
alias 'cyrl/pe.italicEarlessCornerStraight' null 'n.earlessCornerStraight'
alias 'cyrl/pe.italicEarlessCornerTailed' null 'n.earlessCornerTailed'
alias 'cyrl/pe.italicEarlessRoundedStraight' null 'n.earlessRoundedStraight'
alias 'cyrl/pe.italicEarlessRoundedTailed' null 'n.earlessRoundedTailed'
alias 'cyrl/pe.BGR' null 'n' alias 'cyrl/pe.BGR' null 'n'
with-related-glyphs 'n' 'nApostrophe' 0x149 : lambda [src srl] : glyph-proc with-related-glyphs 'n' 'nApostrophe' 0x149 : lambda [src srl] : glyph-proc
@ -5310,18 +5303,13 @@ glyph-block Letter-Latin-Lower-M : begin
select-variant 'm' 'm' select-variant 'm' 'm'
alias 'cyrl/te.italicNormal' null 'm.normal' select-variant 'cyrl/te.italic' (shapeFrom -- 'm')
alias 'cyrl/te.italicTailed' null 'm.tailed' alias 'cyrl/te.BGR' null 'cyrl/te.italic'
alias 'cyrl/te.italicMotionSerifed' null 'm.motionSerifed'
create-glyph 'cyrl/tedescender.italic' : composite-proc [MarkSet.e] create-glyph 'cyrl/tedescender.italic' : composite-proc [MarkSet.e]
refer-glyph 'm.normal' refer-glyph 'm.normal'
CyrDescender (Width * para.diversityM - SB) CyrDescender (Width * para.diversityM - SB)
alias 'cyrl/te.BGR.normal' null 'm.normal'
alias 'cyrl/te.BGR.tailed' null 'm.tailed'
alias 'cyrl/te.BGR.motionSerifed' null 'm.motionSerifed'
select-variant 'cyrl/te.BGR'
create-glyph 'mltail' 0x271 : glyph-proc create-glyph 'mltail' 0x271 : glyph-proc
local df : dfM local df : dfM
include : df.markSet.p include : df.markSet.p
@ -5813,8 +5801,8 @@ glyph-block Letter-Latin-Lower-F : begin
alias 'esh' 0x283 'longs.italic' alias 'esh' 0x283 'longs.italic'
italic-variant 'longs' 0x17F orthographic-italic 'longs' 0x17F
italic-variant 'longsbar' 0x1E9D orthographic-italic 'longsbar' 0x1E9D
create-glyph 'eshcurlytail' 0x286 : glyph-proc create-glyph 'eshcurlytail' 0x286 : glyph-proc
include : MarkSet.if include : MarkSet.if
@ -6034,7 +6022,7 @@ glyph-block Letter-Latin-Lower-F : begin
include : HBarTop hbarleft [mix SB barr 0.65] fbar include : HBarTop hbarleft [mix SB barr 0.65] fbar
if SLAB : include : tagged 'serifRB' : RightwardBottomSerif barr 0 SideJut if SLAB : include : tagged 'serifRB' : RightwardBottomSerif barr 0 SideJut
italic-variant 'f_l' 0xFB02 orthographic-italic 'f_l' 0xFB02
glyph-block Letter-Latin-Upper-E : begin glyph-block Letter-Latin-Upper-E : begin
@ -6226,7 +6214,7 @@ glyph-block Letter-Latin-Upper-T : begin
include : MarkSet.p include : MarkSet.p
include : CyrDescender (Middle + HalfStroke * HVContrast) (sideJut -- MidJutCenter - HalfStroke * HVContrast) include : CyrDescender (Middle + HalfStroke * HVContrast) (sideJut -- MidJutCenter - HalfStroke * HVContrast)
italic-variant 'cyrl/tedescender' 0x4AD orthographic-italic 'cyrl/tedescender' 0x4AD
create-glyph 'grek/tau' 0x3C4 : glyph-proc create-glyph 'grek/tau' 0x3C4 : glyph-proc
include : MarkSet.e include : MarkSet.e

View file

@ -779,7 +779,7 @@ glyph-block Symbol-Math-Relation : begin
create-glyph 'equalParallel' 0x22D5 : composite-proc create-glyph 'equalParallel' 0x22D5 : composite-proc
refer-glyph 'equal' refer-glyph 'equal'
refer-glyph 'parallel.naturalSlope' refer-glyph 'parallel.upright'
create-glyph 'oneDotApproxEq' 0x2250 : glyph-proc create-glyph 'oneDotApproxEq' 0x2250 : glyph-proc
include : refer-glyph 'equal' include : refer-glyph 'equal'

View file

@ -444,8 +444,9 @@ glyph-block Symbol-Punctuation-Bar : begin
set-base-anchor 'below' Middle ParenBot set-base-anchor 'below' Middle ParenBot
include : VBar Middle ParenBot ParenTop include : VBar Middle ParenBot ParenTop
create-glyph 'bar.naturalSlope' : BarShape create-glyph 'bar.upright' : BarShape
create-glyph 'bar.forceUpright' : glyph-proc create-glyph 'bar.italic.naturalSlope' : BarShape
create-glyph 'bar.italic.forceUpright' : glyph-proc
include : ForceUpright include : ForceUpright
include : BarShape include : BarShape
@ -456,8 +457,9 @@ glyph-block Symbol-Punctuation-Bar : begin
include : VBar (Middle - Width * 0.175) ParenBot ParenTop sw include : VBar (Middle - Width * 0.175) ParenBot ParenTop sw
include : VBar (Middle + Width * 0.175) ParenBot ParenTop sw include : VBar (Middle + Width * 0.175) ParenBot ParenTop sw
create-glyph 'parallel.naturalSlope' : DoubleBarShape create-glyph 'parallel.upright' : DoubleBarShape
create-glyph 'parallel.forceUpright' : glyph-proc create-glyph 'parallel.italic.naturalSlope' : DoubleBarShape
create-glyph 'parallel.italic.forceUpright' : glyph-proc
include : ForceUpright include : ForceUpright
include : DoubleBarShape include : DoubleBarShape
@ -466,22 +468,26 @@ glyph-block Symbol-Punctuation-Bar : begin
include : VBar Middle (SymbolMid + breakDist / 2) ParenTop include : VBar Middle (SymbolMid + breakDist / 2) ParenTop
include : VBar Middle ParenBot (SymbolMid - breakDist / 2) include : VBar Middle ParenBot (SymbolMid - breakDist / 2)
create-glyph 'brokenBar.naturalSlope' : BrokenBarShape create-glyph 'brokenBar.upright' : BrokenBarShape
create-glyph 'brokenBar.forceUpright' : glyph-proc create-glyph 'brokenBar.italic.naturalSlope' : BrokenBarShape
create-glyph 'brokenBar.italic.forceUpright' : glyph-proc
include : ForceUpright include : ForceUpright
include : BrokenBarShape include : BrokenBarShape
create-glyph 'palatoalveolarclick' 0x1C2 : glyph-proc create-glyph 'palatoalveolarclick' 0x1C2 : glyph-proc
include [refer-glyph 'bar.naturalSlope'] AS_BASE include [refer-glyph 'bar.upright'] AS_BASE
include : HBarBottom SB RightSB (SymbolMid + XH * 0.1) OperatorStroke include : HBarBottom SB RightSB (SymbolMid + XH * 0.1) OperatorStroke
include : HBarTop SB RightSB (SymbolMid - XH * 0.1) OperatorStroke include : HBarTop SB RightSB (SymbolMid - XH * 0.1) OperatorStroke
select-variant 'bar' '|' select-variant 'bar.italic'
select-variant 'parallel' 0x2225 (follow -- 'bar') orthographic-italic 'bar' '|'
select-variant 'brokenBar' 0xA6 (follow -- 'bar') select-variant 'parallel.italic' (follow -- 'bar.italic')
alias 'dentalclick' 0x1C0 'bar.naturalSlope' orthographic-italic 'parallel' 0x2225
select-variant 'brokenBar.italic' (follow -- 'bar.italic')
orthographic-italic 'brokenBar' 0xA6
alias 'dentalclick' 0x1C0 'bar.upright'
alias 'doubleBar' 0x2016 'parallel' alias 'doubleBar' 0x2016 'parallel'
alias 'alveolarlateralclick' 0x1C1 'parallel.naturalSlope' alias 'alveolarlateralclick' 0x1C1 'parallel.upright'
glyph-block Symbol-Punctuation-Ampersand : begin glyph-block Symbol-Punctuation-Ampersand : begin
@ -899,9 +905,7 @@ glyph-block Symbol-Punctuation-Asterisk : begin
Italify Italify
select-variant 'asterisk' '*' select-variant 'asterisk' '*'
select-variant 'asterisk' nothing select-variant 'asterisk/lowered' (shapeFrom -- 'asterisk')
to-name -- 'asterisk.dfltlow'
transform -- { .high 'low' .hexhigh 'hexlow' .turnPentaHigh 'turnPentaLow' }
glyph-block Symbol-Punctuation-Slashes-And-Number-Sign : begin glyph-block Symbol-Punctuation-Slashes-And-Number-Sign : begin

View file

@ -106,7 +106,7 @@ define-macro glyph-block-import : syntax-rules
`[glyph-block-import @_blockName] : begin `[glyph-block-import @_blockName] : begin
define allExports : object define allExports : object
Common-Derivatives `[select-variant italic-variant refer-glyph query-glyph alias turned Common-Derivatives `[select-variant orthographic-italic refer-glyph query-glyph alias turned
HDual HCombine VDual VCombine with-related-glyphs glyph-is-needed] HDual HCombine VDual VCombine with-related-glyphs glyph-is-needed]
CommonShapes `[Rect SquareAt Ring RingAt DotAt RingStroke RingStrokeAt DotStrokeAt CommonShapes `[Rect SquareAt Ring RingAt DotAt RingStroke RingStrokeAt DotStrokeAt

View file

@ -86,7 +86,7 @@ define [buildLigationsImpl sink para featureName mappedFeature rankedLookups] :
* 'asciiCaret' * 'asciiCaret'
* 'asciiTilde' * 'asciiTilde'
define [asterisk_center] ({'asterisk'} ~> {'asterisk.dfltlow'}) define [asterisk_center] ({'asterisk'} ~> {'asterisk/lowered'})
define [colon_center] ({'colon' 'colon.mid'} ~> {'colon.mid' 'colon.mid'}) define [colon_center] ({'colon' 'colon.mid'} ~> {'colon.mid' 'colon.mid'})
define [caret_center] ({'asciiCaret'} ~> {'asciiCaret.low'}) define [caret_center] ({'asciiCaret'} ~> {'asciiCaret.low'})
define [tilde_center] ({'asciiTilde'} ~> {'asciiTilde.low'}) define [tilde_center] ({'asciiTilde'} ~> {'asciiTilde.low'})
@ -156,9 +156,9 @@ define [buildLigationsImpl sink para featureName mappedFeature rankedLookups] :
CreateLigationLookup : keep-if 'brst' : list CreateLigationLookup : keep-if 'brst' : list
chain-rule # (* chain-rule # (*
{'parenLeft'} ~> look-around {'parenLeft'} ~> look-around
{'asterisk'} ~> {'asterisk.dfltlow'} {'asterisk'} ~> {'asterisk/lowered'}
chain-rule # *) chain-rule # *)
{'asterisk'} ~> {'asterisk.dfltlow'} {'asterisk'} ~> {'asterisk/lowered'}
{'parenRight'} ~> look-around {'parenRight'} ~> look-around
do "Bracket-colon" do "Bracket-colon"

View file

@ -119,8 +119,6 @@ class PrimeVariant {
this.description = cfg.description; this.description = cfg.description;
this.rank = cfg.rank; this.rank = cfg.rank;
this.selector = cfg.selector; this.selector = cfg.selector;
this.selectorUpright = cfg.selectorUpright;
this.selectorItalic = cfg.selectorItalic;
} }
resolveFor(para, gn) { resolveFor(para, gn) {
let vs = {}; let vs = {};
@ -129,11 +127,6 @@ class PrimeVariant {
} }
resolve(para, vs) { resolve(para, vs) {
Object.assign(vs, this.selector); Object.assign(vs, this.selector);
if (para.isItalic) {
Object.assign(vs, this.selectorItalic);
} else {
Object.assign(vs, this.selectorUpright);
}
} }
} }

View file

@ -581,160 +581,121 @@ tag = 'cv21'
rank = 1 rank = 1
description = '`m` with normal middle leg, touching the baseline' description = '`m` with normal middle leg, touching the baseline'
selector.m = 'normal' selector.m = 'normal'
selectorUpright."cyrl/te" = "upright" selector."cyrl/te.italic" = "normal"
selectorItalic."cyrl/te" = "italicNormal"
selector."cyrl/te.BGR" = "normal"
[prime.m.variants.shortleg] [prime.m.variants.shortleg]
rank = 2 rank = 2
description = '`m` with shorter middle leg, like Ubuntu Mono' description = '`m` with shorter middle leg, like Ubuntu Mono'
selector.m = 'shortleg' selector.m = 'shortleg'
selectorUpright."cyrl/te" = "upright" selector."cyrl/te.italic" = "normal"
selectorItalic."cyrl/te" = "italicNormal"
selector."cyrl/te.BGR" = "normal"
[prime.m.variants.tailed] [prime.m.variants.tailed]
rank = 3 rank = 3
description = '`m` with normal middle leg, touching the baseline, and a curly tail' description = '`m` with normal middle leg, touching the baseline, and a curly tail'
selector.m = 'tailed' selector.m = 'tailed'
selectorUpright."cyrl/te" = "upright" selector."cyrl/te.italic" = "tailed"
selectorItalic."cyrl/te" = "italicTailed"
selector."cyrl/te.BGR" = "tailed"
[prime.m.variants.shortleg-tailed] [prime.m.variants.shortleg-tailed]
rank = 4 rank = 4
description = '`m` with shorter middle leg, like Ubuntu Mono, and a curly tail' description = '`m` with shorter middle leg, like Ubuntu Mono, and a curly tail'
selector.m = 'shortlegTailed' selector.m = 'shortlegTailed'
selectorUpright."cyrl/te" = "upright" selector."cyrl/te.italic" = "tailed"
selectorItalic."cyrl/te" = "italicTailed"
selector."cyrl/te.BGR" = "tailed"
[prime.m.variants.earless-corner-double-arch] [prime.m.variants.earless-corner-double-arch]
rank = 5 rank = 5
description = "Earless (corner top-left) `m` with normal middle leg touching baseline" description = "Earless (corner top-left) `m` with normal middle leg touching baseline"
selector.m = 'earlessCornerDoubleArch' selector.m = 'earlessCornerDoubleArch'
selectorUpright."cyrl/te" = "upright" selector."cyrl/te.italic" = "normal"
selectorItalic."cyrl/te" = "italicNormal"
selector."cyrl/te.BGR" = "normal"
[prime.m.variants.earless-corner-double-arch-shortleg] [prime.m.variants.earless-corner-double-arch-shortleg]
rank = 6 rank = 6
description = "Earless (corner top-left) `m` with a shorter middle leg like Ubuntu Mono" description = "Earless (corner top-left) `m` with a shorter middle leg like Ubuntu Mono"
selector.m = 'earlessCornerDoubleArchShortleg' selector.m = 'earlessCornerDoubleArchShortleg'
selectorUpright."cyrl/te" = "upright" selector."cyrl/te.italic" = "normal"
selectorItalic."cyrl/te" = "italicNormal"
selector."cyrl/te.BGR" = "normal"
[prime.m.variants.earless-corner-double-arch-tailed] [prime.m.variants.earless-corner-double-arch-tailed]
rank = 7 rank = 7
description = "Earless (corner top-left) `m` with normal middle leg touching baseline, and a curly tail" description = "Earless (corner top-left) `m` with normal middle leg touching baseline, and a curly tail"
selector.m = 'earlessCornerDoubleArchTailed' selector.m = 'earlessCornerDoubleArchTailed'
selectorUpright."cyrl/te" = "upright" selector."cyrl/te.italic" = "normal"
selectorItalic."cyrl/te" = "italicNormal"
selector."cyrl/te.BGR" = "normal"
[prime.m.variants.earless-corner-double-arch-shortleg-tailed] [prime.m.variants.earless-corner-double-arch-shortleg-tailed]
rank = 8 rank = 8
description = "Earless (corner top-left) `m` with a shorter middle leg like Ubuntu Mono, and a curly tail" description = "Earless (corner top-left) `m` with a shorter middle leg like Ubuntu Mono, and a curly tail"
selector.m = 'earlessCornerDoubleArchShortlegTailed' selector.m = 'earlessCornerDoubleArchShortlegTailed'
selectorUpright."cyrl/te" = "upright" selector."cyrl/te.italic" = "normal"
selectorItalic."cyrl/te" = "italicNormal"
selector."cyrl/te.BGR" = "normal"
[prime.m.variants.earless-rounded-double-arch] [prime.m.variants.earless-rounded-double-arch]
rank = 9 rank = 9
description = "Earless (rounded top-left) `m` with normal middle leg touching baseline" description = "Earless (rounded top-left) `m` with normal middle leg touching baseline"
selector.m = 'earlessRoundedDoubleArch' selector.m = 'earlessRoundedDoubleArch'
selectorUpright."cyrl/te" = "upright" selector."cyrl/te.italic" = "normal"
selectorItalic."cyrl/te" = "italicNormal"
selector."cyrl/te.BGR" = "normal"
[prime.m.variants.earless-rounded-double-arch-shortleg] [prime.m.variants.earless-rounded-double-arch-shortleg]
rank = 10 rank = 10
description = "Earless (rounded top-left) `m` with a shorter middle leg like Ubuntu Mono" description = "Earless (rounded top-left) `m` with a shorter middle leg like Ubuntu Mono"
selector.m = 'earlessRoundedDoubleArchShortleg' selector.m = 'earlessRoundedDoubleArchShortleg'
selectorUpright."cyrl/te" = "upright" selector."cyrl/te.italic" = "normal"
selectorItalic."cyrl/te" = "italicNormal"
[prime.m.variants.earless-rounded-double-arch-tailed] [prime.m.variants.earless-rounded-double-arch-tailed]
rank = 11 rank = 11
description = "Earless (rounded top-left) `m` with normal middle leg touching baseline, and a curly tail" description = "Earless (rounded top-left) `m` with normal middle leg touching baseline, and a curly tail"
selector.m = 'earlessRoundedDoubleArchTailed' selector.m = 'earlessRoundedDoubleArchTailed'
selectorUpright."cyrl/te" = "upright" selector."cyrl/te.italic" = "normal"
selectorItalic."cyrl/te" = "italicNormal"
selector."cyrl/te.BGR" = "normal"
[prime.m.variants.earless-rounded-double-arch-shortleg-tailed] [prime.m.variants.earless-rounded-double-arch-shortleg-tailed]
rank = 12 rank = 12
description = "Earless (rounded top-left) `m` with a shorter middle leg like Ubuntu Mono, and a curly tail" description = "Earless (rounded top-left) `m` with a shorter middle leg like Ubuntu Mono, and a curly tail"
selector.m = 'earlessRoundedDoubleArchShortlegTailed' selector.m = 'earlessRoundedDoubleArchShortlegTailed'
selectorUpright."cyrl/te" = "upright" selector."cyrl/te.italic" = "normal"
selectorItalic."cyrl/te" = "italicNormal"
selector."cyrl/te.BGR" = "normal"
[prime.m.variants.earless-single-arch] [prime.m.variants.earless-single-arch]
rank = 13 rank = 13
description = "Earless (single-arch) `m` with normal middle leg touching baseline" description = "Earless (single-arch) `m` with normal middle leg touching baseline"
selector.m = 'earlessSingleArch' selector.m = 'earlessSingleArch'
selectorUpright."cyrl/te" = "upright" selector."cyrl/te.italic" = "normal"
selectorItalic."cyrl/te" = "italicNormal"
selector."cyrl/te.BGR" = "normal"
[prime.m.variants.earless-single-arch-shortleg] [prime.m.variants.earless-single-arch-shortleg]
rank = 14 rank = 14
description = "Earless (single-arch) `m` with a shorter middle leg like Ubuntu Mono" description = "Earless (single-arch) `m` with a shorter middle leg like Ubuntu Mono"
selector.m = 'earlessSingleArchShortleg' selector.m = 'earlessSingleArchShortleg'
selectorUpright."cyrl/te" = "upright" selector."cyrl/te.italic" = "normal"
selectorItalic."cyrl/te" = "italicNormal"
selector."cyrl/te.BGR" = "normal"
[prime.m.variants.earless-single-arch-tailed] [prime.m.variants.earless-single-arch-tailed]
rank = 15 rank = 15
description = "Earless (single-arch) `m` with normal middle leg touching baseline, and a curly tail" description = "Earless (single-arch) `m` with normal middle leg touching baseline, and a curly tail"
selector.m = 'earlessSingleArchTailed' selector.m = 'earlessSingleArchTailed'
selectorUpright."cyrl/te" = "upright" selector."cyrl/te.italic" = "normal"
selectorItalic."cyrl/te" = "italicNormal"
selector."cyrl/te.BGR" = "normal"
[prime.m.variants.earless-single-arch-shortleg-tailed] [prime.m.variants.earless-single-arch-shortleg-tailed]
rank = 16 rank = 16
description = "Earless (single-arch) `m` with a shorter middle leg like Ubuntu Mono, and a curly tail" description = "Earless (single-arch) `m` with a shorter middle leg like Ubuntu Mono, and a curly tail"
selector.m = 'earlessSingleArchShortlegTailed' selector.m = 'earlessSingleArchShortlegTailed'
selectorUpright."cyrl/te" = "upright" selector."cyrl/te.italic" = "normal"
selectorItalic."cyrl/te" = "italicNormal"
selector."cyrl/te.BGR" = "normal"
[prime.m.variants.motion-serifed] [prime.m.variants.motion-serifed]
rank = 17 rank = 17
description = "`m` with motion serifs, normal middle leg touching baseline" description = "`m` with motion serifs, normal middle leg touching baseline"
selector.m = 'motionSerifed' selector.m = 'motionSerifed'
selectorUpright."cyrl/te" = "upright" selector."cyrl/te.italic" = "motionSerifed"
selectorItalic."cyrl/te" = "italicMotionSerifed"
selector."cyrl/te.BGR" = "motionSerifed"
[prime.m.variants.motion-serifed-shortleg] [prime.m.variants.motion-serifed-shortleg]
rank = 18 rank = 18
description = "`m` with motion serifs, a shorter middle leg like Ubuntu Mono" description = "`m` with motion serifs, a shorter middle leg like Ubuntu Mono"
selector.m = 'motionSerifedShortleg' selector.m = 'motionSerifedShortleg'
selectorUpright."cyrl/te" = "upright" selector."cyrl/te.italic" = "motionSerifed"
selectorItalic."cyrl/te" = "italicMotionSerifed"
selector."cyrl/te.BGR" = "motionSerifed"
[prime.m.variants.motion-serifed-tailed] [prime.m.variants.motion-serifed-tailed]
rank = 19 rank = 19
description = "`m` with motion serifs, normal middle leg touching baseline, and a curly tail" description = "`m` with motion serifs, normal middle leg touching baseline, and a curly tail"
selector.m = 'motionSerifedTailed' selector.m = 'motionSerifedTailed'
selectorUpright."cyrl/te" = "upright" selector."cyrl/te.italic" = "motionSerifed"
selectorItalic."cyrl/te" = "italicMotionSerifed"
selector."cyrl/te.BGR" = "motionSerifed"
[prime.m.variants.motion-serifed-shortleg-tailed] [prime.m.variants.motion-serifed-shortleg-tailed]
rank = 20 rank = 20
description = "`m` with motion serifs, a shorter middle leg like Ubuntu Mono, and a curly tail" description = "`m` with motion serifs, a shorter middle leg like Ubuntu Mono, and a curly tail"
selector.m = 'motionSerifedShortlegTailed' selector.m = 'motionSerifedShortlegTailed'
selectorUpright."cyrl/te" = "upright" selector."cyrl/te.italic" = "motionSerifed"
selectorItalic."cyrl/te" = "italicMotionSerifed"
selector."cyrl/te.BGR" = "motionSerifed"
@ -747,64 +708,56 @@ rank = 1
description = '`n` with straight ending' description = '`n` with straight ending'
selector.n = 'straight' selector.n = 'straight'
selector.eng = 'straight' selector.eng = 'straight'
selectorUpright."cyrl/pe" = "upright" selector."cyrl/pe.italic" = "straight"
selectorItalic."cyrl/pe" = "italicStraight"
[prime.n.variants.tailed] [prime.n.variants.tailed]
rank = 2 rank = 2
description = '`n` with a curly tail' description = '`n` with a curly tail'
selector.n = 'tailed' selector.n = 'tailed'
selector.eng = 'straight' selector.eng = 'straight'
selectorUpright."cyrl/pe" = "upright" selector."cyrl/pe.italic" = "tailed"
selectorItalic."cyrl/pe" = "italicTailed"
[prime.n.variants.earless-corner-straight] [prime.n.variants.earless-corner-straight]
rank = 3 rank = 3
description = 'Earless (corner top-left) `n` with straight ending' description = 'Earless (corner top-left) `n` with straight ending'
selector.n = 'earlessCornerStraight' selector.n = 'earlessCornerStraight'
selector.eng = 'earlessCornerStraight' selector.eng = 'earlessCornerStraight'
selectorUpright."cyrl/pe" = "upright" selector."cyrl/pe.italic" = "straight"
selectorItalic."cyrl/pe" = "italicEarlessCornerStraight"
[prime.n.variants.earless-corner-tailed] [prime.n.variants.earless-corner-tailed]
rank = 4 rank = 4
description = 'Earless (corner top-left) `n` with a curly tail' description = 'Earless (corner top-left) `n` with a curly tail'
selector.n = 'earlessCornerTailed' selector.n = 'earlessCornerTailed'
selector.eng = 'earlessCornerStraight' selector.eng = 'earlessCornerStraight'
selectorUpright."cyrl/pe" = "upright" selector."cyrl/pe.italic" = "tailed"
selectorItalic."cyrl/pe" = "italicEarlessCornerTailed"
[prime.n.variants.earless-rounded-straight] [prime.n.variants.earless-rounded-straight]
rank = 5 rank = 5
description = 'Earless (rounded top-left) `n` with straight ending' description = 'Earless (rounded top-left) `n` with straight ending'
selector.n = 'earlessRoundedStraight' selector.n = 'earlessRoundedStraight'
selector.eng = 'earlessRoundedStraight' selector.eng = 'earlessRoundedStraight'
selectorUpright."cyrl/pe" = "upright" selector."cyrl/pe.italic" = "straight"
selectorItalic."cyrl/pe" = "italicEarlessRoundedStraight"
[prime.n.variants.earless-rounded-tailed] [prime.n.variants.earless-rounded-tailed]
rank = 6 rank = 6
description = 'Earless (rounded top-left) `n` with a curly tail' description = 'Earless (rounded top-left) `n` with a curly tail'
selector.n = 'earlessRoundedTailed' selector.n = 'earlessRoundedTailed'
selector.eng = 'earlessRoundedStraight' selector.eng = 'earlessRoundedStraight'
selectorUpright."cyrl/pe" = "upright" selector."cyrl/pe.italic" = "tailed"
selectorItalic."cyrl/pe" = "italicEarlessRoundedTailed"
[prime.n.variants.motion-serifed-straight] [prime.n.variants.motion-serifed-straight]
rank = 7 rank = 7
description = '`n` with motion serifs and straight ending' description = '`n` with motion serifs and straight ending'
selector.n = 'motionSerifedStraight' selector.n = 'motionSerifedStraight'
selector.eng = 'motionSerifedStraight' selector.eng = 'motionSerifedStraight'
selectorUpright."cyrl/pe" = "upright" selector."cyrl/pe.italic" = "motionSerifedStraight"
selectorItalic."cyrl/pe" = "italicMotionSerifedStraight"
[prime.n.variants.motion-serifed-tailed] [prime.n.variants.motion-serifed-tailed]
rank = 8 rank = 8
description = '`n` with motion serifs and a curly tail' description = '`n` with motion serifs and a curly tail'
selector.n = 'motionSerifedTailed' selector.n = 'motionSerifedTailed'
selector.eng = 'motionSerifedStraight' selector.eng = 'motionSerifedStraight'
selectorUpright."cyrl/pe" = "upright" selector."cyrl/pe.italic" = "motionSerifedTailed"
selectorItalic."cyrl/pe" = "italicMotionSerifedTailed"
@ -955,97 +908,55 @@ tag = 'cv27'
rank = 1 rank = 1
description = "Normal `u` with bottom-right tooth" description = "Normal `u` with bottom-right tooth"
selector.u = "toothed" selector.u = "toothed"
selectorUpright."cyrl/i" = "upright" selector."cyrl/i.italic" = "toothed"
selectorItalic."cyrl/i" = "italicToothed" selector."cyrl/sha.italic" = "toothed"
selectorUpright."cyrl/sha" = "upright" selector."cyrl/dzhe.italic" = "toothed"
selectorItalic."cyrl/sha" = "italicToothed" selector."cyrl/tse.italic" = "toothed"
selectorUpright."cyrl/dzhe" = "upright"
selectorItalic."cyrl/dzhe" = "italicToothed"
selectorUpright."cyrl/tse" = "upright"
selectorItalic."cyrl/tse" = "italicToothed"
selector."cyrl/i.BGR" = "toothed"
selector."cyrl/sha.BGR" = "toothed"
selector."cyrl/tse.BGR" = "toothed"
[prime.u.variants.toothless-corner] [prime.u.variants.toothless-corner]
rank = 2 rank = 2
description = 'Toothless (corner bottom-right) `u`' description = 'Toothless (corner bottom-right) `u`'
selector.u = 'toothlessCorner' selector.u = 'toothlessCorner'
selectorUpright."cyrl/i" = "upright" selector."cyrl/i.italic" = "toothed"
selectorItalic."cyrl/i" = "italicToothed" selector."cyrl/sha.italic" = "toothed"
selectorUpright."cyrl/sha" = "upright" selector."cyrl/dzhe.italic" = "toothed"
selectorItalic."cyrl/sha" = "italicToothed" selector."cyrl/tse.italic" = "toothed"
selectorUpright."cyrl/dzhe" = "upright"
selectorItalic."cyrl/dzhe" = "italicToothed"
selectorUpright."cyrl/tse" = "upright"
selectorItalic."cyrl/tse" = "italicToothed"
selector."cyrl/i.BGR" = "toothed"
selector."cyrl/sha.BGR" = "toothed"
selector."cyrl/tse.BGR" = "toothed"
[prime.u.variants.toothless-rounded] [prime.u.variants.toothless-rounded]
rank = 3 rank = 3
description = "Toothless (rounded) `u`, like a smaller uppercase `U`" description = "Toothless (rounded) `u`, like a smaller uppercase `U`"
selector.u = "toothlessRounded" selector.u = "toothlessRounded"
selectorUpright."cyrl/i" = "upright" selector."cyrl/i.italic" = "toothed"
selectorItalic."cyrl/i" = "italicToothed" selector."cyrl/sha.italic" = "toothed"
selectorUpright."cyrl/sha" = "upright" selector."cyrl/dzhe.italic" = "toothed"
selectorItalic."cyrl/sha" = "italicToothed" selector."cyrl/tse.italic" = "toothed"
selectorUpright."cyrl/dzhe" = "upright"
selectorItalic."cyrl/dzhe" = "italicToothed"
selectorUpright."cyrl/tse" = "upright"
selectorItalic."cyrl/tse" = "italicToothed"
selector."cyrl/i.BGR" = "toothed"
selector."cyrl/sha.BGR" = "toothed"
selector."cyrl/tse.BGR" = "toothed"
[prime.u.variants.tailed] [prime.u.variants.tailed]
rank = 4 rank = 4
description = "`u` with right bar and a slightly curly tail" description = "`u` with right bar and a slightly curly tail"
selector.u = "tailed" selector.u = "tailed"
selectorUpright."cyrl/i" = "upright" selector."cyrl/i.italic" = "tailed"
selectorItalic."cyrl/i" = "italicTailed" selector."cyrl/sha.italic" = "tailed"
selectorUpright."cyrl/sha" = "upright" selector."cyrl/dzhe.italic" = "tailed"
selectorItalic."cyrl/sha" = "italicTailed" selector."cyrl/tse.italic" = "toothed"
selectorUpright."cyrl/dzhe" = "upright"
selectorItalic."cyrl/dzhe" = "italicTailed"
selectorUpright."cyrl/tse" = "upright"
selectorItalic."cyrl/tse" = "italicToothed"
selector."cyrl/i.BGR" = "tailed"
selector."cyrl/sha.BGR" = "tailed"
selector."cyrl/tse.BGR" = "toothed"
[prime.u.variants.motion-serifed] [prime.u.variants.motion-serifed]
rank = 5 rank = 5
description = "Normal `u` with right bar and motion serifs" description = "Normal `u` with right bar and motion serifs"
selector.u = "motionSerifed" selector.u = "motionSerifed"
selectorUpright."cyrl/i" = "upright" selector."cyrl/i.italic" = "motionSerifed"
selectorItalic."cyrl/i" = "italicMotionSerifed" selector."cyrl/sha.italic" = "motionSerifed"
selectorUpright."cyrl/sha" = "upright" selector."cyrl/dzhe.italic" = "motionSerifed"
selectorItalic."cyrl/sha" = "italicMotionSerifed" selector."cyrl/tse.italic" = "motionSerifed"
selectorUpright."cyrl/dzhe" = "upright"
selectorItalic."cyrl/dzhe" = "italicMotionSerifed"
selectorUpright."cyrl/tse" = "upright"
selectorItalic."cyrl/tse" = "italicMotionSerifed"
selector."cyrl/i.BGR" = "motionSerifed"
selector."cyrl/sha.BGR" = "motionSerifed"
selector."cyrl/tse.BGR" = "motionSerifed"
[prime.u.variants.motion-serifed-tailed] [prime.u.variants.motion-serifed-tailed]
rank = 6 rank = 6
description = "`u` with right bar, motion serifs and a slightly curly tail" description = "`u` with right bar, motion serifs and a slightly curly tail"
selector.u = "motionSerifedTailed" selector.u = "motionSerifedTailed"
selectorUpright."cyrl/i" = "upright" selector."cyrl/i.italic" = "motionSerifedTailed"
selectorItalic."cyrl/i" = "italicMotionSerifedTailed" selector."cyrl/sha.italic" = "motionSerifedTailed"
selectorUpright."cyrl/sha" = "upright" selector."cyrl/dzhe.italic" = "motionSerifedTailed"
selectorItalic."cyrl/sha" = "italicMotionSerifedTailed" selector."cyrl/tse.italic" = "motionSerifed"
selectorUpright."cyrl/dzhe" = "upright"
selectorItalic."cyrl/dzhe" = "italicMotionSerifedTailed"
selectorUpright."cyrl/tse" = "upright"
selectorItalic."cyrl/tse" = "italicMotionSerifed"
selector."cyrl/i.BGR" = "motionSerifedTailed"
selector."cyrl/sha.BGR" = "motionSerifedTailed"
selector."cyrl/tse.BGR" = "motionSerifed"
[prime.v] [prime.v]
sampler = 'vV' sampler = 'vV'
@ -1394,31 +1305,37 @@ tag = 'cv44'
rank = 1 rank = 1
description = 'Higher five-pointed asterisk `*`' description = 'Higher five-pointed asterisk `*`'
selector.asterisk = 'high' selector.asterisk = 'high'
selector."asterisk/lowered" = 'low'
[prime.asterisk.variants.low] [prime.asterisk.variants.low]
rank = 2 rank = 2
description = 'Lower five-pointed asterisk `*`' description = 'Lower five-pointed asterisk `*`'
selector.asterisk = 'low' selector.asterisk = 'low'
selector."asterisk/lowered" = 'low'
[prime.asterisk.variants.hexhigh] [prime.asterisk.variants.hexhigh]
rank = 3 rank = 3
description = 'Higher six-pointed asterisk `*`' description = 'Higher six-pointed asterisk `*`'
selector.asterisk = "hexhigh" selector.asterisk = "hexhigh"
selector."asterisk/lowered" = "hexlow"
[prime.asterisk.variants.hexlow] [prime.asterisk.variants.hexlow]
rank = 4 rank = 4
description = 'Lower six-pointed asterisk `*`' description = 'Lower six-pointed asterisk `*`'
selector.asterisk = "hexlow" selector.asterisk = "hexlow"
selector."asterisk/lowered" = "hexlow"
[prime.asterisk.variants.flip-penta-high] [prime.asterisk.variants.flip-penta-high]
rank = 5 rank = 5
description = 'Higher five-pointed and turned asterisk `*`' description = 'Higher five-pointed and turned asterisk `*`'
selector.asterisk = 'turnPentaHigh' selector.asterisk = 'turnPentaHigh'
selector."asterisk/lowered" = 'turnPentaLow'
[prime.asterisk.variants.flip-penta-low] [prime.asterisk.variants.flip-penta-low]
rank = 6 rank = 6
description = 'Lower five-pointed and turned asterisk `*`' description = 'Lower five-pointed and turned asterisk `*`'
selector.asterisk = 'turnPentaLow' selector.asterisk = 'turnPentaLow'
selector."asterisk/lowered" = 'turnPentaLow'
@ -1651,14 +1568,12 @@ slopeDependent = true
[prime.bar.variants.natural-slope] [prime.bar.variants.natural-slope]
rank = 1 rank = 1
description = 'Bar punctuations (`|`) has a natural slope under italics and oblique' description = 'Bar punctuations (`|`) has a natural slope under italics and oblique'
selectorUpright.bar = "naturalSlope" selector."bar.italic" = "naturalSlope"
selectorItalic.bar = "naturalSlope"
[prime.bar.variants.force-upright] [prime.bar.variants.force-upright]
rank = 2 rank = 2
description = 'Bar punctuations (`|`) is forced upright under italics and oblique' description = 'Bar punctuations (`|`) is forced upright under italics and oblique'
selectorUpright.bar = "naturalSlope" selector."bar.italic" = "forceUpright"
selectorItalic.bar = "forceUpright"