Last active
May 20, 2020 16:27
-
-
Save kiliman/5c9844ef91602ea165b86f17b04e6270 to your computer and use it in GitHub Desktop.
`calt` table generated by my Python script (output identical to FiraCodes Clojure script)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
lookup bar_bar_bar_greater { | |
ignore sub bar bar' bar bar greater; | |
ignore sub bar' bar bar greater greater; | |
sub bar.spacer bar.spacer bar.spacer greater' by bar_bar_bar_greater.liga; | |
sub bar.spacer bar.spacer bar' greater by bar.spacer; | |
sub bar.spacer bar' bar greater by bar.spacer; | |
sub bar' bar bar greater by bar.spacer; | |
} bar_bar_bar_greater; | |
lookup less_bar_bar_bar { | |
ignore sub less less' bar bar bar; | |
ignore sub less' bar bar bar bar; | |
sub less.spacer bar.spacer bar.spacer bar' by less_bar_bar_bar.liga; | |
sub less.spacer bar.spacer bar' bar by bar.spacer; | |
sub less.spacer bar' bar bar by bar.spacer; | |
sub less' bar bar bar by less.spacer; | |
} less_bar_bar_bar; | |
lookup less_exclam_hyphen_hyphen { | |
ignore sub less less' exclam hyphen hyphen; | |
ignore sub less' exclam hyphen hyphen hyphen; | |
ignore sub parenleft question less' exclam hyphen hyphen; | |
sub less.spacer exclam.spacer hyphen.spacer hyphen' by less_exclam_hyphen_hyphen.liga; | |
sub less.spacer exclam.spacer hyphen' hyphen by hyphen.spacer; | |
sub less.spacer exclam' hyphen hyphen by exclam.spacer; | |
sub less' exclam hyphen hyphen by less.spacer; | |
} less_exclam_hyphen_hyphen; | |
lookup numbersign_numbersign_numbersign_numbersign { | |
ignore sub numbersign numbersign' numbersign numbersign numbersign; | |
ignore sub numbersign' numbersign numbersign numbersign numbersign; | |
sub numbersign.spacer numbersign.spacer numbersign.spacer numbersign' by numbersign_numbersign_numbersign_numbersign.liga; | |
sub numbersign.spacer numbersign.spacer numbersign' numbersign by numbersign.spacer; | |
sub numbersign.spacer numbersign' numbersign numbersign by numbersign.spacer; | |
sub numbersign' numbersign numbersign numbersign by numbersign.spacer; | |
} numbersign_numbersign_numbersign_numbersign; | |
lookup asciitilde_asciitilde_greater { | |
ignore sub asciitilde asciitilde' asciitilde greater; | |
ignore sub asciitilde' asciitilde greater greater; | |
sub asciitilde.spacer asciitilde.spacer greater' by asciitilde_asciitilde_greater.liga; | |
sub asciitilde.spacer asciitilde' greater by asciitilde.spacer; | |
sub asciitilde' asciitilde greater by asciitilde.spacer; | |
} asciitilde_asciitilde_greater; | |
lookup asterisk_asterisk_asterisk { | |
ignore sub asterisk asterisk' asterisk asterisk; | |
ignore sub asterisk' asterisk asterisk asterisk; | |
ignore sub slash asterisk' asterisk asterisk; | |
ignore sub asterisk' asterisk asterisk slash; | |
sub asterisk.spacer asterisk.spacer asterisk' by asterisk_asterisk_asterisk.liga; | |
sub asterisk.spacer asterisk' asterisk by asterisk.spacer; | |
sub asterisk' asterisk asterisk by asterisk.spacer; | |
} asterisk_asterisk_asterisk; | |
lookup bar_bar_greater { | |
ignore sub bar bar' bar greater; | |
ignore sub bar' bar greater greater; | |
ignore sub less bar' bar greater; | |
sub bar.spacer bar.spacer greater' by bar_bar_greater.liga; | |
sub bar.spacer bar' greater by bar.spacer; | |
sub bar' bar greater by bar.spacer; | |
} bar_bar_greater; | |
lookup colon_colon_colon { | |
ignore sub colon colon' colon colon; | |
ignore sub colon' colon colon colon; | |
ignore sub parenleft question colon' colon colon; | |
sub colon.spacer colon.spacer colon' by colon_colon_colon.liga; | |
sub colon.spacer colon' colon by colon.spacer; | |
sub colon' colon colon by colon.spacer; | |
} colon_colon_colon; | |
lookup colon_colon_equal { | |
ignore sub colon colon' colon equal; | |
ignore sub colon' colon equal equal; | |
ignore sub parenleft question colon' colon equal; | |
sub colon.spacer colon.spacer equal' by colon_colon_equal.liga; | |
sub colon.spacer colon' equal by colon.spacer; | |
sub colon' colon equal by colon.spacer; | |
} colon_colon_equal; | |
lookup equal_equal_equal { | |
ignore sub equal equal' equal equal; | |
ignore sub equal' equal equal equal; | |
ignore sub parenleft question equal' equal equal; | |
ignore sub parenleft question less equal' equal equal; | |
ignore sub less question equal' equal equal; | |
ignore sub [bracketleft less greater bar slash] equal' equal equal; | |
ignore sub equal' equal equal [bracketright less greater bar slash]; | |
sub equal.spacer equal.spacer equal' by equal_equal_equal.liga; | |
sub equal.spacer equal' equal by equal.spacer; | |
sub equal' equal equal by equal.spacer; | |
} equal_equal_equal; | |
lookup exclam_equal_equal { | |
ignore sub exclam exclam' equal equal; | |
ignore sub exclam' equal equal equal; | |
ignore sub parenleft question exclam' equal equal; | |
ignore sub parenleft question less exclam' equal equal; | |
sub exclam.spacer equal.spacer equal' by exclam_equal_equal.liga; | |
sub exclam.spacer equal' equal by equal.spacer; | |
sub exclam' equal equal by exclam.spacer; | |
} exclam_equal_equal; | |
lookup exclam_exclam_period { | |
ignore sub exclam exclam' exclam period; | |
ignore sub exclam' exclam period period; | |
ignore sub parenleft question exclam' exclam period; | |
ignore sub parenleft question less exclam' exclam period; | |
sub exclam.spacer exclam.spacer period' by exclam_exclam_period.liga; | |
sub exclam.spacer exclam' period by exclam.spacer; | |
sub exclam' exclam period by exclam.spacer; | |
} exclam_exclam_period; | |
lookup greater_greater_greater { | |
ignore sub greater greater' greater greater; | |
ignore sub greater' greater greater greater; | |
ignore sub [asterisk plus dollar] greater' greater greater; | |
sub greater.spacer greater.spacer greater' by greater_greater_greater.liga; | |
sub greater.spacer greater' greater by greater.spacer; | |
sub greater' greater greater by greater.spacer; | |
} greater_greater_greater; | |
lookup hyphen_hyphen_hyphen { | |
ignore sub hyphen hyphen' hyphen hyphen; | |
ignore sub hyphen' hyphen hyphen hyphen; | |
ignore sub [bracketleft less greater bar] hyphen' hyphen hyphen; | |
ignore sub hyphen' hyphen hyphen [bracketright less greater bar]; | |
sub hyphen.spacer hyphen.spacer hyphen' by hyphen_hyphen_hyphen.liga; | |
sub hyphen.spacer hyphen' hyphen by hyphen.spacer; | |
sub hyphen' hyphen hyphen by hyphen.spacer; | |
} hyphen_hyphen_hyphen; | |
lookup less_asciitilde_asciitilde { | |
ignore sub less less' asciitilde asciitilde; | |
ignore sub less' asciitilde asciitilde asciitilde; | |
sub less.spacer asciitilde.spacer asciitilde' by less_asciitilde_asciitilde.liga; | |
sub less.spacer asciitilde' asciitilde by asciitilde.spacer; | |
sub less' asciitilde asciitilde by less.spacer; | |
} less_asciitilde_asciitilde; | |
lookup less_asciitilde_greater { | |
ignore sub less less' asciitilde greater; | |
ignore sub less' asciitilde greater greater; | |
sub less.spacer asciitilde.spacer greater' by less_asciitilde_greater.liga; | |
sub less.spacer asciitilde' greater by asciitilde.spacer; | |
sub less' asciitilde greater by less.spacer; | |
} less_asciitilde_greater; | |
lookup less_asterisk_greater { | |
sub less.spacer asterisk.spacer greater' by less_asterisk_greater.liga; | |
sub less.spacer asterisk' greater by asterisk.spacer; | |
sub less' asterisk greater by less.spacer; | |
} less_asterisk_greater; | |
lookup less_bar_bar { | |
ignore sub less less' bar bar; | |
ignore sub less' bar bar bar; | |
ignore sub less' bar bar greater; | |
sub less.spacer bar.spacer bar' by less_bar_bar.liga; | |
sub less.spacer bar' bar by bar.spacer; | |
sub less' bar bar by less.spacer; | |
} less_bar_bar; | |
lookup less_bar_greater { | |
ignore sub less less' bar greater; | |
ignore sub less' bar greater greater; | |
sub less.spacer bar.spacer greater' by less_bar_greater.liga; | |
sub less.spacer bar' greater by bar.spacer; | |
sub less' bar greater by less.spacer; | |
} less_bar_greater; | |
lookup less_dollar_greater { | |
sub less.spacer dollar.spacer greater' by less_dollar_greater.liga; | |
sub less.spacer dollar' greater by dollar.spacer; | |
sub less' dollar greater by less.spacer; | |
} less_dollar_greater; | |
lookup less_less_less { | |
ignore sub less less' less less; | |
ignore sub less' less less less; | |
ignore sub less' less less [asterisk plus dollar]; | |
sub less.spacer less.spacer less' by less_less_less.liga; | |
sub less.spacer less' less by less.spacer; | |
sub less' less less by less.spacer; | |
} less_less_less; | |
lookup less_plus_greater { | |
sub less.spacer plus.spacer greater' by less_plus_greater.liga; | |
sub less.spacer plus' greater by plus.spacer; | |
sub less' plus greater by less.spacer; | |
} less_plus_greater; | |
lookup less_slash_greater { | |
ignore sub less less' slash greater; | |
ignore sub less' slash greater greater; | |
sub less.spacer slash.spacer greater' by less_slash_greater.liga; | |
sub less.spacer slash' greater by slash.spacer; | |
sub less' slash greater by less.spacer; | |
} less_slash_greater; | |
lookup numbersign_numbersign_numbersign { | |
ignore sub numbersign numbersign' numbersign numbersign; | |
ignore sub numbersign' numbersign numbersign numbersign; | |
sub numbersign.spacer numbersign.spacer numbersign' by numbersign_numbersign_numbersign.liga; | |
sub numbersign.spacer numbersign' numbersign by numbersign.spacer; | |
sub numbersign' numbersign numbersign by numbersign.spacer; | |
} numbersign_numbersign_numbersign; | |
lookup numbersign_underscore_parenleft { | |
ignore sub numbersign numbersign' underscore parenleft; | |
ignore sub numbersign' underscore parenleft parenleft; | |
sub numbersign.spacer underscore.spacer parenleft' by numbersign_underscore_parenleft.liga; | |
sub numbersign.spacer underscore' parenleft by underscore.spacer; | |
sub numbersign' underscore parenleft by numbersign.spacer; | |
} numbersign_underscore_parenleft; | |
lookup period_period_equal { | |
ignore sub period period' period equal; | |
ignore sub period' period equal equal; | |
sub period.spacer period.spacer equal' by period_period_equal.liga; | |
sub period.spacer period' equal by period.spacer; | |
sub period' period equal by period.spacer; | |
} period_period_equal; | |
lookup period_period_less { | |
ignore sub period period' period less; | |
ignore sub period' period less less; | |
sub period.spacer period.spacer less' by period_period_less.liga; | |
sub period.spacer period' less by period.spacer; | |
sub period' period less by period.spacer; | |
} period_period_less; | |
lookup period_period_period { | |
ignore sub period period' period period; | |
ignore sub period' period period period; | |
sub period.spacer period.spacer period' by period_period_period.liga; | |
sub period.spacer period' period by period.spacer; | |
sub period' period period by period.spacer; | |
} period_period_period; | |
lookup plus_plus_plus { | |
ignore sub plus plus' plus plus; | |
ignore sub plus' plus plus plus; | |
sub plus.spacer plus.spacer plus' by plus_plus_plus.liga; | |
sub plus.spacer plus' plus by plus.spacer; | |
sub plus' plus plus by plus.spacer; | |
} plus_plus_plus; | |
lookup slash_slash_slash { | |
ignore sub slash slash' slash slash; | |
ignore sub slash' slash slash slash; | |
sub slash.spacer slash.spacer slash' by slash_slash_slash.liga; | |
sub slash.spacer slash' slash by slash.spacer; | |
sub slash' slash slash by slash.spacer; | |
} slash_slash_slash; | |
lookup w_w_w { | |
ignore sub w w' w w; | |
ignore sub w' w w w; | |
sub w.spacer w.spacer w' by w_w_w.liga; | |
sub w.spacer w' w by w.spacer; | |
sub w' w w by w.spacer; | |
} w_w_w; | |
lookup ampersand_ampersand { | |
ignore sub ampersand ampersand' ampersand; | |
ignore sub ampersand' ampersand ampersand; | |
sub ampersand.spacer ampersand' by ampersand_ampersand.liga; | |
sub ampersand' ampersand by ampersand.spacer; | |
} ampersand_ampersand; | |
lookup asciicircum_equal { | |
ignore sub asciicircum asciicircum' equal; | |
ignore sub asciicircum' equal equal; | |
sub asciicircum.spacer equal' by asciicircum_equal.liga; | |
sub asciicircum' equal by asciicircum.spacer; | |
} asciicircum_equal; | |
lookup asciitilde_asciitilde { | |
ignore sub asciitilde asciitilde' asciitilde; | |
ignore sub asciitilde' asciitilde asciitilde; | |
sub asciitilde.spacer asciitilde' by asciitilde_asciitilde.liga; | |
sub asciitilde' asciitilde by asciitilde.spacer; | |
} asciitilde_asciitilde; | |
lookup asciitilde_at { | |
ignore sub asciitilde asciitilde' at; | |
ignore sub asciitilde' at at; | |
sub asciitilde.spacer at' by asciitilde_at.liga; | |
sub asciitilde' at by asciitilde.spacer; | |
} asciitilde_at; | |
lookup asciitilde_greater { | |
ignore sub asciitilde asciitilde' greater; | |
ignore sub asciitilde' greater greater; | |
sub asciitilde.spacer greater' by asciitilde_greater.liga; | |
sub asciitilde' greater by asciitilde.spacer; | |
} asciitilde_greater; | |
lookup asciitilde_hyphen { | |
ignore sub asciitilde asciitilde' hyphen; | |
ignore sub asciitilde' hyphen hyphen; | |
sub asciitilde.spacer hyphen' by asciitilde_hyphen.liga; | |
sub asciitilde' hyphen by asciitilde.spacer; | |
} asciitilde_hyphen; | |
lookup asterisk_asterisk { | |
ignore sub asterisk asterisk' asterisk; | |
ignore sub asterisk' asterisk asterisk; | |
ignore sub slash asterisk' asterisk; | |
ignore sub asterisk' asterisk slash; | |
sub asterisk.spacer asterisk' by asterisk_asterisk.liga; | |
sub asterisk' asterisk by asterisk.spacer; | |
} asterisk_asterisk; | |
lookup asterisk_greater { | |
ignore sub asterisk asterisk' greater; | |
ignore sub asterisk' greater greater; | |
sub asterisk.spacer greater' by asterisk_greater.liga; | |
sub asterisk' greater by asterisk.spacer; | |
} asterisk_greater; | |
lookup asterisk_slash { | |
ignore sub asterisk asterisk' slash; | |
ignore sub asterisk' slash slash; | |
ignore sub slash asterisk' slash; | |
ignore sub asterisk' slash asterisk; | |
sub asterisk.spacer slash' by asterisk_slash.liga; | |
sub asterisk' slash by asterisk.spacer; | |
} asterisk_slash; | |
lookup bar_bar { | |
ignore sub bar bar' bar; | |
ignore sub bar' bar bar; | |
ignore sub [hyphen equal] bar' bar; | |
ignore sub bar' bar [hyphen equal]; | |
sub bar.spacer bar' by bar_bar.liga; | |
sub bar' bar by bar.spacer; | |
} bar_bar; | |
lookup bar_braceright { | |
ignore sub bar bar' braceright; | |
ignore sub bar' braceright braceright; | |
ignore sub braceleft bar' braceright; | |
sub bar.spacer braceright' by bar_braceright.liga; | |
sub bar' braceright by bar.spacer; | |
} bar_braceright; | |
lookup bar_bracketright { | |
ignore sub bar bar' bracketright; | |
ignore sub bar' bracketright bracketright; | |
ignore sub bracketleft bar' bracketright; | |
sub bar.spacer bracketright' by bar_bracketright.liga; | |
sub bar' bracketright by bar.spacer; | |
} bar_bracketright; | |
lookup bar_greater { | |
ignore sub bar bar' greater; | |
ignore sub bar' greater greater; | |
sub bar.spacer greater' by bar_greater.liga; | |
sub bar' greater by bar.spacer; | |
} bar_greater; | |
lookup braceleft_bar { | |
ignore sub braceleft braceleft' bar; | |
ignore sub braceleft' bar bar; | |
ignore sub braceleft' bar braceright; | |
sub braceleft.spacer bar' by braceleft_bar.liga; | |
sub braceleft' bar by braceleft.spacer; | |
} braceleft_bar; | |
lookup bracketleft_bar { | |
ignore sub bracketleft bracketleft' bar; | |
ignore sub bracketleft' bar bar; | |
ignore sub bracketleft' bar bracketright; | |
sub bracketleft.spacer bar' by bracketleft_bar.liga; | |
sub bracketleft' bar by bracketleft.spacer; | |
} bracketleft_bar; | |
lookup bracketright_numbersign { | |
ignore sub bracketright bracketright' numbersign; | |
ignore sub bracketright' numbersign numbersign; | |
sub bracketright.spacer numbersign' by bracketright_numbersign.liga; | |
sub bracketright' numbersign by bracketright.spacer; | |
} bracketright_numbersign; | |
lookup colon_colon { | |
ignore sub colon colon' colon; | |
ignore sub colon' colon colon; | |
ignore sub parenleft question colon' colon; | |
sub colon.spacer colon' by colon_colon.liga; | |
sub colon' colon by colon.spacer; | |
} colon_colon; | |
lookup colon_equal { | |
ignore sub colon colon' equal; | |
ignore sub colon' equal equal; | |
ignore sub parenleft question colon' equal; | |
ignore sub equal colon' equal; | |
sub colon.spacer equal' by colon_equal.liga; | |
sub colon' equal by colon.spacer; | |
} colon_equal; | |
lookup colon_greater { | |
ignore sub colon colon' greater; | |
ignore sub colon' greater greater; | |
ignore sub parenleft question colon' greater; | |
ignore sub colon' greater equal; | |
sub colon.spacer greater' by colon_greater.liga; | |
sub colon' greater by colon.spacer; | |
} colon_greater; | |
lookup colon_less { | |
ignore sub colon colon' less; | |
ignore sub colon' less less; | |
ignore sub parenleft question colon' less; | |
sub colon.spacer less' by colon_less.liga; | |
sub colon' less by colon.spacer; | |
} colon_less; | |
lookup dollar_greater { | |
ignore sub dollar dollar' greater; | |
ignore sub dollar' greater greater; | |
sub dollar.spacer greater' by dollar_greater.liga; | |
sub dollar' greater by dollar.spacer; | |
} dollar_greater; | |
lookup equal_equal { | |
ignore sub equal equal' equal; | |
ignore sub equal' equal equal; | |
ignore sub parenleft question equal' equal; | |
ignore sub parenleft question less equal' equal; | |
ignore sub less question equal' equal; | |
ignore sub [bracketleft less greater bar slash] equal' equal; | |
ignore sub equal' equal [bracketright less greater bar slash] ; | |
sub equal.spacer equal' by equal_equal.liga; | |
sub equal' equal by equal.spacer; | |
} equal_equal; | |
lookup exclam_equal { | |
ignore sub exclam exclam' equal; | |
ignore sub exclam' equal equal; | |
ignore sub parenleft question exclam' equal; | |
ignore sub parenleft question less exclam' equal; | |
ignore sub equal exclam' equal; | |
sub exclam.spacer equal' by exclam_equal.liga; | |
sub exclam' equal by exclam.spacer; | |
} exclam_equal; | |
lookup exclam_exclam { | |
ignore sub exclam exclam' exclam; | |
ignore sub exclam' exclam exclam; | |
ignore sub parenleft question exclam' exclam; | |
ignore sub parenleft question less exclam' exclam; | |
sub exclam.spacer exclam' by exclam_exclam.liga; | |
sub exclam' exclam by exclam.spacer; | |
} exclam_exclam; | |
lookup greater_colon { | |
ignore sub greater greater' colon; | |
ignore sub greater' colon colon; | |
sub greater.spacer colon' by greater_colon.liga; | |
sub greater' colon by greater.spacer; | |
} greater_colon; | |
lookup greater_equal { | |
ignore sub greater greater' equal; | |
ignore sub greater' equal equal; | |
ignore sub greater' equal [less greater bar colon exclam slash]; | |
sub greater.spacer equal' by greater_equal.liga; | |
sub greater' equal by greater.spacer; | |
} greater_equal; | |
lookup greater_greater { | |
ignore sub greater greater' greater; | |
ignore sub greater' greater greater; | |
ignore sub [asterisk plus dollar hyphen equal] greater' greater; | |
ignore sub greater' greater [hyphen equal]; | |
sub greater.spacer greater' by greater_greater.liga; | |
sub greater' greater by greater.spacer; | |
} greater_greater; | |
lookup hyphen_asciitilde { | |
ignore sub hyphen hyphen' asciitilde; | |
ignore sub hyphen' asciitilde asciitilde; | |
sub hyphen.spacer asciitilde' by hyphen_asciitilde.liga; | |
sub hyphen' asciitilde by hyphen.spacer; | |
} hyphen_asciitilde; | |
lookup hyphen_hyphen { | |
ignore sub hyphen hyphen' hyphen; | |
ignore sub hyphen' hyphen hyphen; | |
ignore sub [bracketleft less greater bar] hyphen' hyphen; | |
ignore sub hyphen' hyphen [bracketright less greater bar]; | |
sub hyphen.spacer hyphen' by hyphen_hyphen.liga; | |
sub hyphen' hyphen by hyphen.spacer; | |
} hyphen_hyphen; | |
lookup less_asciitilde { | |
ignore sub less less' asciitilde; | |
ignore sub less' asciitilde asciitilde; | |
sub less.spacer asciitilde' by less_asciitilde.liga; | |
sub less' asciitilde by less.spacer; | |
} less_asciitilde; | |
lookup less_asterisk { | |
ignore sub less less' asterisk; | |
ignore sub less' asterisk asterisk; | |
sub less.spacer asterisk' by less_asterisk.liga; | |
sub less' asterisk by less.spacer; | |
} less_asterisk; | |
lookup less_bar { | |
ignore sub less less' bar; | |
ignore sub less' bar bar; | |
sub less.spacer bar' by less_bar.liga; | |
sub less' bar by less.spacer; | |
} less_bar; | |
lookup less_colon { | |
ignore sub less less' colon; | |
ignore sub less' colon colon; | |
sub less.spacer colon' by less_colon.liga; | |
sub less' colon by less.spacer; | |
} less_colon; | |
lookup less_dollar { | |
ignore sub less less' dollar; | |
ignore sub less' dollar dollar; | |
sub less.spacer dollar' by less_dollar.liga; | |
sub less' dollar by less.spacer; | |
} less_dollar; | |
lookup less_equal { | |
ignore sub less less' equal; | |
ignore sub less' equal equal; | |
ignore sub parenleft question less' equal; | |
ignore sub less' equal [less greater bar colon exclam slash]; | |
sub less.spacer equal' by less_equal.liga; | |
sub less' equal by less.spacer; | |
} less_equal; | |
lookup less_greater { | |
ignore sub less less' greater; | |
ignore sub less' greater greater; | |
sub less.spacer greater' by less_greater.liga; | |
sub less' greater by less.spacer; | |
} less_greater; | |
lookup less_less { | |
ignore sub less less' less; | |
ignore sub less' less less; | |
ignore sub [hyphen equal] less' less; | |
ignore sub less' less [asterisk plus dollar hyphen equal]; | |
sub less.spacer less' by less_less.liga; | |
sub less' less by less.spacer; | |
} less_less; | |
lookup less_plus { | |
ignore sub less less' plus; | |
ignore sub less' plus plus; | |
sub less.spacer plus' by less_plus.liga; | |
sub less' plus by less.spacer; | |
} less_plus; | |
lookup less_slash { | |
ignore sub less less' slash; | |
ignore sub less' slash slash; | |
sub less.spacer slash' by less_slash.liga; | |
sub less' slash by less.spacer; | |
} less_slash; | |
lookup numbersign_braceleft { | |
ignore sub numbersign numbersign' braceleft; | |
ignore sub numbersign' braceleft braceleft; | |
sub numbersign.spacer braceleft' by numbersign_braceleft.liga; | |
sub numbersign' braceleft by numbersign.spacer; | |
} numbersign_braceleft; | |
lookup numbersign_bracketleft { | |
ignore sub numbersign numbersign' bracketleft; | |
ignore sub numbersign' bracketleft bracketleft; | |
sub numbersign.spacer bracketleft' by numbersign_bracketleft.liga; | |
sub numbersign' bracketleft by numbersign.spacer; | |
} numbersign_bracketleft; | |
lookup numbersign_colon { | |
ignore sub numbersign numbersign' colon; | |
ignore sub numbersign' colon colon; | |
sub numbersign.spacer colon' by numbersign_colon.liga; | |
sub numbersign' colon by numbersign.spacer; | |
} numbersign_colon; | |
lookup numbersign_equal { | |
ignore sub numbersign numbersign' equal; | |
ignore sub numbersign' equal equal; | |
sub numbersign.spacer equal' by numbersign_equal.liga; | |
sub numbersign' equal by numbersign.spacer; | |
} numbersign_equal; | |
lookup numbersign_exclam { | |
ignore sub numbersign numbersign' exclam; | |
ignore sub numbersign' exclam exclam; | |
sub numbersign.spacer exclam' by numbersign_exclam.liga; | |
sub numbersign' exclam by numbersign.spacer; | |
} numbersign_exclam; | |
lookup numbersign_numbersign { | |
ignore sub numbersign numbersign' numbersign; | |
ignore sub numbersign' numbersign numbersign; | |
sub numbersign.spacer numbersign' by numbersign_numbersign.liga; | |
sub numbersign' numbersign by numbersign.spacer; | |
} numbersign_numbersign; | |
lookup numbersign_parenleft { | |
ignore sub numbersign numbersign' parenleft; | |
ignore sub numbersign' parenleft parenleft; | |
sub numbersign.spacer parenleft' by numbersign_parenleft.liga; | |
sub numbersign' parenleft by numbersign.spacer; | |
} numbersign_parenleft; | |
lookup numbersign_question { | |
ignore sub numbersign numbersign' question; | |
ignore sub numbersign' question question; | |
sub numbersign.spacer question' by numbersign_question.liga; | |
sub numbersign' question by numbersign.spacer; | |
} numbersign_question; | |
lookup numbersign_underscore { | |
ignore sub numbersign numbersign' underscore; | |
ignore sub numbersign' underscore underscore; | |
sub numbersign.spacer underscore' by numbersign_underscore.liga; | |
sub numbersign' underscore by numbersign.spacer; | |
} numbersign_underscore; | |
lookup percent_percent { | |
ignore sub percent percent' percent; | |
ignore sub percent' percent percent; | |
sub percent.spacer percent' by percent_percent.liga; | |
sub percent' percent by percent.spacer; | |
} percent_percent; | |
lookup period_equal { | |
ignore sub period period' equal; | |
ignore sub period' equal equal; | |
sub period.spacer equal' by period_equal.liga; | |
sub period' equal by period.spacer; | |
} period_equal; | |
lookup period_hyphen { | |
ignore sub period period' hyphen; | |
ignore sub period' hyphen hyphen; | |
sub period.spacer hyphen' by period_hyphen.liga; | |
sub period' hyphen by period.spacer; | |
} period_hyphen; | |
lookup period_period { | |
ignore sub period period' period; | |
ignore sub period' period period; | |
sub period.spacer period' by period_period.liga; | |
sub period' period by period.spacer; | |
} period_period; | |
lookup period_question { | |
ignore sub period period' question; | |
ignore sub period' question question; | |
sub period.spacer question' by period_question.liga; | |
sub period' question by period.spacer; | |
} period_question; | |
lookup plus_greater { | |
ignore sub plus plus' greater; | |
ignore sub plus' greater greater; | |
sub plus.spacer greater' by plus_greater.liga; | |
sub plus' greater by plus.spacer; | |
} plus_greater; | |
lookup plus_plus { | |
ignore sub plus plus' plus; | |
ignore sub plus' plus plus; | |
sub plus.spacer plus' by plus_plus.liga; | |
sub plus' plus by plus.spacer; | |
} plus_plus; | |
lookup question_equal { | |
ignore sub question question' equal; | |
ignore sub question' equal equal; | |
ignore sub parenleft question' equal; | |
ignore sub less question' equal; | |
sub question.spacer equal' by question_equal.liga; | |
sub question' equal by question.spacer; | |
} question_equal; | |
lookup question_period { | |
ignore sub question question' period; | |
ignore sub question' period period; | |
sub question.spacer period' by question_period.liga; | |
sub question' period by question.spacer; | |
} question_period; | |
lookup question_question { | |
ignore sub question question' question; | |
ignore sub question' question question; | |
sub question.spacer question' by question_question.liga; | |
sub question' question by question.spacer; | |
} question_question; | |
lookup semicolon_semicolon { | |
ignore sub semicolon semicolon' semicolon; | |
ignore sub semicolon' semicolon semicolon; | |
sub semicolon.spacer semicolon' by semicolon_semicolon.liga; | |
sub semicolon' semicolon by semicolon.spacer; | |
} semicolon_semicolon; | |
lookup slash_asterisk { | |
ignore sub slash slash' asterisk; | |
ignore sub slash' asterisk asterisk; | |
ignore sub slash' asterisk slash; | |
ignore sub asterisk slash' asterisk; | |
sub slash.spacer asterisk' by slash_asterisk.liga; | |
sub slash' asterisk by slash.spacer; | |
} slash_asterisk; | |
lookup slash_greater { | |
ignore sub slash slash' greater; | |
ignore sub slash' greater greater; | |
sub slash.spacer greater' by slash_greater.liga; | |
sub slash' greater by slash.spacer; | |
} slash_greater; | |
lookup slash_slash { | |
ignore sub slash slash' slash; | |
ignore sub slash' slash slash; | |
sub slash.spacer slash' by slash_slash.liga; | |
sub slash' slash by slash.spacer; | |
} slash_slash; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# No ligature should follow those sequences | |
ignore_prefixes = [ | |
["parenleft", "question", "colon"], | |
# #578 #624 Regexp lookahead/lookbehind | |
["parenleft", "question", "equal"], | |
["parenleft", "question", "less", "equal"], | |
["parenleft", "question", "exclam"], | |
["parenleft", "question", "less", "exclam"], | |
# #850 PHP <?= | |
["less", "question", "equal"], | |
] | |
# ignore sub parenleft question less' exclam hyphen hyphen; | |
def gen_ignore_prefixes(liga): | |
prefixes = [] | |
for prefix in ignore_prefixes: | |
print(prefix) | |
# try to match last N glyphs in `prefix` with N first in `liga` | |
for N in range(len(prefix), 0, -1): | |
print("N={N} prefix={prefix} liga={liga}".format(N = N, prefix = prefix[-N:], liga=liga[:N])) | |
if prefix[-N:] == liga[:N]: | |
print("!MATCH at {N}".format(N = N)) | |
prefixes.append( | |
" ignore sub " | |
+ " ".join(prefix[0:-N]) | |
+ " " | |
+ liga[0] | |
+ "' " | |
+ " ".join(liga[1:]) | |
+ ";\n" | |
) | |
break | |
return "".join(prefixes) | |
ignores = { | |
"slash_asterisk": [ | |
" ignore sub slash' asterisk slash;\n", | |
" ignore sub asterisk slash' asterisk;\n", | |
], | |
"asterisk_slash": [ | |
" ignore sub slash asterisk' slash;\n", | |
" ignore sub asterisk' slash asterisk;\n", | |
], | |
"asterisk_asterisk": [ | |
" ignore sub slash asterisk' asterisk;\n", | |
" ignore sub asterisk' asterisk slash;\n", | |
], | |
"asterisk_asterisk_asterisk": [ | |
" ignore sub slash asterisk' asterisk asterisk;\n", | |
" ignore sub asterisk' asterisk asterisk slash;\n", | |
], | |
# #621 <||> | |
"less_bar_bar": [" ignore sub less' bar bar greater;\n"], | |
"bar_bar_greater": [" ignore sub less bar' bar greater;\n"], | |
# #574 :>= | |
"colon_greater": [" ignore sub colon' greater equal;\n"], | |
# #346 =:= | |
"colon_equal": [" ignore sub equal colon' equal;\n"], | |
# #346 =!= | |
"exclam_equal": [" ignore sub equal exclam' equal;\n"], | |
# #346 <=< <=> <=| <=: <=! <=/ | |
"less_equal": [" ignore sub less' equal [less greater bar colon exclam slash];\n"], | |
# #548 >=< | |
# #346 >=> >=< >=| >=: >=! >=/ | |
"greater_equal": [ | |
" ignore sub greater' equal [less greater bar colon exclam slash];\n" | |
], | |
# #593 {|} | |
"braceleft_bar": [" ignore sub braceleft' bar braceright;\n"], | |
"bar_braceright": [" ignore sub braceleft bar' braceright;\n"], | |
# #593 |: | |
"bracketleft_bar": [" ignore sub bracketleft' bar bracketright;\n"], | |
"bar_bracketright": [" ignore sub bracketleft bar' bracketright;\n"], | |
# #410 <*>> <+>> <$>> | |
# #346 >>->> >>=>> | |
"greater_greater": [ | |
" ignore sub [asterisk plus dollar hyphen equal] greater' greater;\n" | |
" ignore sub greater' greater [hyphen equal];\n" | |
], | |
# #410 <*>>> <+>>> <$>>> | |
# #346 >>>->>> >>>=>>> | |
"greater_greater_greater": [ | |
" ignore sub [asterisk plus dollar] greater' greater greater;\n" | |
], | |
# #410 <<*> <<+> <<$> | |
# #346 <<-<< <<=<< | |
"less_less": [ | |
" ignore sub [hyphen equal] less' less;\n" | |
" ignore sub less' less [asterisk plus dollar hyphen equal];\n" | |
], | |
# #410 <<<*> <<<+> <<<$> | |
"less_less_less": [" ignore sub less' less less [asterisk plus dollar];\n"], | |
# #968 == | |
# #346 <==> >==< |==| /==/ | |
"equal_equal": [ | |
" ignore sub [bracketleft less greater bar slash] equal' equal;\n" | |
" ignore sub equal' equal [bracketright less greater bar slash] ;\n" | |
], | |
# #968 === | |
# #346 <===> >===< |===| /===/ | |
"equal_equal_equal": [ | |
" ignore sub [bracketleft less greater bar slash] equal' equal equal;\n" | |
" ignore sub equal' equal equal [bracketright less greater bar slash];\n" | |
], | |
# #968 -- | |
# #346 <--> >--< |--| | |
"hyphen_hyphen": [ | |
" ignore sub [bracketleft less greater bar] hyphen' hyphen;\n" | |
" ignore sub hyphen' hyphen [bracketright less greater bar];\n" | |
], | |
# #968 --- | |
# #346 <---> >---< |---| | |
"hyphen_hyphen_hyphen": [ | |
" ignore sub [bracketleft less greater bar] hyphen' hyphen hyphen;\n" | |
" ignore sub hyphen' hyphen hyphen [bracketright less greater bar];\n" | |
], | |
# #346 ||-|| ||=|| | |
"bar_bar": [ | |
" ignore sub [hyphen equal] bar' bar;\n" | |
" ignore sub bar' bar [hyphen equal];\n" | |
], | |
} | |
def gettemplate(ligas): | |
count = len(ligas) | |
if count == 2: | |
template = """ | |
lookup 1_2 { | |
__ignore__ | |
sub 1.spacer 2' by 1_2.liga; | |
sub 1' 2 by 1.spacer; | |
} 1_2; | |
""" | |
elif count == 3: | |
template = """ | |
lookup 1_2_3 { | |
__ignore__ | |
sub 1.spacer 2.spacer 3' by 1_2_3.liga; | |
sub 1.spacer 2' 3 by 2.spacer; | |
sub 1' 2 3 by 1.spacer; | |
} 1_2_3; | |
""" | |
elif count == 4: | |
template = """ | |
lookup 1_2_3_4 { | |
__ignore__ | |
sub 1.spacer 2.spacer 3.spacer 4' by 1_2_3_4.liga; | |
sub 1.spacer 2.spacer 3' 4 by 3.spacer; | |
sub 1.spacer 2' 3 4 by 2.spacer; | |
sub 1' 2 3 4 by 1.spacer; | |
} 1_2_3_4; | |
""" | |
elif count == 5: | |
template = """ | |
lookup 1_2_3_4_5 { | |
__ignore__ | |
sub 1.spacer 2.spacer 3.spacer 4.spacer 5' by 1_2_3_4_5.liga; | |
sub 1.spacer 2.spacer 3.spacer 4' 5 by 4.spacer; | |
sub 1.spacer 2.spacer 3' 4 5 by 3.spacer; | |
sub 1.spacer 2' 3 4 5 by 2.spacer; | |
sub 1' 2 3 4 5 by 1.spacer; | |
} 1_2_3_4_5; | |
""" | |
return template | |
# DO NOT generate ignores at all | |
def skipignores(ligas): | |
_skipignores = [ | |
["less", "asterisk", "greater"], | |
["less", "plus", "greater"], | |
["less", "dollar", "greater"], | |
] | |
return len(list(filter(lambda lig: lig == ligas, _skipignores))) > 0 | |
def getignore(liga): | |
if skipignores(liga): | |
return "" | |
template1 = " ignore sub 1 1'" | |
template2 = " ignore sub 1'" | |
for i in range(2, len(liga) + 1): | |
template1 = template1 + " " + str(i) | |
template2 = template2 + " " + str(i) | |
template1 = template1 + ";\n" | |
template2 = template2 + " " + str(len(liga)) + ";\n" | |
# get ignore from dict | |
glyph = "_".join(liga) | |
ignore = ignores.get(glyph) | |
if ignore != None: | |
ignore = "".join(ignore) | |
else: | |
ignore = "" | |
return template1 + template2 + gen_ignore_prefixes(liga) + ignore | |
def replacerule(ligas, template, ignore): | |
rule = template.replace("__ignore__\n", ignore) | |
for i in range(0, len(ligas)): | |
rule = rule.replace(str(i + 1), ligas[i]) | |
return rule | |
_manual = [ | |
["slash", "backslash"], | |
["backslash", "slash"], | |
] | |
def manual(liga): | |
return len(list(filter(lambda lig: lig == liga, _manual))) > 0 | |
def liga_rule(liga): | |
template = gettemplate(liga) | |
ignore = getignore(liga) | |
rule = replacerule(liga, template, ignore) | |
return rule | |
# sort by len of ligs (longest to shortest) | |
# followed alphabettically (ascending order) | |
def compare_ligas(l1, l2): | |
len1 = len(l1) | |
len2 = len(l2) | |
if len1 > len2: | |
return -1 | |
elif len1 < len2: | |
return 1 | |
# same length | |
elif l1 < l2: | |
return -1 | |
elif l1 > l2: | |
return 1 | |
else: | |
return 0 | |
def replace_calt(ligas): | |
l = list(filter(lambda lig: manual(lig) == False, ligas)) | |
l.sort(key=lambda item: [-len(item), "_".join(item)]) | |
rules = [] | |
for liga in l: | |
rules.append(liga_rule(liga)) | |
return "".join(rules) | |
ligas = [ | |
["slash", "backslash"], | |
["hyphen", "hyphen"], | |
["greater", "equal"], | |
["backslash", "slash"], | |
["greater", "equal", "less"], | |
["less", "exclam", "hyphen", "hyphen"], | |
] | |
def run(): | |
with open("glyphs.txt", "r") as f: | |
glyphs = f.readlines() | |
ligas = list(map(lambda glyph: glyph.replace(".liga\n", "").split("_"), glyphs)) | |
print(ligas) | |
calt = replace_calt(ligas) | |
with open("calt2.fea", "w") as f: | |
print(calt) | |
f.write(calt) | |
debug = False | |
#debug = True | |
if debug: | |
print(replace_calt([["colon", "colon", "colon"]])) | |
else: | |
run() | |
# print(ligarule(["hyphen", "hyphen"])) | |
# print(ligarule(["greater", "equal"])) | |
# print(ligarule(["greater", "equal", "less"])) | |
# print(ligarule(["less", "asterisk", "greater"])) | |
# print(ligarule(["less", "exclam", "hyphen", "hyphen"])) | |
# print(ligarule(["numbersign", "numbersign", "numbersign", "numbersign", "numbersign"])) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment