Fix operator centering chain propagation under Apple platform (#768).
This commit is contained in:
parent
f610b82f4d
commit
1f7720c17e
2 changed files with 45 additions and 58 deletions
1
changes/4.0.3.md
Normal file
1
changes/4.0.3.md
Normal file
|
@ -0,0 +1 @@
|
||||||
|
* Fix operator centering chain propagation under Apple platform (#768).
|
|
@ -104,16 +104,25 @@ define [buildLigationsImpl sink para featureName mappedFeature rankedLookups] :
|
||||||
set lookupRank : lookupRank + 1
|
set lookupRank : lookupRank + 1
|
||||||
|
|
||||||
do "Operator centering"
|
do "Operator centering"
|
||||||
define [centerAsterisk] : {'asterisk'} ~> {'asterisk/lowered'}
|
define [centerAsterisk] : {'asterisk'} ~> {'asterisk/lowered'}
|
||||||
define [centerColon] : {'colon' 'colon.mid'} ~> {'colon.mid' 'colon.mid'}
|
define [centerColon] : {'colon'} ~> {'colon.mid'}
|
||||||
define [centerCaret] : {'asciiCaret'} ~> {'asciiCaret.low'}
|
define [centerCaret] : {'asciiCaret'} ~> {'asciiCaret.low'}
|
||||||
define [centerTilde] : {'asciiTilde'} ~> {'asciiTilde.low'}
|
define [centerTilde] : {'asciiTilde'} ~> {'asciiTilde.low'}
|
||||||
define [centerPeriod] : {'period'} ~> {'period.mid'}
|
define [centerPeriod] : {'period'} ~> {'period.mid'}
|
||||||
define [deCenterPeriod] : {'period.mid'} ~> {'period'}
|
define [deCenterPeriod] : {'period.mid'} ~> {'period'}
|
||||||
|
|
||||||
define centerizeGroups : list centerAsterisk centerColon centerCaret centerTilde
|
define centerizeGroups : list centerAsterisk centerColon centerCaret centerTilde
|
||||||
if [hasLG 'dot-oper'] : centerizeGroups.push centerPeriod
|
if [hasLG 'dot-oper'] : centerizeGroups.push centerPeriod
|
||||||
|
|
||||||
|
define centerizeL : centerizeGroups.map : x => [x].left.0
|
||||||
|
define centerizeR : centerizeGroups.map : lambda [x] : begin
|
||||||
|
local left [x].left
|
||||||
|
local right [x].right
|
||||||
|
while (right <@ Function) : set right [right left]
|
||||||
|
return : if right (right.0 || left.0) (left.0)
|
||||||
|
|
||||||
|
define [Cg] : centerizeL ~> centerizeR
|
||||||
|
|
||||||
do "Bracket-star"
|
do "Bracket-star"
|
||||||
CreateLigationLookup : keep-if 'brst' : list
|
CreateLigationLookup : keep-if 'brst' : list
|
||||||
chain-rule # (*
|
chain-rule # (*
|
||||||
|
@ -133,63 +142,35 @@ define [buildLigationsImpl sink para featureName mappedFeature rankedLookups] :
|
||||||
{'parenRight' 'bracketRight' 'braceRight'} ~> look-around
|
{'parenRight' 'bracketRight' 'braceRight'} ~> look-around
|
||||||
|
|
||||||
do "Operator Centering"
|
do "Operator Centering"
|
||||||
local startRules {}
|
CreateLigationLookup : keep-if 'center-ops' : list
|
||||||
foreach [g : items-of centerizeGroups] : begin
|
chain-rule [Cg] [Cg] [acskip] [acskip] [acops] # ::+
|
||||||
startRules.push : chain-rule [g] [g] [acskip] [acskip] [acops] # ::+
|
chain-rule [Cg] [Cg] [acskip] [acops] # ::+
|
||||||
startRules.push : chain-rule [g] [g] [acskip] [acops] # ::+
|
chain-rule [Cg] [Cg] [acops] # ::+
|
||||||
startRules.push : chain-rule [g] [g] [acops] # ::+
|
chain-rule [Cg] [acskip] [acskip] [acops] # :+
|
||||||
startRules.push : chain-rule [g] [acskip] [acskip] [acops] # :+
|
chain-rule [Cg] [acskip] [acops] # :+
|
||||||
startRules.push : chain-rule [g] [acskip] [acops] # :+
|
chain-rule [Cg] [acops] # :+
|
||||||
startRules.push : chain-rule [g] [acops] # :+
|
chain-rule [acops] [acskip] [acskip] [Cg] # +:
|
||||||
startRules.push : chain-rule [acops] [acskip] [acskip] [g] # +:
|
chain-rule [acops] [acskip] [Cg] # +:
|
||||||
startRules.push : chain-rule [acops] [acskip] [g] # +:
|
chain-rule [acops] [Cg] # +:
|
||||||
startRules.push : chain-rule [acops] [g] # +:
|
|
||||||
CreateLigationLookup : keep-if 'center-ops' startRules
|
|
||||||
|
|
||||||
do "Operator centering : Trailing"
|
do "Operator centering : Trailing"
|
||||||
local centerizeL : centerizeGroups.map : x => [x].left.0
|
|
||||||
local centerizeR : centerizeGroups.map : lambda [x] : begin
|
|
||||||
local left [x].left
|
|
||||||
local right [x].right
|
|
||||||
while (right <@ Function) : set right [right left]
|
|
||||||
return : if right (right.0 || left.0) (left.0)
|
|
||||||
|
|
||||||
CreateLigationLookup : keep-if 'center-ops' : list
|
CreateLigationLookup : keep-if 'center-ops' : list
|
||||||
chain-rule centerizeR [acskip] [acskip] (centerizeL ~> centerizeR)
|
chain-rule centerizeR [acskip] [acskip] [Cg]
|
||||||
chain-rule centerizeR [acskip] (centerizeL ~> centerizeR)
|
chain-rule centerizeR [acskip] [Cg]
|
||||||
chain-rule centerizeR (centerizeL ~> centerizeR)
|
chain-rule centerizeR [Cg]
|
||||||
|
|
||||||
CreateReverseLigationLookup : keep-if 'center-ops' : list
|
CreateReverseLigationLookup : keep-if 'center-ops' : list
|
||||||
reverse-rule
|
reverse-rule [Cg] [acskip] [acskip] centerizeR
|
||||||
centerizeL ~> centerizeR
|
reverse-rule [Cg] [acskip] centerizeR
|
||||||
[acskip] ~> look-around
|
reverse-rule [Cg] centerizeR
|
||||||
[acskip] ~> look-around
|
|
||||||
centerizeR ~> look-around
|
|
||||||
reverse-rule
|
|
||||||
centerizeL ~> centerizeR
|
|
||||||
[acskip] ~> look-around
|
|
||||||
centerizeR ~> look-around
|
|
||||||
reverse-rule
|
|
||||||
centerizeL ~> centerizeR
|
|
||||||
centerizeR ~> look-around
|
|
||||||
|
|
||||||
# Commented out this since it looks not very "necessary" if all dots are considered
|
|
||||||
# operators...
|
|
||||||
# define alphabet {
|
|
||||||
# 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm'
|
|
||||||
# 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z'
|
|
||||||
# 'A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I' 'J' 'K' 'L' 'M'
|
|
||||||
# 'N' 'O' 'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' 'X' 'Y' 'Z'
|
|
||||||
# 'zero.lnum' 'zero.onum' 'one.lnum' 'one.onum'
|
|
||||||
# 'two.lnum' 'two.onum' 'three.lnum' 'three.onum'
|
|
||||||
# 'four.lnum' 'four.onum' 'five.lnum' 'five.onum'
|
|
||||||
# 'six.lnum' 'six.onum' 'seven.lnum' 'seven.onum'
|
|
||||||
# 'eight.lnum' 'eight.onum' 'nine.lnum' 'nine.onum'
|
|
||||||
# }
|
|
||||||
# do "Operator centering : Avoid 'letter-point' being centered"
|
|
||||||
# CreateLigationLookup : keep-if 'center-ops' : keep-if 'dot-oper' : list
|
|
||||||
# chain-rule alphabet [deCenterPeriod]
|
|
||||||
# chain-rule [deCenterPeriod] alphabet
|
|
||||||
|
|
||||||
|
do "Operator centering : Apple fix"
|
||||||
|
# Apple (still) have problem when dealing with reverse chaining lookup
|
||||||
|
# They give up at run beginning. Fix them.
|
||||||
|
CreateLigationLookup : keep-if 'center-ops' : list
|
||||||
|
chain-rule [Cg] [acskip] [acskip] centerizeR
|
||||||
|
chain-rule [Cg] [acskip] centerizeR
|
||||||
|
chain-rule [Cg] centerizeR
|
||||||
|
|
||||||
do "Kern Dotty"
|
do "Kern Dotty"
|
||||||
define dottyPunctuationSets : list
|
define dottyPunctuationSets : list
|
||||||
|
@ -309,6 +290,11 @@ define [buildLigationsImpl sink para featureName mappedFeature rankedLookups] :
|
||||||
reverse-rule
|
reverse-rule
|
||||||
{'bar'} ~> [[lsx 'trig'] {'bar'}]
|
{'bar'} ~> [[lsx 'trig'] {'bar'}]
|
||||||
[[lsx 'trig'] {'bar'}] ~> look-around
|
[[lsx 'trig'] {'bar'}] ~> look-around
|
||||||
|
# Apple fix
|
||||||
|
CreateLigationLookup : keep-if 'trig' : list
|
||||||
|
chain-rule
|
||||||
|
{'bar'} ~> [[lsx 'trig'] {'bar'}]
|
||||||
|
[[lsx 'trig'] {'bar'}] ~> look-around
|
||||||
|
|
||||||
do "shift-eq operators (<<= and >>=)"
|
do "shift-eq operators (<<= and >>=)"
|
||||||
CreateLigationLookup : keep-if "llggeq" : list
|
CreateLigationLookup : keep-if "llggeq" : list
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue