From 3c37a4c5f2a59d0a9416c7342dc308ad54473318 Mon Sep 17 00:00:00 2001 From: Nikita Prokopov Date: Sun, 30 Sep 2018 22:32:05 +0300 Subject: [PATCH] regen_calt replaces calt code in .glyphs file --- FiraCode.glyphs | 8 +- clojure/gen_calt.clj | 105 -------------------- clojure/{parse_glyphs.clj => glyphs.clj} | 52 +++++++--- clojure/regen_calt.clj | 118 +++++++++++++++++++++++ deps.edn | 5 +- 5 files changed, 162 insertions(+), 126 deletions(-) delete mode 100755 clojure/gen_calt.clj rename clojure/{parse_glyphs.clj => glyphs.clj} (68%) create mode 100755 clojure/regen_calt.clj diff --git a/FiraCode.glyphs b/FiraCode.glyphs index ddab48d..c4573fe 100644 --- a/FiraCode.glyphs +++ b/FiraCode.glyphs @@ -1,9 +1,5 @@ { .appVersion = "939"; -DisplayStrings = ( -"((<||>).\012!!.\012?.\012some!!.method\012", -/question_period.liga -); classes = ( { automatic = 1; @@ -188,7 +184,7 @@ code = "pos @Uppercase <5 0 10 0>;\012"; name = cpsp; }, { -code = "### start of generated calt\012\012 lookup less_equal_equal_greater {\012 ignore sub less less' equal equal greater;\012 ignore sub less' equal equal greater greater;\012 sub LIG LIG LIG greater' by less_equal_equal_greater.liga;\012 sub LIG LIG equal' greater by LIG;\012 sub LIG equal' equal greater by LIG;\012 sub less' equal equal greater by LIG;\012 } less_equal_equal_greater;\012\012 lookup less_exclam_hyphen_hyphen {\012 ignore sub less less' exclam hyphen hyphen;\012 ignore sub less' exclam hyphen hyphen hyphen;\012 sub LIG LIG LIG hyphen' by less_exclam_hyphen_hyphen.liga;\012 sub LIG LIG hyphen' hyphen by LIG;\012 sub LIG exclam' hyphen hyphen by LIG;\012 sub less' exclam hyphen hyphen by LIG;\012 } less_exclam_hyphen_hyphen;\012\012 lookup less_bar_bar_bar {\012 ignore sub less less' bar bar bar;\012 ignore sub less' bar bar bar bar;\012 sub LIG LIG LIG bar' by less_bar_bar_bar.liga;\012 sub LIG LIG bar' bar by LIG;\012 sub LIG bar' bar bar by LIG;\012 sub less' bar bar bar by LIG;\012 } less_bar_bar_bar;\012\012 lookup bar_bar_bar_greater {\012 ignore sub bar bar' bar bar greater;\012 ignore sub bar' bar bar greater greater;\012 sub LIG LIG LIG greater' by bar_bar_bar_greater.liga;\012 sub LIG LIG bar' greater by LIG;\012 sub LIG bar' bar greater by LIG;\012 sub bar' bar bar greater by LIG;\012 } bar_bar_bar_greater;\012\012 lookup numbersign_numbersign_numbersign_numbersign {\012 ignore sub numbersign numbersign' numbersign numbersign numbersign;\012 ignore sub numbersign' numbersign numbersign numbersign numbersign;\012 sub LIG LIG LIG numbersign' by numbersign_numbersign_numbersign_numbersign.liga;\012 sub LIG LIG numbersign' numbersign by LIG;\012 sub LIG numbersign' numbersign numbersign by LIG;\012 sub numbersign' numbersign numbersign numbersign by LIG;\012 } numbersign_numbersign_numbersign_numbersign;\012\012 lookup asciitilde_asciitilde_greater {\012 ignore sub asciitilde asciitilde' asciitilde greater;\012 ignore sub asciitilde' asciitilde greater greater;\012 sub LIG LIG greater' by asciitilde_asciitilde_greater.liga;\012 sub LIG asciitilde' greater by LIG;\012 sub asciitilde' asciitilde greater by LIG;\012 } asciitilde_asciitilde_greater;\012\012 lookup less_slash_greater {\012 ignore sub less less' slash greater;\012 ignore sub less' slash greater greater;\012 sub LIG LIG greater' by less_slash_greater.liga;\012 sub LIG slash' greater by LIG;\012 sub less' slash greater by LIG;\012 } less_slash_greater;\012\012 lookup less_asciitilde_asciitilde {\012 ignore sub less less' asciitilde asciitilde;\012 ignore sub less' asciitilde asciitilde asciitilde;\012 sub LIG LIG asciitilde' by less_asciitilde_asciitilde.liga;\012 sub LIG asciitilde' asciitilde by LIG;\012 sub less' asciitilde asciitilde by LIG;\012 } less_asciitilde_asciitilde;\012\012 lookup less_asciitilde_greater {\012 ignore sub less less' asciitilde greater;\012 ignore sub less' asciitilde greater greater;\012 sub LIG LIG greater' by less_asciitilde_greater.liga;\012 sub LIG asciitilde' greater by LIG;\012 sub less' asciitilde greater by LIG;\012 } less_asciitilde_greater;\012\012 lookup less_less_less {\012 ignore sub less less' less less;\012 ignore sub less' less less less;\012 sub LIG LIG less' by less_less_less.liga;\012 sub LIG less' less by LIG;\012 sub less' less less by LIG;\012 } less_less_less;\012\012 lookup less_less_equal {\012 ignore sub less less' less equal;\012 ignore sub less' less equal equal;\012 sub LIG LIG equal' by less_less_equal.liga;\012 sub LIG less' equal by LIG;\012 sub less' less equal by LIG;\012 } less_less_equal;\012\012 lookup less_less_hyphen {\012 ignore sub less less' less hyphen;\012 ignore sub less' less hyphen hyphen;\012 sub LIG LIG hyphen' by less_less_hyphen.liga;\012 sub LIG less' hyphen by LIG;\012 sub less' less hyphen by LIG;\012 } less_less_hyphen;\012\012 lookup less_equal_less {\012 ignore sub less less' equal less;\012 ignore sub less' equal less less;\012 sub LIG LIG less' by less_equal_less.liga;\012 sub LIG equal' less by LIG;\012 sub less' equal less by LIG;\012 } less_equal_less;\012\012 lookup less_equal_greater {\012 ignore sub less less' equal greater;\012 ignore sub less' equal greater greater;\012 sub LIG LIG greater' by less_equal_greater.liga;\012 sub LIG equal' greater by LIG;\012 sub less' equal greater by LIG;\012 } less_equal_greater;\012\012 lookup less_equal_equal {\012 ignore sub less less' equal equal;\012 ignore sub less' equal equal equal;\012 sub LIG LIG equal' by less_equal_equal.liga;\012 sub LIG equal' equal by LIG;\012 sub less' equal equal by LIG;\012 } less_equal_equal;\012\012 lookup less_plus_greater {\012 ignore sub less less' plus greater;\012 ignore sub less' plus greater greater;\012 sub LIG LIG greater' by less_plus_greater.liga;\012 sub LIG plus' greater by LIG;\012 sub less' plus greater by LIG;\012 } less_plus_greater;\012\012 lookup less_hyphen_less {\012 ignore sub less less' hyphen less;\012 ignore sub less' hyphen less less;\012 sub LIG LIG less' by less_hyphen_less.liga;\012 sub LIG hyphen' less by LIG;\012 sub less' hyphen less by LIG;\012 } less_hyphen_less;\012\012 lookup less_hyphen_greater {\012 ignore sub less less' hyphen greater;\012 ignore sub less' hyphen greater greater;\012 sub LIG LIG greater' by less_hyphen_greater.liga;\012 sub LIG hyphen' greater by LIG;\012 sub less' hyphen greater by LIG;\012 } less_hyphen_greater;\012\012 lookup less_hyphen_hyphen {\012 ignore sub less less' hyphen hyphen;\012 ignore sub less' hyphen hyphen hyphen;\012 sub LIG LIG hyphen' by less_hyphen_hyphen.liga;\012 sub LIG hyphen' hyphen by LIG;\012 sub less' hyphen hyphen by LIG;\012 } less_hyphen_hyphen;\012\012 lookup less_dollar_greater {\012 ignore sub less less' dollar greater;\012 ignore sub less' dollar greater greater;\012 sub LIG LIG greater' by less_dollar_greater.liga;\012 sub LIG dollar' greater by LIG;\012 sub less' dollar greater by LIG;\012 } less_dollar_greater;\012\012 lookup less_bar_greater {\012 ignore sub less less' bar greater;\012 ignore sub less' bar greater greater;\012 sub LIG LIG greater' by less_bar_greater.liga;\012 sub LIG bar' greater by LIG;\012 sub less' bar greater by LIG;\012 } less_bar_greater;\012\012 lookup less_bar_bar {\012 ignore sub less less' bar bar;\012 ignore sub less' bar bar bar;\012 ignore sub less' bar bar greater;\012 sub LIG LIG bar' by less_bar_bar.liga;\012 sub LIG bar' bar by LIG;\012 sub less' bar bar by LIG;\012 } less_bar_bar;\012\012 lookup less_asterisk_greater {\012 ignore sub less less' asterisk greater;\012 ignore sub less' asterisk greater greater;\012 sub LIG LIG greater' by less_asterisk_greater.liga;\012 sub LIG asterisk' greater by LIG;\012 sub less' asterisk greater by LIG;\012 } less_asterisk_greater;\012\012 lookup greater_greater_greater {\012 ignore sub greater greater' greater greater;\012 ignore sub greater' greater greater greater;\012 sub LIG LIG greater' by greater_greater_greater.liga;\012 sub LIG greater' greater by LIG;\012 sub greater' greater greater by LIG;\012 } greater_greater_greater;\012\012 lookup greater_greater_equal {\012 ignore sub greater greater' greater equal;\012 ignore sub greater' greater equal equal;\012 sub LIG LIG equal' by greater_greater_equal.liga;\012 sub LIG greater' equal by LIG;\012 sub greater' greater equal by LIG;\012 } greater_greater_equal;\012\012 lookup greater_greater_hyphen {\012 ignore sub greater greater' greater hyphen;\012 ignore sub greater' greater hyphen hyphen;\012 sub LIG LIG hyphen' by greater_greater_hyphen.liga;\012 sub LIG greater' hyphen by LIG;\012 sub greater' greater hyphen by LIG;\012 } greater_greater_hyphen;\012\012 lookup greater_equal_greater {\012 ignore sub greater greater' equal greater;\012 ignore sub greater' equal greater greater;\012 sub LIG LIG greater' by greater_equal_greater.liga;\012 sub LIG equal' greater by LIG;\012 sub greater' equal greater by LIG;\012 } greater_equal_greater;\012\012 lookup greater_hyphen_greater {\012 ignore sub greater greater' hyphen greater;\012 ignore sub greater' hyphen greater greater;\012 sub LIG LIG greater' by greater_hyphen_greater.liga;\012 sub LIG hyphen' greater by LIG;\012 sub greater' hyphen greater by LIG;\012 } greater_hyphen_greater;\012\012 lookup equal_slash_equal {\012 ignore sub equal equal' slash equal;\012 ignore sub equal' slash equal equal;\012 sub LIG LIG equal' by equal_slash_equal.liga;\012 sub LIG slash' equal by LIG;\012 sub equal' slash equal by LIG;\012 } equal_slash_equal;\012\012 lookup equal_less_less {\012 ignore sub equal equal' less less;\012 ignore sub equal' less less less;\012 sub LIG LIG less' by equal_less_less.liga;\012 sub LIG less' less by LIG;\012 sub equal' less less by LIG;\012 } equal_less_less;\012\012 lookup equal_greater_greater {\012 ignore sub equal equal' greater greater;\012 ignore sub equal' greater greater greater;\012 sub LIG LIG greater' by equal_greater_greater.liga;\012 sub LIG greater' greater by LIG;\012 sub equal' greater greater by LIG;\012 } equal_greater_greater;\012\012 lookup equal_equal_greater {\012 ignore sub equal equal' equal greater;\012 ignore sub equal' equal greater greater;\012 sub LIG LIG greater' by equal_equal_greater.liga;\012 sub LIG equal' greater by LIG;\012 sub equal' equal greater by LIG;\012 } equal_equal_greater;\012\012 lookup equal_equal_equal {\012 ignore sub equal equal' equal equal;\012 ignore sub equal' equal equal equal;\012 sub LIG LIG equal' by equal_equal_equal.liga;\012 sub LIG equal' equal by LIG;\012 sub equal' equal equal by LIG;\012 } equal_equal_equal;\012\012 lookup equal_exclam_equal {\012 ignore sub equal equal' exclam equal;\012 ignore sub equal' exclam equal equal;\012 sub LIG LIG equal' by equal_exclam_equal.liga;\012 sub LIG exclam' equal by LIG;\012 sub equal' exclam equal by LIG;\012 } equal_exclam_equal;\012\012 lookup equal_colon_equal {\012 ignore sub equal equal' colon equal;\012 ignore sub equal' colon equal equal;\012 sub LIG LIG equal' by equal_colon_equal.liga;\012 sub LIG colon' equal by LIG;\012 sub equal' colon equal by LIG;\012 } equal_colon_equal;\012\012 lookup plus_plus_plus {\012 ignore sub plus plus' plus plus;\012 ignore sub plus' plus plus plus;\012 sub LIG LIG plus' by plus_plus_plus.liga;\012 sub LIG plus' plus by LIG;\012 sub plus' plus plus by LIG;\012 } plus_plus_plus;\012\012 lookup bar_bar_greater {\012 ignore sub bar bar' bar greater;\012 ignore sub bar' bar greater greater;\012 ignore sub less bar' bar greater;\012 sub LIG LIG greater' by bar_bar_greater.liga;\012 sub LIG bar' greater by LIG;\012 sub bar' bar greater by LIG;\012 } bar_bar_greater;\012\012 lookup bar_bar_equal {\012 ignore sub bar bar' bar equal;\012 ignore sub bar' bar equal equal;\012 sub LIG LIG equal' by bar_bar_equal.liga;\012 sub LIG bar' equal by LIG;\012 sub bar' bar equal by LIG;\012 } bar_bar_equal;\012\012 lookup underscore_bar_underscore {\012 ignore sub underscore underscore' bar underscore;\012 ignore sub underscore' bar underscore underscore;\012 sub LIG LIG underscore' by underscore_bar_underscore.liga;\012 sub LIG bar' underscore by LIG;\012 sub underscore' bar underscore by LIG;\012 } underscore_bar_underscore;\012\012 lookup slash_slash_slash {\012 ignore sub slash slash' slash slash;\012 ignore sub slash' slash slash slash;\012 sub LIG LIG slash' by slash_slash_slash.liga;\012 sub LIG slash' slash by LIG;\012 sub slash' slash slash by LIG;\012 } slash_slash_slash;\012\012 lookup slash_equal_equal {\012 ignore sub slash slash' equal equal;\012 ignore sub slash' equal equal equal;\012 sub LIG LIG equal' by slash_equal_equal.liga;\012 sub LIG equal' equal by LIG;\012 sub slash' equal equal by LIG;\012 } slash_equal_equal;\012\012 lookup period_period_period {\012 ignore sub period period' period period;\012 ignore sub period' period period period;\012 sub LIG LIG period' by period_period_period.liga;\012 sub LIG period' period by LIG;\012 sub period' period period by LIG;\012 } period_period_period;\012\012 lookup period_period_less {\012 ignore sub period period' period less;\012 ignore sub period' period less less;\012 sub LIG LIG less' by period_period_less.liga;\012 sub LIG period' less by LIG;\012 sub period' period less by LIG;\012 } period_period_less;\012\012 lookup period_period_equal {\012 ignore sub period period' period equal;\012 ignore sub period' period equal equal;\012 sub LIG LIG equal' by period_period_equal.liga;\012 sub LIG period' equal by LIG;\012 sub period' period equal by LIG;\012 } period_period_equal;\012\012 lookup numbersign_underscore_parenleft {\012 ignore sub numbersign numbersign' underscore parenleft;\012 ignore sub numbersign' underscore parenleft parenleft;\012 sub LIG LIG parenleft' by numbersign_underscore_parenleft.liga;\012 sub LIG underscore' parenleft by LIG;\012 sub numbersign' underscore parenleft by LIG;\012 } numbersign_underscore_parenleft;\012\012 lookup numbersign_numbersign_numbersign {\012 ignore sub numbersign numbersign' numbersign numbersign;\012 ignore sub numbersign' numbersign numbersign numbersign;\012 sub LIG LIG numbersign' by numbersign_numbersign_numbersign.liga;\012 sub LIG numbersign' numbersign by LIG;\012 sub numbersign' numbersign numbersign by LIG;\012 } numbersign_numbersign_numbersign;\012\012 lookup hyphen_less_less {\012 ignore sub hyphen hyphen' less less;\012 ignore sub hyphen' less less less;\012 sub LIG LIG less' by hyphen_less_less.liga;\012 sub LIG less' less by LIG;\012 sub hyphen' less less by LIG;\012 } hyphen_less_less;\012\012 lookup hyphen_greater_greater {\012 ignore sub hyphen hyphen' greater greater;\012 ignore sub hyphen' greater greater greater;\012 sub LIG LIG greater' by hyphen_greater_greater.liga;\012 sub LIG greater' greater by LIG;\012 sub hyphen' greater greater by LIG;\012 } hyphen_greater_greater;\012\012 lookup hyphen_hyphen_greater {\012 ignore sub hyphen hyphen' hyphen greater;\012 ignore sub hyphen' hyphen greater greater;\012 sub LIG LIG greater' by hyphen_hyphen_greater.liga;\012 sub LIG hyphen' greater by LIG;\012 sub hyphen' hyphen greater by LIG;\012 } hyphen_hyphen_greater;\012\012 lookup hyphen_hyphen_hyphen {\012 ignore sub hyphen hyphen' hyphen hyphen;\012 ignore sub hyphen' hyphen hyphen hyphen;\012 sub LIG LIG hyphen' by hyphen_hyphen_hyphen.liga;\012 sub LIG hyphen' hyphen by LIG;\012 sub hyphen' hyphen hyphen by LIG;\012 } hyphen_hyphen_hyphen;\012\012 lookup exclam_equal_equal {\012 ignore sub exclam exclam' equal equal;\012 ignore sub exclam' equal equal equal;\012 sub LIG LIG equal' by exclam_equal_equal.liga;\012 sub LIG equal' equal by LIG;\012 sub exclam' equal equal by LIG;\012 } exclam_equal_equal;\012\012 lookup colon_colon_equal {\012 ignore sub colon colon' colon equal;\012 ignore sub colon' colon equal equal;\012 sub LIG LIG equal' by colon_colon_equal.liga;\012 sub LIG colon' equal by LIG;\012 sub colon' colon equal by LIG;\012 } colon_colon_equal;\012\012 lookup colon_colon_colon {\012 ignore sub colon colon' colon colon;\012 ignore sub colon' colon colon colon;\012 sub LIG LIG colon' by colon_colon_colon.liga;\012 sub LIG colon' colon by LIG;\012 sub colon' colon colon by LIG;\012 } colon_colon_colon;\012\012 lookup asterisk_asterisk_asterisk {\012 ignore sub asterisk asterisk' asterisk asterisk;\012 ignore sub asterisk' asterisk asterisk asterisk;\012 ignore sub slash asterisk' asterisk asterisk;\012 ignore sub asterisk' asterisk asterisk slash;\012 sub LIG LIG asterisk' by asterisk_asterisk_asterisk.liga;\012 sub LIG asterisk' asterisk by LIG;\012 sub asterisk' asterisk asterisk by LIG;\012 } asterisk_asterisk_asterisk;\012\012 lookup w_w_w {\012 ignore sub w w' w w;\012 ignore sub w' w w w;\012 sub LIG LIG w' by w_w_w.liga;\012 sub LIG w' w by LIG;\012 sub w' w w by LIG;\012 } w_w_w;\012\012 lookup percent_percent {\012 ignore sub percent percent' percent;\012 ignore sub percent' percent percent;\012 sub LIG percent' by percent_percent.liga;\012 sub percent' percent by LIG;\012 } percent_percent;\012\012 lookup asciitilde_asciitilde {\012 ignore sub asciitilde asciitilde' asciitilde;\012 ignore sub asciitilde' asciitilde asciitilde;\012 sub LIG asciitilde' by asciitilde_asciitilde.liga;\012 sub asciitilde' asciitilde by LIG;\012 } asciitilde_asciitilde;\012\012 lookup asciitilde_greater {\012 ignore sub asciitilde asciitilde' greater;\012 ignore sub asciitilde' greater greater;\012 sub LIG greater' by asciitilde_greater.liga;\012 sub asciitilde' greater by LIG;\012 } asciitilde_greater;\012\012 lookup asciitilde_equal {\012 ignore sub asciitilde asciitilde' equal;\012 ignore sub asciitilde' equal equal;\012 sub LIG equal' by asciitilde_equal.liga;\012 sub asciitilde' equal by LIG;\012 } asciitilde_equal;\012\012 lookup asciitilde_hyphen {\012 ignore sub asciitilde asciitilde' hyphen;\012 ignore sub asciitilde' hyphen hyphen;\012 sub LIG hyphen' by asciitilde_hyphen.liga;\012 sub asciitilde' hyphen by LIG;\012 } asciitilde_hyphen;\012\012 lookup asciitilde_at {\012 ignore sub asciitilde asciitilde' at;\012 ignore sub asciitilde' at at;\012 sub LIG at' by asciitilde_at.liga;\012 sub asciitilde' at by LIG;\012 } asciitilde_at;\012\012 lookup less_slash {\012 ignore sub less less' slash;\012 ignore sub less' slash slash;\012 sub LIG slash' by less_slash.liga;\012 sub less' slash by LIG;\012 } less_slash;\012\012 lookup less_asciitilde {\012 ignore sub less less' asciitilde;\012 ignore sub less' asciitilde asciitilde;\012 sub LIG asciitilde' by less_asciitilde.liga;\012 sub less' asciitilde by LIG;\012 } less_asciitilde;\012\012 lookup less_less {\012 ignore sub less less' less;\012 ignore sub less' less less;\012 sub LIG less' by less_less.liga;\012 sub less' less by LIG;\012 } less_less;\012\012 lookup less_greater {\012 ignore sub less less' greater;\012 ignore sub less' greater greater;\012 sub LIG greater' by less_greater.liga;\012 sub less' greater by LIG;\012 } less_greater;\012\012 lookup less_equal {\012 ignore sub less less' equal;\012 ignore sub less' equal equal;\012 ignore sub parenleft question less' equal;\012 sub LIG equal' by less_equal.liga;\012 sub less' equal by LIG;\012 } less_equal;\012\012 lookup less_plus {\012 ignore sub less less' plus;\012 ignore sub less' plus plus;\012 sub LIG plus' by less_plus.liga;\012 sub less' plus by LIG;\012 } less_plus;\012\012 lookup less_hyphen {\012 ignore sub less less' hyphen;\012 ignore sub less' hyphen hyphen;\012 sub LIG hyphen' by less_hyphen.liga;\012 sub less' hyphen by LIG;\012 } less_hyphen;\012\012 lookup less_dollar {\012 ignore sub less less' dollar;\012 ignore sub less' dollar dollar;\012 sub LIG dollar' by less_dollar.liga;\012 sub less' dollar by LIG;\012 } less_dollar;\012\012 lookup less_colon {\012 ignore sub less less' colon;\012 ignore sub less' colon colon;\012 sub LIG colon' by less_colon.liga;\012 sub less' colon by LIG;\012 } less_colon;\012\012 lookup less_bar {\012 ignore sub less less' bar;\012 ignore sub less' bar bar;\012 sub LIG bar' by less_bar.liga;\012 sub less' bar by LIG;\012 } less_bar;\012\012 lookup less_asterisk {\012 ignore sub less less' asterisk;\012 ignore sub less' asterisk asterisk;\012 sub LIG asterisk' by less_asterisk.liga;\012 sub less' asterisk by LIG;\012 } less_asterisk;\012\012 lookup greater_greater {\012 ignore sub greater greater' greater;\012 ignore sub greater' greater greater;\012 sub LIG greater' by greater_greater.liga;\012 sub greater' greater by LIG;\012 } greater_greater;\012\012 lookup greater_equal {\012 ignore sub greater greater' equal;\012 ignore sub greater' equal equal;\012 sub LIG equal' by greater_equal.liga;\012 sub greater' equal by LIG;\012 } greater_equal;\012\012 lookup greater_hyphen {\012 ignore sub greater greater' hyphen;\012 ignore sub greater' hyphen hyphen;\012 sub LIG hyphen' by greater_hyphen.liga;\012 sub greater' hyphen by LIG;\012 } greater_hyphen;\012\012 lookup equal_greater {\012 ignore sub equal equal' greater;\012 ignore sub equal' greater greater;\012 sub LIG greater' by equal_greater.liga;\012 sub equal' greater by LIG;\012 } equal_greater;\012\012 lookup equal_equal {\012 ignore sub equal equal' equal;\012 ignore sub equal' equal equal;\012 sub LIG equal' by equal_equal.liga;\012 sub equal' equal by LIG;\012 } equal_equal;\012\012 lookup plus_greater {\012 ignore sub plus plus' greater;\012 ignore sub plus' greater greater;\012 sub LIG greater' by plus_greater.liga;\012 sub plus' greater by LIG;\012 } plus_greater;\012\012 lookup plus_plus {\012 ignore sub plus plus' plus;\012 ignore sub plus' plus plus;\012 sub LIG plus' by plus_plus.liga;\012 sub plus' plus by LIG;\012 } plus_plus;\012\012 lookup dollar_greater {\012 ignore sub dollar dollar' greater;\012 ignore sub dollar' greater greater;\012 sub LIG greater' by dollar_greater.liga;\012 sub dollar' greater by LIG;\012 } dollar_greater;\012\012 lookup asciicircum_equal {\012 ignore sub asciicircum asciicircum' equal;\012 ignore sub asciicircum' equal equal;\012 sub LIG equal' by asciicircum_equal.liga;\012 sub asciicircum' equal by LIG;\012 } asciicircum_equal;\012\012 lookup bar_greater {\012 ignore sub bar bar' greater;\012 ignore sub bar' greater greater;\012 sub LIG greater' by bar_greater.liga;\012 sub bar' greater by LIG;\012 } bar_greater;\012\012 lookup bar_equal {\012 ignore sub bar bar' equal;\012 ignore sub bar' equal equal;\012 sub LIG equal' by bar_equal.liga;\012 sub bar' equal by LIG;\012 } bar_equal;\012\012 lookup bar_hyphen {\012 ignore sub bar bar' hyphen;\012 ignore sub bar' hyphen hyphen;\012 sub LIG hyphen' by bar_hyphen.liga;\012 sub bar' hyphen by LIG;\012 } bar_hyphen;\012\012 lookup bar_bracketright {\012 ignore sub bar bar' bracketright;\012 ignore sub bar' bracketright bracketright;\012 sub LIG bracketright' by bar_bracketright.liga;\012 sub bar' bracketright by LIG;\012 } bar_bracketright;\012\012 lookup bar_braceright {\012 ignore sub bar bar' braceright;\012 ignore sub bar' braceright braceright;\012 sub LIG braceright' by bar_braceright.liga;\012 sub bar' braceright by LIG;\012 } bar_braceright;\012\012 lookup bar_bar {\012 ignore sub bar bar' bar;\012 ignore sub bar' bar bar;\012 sub LIG bar' by bar_bar.liga;\012 sub bar' bar by LIG;\012 } bar_bar;\012\012 lookup ampersand_ampersand {\012 ignore sub ampersand ampersand' ampersand;\012 ignore sub ampersand' ampersand ampersand;\012 sub LIG ampersand' by ampersand_ampersand.liga;\012 sub ampersand' ampersand by LIG;\012 } ampersand_ampersand;\012\012 lookup underscore_underscore {\012 ignore sub underscore underscore' underscore;\012 ignore sub underscore' underscore underscore;\012 sub LIG underscore' by underscore_underscore.liga;\012 sub underscore' underscore by LIG;\012 } underscore_underscore;\012\012 lookup slash_slash {\012 ignore sub slash slash' slash;\012 ignore sub slash' slash slash;\012 sub LIG slash' by slash_slash.liga;\012 sub slash' slash by LIG;\012 } slash_slash;\012\012 lookup slash_greater {\012 ignore sub slash slash' greater;\012 ignore sub slash' greater greater;\012 sub LIG greater' by slash_greater.liga;\012 sub slash' greater by LIG;\012 } slash_greater;\012\012 lookup slash_equal {\012 ignore sub slash slash' equal;\012 ignore sub slash' equal equal;\012 sub LIG equal' by slash_equal.liga;\012 sub slash' equal by LIG;\012 } slash_equal;\012\012 lookup slash_asterisk {\012 ignore sub slash slash' asterisk;\012 ignore sub slash' asterisk asterisk;\012 ignore sub slash' asterisk slash;\012 ignore sub asterisk slash' asterisk;\012 sub LIG asterisk' by slash_asterisk.liga;\012 sub slash' asterisk by LIG;\012 } slash_asterisk;\012\012 lookup semicolon_semicolon {\012 ignore sub semicolon semicolon' semicolon;\012 ignore sub semicolon' semicolon semicolon;\012 sub LIG semicolon' by semicolon_semicolon.liga;\012 sub semicolon' semicolon by LIG;\012 } semicolon_semicolon;\012\012 lookup question_question {\012 ignore sub question question' question;\012 ignore sub question' question question;\012 sub LIG question' by question_question.liga;\012 sub question' question by LIG;\012 } question_question;\012\012 lookup question_period {\012 ignore sub question question' period;\012 ignore sub question' period period;\012 sub LIG period' by question_period.liga;\012 sub question' period by LIG;\012 } question_period;\012\012 lookup question_equal {\012 ignore sub question question' equal;\012 ignore sub question' equal equal;\012 ignore sub parenleft question' equal;\012 sub LIG equal' by question_equal.liga;\012 sub question' equal by LIG;\012 } question_equal;\012\012 lookup question_colon {\012 ignore sub question question' colon;\012 ignore sub question' colon colon;\012 ignore sub parenleft question' colon;\012 sub LIG colon' by question_colon.liga;\012 sub question' colon by LIG;\012 } question_colon;\012\012 lookup period_question {\012 ignore sub period period' question;\012 ignore sub period' question question;\012 sub LIG question' by period_question.liga;\012 sub period' question by LIG;\012 } period_question;\012\012 lookup period_period {\012 ignore sub period period' period;\012 ignore sub period' period period;\012 sub LIG period' by period_period.liga;\012 sub period' period by LIG;\012 } period_period;\012\012 lookup period_equal {\012 ignore sub period period' equal;\012 ignore sub period' equal equal;\012 sub LIG equal' by period_equal.liga;\012 sub period' equal by LIG;\012 } period_equal;\012\012 lookup period_hyphen {\012 ignore sub period period' hyphen;\012 ignore sub period' hyphen hyphen;\012 sub LIG hyphen' by period_hyphen.liga;\012 sub period' hyphen by LIG;\012 } period_hyphen;\012\012 lookup numbersign_underscore {\012 ignore sub numbersign numbersign' underscore;\012 ignore sub numbersign' underscore underscore;\012 sub LIG underscore' by numbersign_underscore.liga;\012 sub numbersign' underscore by LIG;\012 } numbersign_underscore;\012\012 lookup numbersign_question {\012 ignore sub numbersign numbersign' question;\012 ignore sub numbersign' question question;\012 sub LIG question' by numbersign_question.liga;\012 sub numbersign' question by LIG;\012 } numbersign_question;\012\012 lookup numbersign_parenleft {\012 ignore sub numbersign numbersign' parenleft;\012 ignore sub numbersign' parenleft parenleft;\012 sub LIG parenleft' by numbersign_parenleft.liga;\012 sub numbersign' parenleft by LIG;\012 } numbersign_parenleft;\012\012 lookup numbersign_equal {\012 ignore sub numbersign numbersign' equal;\012 ignore sub numbersign' equal equal;\012 sub LIG equal' by numbersign_equal.liga;\012 sub numbersign' equal by LIG;\012 } numbersign_equal;\012\012 lookup numbersign_numbersign {\012 ignore sub numbersign numbersign' numbersign;\012 ignore sub numbersign' numbersign numbersign;\012 sub LIG numbersign' by numbersign_numbersign.liga;\012 sub numbersign' numbersign by LIG;\012 } numbersign_numbersign;\012\012 lookup numbersign_exclam {\012 ignore sub numbersign numbersign' exclam;\012 ignore sub numbersign' exclam exclam;\012 sub LIG exclam' by numbersign_exclam.liga;\012 sub numbersign' exclam by LIG;\012 } numbersign_exclam;\012\012 lookup numbersign_colon {\012 ignore sub numbersign numbersign' colon;\012 ignore sub numbersign' colon colon;\012 sub LIG colon' by numbersign_colon.liga;\012 sub numbersign' colon by LIG;\012 } numbersign_colon;\012\012 lookup numbersign_bracketleft {\012 ignore sub numbersign numbersign' bracketleft;\012 ignore sub numbersign' bracketleft bracketleft;\012 sub LIG bracketleft' by numbersign_bracketleft.liga;\012 sub numbersign' bracketleft by LIG;\012 } numbersign_bracketleft;\012\012 lookup numbersign_braceleft {\012 ignore sub numbersign numbersign' braceleft;\012 ignore sub numbersign' braceleft braceleft;\012 sub LIG braceleft' by numbersign_braceleft.liga;\012 sub numbersign' braceleft by LIG;\012 } numbersign_braceleft;\012\012 lookup hyphen_asciitilde {\012 ignore sub hyphen hyphen' asciitilde;\012 ignore sub hyphen' asciitilde asciitilde;\012 sub LIG asciitilde' by hyphen_asciitilde.liga;\012 sub hyphen' asciitilde by LIG;\012 } hyphen_asciitilde;\012\012 lookup hyphen_less {\012 ignore sub hyphen hyphen' less;\012 ignore sub hyphen' less less;\012 sub LIG less' by hyphen_less.liga;\012 sub hyphen' less by LIG;\012 } hyphen_less;\012\012 lookup hyphen_greater {\012 ignore sub hyphen hyphen' greater;\012 ignore sub hyphen' greater greater;\012 sub LIG greater' by hyphen_greater.liga;\012 sub hyphen' greater by LIG;\012 } hyphen_greater;\012\012 lookup hyphen_hyphen {\012 ignore sub hyphen hyphen' hyphen;\012 ignore sub hyphen' hyphen hyphen;\012 sub LIG hyphen' by hyphen_hyphen.liga;\012 sub hyphen' hyphen by LIG;\012 } hyphen_hyphen;\012\012 lookup hyphen_bar {\012 ignore sub hyphen hyphen' bar;\012 ignore sub hyphen' bar bar;\012 sub LIG bar' by hyphen_bar.liga;\012 sub hyphen' bar by LIG;\012 } hyphen_bar;\012\012 lookup exclam_equal {\012 ignore sub exclam exclam' equal;\012 ignore sub exclam' equal equal;\012 sub LIG equal' by exclam_equal.liga;\012 sub exclam' equal by LIG;\012 } exclam_equal;\012\012 lookup exclam_exclam {\012 ignore sub exclam exclam' exclam;\012 ignore sub exclam' exclam exclam;\012 sub LIG exclam' by exclam_exclam.liga;\012 sub exclam' exclam by LIG;\012 } exclam_exclam;\012\012 lookup colon_greater {\012 ignore sub colon colon' greater;\012 ignore sub colon' greater greater;\012 sub LIG greater' by colon_greater.liga;\012 sub colon' greater by LIG;\012 } colon_greater;\012\012 lookup colon_equal {\012 ignore sub colon colon' equal;\012 ignore sub colon' equal equal;\012 sub LIG equal' by colon_equal.liga;\012 sub colon' equal by LIG;\012 } colon_equal;\012\012 lookup colon_colon {\012 ignore sub colon colon' colon;\012 ignore sub colon' colon colon;\012 sub LIG colon' by colon_colon.liga;\012 sub colon' colon by LIG;\012 } colon_colon;\012\012 lookup bracketright_numbersign {\012 ignore sub bracketright bracketright' numbersign;\012 ignore sub bracketright' numbersign numbersign;\012 sub LIG numbersign' by bracketright_numbersign.liga;\012 sub bracketright' numbersign by LIG;\012 } bracketright_numbersign;\012\012 lookup bracketleft_bar {\012 ignore sub bracketleft bracketleft' bar;\012 ignore sub bracketleft' bar bar;\012 sub LIG bar' by bracketleft_bar.liga;\012 sub bracketleft' bar by LIG;\012 } bracketleft_bar;\012\012 lookup braceleft_bar {\012 ignore sub braceleft braceleft' bar;\012 ignore sub braceleft' bar bar;\012 sub LIG bar' by braceleft_bar.liga;\012 sub braceleft' bar by LIG;\012 } braceleft_bar;\012\012 lookup asterisk_slash {\012 ignore sub asterisk asterisk' slash;\012 ignore sub asterisk' slash slash;\012 ignore sub slash asterisk' slash;\012 ignore sub asterisk' slash asterisk;\012 sub LIG slash' by asterisk_slash.liga;\012 sub asterisk' slash by LIG;\012 } asterisk_slash;\012\012 lookup asterisk_greater {\012 ignore sub asterisk asterisk' greater;\012 ignore sub asterisk' greater greater;\012 sub LIG greater' by asterisk_greater.liga;\012 sub asterisk' greater by LIG;\012 } asterisk_greater;\012\012 lookup asterisk_asterisk {\012 ignore sub asterisk asterisk' asterisk;\012 ignore sub asterisk' asterisk asterisk;\012 ignore sub slash asterisk' asterisk;\012 ignore sub asterisk' asterisk slash;\012 sub LIG asterisk' by asterisk_asterisk.liga;\012 sub asterisk' asterisk by LIG;\012 } asterisk_asterisk;\012\012### end of generated calt\012\012sub less asciitilde' greater by asciitilde_asciitilde.liga;\012\012lookup lowercase_hyphen {\012 ignore sub @Tall \\hyphen' @Lowercase;\012 ignore sub @Lowercase \\hyphen' @Tall; \012 sub \\hyphen' @Lowercase by \\hyphen.lc;\012 sub @Lowercase \\hyphen' by \\hyphen.lc;\012} lowercase_hyphen;\012\012lookup lowercase_plus {\012 ignore sub @Tall \\plus' @Lowercase;\012 ignore sub @Lowercase \\plus' @Tall;\012 sub \\plus' @Lowercase by \\plus.lc;\012 sub @Lowercase \\plus' by \\plus.lc;\012} lowercase_plus;\012\012lookup lowercase_asterisk {\012 ignore sub @Tall \\asterisk' @Lowercase;\012 ignore sub @Lowercase \\asterisk' @Tall;\012 sub \\asterisk' @Lowercase by \\asterisk.lc;\012 sub @Lowercase \\asterisk' by \\asterisk.lc;\012} lowercase_asterisk;\012\012lookup uppercase_colon {\012 ignore sub @Tall \\colon' @Lowercase;\012 ignore sub @Lowercase \\colon' @Tall;\012 sub @Tall \\colon' by \\colon.uc;\012 sub \\colon' @Tall by \\colon.uc;\012} uppercase_colon;\012\012sub \\zero \\x' @HexDigit by \\x.multiply;\012sub @Digit \\x' @Digit by \\x.multiply;\012# sub \\bracketleft [\\x \\X]' \\bracketright by \\x.multiply;\012# sub \\bracketleft [\\v \\V]' \\bracketright by \\checkmark;\012sub \\backslash \\backslash' by \\_part.backslash;\012\012###\012\012lookup caltGreekUCdiph {\012 sub @GreekUCdiphIOTA Iota' by Iotadieresis;\012 sub @GreekUCdiphUPSILON Upsilon' by Upsilondieresis;\012} caltGreekUCdiph;\012\012lookup caltGreekUC {\012 sub @GreekUCAcc' @GreekUC by @GreekUCcalt;\012 sub @GreekUC @GreekUCAcc' by @GreekUCcalt;\012 sub @GreekUCAcc' space @GreekUC by @GreekUCcalt;\012 sub @GreekUC space @GreekUCAcc' by @GreekUCcalt;\012} caltGreekUC;\012"; +code = "### start of generated calt\012lookup less_equal_equal_greater {\012 ignore sub less less' equal equal greater;\012 ignore sub less' equal equal greater greater;\012 sub LIG LIG LIG greater' by less_equal_equal_greater.liga;\012 sub LIG LIG equal' greater by LIG;\012 sub LIG equal' equal greater by LIG;\012 sub less' equal equal greater by LIG;\012} less_equal_equal_greater;\012\012lookup less_exclam_hyphen_hyphen {\012 ignore sub less less' exclam hyphen hyphen;\012 ignore sub less' exclam hyphen hyphen hyphen;\012 sub LIG LIG LIG hyphen' by less_exclam_hyphen_hyphen.liga;\012 sub LIG LIG hyphen' hyphen by LIG;\012 sub LIG exclam' hyphen hyphen by LIG;\012 sub less' exclam hyphen hyphen by LIG;\012} less_exclam_hyphen_hyphen;\012\012lookup less_bar_bar_bar {\012 ignore sub less less' bar bar bar;\012 ignore sub less' bar bar bar bar;\012 sub LIG LIG LIG bar' by less_bar_bar_bar.liga;\012 sub LIG LIG bar' bar by LIG;\012 sub LIG bar' bar bar by LIG;\012 sub less' bar bar bar by LIG;\012} less_bar_bar_bar;\012\012lookup bar_bar_bar_greater {\012 ignore sub bar bar' bar bar greater;\012 ignore sub bar' bar bar greater greater;\012 sub LIG LIG LIG greater' by bar_bar_bar_greater.liga;\012 sub LIG LIG bar' greater by LIG;\012 sub LIG bar' bar greater by LIG;\012 sub bar' bar bar greater by LIG;\012} bar_bar_bar_greater;\012\012lookup numbersign_numbersign_numbersign_numbersign {\012 ignore sub numbersign numbersign' numbersign numbersign numbersign;\012 ignore sub numbersign' numbersign numbersign numbersign numbersign;\012 sub LIG LIG LIG numbersign' by numbersign_numbersign_numbersign_numbersign.liga;\012 sub LIG LIG numbersign' numbersign by LIG;\012 sub LIG numbersign' numbersign numbersign by LIG;\012 sub numbersign' numbersign numbersign numbersign by LIG;\012} numbersign_numbersign_numbersign_numbersign;\012\012lookup asciitilde_asciitilde_greater {\012 ignore sub asciitilde asciitilde' asciitilde greater;\012 ignore sub asciitilde' asciitilde greater greater;\012 sub LIG LIG greater' by asciitilde_asciitilde_greater.liga;\012 sub LIG asciitilde' greater by LIG;\012 sub asciitilde' asciitilde greater by LIG;\012} asciitilde_asciitilde_greater;\012\012lookup less_slash_greater {\012 ignore sub less less' slash greater;\012 ignore sub less' slash greater greater;\012 sub LIG LIG greater' by less_slash_greater.liga;\012 sub LIG slash' greater by LIG;\012 sub less' slash greater by LIG;\012} less_slash_greater;\012\012lookup less_asciitilde_asciitilde {\012 ignore sub less less' asciitilde asciitilde;\012 ignore sub less' asciitilde asciitilde asciitilde;\012 sub LIG LIG asciitilde' by less_asciitilde_asciitilde.liga;\012 sub LIG asciitilde' asciitilde by LIG;\012 sub less' asciitilde asciitilde by LIG;\012} less_asciitilde_asciitilde;\012\012lookup less_asciitilde_greater {\012 ignore sub less less' asciitilde greater;\012 ignore sub less' asciitilde greater greater;\012 sub LIG LIG greater' by less_asciitilde_greater.liga;\012 sub LIG asciitilde' greater by LIG;\012 sub less' asciitilde greater by LIG;\012} less_asciitilde_greater;\012\012lookup less_less_less {\012 ignore sub less less' less less;\012 ignore sub less' less less less;\012 sub LIG LIG less' by less_less_less.liga;\012 sub LIG less' less by LIG;\012 sub less' less less by LIG;\012} less_less_less;\012\012lookup less_less_equal {\012 ignore sub less less' less equal;\012 ignore sub less' less equal equal;\012 sub LIG LIG equal' by less_less_equal.liga;\012 sub LIG less' equal by LIG;\012 sub less' less equal by LIG;\012} less_less_equal;\012\012lookup less_less_hyphen {\012 ignore sub less less' less hyphen;\012 ignore sub less' less hyphen hyphen;\012 sub LIG LIG hyphen' by less_less_hyphen.liga;\012 sub LIG less' hyphen by LIG;\012 sub less' less hyphen by LIG;\012} less_less_hyphen;\012\012lookup less_equal_less {\012 ignore sub less less' equal less;\012 ignore sub less' equal less less;\012 sub LIG LIG less' by less_equal_less.liga;\012 sub LIG equal' less by LIG;\012 sub less' equal less by LIG;\012} less_equal_less;\012\012lookup less_equal_greater {\012 ignore sub less less' equal greater;\012 ignore sub less' equal greater greater;\012 sub LIG LIG greater' by less_equal_greater.liga;\012 sub LIG equal' greater by LIG;\012 sub less' equal greater by LIG;\012} less_equal_greater;\012\012lookup less_equal_equal {\012 ignore sub less less' equal equal;\012 ignore sub less' equal equal equal;\012 sub LIG LIG equal' by less_equal_equal.liga;\012 sub LIG equal' equal by LIG;\012 sub less' equal equal by LIG;\012} less_equal_equal;\012\012lookup less_plus_greater {\012 ignore sub less less' plus greater;\012 ignore sub less' plus greater greater;\012 sub LIG LIG greater' by less_plus_greater.liga;\012 sub LIG plus' greater by LIG;\012 sub less' plus greater by LIG;\012} less_plus_greater;\012\012lookup less_hyphen_less {\012 ignore sub less less' hyphen less;\012 ignore sub less' hyphen less less;\012 sub LIG LIG less' by less_hyphen_less.liga;\012 sub LIG hyphen' less by LIG;\012 sub less' hyphen less by LIG;\012} less_hyphen_less;\012\012lookup less_hyphen_greater {\012 ignore sub less less' hyphen greater;\012 ignore sub less' hyphen greater greater;\012 sub LIG LIG greater' by less_hyphen_greater.liga;\012 sub LIG hyphen' greater by LIG;\012 sub less' hyphen greater by LIG;\012} less_hyphen_greater;\012\012lookup less_hyphen_hyphen {\012 ignore sub less less' hyphen hyphen;\012 ignore sub less' hyphen hyphen hyphen;\012 sub LIG LIG hyphen' by less_hyphen_hyphen.liga;\012 sub LIG hyphen' hyphen by LIG;\012 sub less' hyphen hyphen by LIG;\012} less_hyphen_hyphen;\012\012lookup less_dollar_greater {\012 ignore sub less less' dollar greater;\012 ignore sub less' dollar greater greater;\012 sub LIG LIG greater' by less_dollar_greater.liga;\012 sub LIG dollar' greater by LIG;\012 sub less' dollar greater by LIG;\012} less_dollar_greater;\012\012lookup less_bar_greater {\012 ignore sub less less' bar greater;\012 ignore sub less' bar greater greater;\012 sub LIG LIG greater' by less_bar_greater.liga;\012 sub LIG bar' greater by LIG;\012 sub less' bar greater by LIG;\012} less_bar_greater;\012\012lookup less_bar_bar {\012 ignore sub less less' bar bar;\012 ignore sub less' bar bar bar;\012 ignore sub less' bar bar greater;\012 sub LIG LIG bar' by less_bar_bar.liga;\012 sub LIG bar' bar by LIG;\012 sub less' bar bar by LIG;\012} less_bar_bar;\012\012lookup less_asterisk_greater {\012 ignore sub less less' asterisk greater;\012 ignore sub less' asterisk greater greater;\012 sub LIG LIG greater' by less_asterisk_greater.liga;\012 sub LIG asterisk' greater by LIG;\012 sub less' asterisk greater by LIG;\012} less_asterisk_greater;\012\012lookup greater_greater_greater {\012 ignore sub greater greater' greater greater;\012 ignore sub greater' greater greater greater;\012 sub LIG LIG greater' by greater_greater_greater.liga;\012 sub LIG greater' greater by LIG;\012 sub greater' greater greater by LIG;\012} greater_greater_greater;\012\012lookup greater_greater_equal {\012 ignore sub greater greater' greater equal;\012 ignore sub greater' greater equal equal;\012 sub LIG LIG equal' by greater_greater_equal.liga;\012 sub LIG greater' equal by LIG;\012 sub greater' greater equal by LIG;\012} greater_greater_equal;\012\012lookup greater_greater_hyphen {\012 ignore sub greater greater' greater hyphen;\012 ignore sub greater' greater hyphen hyphen;\012 sub LIG LIG hyphen' by greater_greater_hyphen.liga;\012 sub LIG greater' hyphen by LIG;\012 sub greater' greater hyphen by LIG;\012} greater_greater_hyphen;\012\012lookup greater_equal_greater {\012 ignore sub greater greater' equal greater;\012 ignore sub greater' equal greater greater;\012 sub LIG LIG greater' by greater_equal_greater.liga;\012 sub LIG equal' greater by LIG;\012 sub greater' equal greater by LIG;\012} greater_equal_greater;\012\012lookup greater_hyphen_greater {\012 ignore sub greater greater' hyphen greater;\012 ignore sub greater' hyphen greater greater;\012 sub LIG LIG greater' by greater_hyphen_greater.liga;\012 sub LIG hyphen' greater by LIG;\012 sub greater' hyphen greater by LIG;\012} greater_hyphen_greater;\012\012lookup equal_slash_equal {\012 ignore sub equal equal' slash equal;\012 ignore sub equal' slash equal equal;\012 sub LIG LIG equal' by equal_slash_equal.liga;\012 sub LIG slash' equal by LIG;\012 sub equal' slash equal by LIG;\012} equal_slash_equal;\012\012lookup equal_less_less {\012 ignore sub equal equal' less less;\012 ignore sub equal' less less less;\012 sub LIG LIG less' by equal_less_less.liga;\012 sub LIG less' less by LIG;\012 sub equal' less less by LIG;\012} equal_less_less;\012\012lookup equal_greater_greater {\012 ignore sub equal equal' greater greater;\012 ignore sub equal' greater greater greater;\012 sub LIG LIG greater' by equal_greater_greater.liga;\012 sub LIG greater' greater by LIG;\012 sub equal' greater greater by LIG;\012} equal_greater_greater;\012\012lookup equal_equal_greater {\012 ignore sub equal equal' equal greater;\012 ignore sub equal' equal greater greater;\012 sub LIG LIG greater' by equal_equal_greater.liga;\012 sub LIG equal' greater by LIG;\012 sub equal' equal greater by LIG;\012} equal_equal_greater;\012\012lookup equal_equal_equal {\012 ignore sub equal equal' equal equal;\012 ignore sub equal' equal equal equal;\012 sub LIG LIG equal' by equal_equal_equal.liga;\012 sub LIG equal' equal by LIG;\012 sub equal' equal equal by LIG;\012} equal_equal_equal;\012\012lookup equal_exclam_equal {\012 ignore sub equal equal' exclam equal;\012 ignore sub equal' exclam equal equal;\012 sub LIG LIG equal' by equal_exclam_equal.liga;\012 sub LIG exclam' equal by LIG;\012 sub equal' exclam equal by LIG;\012} equal_exclam_equal;\012\012lookup equal_colon_equal {\012 ignore sub equal equal' colon equal;\012 ignore sub equal' colon equal equal;\012 sub LIG LIG equal' by equal_colon_equal.liga;\012 sub LIG colon' equal by LIG;\012 sub equal' colon equal by LIG;\012} equal_colon_equal;\012\012lookup plus_plus_plus {\012 ignore sub plus plus' plus plus;\012 ignore sub plus' plus plus plus;\012 sub LIG LIG plus' by plus_plus_plus.liga;\012 sub LIG plus' plus by LIG;\012 sub plus' plus plus by LIG;\012} plus_plus_plus;\012\012lookup bar_bar_greater {\012 ignore sub bar bar' bar greater;\012 ignore sub bar' bar greater greater;\012 ignore sub less bar' bar greater;\012 sub LIG LIG greater' by bar_bar_greater.liga;\012 sub LIG bar' greater by LIG;\012 sub bar' bar greater by LIG;\012} bar_bar_greater;\012\012lookup bar_bar_equal {\012 ignore sub bar bar' bar equal;\012 ignore sub bar' bar equal equal;\012 sub LIG LIG equal' by bar_bar_equal.liga;\012 sub LIG bar' equal by LIG;\012 sub bar' bar equal by LIG;\012} bar_bar_equal;\012\012lookup underscore_bar_underscore {\012 ignore sub underscore underscore' bar underscore;\012 ignore sub underscore' bar underscore underscore;\012 sub LIG LIG underscore' by underscore_bar_underscore.liga;\012 sub LIG bar' underscore by LIG;\012 sub underscore' bar underscore by LIG;\012} underscore_bar_underscore;\012\012lookup slash_slash_slash {\012 ignore sub slash slash' slash slash;\012 ignore sub slash' slash slash slash;\012 sub LIG LIG slash' by slash_slash_slash.liga;\012 sub LIG slash' slash by LIG;\012 sub slash' slash slash by LIG;\012} slash_slash_slash;\012\012lookup slash_equal_equal {\012 ignore sub slash slash' equal equal;\012 ignore sub slash' equal equal equal;\012 sub LIG LIG equal' by slash_equal_equal.liga;\012 sub LIG equal' equal by LIG;\012 sub slash' equal equal by LIG;\012} slash_equal_equal;\012\012lookup period_period_period {\012 ignore sub period period' period period;\012 ignore sub period' period period period;\012 sub LIG LIG period' by period_period_period.liga;\012 sub LIG period' period by LIG;\012 sub period' period period by LIG;\012} period_period_period;\012\012lookup period_period_less {\012 ignore sub period period' period less;\012 ignore sub period' period less less;\012 sub LIG LIG less' by period_period_less.liga;\012 sub LIG period' less by LIG;\012 sub period' period less by LIG;\012} period_period_less;\012\012lookup period_period_equal {\012 ignore sub period period' period equal;\012 ignore sub period' period equal equal;\012 sub LIG LIG equal' by period_period_equal.liga;\012 sub LIG period' equal by LIG;\012 sub period' period equal by LIG;\012} period_period_equal;\012\012lookup numbersign_underscore_parenleft {\012 ignore sub numbersign numbersign' underscore parenleft;\012 ignore sub numbersign' underscore parenleft parenleft;\012 sub LIG LIG parenleft' by numbersign_underscore_parenleft.liga;\012 sub LIG underscore' parenleft by LIG;\012 sub numbersign' underscore parenleft by LIG;\012} numbersign_underscore_parenleft;\012\012lookup numbersign_numbersign_numbersign {\012 ignore sub numbersign numbersign' numbersign numbersign;\012 ignore sub numbersign' numbersign numbersign numbersign;\012 sub LIG LIG numbersign' by numbersign_numbersign_numbersign.liga;\012 sub LIG numbersign' numbersign by LIG;\012 sub numbersign' numbersign numbersign by LIG;\012} numbersign_numbersign_numbersign;\012\012lookup hyphen_less_less {\012 ignore sub hyphen hyphen' less less;\012 ignore sub hyphen' less less less;\012 sub LIG LIG less' by hyphen_less_less.liga;\012 sub LIG less' less by LIG;\012 sub hyphen' less less by LIG;\012} hyphen_less_less;\012\012lookup hyphen_greater_greater {\012 ignore sub hyphen hyphen' greater greater;\012 ignore sub hyphen' greater greater greater;\012 sub LIG LIG greater' by hyphen_greater_greater.liga;\012 sub LIG greater' greater by LIG;\012 sub hyphen' greater greater by LIG;\012} hyphen_greater_greater;\012\012lookup hyphen_hyphen_greater {\012 ignore sub hyphen hyphen' hyphen greater;\012 ignore sub hyphen' hyphen greater greater;\012 sub LIG LIG greater' by hyphen_hyphen_greater.liga;\012 sub LIG hyphen' greater by LIG;\012 sub hyphen' hyphen greater by LIG;\012} hyphen_hyphen_greater;\012\012lookup hyphen_hyphen_hyphen {\012 ignore sub hyphen hyphen' hyphen hyphen;\012 ignore sub hyphen' hyphen hyphen hyphen;\012 sub LIG LIG hyphen' by hyphen_hyphen_hyphen.liga;\012 sub LIG hyphen' hyphen by LIG;\012 sub hyphen' hyphen hyphen by LIG;\012} hyphen_hyphen_hyphen;\012\012lookup exclam_equal_equal {\012 ignore sub exclam exclam' equal equal;\012 ignore sub exclam' equal equal equal;\012 sub LIG LIG equal' by exclam_equal_equal.liga;\012 sub LIG equal' equal by LIG;\012 sub exclam' equal equal by LIG;\012} exclam_equal_equal;\012\012lookup exclam_exclam_period {\012 ignore sub exclam exclam' exclam period;\012 ignore sub exclam' exclam period period;\012 sub LIG LIG period' by exclam_exclam_period.liga;\012 sub LIG exclam' period by LIG;\012 sub exclam' exclam period by LIG;\012} exclam_exclam_period;\012\012lookup colon_colon_equal {\012 ignore sub colon colon' colon equal;\012 ignore sub colon' colon equal equal;\012 sub LIG LIG equal' by colon_colon_equal.liga;\012 sub LIG colon' equal by LIG;\012 sub colon' colon equal by LIG;\012} colon_colon_equal;\012\012lookup colon_colon_colon {\012 ignore sub colon colon' colon colon;\012 ignore sub colon' colon colon colon;\012 sub LIG LIG colon' by colon_colon_colon.liga;\012 sub LIG colon' colon by LIG;\012 sub colon' colon colon by LIG;\012} colon_colon_colon;\012\012lookup asterisk_asterisk_asterisk {\012 ignore sub asterisk asterisk' asterisk asterisk;\012 ignore sub asterisk' asterisk asterisk asterisk;\012 ignore sub slash asterisk' asterisk asterisk;\012 ignore sub asterisk' asterisk asterisk slash;\012 sub LIG LIG asterisk' by asterisk_asterisk_asterisk.liga;\012 sub LIG asterisk' asterisk by LIG;\012 sub asterisk' asterisk asterisk by LIG;\012} asterisk_asterisk_asterisk;\012\012lookup w_w_w {\012 ignore sub w w' w w;\012 ignore sub w' w w w;\012 sub LIG LIG w' by w_w_w.liga;\012 sub LIG w' w by LIG;\012 sub w' w w by LIG;\012} w_w_w;\012\012lookup percent_percent {\012 ignore sub percent percent' percent;\012 ignore sub percent' percent percent;\012 sub LIG percent' by percent_percent.liga;\012 sub percent' percent by LIG;\012} percent_percent;\012\012lookup asciitilde_asciitilde {\012 ignore sub asciitilde asciitilde' asciitilde;\012 ignore sub asciitilde' asciitilde asciitilde;\012 sub LIG asciitilde' by asciitilde_asciitilde.liga;\012 sub asciitilde' asciitilde by LIG;\012} asciitilde_asciitilde;\012\012lookup asciitilde_greater {\012 ignore sub asciitilde asciitilde' greater;\012 ignore sub asciitilde' greater greater;\012 sub LIG greater' by asciitilde_greater.liga;\012 sub asciitilde' greater by LIG;\012} asciitilde_greater;\012\012lookup asciitilde_equal {\012 ignore sub asciitilde asciitilde' equal;\012 ignore sub asciitilde' equal equal;\012 sub LIG equal' by asciitilde_equal.liga;\012 sub asciitilde' equal by LIG;\012} asciitilde_equal;\012\012lookup asciitilde_hyphen {\012 ignore sub asciitilde asciitilde' hyphen;\012 ignore sub asciitilde' hyphen hyphen;\012 sub LIG hyphen' by asciitilde_hyphen.liga;\012 sub asciitilde' hyphen by LIG;\012} asciitilde_hyphen;\012\012lookup asciitilde_at {\012 ignore sub asciitilde asciitilde' at;\012 ignore sub asciitilde' at at;\012 sub LIG at' by asciitilde_at.liga;\012 sub asciitilde' at by LIG;\012} asciitilde_at;\012\012lookup less_slash {\012 ignore sub less less' slash;\012 ignore sub less' slash slash;\012 sub LIG slash' by less_slash.liga;\012 sub less' slash by LIG;\012} less_slash;\012\012lookup less_asciitilde {\012 ignore sub less less' asciitilde;\012 ignore sub less' asciitilde asciitilde;\012 sub LIG asciitilde' by less_asciitilde.liga;\012 sub less' asciitilde by LIG;\012} less_asciitilde;\012\012lookup less_less {\012 ignore sub less less' less;\012 ignore sub less' less less;\012 sub LIG less' by less_less.liga;\012 sub less' less by LIG;\012} less_less;\012\012lookup less_greater {\012 ignore sub less less' greater;\012 ignore sub less' greater greater;\012 sub LIG greater' by less_greater.liga;\012 sub less' greater by LIG;\012} less_greater;\012\012lookup less_equal {\012 ignore sub less less' equal;\012 ignore sub less' equal equal;\012 ignore sub parenleft question less' equal;\012 sub LIG equal' by less_equal.liga;\012 sub less' equal by LIG;\012} less_equal;\012\012lookup less_plus {\012 ignore sub less less' plus;\012 ignore sub less' plus plus;\012 sub LIG plus' by less_plus.liga;\012 sub less' plus by LIG;\012} less_plus;\012\012lookup less_hyphen {\012 ignore sub less less' hyphen;\012 ignore sub less' hyphen hyphen;\012 sub LIG hyphen' by less_hyphen.liga;\012 sub less' hyphen by LIG;\012} less_hyphen;\012\012lookup less_dollar {\012 ignore sub less less' dollar;\012 ignore sub less' dollar dollar;\012 sub LIG dollar' by less_dollar.liga;\012 sub less' dollar by LIG;\012} less_dollar;\012\012lookup less_colon {\012 ignore sub less less' colon;\012 ignore sub less' colon colon;\012 sub LIG colon' by less_colon.liga;\012 sub less' colon by LIG;\012} less_colon;\012\012lookup less_bar {\012 ignore sub less less' bar;\012 ignore sub less' bar bar;\012 sub LIG bar' by less_bar.liga;\012 sub less' bar by LIG;\012} less_bar;\012\012lookup less_asterisk {\012 ignore sub less less' asterisk;\012 ignore sub less' asterisk asterisk;\012 sub LIG asterisk' by less_asterisk.liga;\012 sub less' asterisk by LIG;\012} less_asterisk;\012\012lookup greater_greater {\012 ignore sub greater greater' greater;\012 ignore sub greater' greater greater;\012 sub LIG greater' by greater_greater.liga;\012 sub greater' greater by LIG;\012} greater_greater;\012\012lookup greater_equal {\012 ignore sub greater greater' equal;\012 ignore sub greater' equal equal;\012 sub LIG equal' by greater_equal.liga;\012 sub greater' equal by LIG;\012} greater_equal;\012\012lookup greater_hyphen {\012 ignore sub greater greater' hyphen;\012 ignore sub greater' hyphen hyphen;\012 sub LIG hyphen' by greater_hyphen.liga;\012 sub greater' hyphen by LIG;\012} greater_hyphen;\012\012lookup equal_greater {\012 ignore sub equal equal' greater;\012 ignore sub equal' greater greater;\012 sub LIG greater' by equal_greater.liga;\012 sub equal' greater by LIG;\012} equal_greater;\012\012lookup equal_equal {\012 ignore sub equal equal' equal;\012 ignore sub equal' equal equal;\012 sub LIG equal' by equal_equal.liga;\012 sub equal' equal by LIG;\012} equal_equal;\012\012lookup plus_greater {\012 ignore sub plus plus' greater;\012 ignore sub plus' greater greater;\012 sub LIG greater' by plus_greater.liga;\012 sub plus' greater by LIG;\012} plus_greater;\012\012lookup plus_plus {\012 ignore sub plus plus' plus;\012 ignore sub plus' plus plus;\012 sub LIG plus' by plus_plus.liga;\012 sub plus' plus by LIG;\012} plus_plus;\012\012lookup dollar_greater {\012 ignore sub dollar dollar' greater;\012 ignore sub dollar' greater greater;\012 sub LIG greater' by dollar_greater.liga;\012 sub dollar' greater by LIG;\012} dollar_greater;\012\012lookup asciicircum_equal {\012 ignore sub asciicircum asciicircum' equal;\012 ignore sub asciicircum' equal equal;\012 sub LIG equal' by asciicircum_equal.liga;\012 sub asciicircum' equal by LIG;\012} asciicircum_equal;\012\012lookup bar_greater {\012 ignore sub bar bar' greater;\012 ignore sub bar' greater greater;\012 sub LIG greater' by bar_greater.liga;\012 sub bar' greater by LIG;\012} bar_greater;\012\012lookup bar_equal {\012 ignore sub bar bar' equal;\012 ignore sub bar' equal equal;\012 sub LIG equal' by bar_equal.liga;\012 sub bar' equal by LIG;\012} bar_equal;\012\012lookup bar_hyphen {\012 ignore sub bar bar' hyphen;\012 ignore sub bar' hyphen hyphen;\012 sub LIG hyphen' by bar_hyphen.liga;\012 sub bar' hyphen by LIG;\012} bar_hyphen;\012\012lookup bar_bracketright {\012 ignore sub bar bar' bracketright;\012 ignore sub bar' bracketright bracketright;\012 sub LIG bracketright' by bar_bracketright.liga;\012 sub bar' bracketright by LIG;\012} bar_bracketright;\012\012lookup bar_braceright {\012 ignore sub bar bar' braceright;\012 ignore sub bar' braceright braceright;\012 sub LIG braceright' by bar_braceright.liga;\012 sub bar' braceright by LIG;\012} bar_braceright;\012\012lookup bar_bar {\012 ignore sub bar bar' bar;\012 ignore sub bar' bar bar;\012 sub LIG bar' by bar_bar.liga;\012 sub bar' bar by LIG;\012} bar_bar;\012\012lookup ampersand_ampersand {\012 ignore sub ampersand ampersand' ampersand;\012 ignore sub ampersand' ampersand ampersand;\012 sub LIG ampersand' by ampersand_ampersand.liga;\012 sub ampersand' ampersand by LIG;\012} ampersand_ampersand;\012\012lookup underscore_underscore {\012 ignore sub underscore underscore' underscore;\012 ignore sub underscore' underscore underscore;\012 sub LIG underscore' by underscore_underscore.liga;\012 sub underscore' underscore by LIG;\012} underscore_underscore;\012\012lookup slash_slash {\012 ignore sub slash slash' slash;\012 ignore sub slash' slash slash;\012 sub LIG slash' by slash_slash.liga;\012 sub slash' slash by LIG;\012} slash_slash;\012\012lookup slash_greater {\012 ignore sub slash slash' greater;\012 ignore sub slash' greater greater;\012 sub LIG greater' by slash_greater.liga;\012 sub slash' greater by LIG;\012} slash_greater;\012\012lookup slash_equal {\012 ignore sub slash slash' equal;\012 ignore sub slash' equal equal;\012 sub LIG equal' by slash_equal.liga;\012 sub slash' equal by LIG;\012} slash_equal;\012\012lookup slash_asterisk {\012 ignore sub slash slash' asterisk;\012 ignore sub slash' asterisk asterisk;\012 ignore sub slash' asterisk slash;\012 ignore sub asterisk slash' asterisk;\012 sub LIG asterisk' by slash_asterisk.liga;\012 sub slash' asterisk by LIG;\012} slash_asterisk;\012\012lookup semicolon_semicolon {\012 ignore sub semicolon semicolon' semicolon;\012 ignore sub semicolon' semicolon semicolon;\012 sub LIG semicolon' by semicolon_semicolon.liga;\012 sub semicolon' semicolon by LIG;\012} semicolon_semicolon;\012\012lookup question_question {\012 ignore sub question question' question;\012 ignore sub question' question question;\012 sub LIG question' by question_question.liga;\012 sub question' question by LIG;\012} question_question;\012\012lookup question_period {\012 ignore sub question question' period;\012 ignore sub question' period period;\012 sub LIG period' by question_period.liga;\012 sub question' period by LIG;\012} question_period;\012\012lookup question_equal {\012 ignore sub question question' equal;\012 ignore sub question' equal equal;\012 ignore sub parenleft question' equal;\012 sub LIG equal' by question_equal.liga;\012 sub question' equal by LIG;\012} question_equal;\012\012lookup question_colon {\012 ignore sub question question' colon;\012 ignore sub question' colon colon;\012 ignore sub parenleft question' colon;\012 sub LIG colon' by question_colon.liga;\012 sub question' colon by LIG;\012} question_colon;\012\012lookup period_question {\012 ignore sub period period' question;\012 ignore sub period' question question;\012 sub LIG question' by period_question.liga;\012 sub period' question by LIG;\012} period_question;\012\012lookup period_period {\012 ignore sub period period' period;\012 ignore sub period' period period;\012 sub LIG period' by period_period.liga;\012 sub period' period by LIG;\012} period_period;\012\012lookup period_equal {\012 ignore sub period period' equal;\012 ignore sub period' equal equal;\012 sub LIG equal' by period_equal.liga;\012 sub period' equal by LIG;\012} period_equal;\012\012lookup period_hyphen {\012 ignore sub period period' hyphen;\012 ignore sub period' hyphen hyphen;\012 sub LIG hyphen' by period_hyphen.liga;\012 sub period' hyphen by LIG;\012} period_hyphen;\012\012lookup numbersign_underscore {\012 ignore sub numbersign numbersign' underscore;\012 ignore sub numbersign' underscore underscore;\012 sub LIG underscore' by numbersign_underscore.liga;\012 sub numbersign' underscore by LIG;\012} numbersign_underscore;\012\012lookup numbersign_question {\012 ignore sub numbersign numbersign' question;\012 ignore sub numbersign' question question;\012 sub LIG question' by numbersign_question.liga;\012 sub numbersign' question by LIG;\012} numbersign_question;\012\012lookup numbersign_parenleft {\012 ignore sub numbersign numbersign' parenleft;\012 ignore sub numbersign' parenleft parenleft;\012 sub LIG parenleft' by numbersign_parenleft.liga;\012 sub numbersign' parenleft by LIG;\012} numbersign_parenleft;\012\012lookup numbersign_equal {\012 ignore sub numbersign numbersign' equal;\012 ignore sub numbersign' equal equal;\012 sub LIG equal' by numbersign_equal.liga;\012 sub numbersign' equal by LIG;\012} numbersign_equal;\012\012lookup numbersign_numbersign {\012 ignore sub numbersign numbersign' numbersign;\012 ignore sub numbersign' numbersign numbersign;\012 sub LIG numbersign' by numbersign_numbersign.liga;\012 sub numbersign' numbersign by LIG;\012} numbersign_numbersign;\012\012lookup numbersign_exclam {\012 ignore sub numbersign numbersign' exclam;\012 ignore sub numbersign' exclam exclam;\012 sub LIG exclam' by numbersign_exclam.liga;\012 sub numbersign' exclam by LIG;\012} numbersign_exclam;\012\012lookup numbersign_colon {\012 ignore sub numbersign numbersign' colon;\012 ignore sub numbersign' colon colon;\012 sub LIG colon' by numbersign_colon.liga;\012 sub numbersign' colon by LIG;\012} numbersign_colon;\012\012lookup numbersign_bracketleft {\012 ignore sub numbersign numbersign' bracketleft;\012 ignore sub numbersign' bracketleft bracketleft;\012 sub LIG bracketleft' by numbersign_bracketleft.liga;\012 sub numbersign' bracketleft by LIG;\012} numbersign_bracketleft;\012\012lookup numbersign_braceleft {\012 ignore sub numbersign numbersign' braceleft;\012 ignore sub numbersign' braceleft braceleft;\012 sub LIG braceleft' by numbersign_braceleft.liga;\012 sub numbersign' braceleft by LIG;\012} numbersign_braceleft;\012\012lookup hyphen_asciitilde {\012 ignore sub hyphen hyphen' asciitilde;\012 ignore sub hyphen' asciitilde asciitilde;\012 sub LIG asciitilde' by hyphen_asciitilde.liga;\012 sub hyphen' asciitilde by LIG;\012} hyphen_asciitilde;\012\012lookup hyphen_less {\012 ignore sub hyphen hyphen' less;\012 ignore sub hyphen' less less;\012 sub LIG less' by hyphen_less.liga;\012 sub hyphen' less by LIG;\012} hyphen_less;\012\012lookup hyphen_greater {\012 ignore sub hyphen hyphen' greater;\012 ignore sub hyphen' greater greater;\012 sub LIG greater' by hyphen_greater.liga;\012 sub hyphen' greater by LIG;\012} hyphen_greater;\012\012lookup hyphen_hyphen {\012 ignore sub hyphen hyphen' hyphen;\012 ignore sub hyphen' hyphen hyphen;\012 sub LIG hyphen' by hyphen_hyphen.liga;\012 sub hyphen' hyphen by LIG;\012} hyphen_hyphen;\012\012lookup hyphen_bar {\012 ignore sub hyphen hyphen' bar;\012 ignore sub hyphen' bar bar;\012 sub LIG bar' by hyphen_bar.liga;\012 sub hyphen' bar by LIG;\012} hyphen_bar;\012\012lookup exclam_equal {\012 ignore sub exclam exclam' equal;\012 ignore sub exclam' equal equal;\012 sub LIG equal' by exclam_equal.liga;\012 sub exclam' equal by LIG;\012} exclam_equal;\012\012lookup exclam_exclam {\012 ignore sub exclam exclam' exclam;\012 ignore sub exclam' exclam exclam;\012 sub LIG exclam' by exclam_exclam.liga;\012 sub exclam' exclam by LIG;\012} exclam_exclam;\012\012lookup colon_greater {\012 ignore sub colon colon' greater;\012 ignore sub colon' greater greater;\012 sub LIG greater' by colon_greater.liga;\012 sub colon' greater by LIG;\012} colon_greater;\012\012lookup colon_equal {\012 ignore sub colon colon' equal;\012 ignore sub colon' equal equal;\012 sub LIG equal' by colon_equal.liga;\012 sub colon' equal by LIG;\012} colon_equal;\012\012lookup colon_colon {\012 ignore sub colon colon' colon;\012 ignore sub colon' colon colon;\012 sub LIG colon' by colon_colon.liga;\012 sub colon' colon by LIG;\012} colon_colon;\012\012lookup bracketright_numbersign {\012 ignore sub bracketright bracketright' numbersign;\012 ignore sub bracketright' numbersign numbersign;\012 sub LIG numbersign' by bracketright_numbersign.liga;\012 sub bracketright' numbersign by LIG;\012} bracketright_numbersign;\012\012lookup bracketleft_bar {\012 ignore sub bracketleft bracketleft' bar;\012 ignore sub bracketleft' bar bar;\012 sub LIG bar' by bracketleft_bar.liga;\012 sub bracketleft' bar by LIG;\012} bracketleft_bar;\012\012lookup braceleft_bar {\012 ignore sub braceleft braceleft' bar;\012 ignore sub braceleft' bar bar;\012 sub LIG bar' by braceleft_bar.liga;\012 sub braceleft' bar by LIG;\012} braceleft_bar;\012\012lookup asterisk_slash {\012 ignore sub asterisk asterisk' slash;\012 ignore sub asterisk' slash slash;\012 ignore sub slash asterisk' slash;\012 ignore sub asterisk' slash asterisk;\012 sub LIG slash' by asterisk_slash.liga;\012 sub asterisk' slash by LIG;\012} asterisk_slash;\012\012lookup asterisk_greater {\012 ignore sub asterisk asterisk' greater;\012 ignore sub asterisk' greater greater;\012 sub LIG greater' by asterisk_greater.liga;\012 sub asterisk' greater by LIG;\012} asterisk_greater;\012\012lookup asterisk_asterisk {\012 ignore sub asterisk asterisk' asterisk;\012 ignore sub asterisk' asterisk asterisk;\012 ignore sub slash asterisk' asterisk;\012 ignore sub asterisk' asterisk slash;\012 sub LIG asterisk' by asterisk_asterisk.liga;\012 sub asterisk' asterisk by LIG;\012} asterisk_asterisk;\012### end of generated calt\012\012sub less asciitilde' greater by asciitilde_asciitilde.liga;\012\012lookup lowercase_hyphen {\012 ignore sub @Tall \\hyphen' @Lowercase;\012 ignore sub @Lowercase \\hyphen' @Tall; \012 sub \\hyphen' @Lowercase by \\hyphen.lc;\012 sub @Lowercase \\hyphen' by \\hyphen.lc;\012} lowercase_hyphen;\012\012lookup lowercase_plus {\012 ignore sub @Tall \\plus' @Lowercase;\012 ignore sub @Lowercase \\plus' @Tall;\012 sub \\plus' @Lowercase by \\plus.lc;\012 sub @Lowercase \\plus' by \\plus.lc;\012} lowercase_plus;\012\012lookup lowercase_asterisk {\012 ignore sub @Tall \\asterisk' @Lowercase;\012 ignore sub @Lowercase \\asterisk' @Tall;\012 sub \\asterisk' @Lowercase by \\asterisk.lc;\012 sub @Lowercase \\asterisk' by \\asterisk.lc;\012} lowercase_asterisk;\012\012lookup uppercase_colon {\012 ignore sub @Tall \\colon' @Lowercase;\012 ignore sub @Lowercase \\colon' @Tall;\012 sub @Tall \\colon' by \\colon.uc;\012 sub \\colon' @Tall by \\colon.uc;\012} uppercase_colon;\012\012sub \\zero \\x' @HexDigit by \\x.multiply;\012sub @Digit \\x' @Digit by \\x.multiply;\012# sub \\bracketleft [\\x \\X]' \\bracketright by \\x.multiply;\012# sub \\bracketleft [\\v \\V]' \\bracketright by \\checkmark;\012sub \\backslash \\backslash' by \\_part.backslash;\012\012###\012\012lookup caltGreekUCdiph {\012 sub @GreekUCdiphIOTA Iota' by Iotadieresis;\012 sub @GreekUCdiphUPSILON Upsilon' by Upsilondieresis;\012} caltGreekUCdiph;\012\012lookup caltGreekUC {\012 sub @GreekUCAcc' @GreekUC by @GreekUCcalt;\012 sub @GreekUC @GreekUCAcc' by @GreekUCcalt;\012 sub @GreekUCAcc' space @GreekUC by @GreekUCcalt;\012 sub @GreekUC space @GreekUCAcc' by @GreekUCcalt;\012} caltGreekUC;\012"; name = calt; } ); @@ -121414,7 +121410,7 @@ name = Regular; customParameters = ( { name = weightClass; -value = "450"; +value = 450; }, { name = panose; diff --git a/clojure/gen_calt.clj b/clojure/gen_calt.clj deleted file mode 100755 index a3e726a..0000000 --- a/clojure/gen_calt.clj +++ /dev/null @@ -1,105 +0,0 @@ -(ns gen-calt - (:require - [clojure.string :as str] - [parse-glyphs :as parse])) - -(def ignores - { ["slash" "asterisk"] - (str - " ignore sub slash' asterisk slash;\n" - " ignore sub asterisk slash' asterisk;\n") - - ["asterisk" "slash"] - (str - " ignore sub slash asterisk' slash;\n" - " ignore sub asterisk' slash asterisk;\n") - - ["asterisk" "asterisk"] - (str - " ignore sub slash asterisk' asterisk;\n" - " ignore sub asterisk' asterisk slash;\n") - - ["asterisk" "asterisk" "asterisk"] - (str - " ignore sub slash asterisk' asterisk asterisk;\n" - " ignore sub asterisk' asterisk asterisk slash;\n") - - ["question" "equal"] - " ignore sub parenleft question' equal;\n" - - ["less" "equal"] - " ignore sub parenleft question less' equal;\n" - - ["question" "colon"] - " ignore sub parenleft question' colon;\n" - - ["less" "bar" "bar"] - " ignore sub less' bar bar greater;\n" - - ["bar" "bar" "greater"] - " ignore sub less bar' bar greater;\n" -}) - -(defn liga->rule - "[f f i] => { [LIG LIG i] f_f_i.liga - [LIG f i] LIG - [ f f i] LIG }" - [liga] - (case (count liga) - 2 (let [[a b] liga] - (str/replace - (str " lookup 1_2 {\n" - " ignore sub 1 1' 2;\n" - " ignore sub 1' 2 2;\n" - (get ignores liga) - " sub LIG 2' by 1_2.liga;\n" - " sub 1' 2 by LIG;\n" - " } 1_2;") - #"\d" {"1" a "2" b})) - 3 (let [[a b c] liga] - (str/replace - (str " lookup 1_2_3 {\n" - " ignore sub 1 1' 2 3;\n" - " ignore sub 1' 2 3 3;\n" - (get ignores liga) - " sub LIG LIG 3' by 1_2_3.liga;\n" - " sub LIG 2' 3 by LIG;\n" - " sub 1' 2 3 by LIG;\n" - " } 1_2_3;") - #"\d" {"1" a "2" b "3" c})) - 4 (let [[a b c d] liga] - (str/replace - (str " lookup 1_2_3_4 {\n" - " ignore sub 1 1' 2 3 4;\n" - " ignore sub 1' 2 3 4 4;\n" - (get ignores liga) - " sub LIG LIG LIG 4' by 1_2_3_4.liga;\n" - " sub LIG LIG 3' 4 by LIG;\n" - " sub LIG 2' 3 4 by LIG;\n" - " sub 1' 2 3 4 by LIG;\n" - " } 1_2_3_4;") - #"\d" {"1" a "2" b "3" c "4" d})))) - -(defn -main [& args] - (let [file (or (first args) "FiraCode.glyphs") - _ (println "Looking for ligatures in" file "...\n") - font (parse/parse (slurp file)) - ligas (for [g (:glyphs font) - :let [name (:glyphname g)] - :when (str/ends-with? name ".liga") - :let [[_ liga] (re-matches #"([a-z_]+)\.liga" name)]] - (str/split liga #"_"))] ;; [ ["dash" "greater" "greater"] ... ] - - (println "### start of generated calt\n") - (println (->> ligas (sort-by count) (reverse) (map liga->rule) (str/join "\n\n"))) - (println "\n### end of generated calt\n") - - (println "Total ligatures count:" (count ligas)) - (println " " (->> ligas - (group-by count) - (sort-by first) - (map (fn [[k v]] (str (count v) (case k 2 " pairs", 3 " triples", 4 " quadruples")))) - (str/join ", "))) - (println))) - -;; (-main) \ No newline at end of file diff --git a/clojure/parse_glyphs.clj b/clojure/glyphs.clj similarity index 68% rename from clojure/parse_glyphs.clj rename to clojure/glyphs.clj index 6518f2e..4425b02 100755 --- a/clojure/parse_glyphs.clj +++ b/clojure/glyphs.clj @@ -1,7 +1,9 @@ -(ns parse-glyphs +(ns glyphs (:require [clojure.java.io :as io] - [fipp.edn :as fipp])) + [clojure.string :as str] + [fipp.edn :as fipp] + [flatland.ordered.map :refer [ordered-map]])) (def ^:dynamic *str) (def ^:dynamic *pos) @@ -23,13 +25,17 @@ (skip-ws!) (when (= \" (current-char)) (let [sb (StringBuilder.)] - (loop [] - (advance!) - (let [ch (current-char)] - (cond - (= ch \\) (do (.append sb \\) (advance!) (.append sb (current-char)) (recur)) - (= ch \") (do (advance!) (str sb)) - :else (do (.append sb ch) (recur)))))))) + (-> + (loop [] + (advance!) + (let [ch (current-char)] + (cond + (= ch \\) (do (.append sb \\) (advance!) (.append sb (current-char)) (recur)) + (= ch \") (do (advance!) (str sb)) + :else (do (.append sb ch) (recur))))) + (str/replace "\\012" "\n") + (str/replace "\\\"" "\"") + (str/replace "\\\\" "\\"))))) (defn parse-string! [] (skip-ws!) @@ -41,8 +47,8 @@ :else (do (.append sb ch) (advance!) (recur))))) (let [res (str sb)] (cond - (re-matches #"[0-9]+" res) (Integer/parseInt res) - (re-matches #"[0-9]+\.[0-9]+" res) (Double/parseDouble res) + (re-matches #"-?[1-9][0-9]*" res) (Integer/parseInt res) + (re-matches #"-?[0-9]+\.[0-9]+" res) (Double/parseDouble res) (re-matches #"[a-zA-Z][a-zA-Z\.0-9]*" res) (keyword res) :else res)))) @@ -53,7 +59,7 @@ (skip-ws!) (when (= \{ (current-char)) (advance!) - (loop [m {}] + (loop [m (ordered-map)] (skip-ws!) (if (= \} (current-char)) (do (advance!) m) @@ -92,6 +98,24 @@ *pos (atom 0)] (parse-anything!))) +(def escapes {"\n" "\\012" + "\"" "\\\"" + "\\" "\\\\"}) + +(def escape-re #"[\n\"\\]") + +(defn serialize [form] + (cond + (string? form) (if (re-matches #"[a-zA-Z0-9._/]+" form) + form + (str \" (str/replace form escape-re escapes) \")) + (keyword? form) (name form) + (number? form) (str form) + (sequential? form) (str "(\n" (str/join ",\n" (map serialize form)) "\n)") + (map? form) (str "{\n" (str/join "\n" (for [[k v] form] (str (serialize k) " = " (serialize v) ";"))) "\n}"))) + +; (-> (slurp "FiraCode.glyphs") parse serialize (->> (spit "FiraCode_saved.glyphs"))) + (defn -main [& args] (let [font (-> (slurp "FiraCode.glyphs") parse)] (with-open [os (io/writer "clojure/FiraCode.edn")] @@ -124,4 +148,6 @@ (count glyphs)))))) ;; (-main) -;; (save-not600) \ No newline at end of file +;; (save-not600) +;; (-> (slurp "FiraCode.glyphs") parse keys) +;; \ No newline at end of file diff --git a/clojure/regen_calt.clj b/clojure/regen_calt.clj new file mode 100755 index 0000000..83c55ed --- /dev/null +++ b/clojure/regen_calt.clj @@ -0,0 +1,118 @@ +(ns regen-calt + (:require + [clojure.string :as str] + [glyphs :as glyphs])) + +(def ignores + { ["slash" "asterisk"] + (str + " ignore sub slash' asterisk slash;\n" + " ignore sub asterisk slash' asterisk;\n") + + ["asterisk" "slash"] + (str + " ignore sub slash asterisk' slash;\n" + " ignore sub asterisk' slash asterisk;\n") + + ["asterisk" "asterisk"] + (str + " ignore sub slash asterisk' asterisk;\n" + " ignore sub asterisk' asterisk slash;\n") + + ["asterisk" "asterisk" "asterisk"] + (str + " ignore sub slash asterisk' asterisk asterisk;\n" + " ignore sub asterisk' asterisk asterisk slash;\n") + + ["question" "equal"] + " ignore sub parenleft question' equal;\n" + + ["less" "equal"] + " ignore sub parenleft question less' equal;\n" + + ["question" "colon"] + " ignore sub parenleft question' colon;\n" + + ["less" "bar" "bar"] + " ignore sub less' bar bar greater;\n" + + ["bar" "bar" "greater"] + " ignore sub less bar' bar greater;\n" +}) + +(defn liga->rule + "[f f i] => { [LIG LIG i] f_f_i.liga + [LIG f i] LIG + [ f f i] LIG }" + [liga] + (case (count liga) + 2 (let [[a b] liga] + (str/replace + (str "lookup 1_2 {\n" + " ignore sub 1 1' 2;\n" + " ignore sub 1' 2 2;\n" + (get ignores liga) + " sub LIG 2' by 1_2.liga;\n" + " sub 1' 2 by LIG;\n" + "} 1_2;") + #"\d" {"1" a "2" b})) + 3 (let [[a b c] liga] + (str/replace + (str "lookup 1_2_3 {\n" + " ignore sub 1 1' 2 3;\n" + " ignore sub 1' 2 3 3;\n" + (get ignores liga) + " sub LIG LIG 3' by 1_2_3.liga;\n" + " sub LIG 2' 3 by LIG;\n" + " sub 1' 2 3 by LIG;\n" + "} 1_2_3;") + #"\d" {"1" a "2" b "3" c})) + 4 (let [[a b c d] liga] + (str/replace + (str "lookup 1_2_3_4 {\n" + " ignore sub 1 1' 2 3 4;\n" + " ignore sub 1' 2 3 4 4;\n" + (get ignores liga) + " sub LIG LIG LIG 4' by 1_2_3_4.liga;\n" + " sub LIG LIG 3' 4 by LIG;\n" + " sub LIG 2' 3 4 by LIG;\n" + " sub 1' 2 3 4 by LIG;\n" + "} 1_2_3_4;") + #"\d" {"1" a "2" b "3" c "4" d})))) + +(defn index-of [pred xs] + (reduce (fn [i x] (if (pred x) (reduced i) (inc i))) 0 xs)) + +(defn replace-calt [font calt] + (let [features (:features font) + idx (index-of #(= "calt" (:name %)) features) + code (get-in features [idx :code]) + code' (str/replace code + #"### start of generated calt\n[^#]+\n### end of generated calt\n" + (str "### start of generated calt\n" calt "\n### end of generated calt\n"))] + (assoc-in font [:features idx :code] code'))) + +(defn -main [& args] + (let [file (or (first args) "FiraCode.glyphs") + _ (println "Parsing" file "...") + font (glyphs/parse (slurp file)) + ligas (for [g (:glyphs font) + :let [name (:glyphname g)] + :when (str/ends-with? name ".liga") + :let [[_ liga] (re-matches #"([a-z_]+)\.liga" name)]] + (str/split liga #"_")) ;; [ ["dash" "greater" "greater"] ... ] + calt (->> ligas (sort-by count) (reverse) (map liga->rule) (str/join "\n\n")) + font' (replace-calt font calt)] + + (println "Saving" file "...") + (spit file (glyphs/serialize font')) + + (println "Total ligatures count:" (count ligas)) + (println " " (->> ligas + (group-by count) + (sort-by first) + (map (fn [[k v]] (str (count v) (case k 2 " pairs", 3 " triples", 4 " quadruples")))) + (str/join ", "))) + (println))) + +;; (-main) diff --git a/deps.edn b/deps.edn index fc7554d..5400d83 100644 --- a/deps.edn +++ b/deps.edn @@ -1,3 +1,4 @@ {:paths ["clojure"] - :deps {org.clojure/clojure {:mvn/version "1.10.0-alpha8"} - fipp/fipp {:mvn/version "0.6.12"}}} + :deps {org.clojure/clojure {:mvn/version "1.10.0-alpha8"} + org.flatland/ordered {:mvn/version "1.5.6"} + fipp/fipp {:mvn/version "0.6.12"}}}