Add ligation for chained hyphens and tildes (#893).

This commit is contained in:
be5invis 2021-02-22 23:31:01 -08:00
parent 66b43126f3
commit ba6e5c5b58
4 changed files with 126 additions and 52 deletions

1
changes/5.0.4.md Normal file
View file

@ -0,0 +1 @@
* Add ligation for chained hyphens and tildes (#893).

View file

@ -53,9 +53,20 @@ glyph-block Symbol-Ligation : begin
local arrowExtend [clamp 0 Width (RightSB - OperatorStroke / 2 * arrowheadSlope)]
local arrowJ : clamp 0 Width (SB + OperatorStroke / 2 * arrowheadSlope)
foreach [{subclass left right} : items-of [ArrowBarConfig arrowExtend arrowheadsKern arrowJ false]] : create-glyph ('hyphen.lig.' + subclass) : glyph-proc
include : HBar left right SymbolMid OperatorStroke
set currentGlyph.autoRefPriority (-3)
define [HyphenNotch x] : union
VBar x (SymbolMid + OperatorStroke / 3) (SymbolMid + OperatorStroke) OperatorStroke
VBar x (SymbolMid - OperatorStroke / 3) (SymbolMid - OperatorStroke) OperatorStroke
foreach [{subclass left right} : items-of [ArrowBarConfig arrowExtend arrowheadsKern arrowJ false]] : begin
create-glyph "hyphen.lig.\(subclass)" : glyph-proc
include : HBar left right SymbolMid OperatorStroke
set currentGlyph.autoRefPriority (-3)
create-glyph "hyphen.lig.\(subclass).notched" : glyph-proc
include : difference
HBar left right SymbolMid OperatorStroke
if (left < SB) [HyphenNotch 0] [glyph-proc]
if (right > RightSB) [HyphenNotch Width] [glyph-proc]
# =>
local dblArrowD : (ParenTop - ParenBot) * DesignParameters.equal_wideness + OperatorStroke * 0.75
@ -96,7 +107,7 @@ glyph-block Symbol-Ligation : begin
j { J (Width + arrowJ) true }
j1 { J (Width + arrowJ + arrowheadsKern) true }
foreach [lS : items-of : Object.keys lk] : foreach [rS : items-of : Object.keys rk] : create-glyph"wave.\(lS)\(rS)" : glyph-proc
foreach [lS : items-of : Object.keys lk] : foreach [rS : items-of : Object.keys rk] : create-glyph"wave.lig.\(lS)\(rS)" : glyph-proc
local {tL jL djL} lk.(lS)
local {tR jR djR} rk.(rS)
include : WaveShape
@ -322,12 +333,12 @@ glyph-block Symbol-Ligation : begin
do "Chaining Plus"
glyph-block-import Symbol-Math-Arith : PlusShape
create-glyph 'plus.lig.lc' : PlusShape SB (Width - O)
create-glyph 'plus.lig.lc.s' : PlusShape SB (Width - O) SB
create-glyph 'plus.lig.fc' : PlusShape SB (Width - O)
create-glyph 'plus.lig.fc.s' : PlusShape SB (Width - O) SB
create-glyph 'plus.lig.cc' : PlusShape O (Width - O)
create-glyph 'plus.lig.cr' : PlusShape O RightSB
create-glyph 'plus.lig.cr.s' : PlusShape O RightSB (-SB)
create-glyph 'plus.lig.jr' : PlusShape (-SB + O) RightSB
create-glyph 'plus.lig.cf' : PlusShape O RightSB
create-glyph 'plus.lig.cf.s' : PlusShape O RightSB (-SB)
create-glyph 'plus.lig.zf' : PlusShape (-SB + O) RightSB
do 'Less / Greater as arrow'
create-glyph 'greaterArrow' : composite-proc

View file

@ -25,7 +25,7 @@ define [buildLigationsImpl sink para featureName mappedFeature rankedLookups] :
define [stickClass style] : [lsx style] {'hyphen' 'equal'}
define [stickTf style] : {'hyphen' 'equal'} ~> [lsx style]
define anyWave {'asciiTilde' 'asciiTilde.low' 'asciiTilde.high'}
define [waveClass cl] : [just ('wave.' + cl)] anyWave
define [waveClass cl] : [just ('wave.lig.' + cl)] anyWave
define [waveTf cl] : anyWave ~> [waveClass cl]
define less {'less'}
@ -240,45 +240,6 @@ define [buildLigationsImpl sink para featureName mappedFeature rankedLookups] :
dRight ~> dRightHalf
dLeft ~> dLeftHalf
do "Plus chains" : if [hasLG 'plusplus'] : begin
CreateLigationLookup : list
# +++++++++
chain-rule
{'plus.lig.cr' 'plus.lig.jr'} ~> look-around
{'plus'} ~> [lsx 'jr']
chain-rule
{'plus'} ~> [lsx 'lc']
{'plus'} ~> [lsx 'cc']
{'plus'} ~> [lsx 'cc']
{'plus'} ~> [lsx 'cr']
chain-rule
{'plus'} ~> [lsx 'lc']
{'plus'} ~> [lsx 'cc']
{'plus'} ~> [lsx 'cr']
chain-rule
{'plus'} ~> [lsx 'lc']
{'plus'} ~> [lsx 'cr']
CreateLigationLookup : list
chain-rule # +++
{'plus.lig.lc'} ~> {'plus.lig.lc.s'}
{'plus.lig.cc'} ~> look-around
{'plus.lig.cr'} ~> {'plus.lig.cr.s'}
chain-rule # ++
{'plus.lig.lc'} ~> {'plus.lig.lc.s'}
{'plus.lig.cr'} ~> {'plus.lig.cr.s'}
do "Underscore chains" : if [hasLG 'connected-underscore'] : begin
CreateLigationLookup : list
chain-rule
{'underscore' 'underscore.jr'} ~> look-around
{'underscore'} ~> {'underscore.jr'}
do "Number sign chains" : if [hasLG 'connected-number-sign'] : begin
CreateLigationLookup : list
chain-rule
{'numberSign' 'numberSign.jr'} ~> look-around
{'numberSign'} ~> {'numberSign.jr'}
do "triangles" : if [hasLG 'trig'] : begin
CreateLigationLookup : list
chain-rule # <|
@ -387,7 +348,7 @@ define [buildLigationsImpl sink para featureName mappedFeature rankedLookups] :
define [CBarSingular k] : begin
local hyphenSet : new Set hyphen
local fHyphen : lsx k
local fWave : just "wave.\(k)"
local fWave : just "wave.lig.\(k)"
return : lambda [t] : begin
local hyphenResults : fHyphen t
local waveResults : fWave t
@ -403,7 +364,7 @@ define [buildLigationsImpl sink para featureName mappedFeature rankedLookups] :
# rod FBarCls
list equal lsx
list hyphen lsx
list anyWave [lambda [k] [just "wave.\(k)"]]
list anyWave [lambda [k] [just "wave.lig.\(k)"]]
foreach [{barCls dbl ltgt CBar} : items-of ArrowFormationConfig] : do
define heads {}
@ -918,3 +879,92 @@ define [buildLigationsImpl sink para featureName mappedFeature rankedLookups] :
chain-rule
{'bar'} ~> {'ligBarInsideBracketRight'}
{'braceRight'} ~> {'ligExtBraceRight'}
do "Plus chains" : if [hasLG 'plusplus'] : begin
CreateLigationLookup : list
# +++++++++
chain-rule
{'plus.lig.cf' 'plus.lig.zf'} ~> look-around
{'plus'} ~> [lsx 'zf']
chain-rule
{'plus'} ~> [lsx 'fc']
{'plus'} ~> [lsx 'cc']
{'plus'} ~> [lsx 'cc']
{'plus'} ~> [lsx 'cf']
chain-rule
{'plus'} ~> [lsx 'fc']
{'plus'} ~> [lsx 'cc']
{'plus'} ~> [lsx 'cf']
chain-rule
{'plus'} ~> [lsx 'fc']
{'plus'} ~> [lsx 'cf']
CreateLigationLookup : list
chain-rule # +++
{'plus.lig.fc'} ~> {'plus.lig.fc.s'}
{'plus.lig.cc'} ~> look-around
{'plus.lig.cf'} ~> {'plus.lig.cf.s'}
chain-rule # ++
{'plus.lig.fc'} ~> {'plus.lig.fc.s'}
{'plus.lig.cf'} ~> {'plus.lig.cf.s'}
do "Underscore chains" : if [hasLG 'connected-underscore'] : begin
CreateLigationLookup : list
chain-rule
{'underscore' 'underscore.jr'} ~> look-around
{'underscore'} ~> {'underscore.jr'}
do "Tilde chains" : if [hasLG 'connected-tilde-as-wave'] : begin
CreateLigationLookup : list
chain-rule
{'wave.lig.cf' 'wave.lig.zf'} ~> look-around
{'asciiTilde'} ~> {'wave.lig.zf'}
chain-rule
{'asciiTilde'} ~> {"wave.lig.fc"}
{'asciiTilde'} ~> {"wave.lig.cf"}
do "Hyphen chains" : if [hasLG 'connected-hyphen-as-solid-line'] : begin
CreateLigationLookup : list
chain-rule
{'hyphen.lig.zf'} ~> look-around
{'hyphen'} ~> {'hyphen.lig.zf'}
chain-rule
{'hyphen'} ~> {"hyphen.lig.fc"}
{'hyphen'} ~> {"hyphen.lig.zf"}
CreateLigationLookup : list
chain-rule
{'hyphen.lig.jf'} ~> {'hyphen.lig.jc'}
{'hyphen'} ~> {'hyphen.lig.cc'}
{'hyphen.lig.fj'} ~> {'hyphen.lig.cj'}
chain-rule
{'hyphen.lig.jf'} ~> {'hyphen.lig.jc'}
{'hyphen.lig.fc'} ~> {'hyphen.lig.cc'}
chain-rule
{'hyphen.lig.zf'} ~> {'hyphen.lig.zc'}
{'hyphen.lig.fj'} ~> {'hyphen.lig.cj'}
do "Hyphen chains" : if [hasLG 'connected-hyphen-as-semi-dashed-line'] : begin
CreateLigationLookup : list
chain-rule
{'hyphen.lig.zf.notched'} ~> look-around
{'hyphen'} ~> {'hyphen.lig.zf.notched'}
chain-rule
{'hyphen'} ~> {"hyphen.lig.fc.notched"}
{'hyphen'} ~> {"hyphen.lig.zf.notched"}
CreateLigationLookup : list
chain-rule
{'hyphen.lig.jf'} ~> {'hyphen.lig.jc.notched'}
{'hyphen'} ~> {'hyphen.lig.cc.notched'}
{'hyphen.lig.fj'} ~> {'hyphen.lig.cj.notched'}
chain-rule
{'hyphen.lig.jf'} ~> {'hyphen.lig.jc.notched'}
{'hyphen.lig.fc.notched'} ~> {'hyphen.lig.cc.notched'}
chain-rule
{'hyphen.lig.zf.notched'} ~> {'hyphen.lig.zc.notched'}
{'hyphen.lig.fj'} ~> {'hyphen.lig.cj.notched'}
do "Number sign chains" : if [hasLG 'connected-number-sign'] : begin
CreateLigationLookup : list
chain-rule
{'numberSign' 'numberSign.jr'} ~> look-around
{'numberSign'} ~> {'numberSign.jr'}

View file

@ -138,6 +138,18 @@ desc = 'Make contiguous underscores (like `__`) connected'
ligGroup = 'connected-number-sign'
desc = 'Make contiguous number signs (like `##`) connected'
[simple.connected-tilde-as-wave]
ligGroup = 'connected-tilde-as-wave'
desc = 'Make contiguous ASCII tildes (like `~~`) connected as a wave line'
[simple.connected-hyphen-as-solid-line]
ligGroup = 'connected-hyphen-as-solid-line'
desc = 'Make contiguous hyphen-minuses (like `--`) connected as a straight solid line'
[simple.connected-hyphen-as-semi-dashed-line]
ligGroup = 'connected-hyphen-as-semi-dashed-line'
desc = 'Make contiguous hyphen-minuses (like `--`) connected as a straight semi-dashed line, identifying each hyphen component'
###################################################################################################
# This feature is on by default by many software
@ -150,7 +162,7 @@ readmeDesc = 'Inherit default ligation set'
[composite.dlig]
tag = 'dlig'
buildup = ['center-ops', 'arrow', 'html-comment', 'trig', 'arrow2', 'llgg', 'eqeq', 'exeq', 'ineq', 'ltgt-diamond', 'plusplus', 'kern-dotty', 'dot-as-operator', 'logic', 'brst', 'brace-bar', 'brack-bar', 'connected-underscore', 'connected-number-sign']
buildup = ['center-ops', 'arrow', 'html-comment', 'trig', 'arrow2', 'llgg', 'eqeq', 'exeq', 'ineq', 'ltgt-diamond', 'plusplus', 'kern-dotty', 'dot-as-operator', 'logic', 'brst', 'brace-bar', 'brack-bar', 'connected-underscore', 'connected-number-sign', 'connected-tilde-as-wave', 'connected-hyphen-as-semi-dashed-line']
brief = 'Discretionary'
desc = 'Discretionary ligatures'