From 1c6def46accb686a808730ea7c554bab97ecb664 Mon Sep 17 00:00:00 2001 From: Aaron Date: Thu, 26 Aug 2021 11:58:05 -0700 Subject: [PATCH] July-August 2021 Fixes (#538) ## Summary of the Pull Request This includes two fixes: - [x] Closes #500 Changes the build process to use gftools.stat instead of statmake. The issue was caused by an 'unused' italic axis in the fonts, which has been removed, but statmake gets unhappy without it there. So the process has been adjusted to a more amenable build library. - [x] Closes #552 Adds the Hebrew language tag to the Regular to ensure that Hebrew positioning works correctly. Also: Adjusts calt feature to ensure LIG substitutions properly function under rare conditions where the `ignore` activate incorrectly. I thought this had already been PR'd but seems not. For example: `===]` First = becomes "equal_equal.liga", and ignore would activate on second =, blocking LIG from being substituted. If the liga form appears, LIG should appear. Turned back on the =>> =<<, etc. ligatures as there is a glyph for them now. --- build.py | 19 +- requirements.in | 2 +- requirements.txt | 156 ++++++++++-- sources/CascadiaCode-Bold.ufo/lib.plist | 19 -- sources/CascadiaCode-BoldItalic.ufo/lib.plist | 15 -- sources/CascadiaCode-ExtraLight.ufo/lib.plist | 19 -- .../lib.plist | 15 -- sources/CascadiaCode-Italic.ufo/lib.plist | 15 -- sources/CascadiaCode-Regular.ufo/lib.plist | 19 -- sources/CascadiaCode_variable.designspace | 10 - .../CascadiaCode_variable_italic.designspace | 10 - sources/STAT.plist | 87 ------- sources/features/calt.fea | 228 +++++++++--------- sources/features/calt_italic.fea | 197 ++++++++------- sources/features/header.fea | 2 + sources/stat.yaml | 195 +++++++++++++++ 16 files changed, 556 insertions(+), 452 deletions(-) delete mode 100644 sources/STAT.plist create mode 100644 sources/stat.yaml diff --git a/build.py b/build.py index 75781c1b1..80344c6b1 100644 --- a/build.py +++ b/build.py @@ -14,8 +14,8 @@ import fontTools.ttLib import fontTools.ttLib.tables._g_l_y_f as _g_l_y_f import psautohint.__main__ -import statmake.classes -import statmake.lib +from gftools.stat import gen_stat_tables_from_config +import yaml import ufo2ft import ufoLib2 import vttLib @@ -235,11 +235,6 @@ def compile_variable_and_save( print(f"[{familyName} {styleName}] Compiling") varFont = ufo2ft.compileVariableTTF(designspace, inplace=True) - print(f"[{familyName} {styleName}] Adding STAT table") - styleSpace = statmake.classes.Stylespace.from_file(INPUT_DIR / "STAT.plist") - statmake.lib.apply_stylespace_to_variable_font(styleSpace, varFont, {}) - - print(f"[{familyName} {styleName}] Merging VTT") if "Italic" in styleName: @@ -270,7 +265,6 @@ def compile_variable_and_save( varFont["head"].flags = 0x000b if "Regular" in styleName: - varFont["name"].setName(familyName.replace(" Regular",""), 4, 3, 1, 1033) varFont["name"].setName(familyName.replace(" ","")+"Roman", 25, 3, 1, 1033) print(f"[{familyName} {styleName}] Saving") @@ -575,6 +569,15 @@ def ttfautohint(path: str) -> None: process.get() del processes, pool + # Step 1.5: Adding STAT tables in one go + print ("[Cascadia Variable fonts] Fixing STAT tables") + fontSTAT = [fontTools.ttLib.TTFont(f) for f in list(OUTPUT_TTF_DIR.glob("*.ttf"))] + config = yaml.load(open(INPUT_DIR/"stat.yaml"), Loader=yaml.SafeLoader) + gen_stat_tables_from_config(config, fontSTAT) + + for font in fontSTAT: + font.save(font.reader.file.name) + # Stage 2: Autohint and maybe compress all the static things. if args.static_fonts is True: otfs = list(OUTPUT_STATIC_OTF_DIR.glob("*.otf")) diff --git a/requirements.in b/requirements.in index d7bf5d58e..9e395238e 100644 --- a/requirements.in +++ b/requirements.in @@ -4,7 +4,7 @@ fontmake psautohint -statmake +gftools vttLib skia-pathops fontTools[ufo,lxml,woff] diff --git a/requirements.txt b/requirements.txt index 06aad8f63..9d2202d2e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,9 +1,11 @@ # -# This file is autogenerated by pip-compile +# This file is autogenerated by pip-compile with python 3.9 # To update, run: # -# pip-compile --output-file=requirements.txt requirements.in +# pip-compile requirements.in # +absl-py==0.13.0 + # via gftools appdirs==1.4.4 # via fs attrs==21.2.0 @@ -12,35 +14,74 @@ attrs==21.2.0 # fontmake # statmake # ufolib2 +babelfont==2.0.2 + # via gftools booleanoperations==0.9.0 # via # fontmake + # fontparts # ufo2ft brotli==1.0.9 - # via fonttools -cattrs==1.6.0 + # via + # fonttools + # gftools +browserstack-local==1.2.2 + # via gftools +cattrs==1.7.1 # via statmake +certifi==2021.5.30 + # via requests +cffi==1.14.6 + # via + # pygit2 + # pynacl cffsubr==0.2.8 # via ufo2ft +charset-normalizer==2.0.2 + # via requests +click==8.0.1 + # via flask compreffor==0.5.1 # via ufo2ft cu2qu==1.6.7 # via # fontmake # ufo2ft +defcon[pens]==0.8.1 + # via + # babelfont + # fontparts +deprecated==1.2.12 + # via pygithub +et-xmlfile==1.1.0 + # via openpyxl +flask==2.0.1 + # via gftools fontmake==2.4.0 - # via -r requirements.in -fontmath==0.6.0 - # via fontmake -fonttools[lxml,ufo,unicode,woff]==4.24.4 # via # -r requirements.in + # gftools +fontmath==0.8.1 + # via + # fontmake + # fontparts +fontparts==0.9.10 + # via babelfont +fontpens==0.2.4 + # via defcon +fonttools[lxml,ufo,unicode,woff]==4.25.0 + # via + # -r requirements.in + # babelfont # booleanoperations # cffsubr # compreffor # cu2qu + # defcon # fontmake # fontmath + # fontparts + # gftools # glyphslib # psautohint # statmake @@ -50,37 +91,116 @@ fonttools[lxml,ufo,unicode,woff]==4.24.4 # vttmisc fs==2.4.13 # via fonttools +gftools==0.7.4 + # via -r requirements.in glyphslib==5.3.2 - # via fontmake + # via + # babelfont + # fontmake + # gftools +idna==3.2 + # via requests +itsdangerous==2.0.1 + # via flask +jinja2==3.0.1 + # via flask lxml==4.6.3 # via fonttools +markupsafe==2.0.1 + # via jinja2 +numpy==1.21.0 + # via pandas +openpyxl==3.0.7 + # via gftools +opentype-sanitizer==8.1.4.post2 + # via gftools +pandas==1.3.0 + # via gftools +pillow==8.3.1 + # via + # gftools + # pybrowserstack-screenshots +protobuf==3.17.3 + # via gftools psautohint==2.3.0 # via -r requirements.in -pyclipper==1.2.1 +psutil==5.8.0 + # via browserstack-local +pybrowserstack-screenshots==0.1 + # via gftools +pyclipper==1.3.0 # via booleanoperations +pycparser==2.20 + # via cffi +pygit2==1.6.1 + # via gftools +pygithub==1.55 + # via gftools +pyjwt==2.1.0 + # via pygithub +pynacl==1.4.0 + # via pygithub pyparsing==2.4.7 # via vttlib +python-dateutil==2.8.2 + # via + # pandas + # strictyaml pytz==2021.1 - # via fs + # via + # fs + # pandas +pyyaml==5.4.1 + # via gftools +requests==2.26.0 + # via + # gftools + # pybrowserstack-screenshots + # pygithub +simplejson==3.17.3 + # via pybrowserstack-screenshots six==1.16.0 - # via fs + # via + # absl-py + # fs + # protobuf + # pynacl + # python-dateutil skia-pathops==0.6.0.post2 - # via -r requirements.in + # via + # -r requirements.in + # gftools statmake==0.3.0 - # via -r requirements.in -ufo2ft[compreffor]==2.21.0 + # via gftools +strictyaml==1.4.4 + # via gftools +tabulate==0.8.9 + # via gftools +ttfautohint-py==0.4.3 + # via gftools +ufo2ft[compreffor]==2.22.0 # via fontmake ufolib2==0.11.1 # via # fontmake # glyphslib # vttlib -unicodedata2==13.0.0.post2 - # via fonttools +unidecode==1.2.0 + # via gftools +urllib3==1.26.6 + # via requests vttlib==0.11.0 - # via -r requirements.in + # via + # -r requirements.in + # gftools vttmisc==0.0.5 # via -r requirements.in +werkzeug==2.0.1 + # via flask +wrapt==1.12.1 + # via deprecated +xlrd==2.0.1 + # via gftools zopfli==0.1.8 # via fonttools diff --git a/sources/CascadiaCode-Bold.ufo/lib.plist b/sources/CascadiaCode-Bold.ufo/lib.plist index 19c4b4b98..bc406b784 100644 --- a/sources/CascadiaCode-Bold.ufo/lib.plist +++ b/sources/CascadiaCode-Bold.ufo/lib.plist @@ -69,25 +69,6 @@ Tag wght - - Name - Italic - Tag - ital - - - com.schriftgestaltung.customParameter.GSFont.DisplayStrings - - /vav-hb - /paseq-hb - /geresh-hb - /three-persian - /two-ar - /gafInvertedstroke-ar/gafInvertedstroke-ar.fina/gafInvertedstroke-ar.medi/gafInvertedstroke-ar.init - /kasratan-ar - /alef-hb/alefpatah-hb/alefqamats-hb/alefdagesh-hb/bet-hb/betdagesh-hb/gimel-hb/gimeldagesh-hb/dalet-hb/daletdagesh-hb/he-hb/hedagesh-hb/vav-hb/vavdagesh-hb/vavholam-hb/zayin-hb/zayindagesh-hb/het-hb/tet-hb/tetdagesh-hb/yod-hb/yoddagesh-hb/finalkaf-hb/finalkafdagesh-hb/kaf-hb/kafdagesh-hb/lamed-hb/lameddagesh-hb/finalmem-hb/mem-hb/memdagesh-hb/finalnun-hb/nun-hb/nundagesh-hb/samekh-hb/samekhdagesh-hb/ayin-hb/finalpe-hb/finalpedagesh-hb/pe-hb/pedagesh-hb/finaltsadi-hb/tsadi-hb/tsadidagesh-hb/qof-hb/qofdagesh-hb/resh-hb/reshdagesh-hb/shin-hb/shinshindot-hb/shinsindot-hb/shindageshshindot-hb/shindageshsindot-hb/shindagesh-hb/tav-hb/tavdagesh-hb - - com.schriftgestaltung.customParameter.GSFont.disablesAutomaticAlignment diff --git a/sources/CascadiaCode-BoldItalic.ufo/lib.plist b/sources/CascadiaCode-BoldItalic.ufo/lib.plist index 0be6d2154..7ec0bf310 100644 --- a/sources/CascadiaCode-BoldItalic.ufo/lib.plist +++ b/sources/CascadiaCode-BoldItalic.ufo/lib.plist @@ -81,21 +81,6 @@ Tag wght - - Name - Italic - Tag - ital - - - com.schriftgestaltung.customParameter.GSFont.DisplayStrings - - /b.alt - /De-cy/Ka-cy/El-cy/De-cy.loclBGR/be-cy/ve-cy/ge-cy/gheupturn-cy/ze-cy/el-cy/en-cy/ef-cy/che-cy/tse-cy/sha-cy/shcha-cy/softsign-cy/hardsign-cy/yeru-cy/lje-cy/nje-cy/e-cy/ereversed-cy/iu-cy/ia-cy/dje-cy/ghestroke-cy/endescender-cy/chedescender-cy/shha-cy/shha-cy.alt/ka-cy.loclBGR.alt/iu-cy.loclBGR.alt/zhe-cy.loclBGR/ze-cy.loclBGR/ka-cy.loclBGR/ve-cy.salt/ze-cy.salt/che-cy.salt/chedescender-cy.salt - u/tse-cy - all/space of/space the/space limes -all/space of/space the/space limes -all/space of/space the/space limes com.schriftgestaltung.customParameter.GSFont.disablesAutomaticAlignment diff --git a/sources/CascadiaCode-ExtraLight.ufo/lib.plist b/sources/CascadiaCode-ExtraLight.ufo/lib.plist index d8414b997..2f458166f 100644 --- a/sources/CascadiaCode-ExtraLight.ufo/lib.plist +++ b/sources/CascadiaCode-ExtraLight.ufo/lib.plist @@ -71,25 +71,6 @@ Tag wght - - Name - Italic - Tag - ital - - - com.schriftgestaltung.customParameter.GSFont.DisplayStrings - - /vav-hb - /paseq-hb - /geresh-hb - /three-persian - /two-ar - /gafInvertedstroke-ar/gafInvertedstroke-ar.fina/gafInvertedstroke-ar.medi/gafInvertedstroke-ar.init - /kasratan-ar - /alef-hb/alefpatah-hb/alefqamats-hb/alefdagesh-hb/bet-hb/betdagesh-hb/gimel-hb/gimeldagesh-hb/dalet-hb/daletdagesh-hb/he-hb/hedagesh-hb/vav-hb/vavdagesh-hb/vavholam-hb/zayin-hb/zayindagesh-hb/het-hb/tet-hb/tetdagesh-hb/yod-hb/yoddagesh-hb/finalkaf-hb/finalkafdagesh-hb/kaf-hb/kafdagesh-hb/lamed-hb/lameddagesh-hb/finalmem-hb/mem-hb/memdagesh-hb/finalnun-hb/nun-hb/nundagesh-hb/samekh-hb/samekhdagesh-hb/ayin-hb/finalpe-hb/finalpedagesh-hb/pe-hb/pedagesh-hb/finaltsadi-hb/tsadi-hb/tsadidagesh-hb/qof-hb/qofdagesh-hb/resh-hb/reshdagesh-hb/shin-hb/shinshindot-hb/shinsindot-hb/shindageshshindot-hb/shindageshsindot-hb/shindagesh-hb/tav-hb/tavdagesh-hb - - com.schriftgestaltung.customParameter.GSFont.disablesAutomaticAlignment diff --git a/sources/CascadiaCode-ExtraLightItalic.ufo/lib.plist b/sources/CascadiaCode-ExtraLightItalic.ufo/lib.plist index 29a43dd9a..3d0574a0f 100644 --- a/sources/CascadiaCode-ExtraLightItalic.ufo/lib.plist +++ b/sources/CascadiaCode-ExtraLightItalic.ufo/lib.plist @@ -81,21 +81,6 @@ Tag wght - - Name - Italic - Tag - ital - - - com.schriftgestaltung.customParameter.GSFont.DisplayStrings - - /b.alt - /De-cy/Ka-cy/El-cy/De-cy.loclBGR/be-cy/ve-cy/ge-cy/gheupturn-cy/ze-cy/el-cy/en-cy/ef-cy/che-cy/tse-cy/sha-cy/shcha-cy/softsign-cy/hardsign-cy/yeru-cy/lje-cy/nje-cy/e-cy/ereversed-cy/iu-cy/ia-cy/dje-cy/ghestroke-cy/endescender-cy/chedescender-cy/shha-cy/shha-cy.alt/ka-cy.loclBGR.alt/iu-cy.loclBGR.alt/zhe-cy.loclBGR/ze-cy.loclBGR/ka-cy.loclBGR/ve-cy.salt/ze-cy.salt/che-cy.salt/chedescender-cy.salt - u/tse-cy - all/space of/space the/space limes -all/space of/space the/space limes -all/space of/space the/space limes com.schriftgestaltung.customParameter.GSFont.disablesAutomaticAlignment diff --git a/sources/CascadiaCode-Italic.ufo/lib.plist b/sources/CascadiaCode-Italic.ufo/lib.plist index 0b7796ec6..39f6e3267 100644 --- a/sources/CascadiaCode-Italic.ufo/lib.plist +++ b/sources/CascadiaCode-Italic.ufo/lib.plist @@ -81,21 +81,6 @@ Tag wght - - Name - Italic - Tag - ital - - - com.schriftgestaltung.customParameter.GSFont.DisplayStrings - - /b.alt - /De-cy/Ka-cy/El-cy/De-cy.loclBGR/be-cy/ve-cy/ge-cy/gheupturn-cy/ze-cy/el-cy/en-cy/ef-cy/che-cy/tse-cy/sha-cy/shcha-cy/softsign-cy/hardsign-cy/yeru-cy/lje-cy/nje-cy/e-cy/ereversed-cy/iu-cy/ia-cy/dje-cy/ghestroke-cy/endescender-cy/chedescender-cy/shha-cy/shha-cy.alt/ka-cy.loclBGR.alt/iu-cy.loclBGR.alt/zhe-cy.loclBGR/ze-cy.loclBGR/ka-cy.loclBGR/ve-cy.salt/ze-cy.salt/che-cy.salt/chedescender-cy.salt - u/tse-cy - all/space of/space the/space limes -all/space of/space the/space limes -all/space of/space the/space limes com.schriftgestaltung.customParameter.GSFont.disablesAutomaticAlignment diff --git a/sources/CascadiaCode-Regular.ufo/lib.plist b/sources/CascadiaCode-Regular.ufo/lib.plist index 67f7582d9..e9a76f9cf 100644 --- a/sources/CascadiaCode-Regular.ufo/lib.plist +++ b/sources/CascadiaCode-Regular.ufo/lib.plist @@ -69,25 +69,6 @@ Tag wght - - Name - Italic - Tag - ital - - - com.schriftgestaltung.customParameter.GSFont.DisplayStrings - - /vav-hb - /paseq-hb - /geresh-hb - /three-persian - /two-ar - /gafInvertedstroke-ar/gafInvertedstroke-ar.fina/gafInvertedstroke-ar.medi/gafInvertedstroke-ar.init - /kasratan-ar - /alef-hb/alefpatah-hb/alefqamats-hb/alefdagesh-hb/bet-hb/betdagesh-hb/gimel-hb/gimeldagesh-hb/dalet-hb/daletdagesh-hb/he-hb/hedagesh-hb/vav-hb/vavdagesh-hb/vavholam-hb/zayin-hb/zayindagesh-hb/het-hb/tet-hb/tetdagesh-hb/yod-hb/yoddagesh-hb/finalkaf-hb/finalkafdagesh-hb/kaf-hb/kafdagesh-hb/lamed-hb/lameddagesh-hb/finalmem-hb/mem-hb/memdagesh-hb/finalnun-hb/nun-hb/nundagesh-hb/samekh-hb/samekhdagesh-hb/ayin-hb/finalpe-hb/finalpedagesh-hb/pe-hb/pedagesh-hb/finaltsadi-hb/tsadi-hb/tsadidagesh-hb/qof-hb/qofdagesh-hb/resh-hb/reshdagesh-hb/shin-hb/shinshindot-hb/shinsindot-hb/shindageshshindot-hb/shindageshsindot-hb/shindagesh-hb/tav-hb/tavdagesh-hb - - com.schriftgestaltung.customParameter.GSFont.disablesAutomaticAlignment diff --git a/sources/CascadiaCode_variable.designspace b/sources/CascadiaCode_variable.designspace index 6a5c96419..c6e9c6d97 100644 --- a/sources/CascadiaCode_variable.designspace +++ b/sources/CascadiaCode_variable.designspace @@ -9,7 +9,6 @@ - @@ -41,7 +40,6 @@ - @@ -51,13 +49,11 @@ - - @@ -65,7 +61,6 @@ - @@ -90,7 +85,6 @@ - @@ -117,7 +111,6 @@ - @@ -144,7 +137,6 @@ - @@ -169,7 +161,6 @@ - @@ -196,7 +187,6 @@ - diff --git a/sources/CascadiaCode_variable_italic.designspace b/sources/CascadiaCode_variable_italic.designspace index 2a920a235..0ddf1f39d 100644 --- a/sources/CascadiaCode_variable_italic.designspace +++ b/sources/CascadiaCode_variable_italic.designspace @@ -9,7 +9,6 @@ - @@ -41,7 +40,6 @@ - @@ -51,13 +49,11 @@ - - @@ -65,7 +61,6 @@ - @@ -90,7 +85,6 @@ - @@ -117,7 +111,6 @@ - @@ -144,7 +137,6 @@ - @@ -169,7 +161,6 @@ - @@ -196,7 +187,6 @@ - diff --git a/sources/STAT.plist b/sources/STAT.plist deleted file mode 100644 index a18618a73..000000000 --- a/sources/STAT.plist +++ /dev/null @@ -1,87 +0,0 @@ - - - - - axes - - - name - Weight - tag - wght - locations - - - name - ExtraLight - value - 200 - - - name - Light - value - 300 - - - name - SemiLight - value - 350 - - - name - Regular - value - 400 - linked_value - 700 - flags - - ElidableAxisValueName - - - - name - SemiBold - value - 600 - - - name - Bold - value - 700 - - - - - name - Italic - tag - ital - locations - - - name - Roman - value - 0 - linked_value - 1 - flags - - ElidableAxisValueName - - - - name - Italic - value - 1 - - - - - - \ No newline at end of file diff --git a/sources/features/calt.fea b/sources/features/calt.fea index 1fa04c9ab..98049c9bf 100644 --- a/sources/features/calt.fea +++ b/sources/features/calt.fea @@ -1,12 +1,12 @@ feature calt { ### Exclam (for equal see below) lookup exclam_equal { + sub exclam_equal.liga equal' by LIG; ignore sub exclam exclam' equal; ignore sub exclam' equal equal equal; ignore sub parenleft question exclam' equal; ignore sub parenleft question less exclam' equal; ignore sub equal exclam' equal; - sub exclam_equal.liga equal' by LIG; sub exclam' equal by exclam_equal.liga; } exclam_equal; @@ -16,36 +16,37 @@ lookup exclam_equal_equal { } exclam_equal_equal; lookup exclam_exclam { + sub exclam_exclam.liga exclam' by LIG; 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_exclam.liga exclam' by LIG; sub exclam' exclam by exclam_exclam.liga; } exclam_exclam; lookup exclam_exclam_period { - ignore sub exclam_exclam.liga' LIG period period; sub exclam_exclam_period.liga LIG period' by LIG; + ignore sub exclam_exclam.liga' LIG period period; sub exclam_exclam.liga' LIG period by exclam_exclam_period.liga; } exclam_exclam_period; lookup exclam_period { + sub exclam_period.liga period' by LIG; ignore sub exclam exclam' period; ignore sub exclam' period period; - sub exclam_period.liga period' by LIG; sub exclam' period by exclam_period.liga; } exclam_period; lookup exclam_colon { + sub exclam_colon.liga colon' by LIG; ignore sub exclam exclam' colon; ignore sub exclam' colon colon; - sub exclam_colon.liga colon' by LIG; sub exclam' colon by exclam_colon.liga; } exclam_colon; ## Equal - Made sense to shift this below the exclam to avoid issues lookup equal_equal { + sub equal_equal.liga equal' by LIG; ignore sub equal equal' equal; ignore sub equal' equal equal equal; ignore sub parenleft question equal' equal; @@ -58,7 +59,6 @@ lookup equal_equal { ignore sub equal' equal [less greater bar slash] ; ignore sub equal' equal equal [less greater bar slash] ; ignore sub equal' equal [colon exclam] equal; - sub equal_equal.liga equal' by LIG; sub equal' equal by equal_equal.liga; } equal_equal; @@ -67,27 +67,27 @@ lookup equal_equal_equal { sub equal_equal.liga' LIG equal by equal_equal_equal.liga; } equal_equal_equal; -# lookup equal_greater_greater { -# ignore sub equal' greater greater equal; -# ignore sub equal equal' greater greater; -# sub equal_greater_greater.liga LIG greater' by LIG; -# sub equal_greater_greater.liga greater' greater by LIG; -# sub equal' greater greater by equal_greater_greater.liga; -# } equal_greater_greater; - -# lookup equal_less_less { -# ignore sub equal' less less equal; -# ignore sub equal equal' less less; -# sub equal_less_less.liga LIG less' by LIG; -# sub equal_less_less.liga less' less by LIG; -# sub equal' less less by equal_less_less.liga; -# } equal_less_less; +lookup equal_greater_greater { + sub equal_greater_greater.liga LIG greater' by LIG; + sub equal_greater_greater.liga greater' greater by LIG; + ignore sub equal' greater greater equal; + ignore sub equal equal' greater greater; + sub equal' greater greater by equal_greater_greater.liga; +} equal_greater_greater; + +lookup equal_less_less { + sub equal_less_less.liga LIG less' by LIG; + sub equal_less_less.liga less' less by LIG; + ignore sub equal' less less equal; + ignore sub equal equal' less less; + sub equal' less less by equal_less_less.liga; +} equal_less_less; ### Less - It is convenient to have this lookup set at the start. lookup less_asciitilde { + sub less_asciitilde.liga asciitilde' by LIG; ignore sub less less' asciitilde; ignore sub less' asciitilde asciitilde asciitilde; - sub less_asciitilde.liga asciitilde' by LIG; sub less' asciitilde by less_asciitilde.liga; } less_asciitilde; @@ -97,55 +97,55 @@ lookup less_asciitilde_asciitilde { } less_asciitilde_asciitilde; lookup less_asterisk { + sub less_asterisk.liga asterisk' by LIG; ignore sub less less' asterisk; ignore sub less' asterisk asterisk; - sub less_asterisk.liga asterisk' by LIG; sub less' asterisk by less_asterisk.liga; } less_asterisk; lookup less_dollar { + sub less_dollar.liga dollar' by LIG; ignore sub less less' dollar; ignore sub less' dollar dollar; - sub less_dollar.liga dollar' by LIG; sub less' dollar by less_dollar.liga; } less_dollar; lookup less_equal { + sub less_equal.liga equal' by LIG; ignore sub less less' equal; ignore sub less' equal equal; ignore sub parenleft question less' equal; ignore sub equal less' equal; ignore sub less' equal [less greater bar colon exclam slash]; - sub less_equal.liga equal' by LIG; sub less' equal by less_equal.liga; } less_equal; lookup less_greater { + sub less_greater.liga greater' by LIG; ignore sub less less' greater; ignore sub less' greater greater; - sub less_greater.liga greater' by LIG; sub less' greater by less_greater.liga; } less_greater; lookup less_plus { + sub less_plus.liga plus' by LIG; ignore sub less less' plus; ignore sub less' plus plus; - sub less_plus.liga plus' by LIG; sub less' plus by less_plus.liga; } less_plus; lookup less_slash { + sub less_slash.liga slash' by LIG; ignore sub less less' slash; ignore sub less' slash slash; - sub less_slash.liga slash' by LIG; sub less' slash by less_slash.liga; } less_slash; lookup less_bar { + sub less_bar.liga bar' by LIG; ignore sub less less' bar; ignore sub less' bar bar bar bar; ignore sub less' bar bar greater; - sub less_bar.liga bar' by LIG; sub less' bar by less_bar.liga; } less_bar; @@ -162,6 +162,7 @@ lookup less_bar_bar_bar { # generally it is useful to have the duplicating sequences in a row. This avoids potential badness. lookup less_less { + sub less_less.liga less' by LIG; ignore sub less less' less; ignore sub less' less less less; ignore sub less' less [asterisk plus dollar]; @@ -171,14 +172,13 @@ lookup less_less { ignore sub less' less hyphen; ignore sub less' less equal [equal less greater bar colon exclam slash]; ignore sub less' less less [asterisk plus dollar]; - sub less_less.liga less' by LIG; sub less' less by less_less.liga; } less_less; -# lookup less_less_equal { -# sub less_less_equal.liga LIG equal' by equal; -# sub less_less.liga' LIG equal by less_less_equal.liga; -# } less_less_equal; +lookup less_less_equal { + sub less_less_equal.liga LIG equal' by equal; + sub less_less.liga' LIG equal by less_less_equal.liga; +} less_less_equal; lookup less_less_less { sub less_less_less.liga LIG less' by LIG; @@ -186,8 +186,8 @@ lookup less_less_less { } less_less_less; lookup less_asciitilde_greater { - ignore sub less_asciitilde.liga' LIG greater greater; sub less_asciitilde_greater.liga LIG greater' by LIG; + ignore sub less_asciitilde.liga' LIG greater greater; sub less_asciitilde.liga' LIG greater by less_asciitilde_greater.liga; } less_asciitilde_greater; @@ -207,147 +207,148 @@ lookup less_plus_greater { } less_plus_greater; lookup less_slash_greater { - ignore sub less_slash.liga' LIG greater greater; sub less_slash_greater.liga LIG greater' by LIG; + ignore sub less_slash.liga' LIG greater greater; sub less_slash.liga' LIG greater by less_slash_greater.liga; } less_slash_greater; lookup less_bar_greater { - ignore sub less_bar.liga' LIG greater greater; sub less_bar_greater.liga LIG greater' by LIG; + ignore sub less_bar.liga' LIG greater greater; sub less_bar.liga' LIG greater by less_bar_greater.liga; } less_bar_greater; 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_exclam_hyphen_hyphen.liga LIG LIG hyphen' by LIG; sub less_exclam_hyphen_hyphen.liga LIG hyphen' hyphen by LIG; sub less_exclam_hyphen_hyphen.liga exclam' hyphen hyphen by LIG; + ignore sub less less' exclam hyphen hyphen; + ignore sub less' exclam hyphen hyphen hyphen; + ignore sub parenleft question less' exclam hyphen hyphen; sub less' exclam hyphen hyphen by less_exclam_hyphen_hyphen.liga; } less_exclam_hyphen_hyphen; ### Ampersand lookup ampersand_ampersand { + sub ampersand_ampersand.liga ampersand' by LIG; ignore sub ampersand ampersand' ampersand; ignore sub ampersand' ampersand ampersand; - sub ampersand_ampersand.liga ampersand' by LIG; sub ampersand' ampersand by ampersand_ampersand.liga; } ampersand_ampersand; ### Asciicircum lookup asciicircum_equal { + sub asciicircum_equal.liga equal' by LIG; ignore sub asciicircum asciicircum' equal; ignore sub asciicircum' equal equal; - sub asciicircum_equal.liga equal' by LIG; sub asciicircum' equal by asciicircum_equal.liga; } asciicircum_equal; ### Asciitilde lookup asciitilde_asciitilde { + sub asciitilde_asciitilde.liga asciitilde' by LIG; ignore sub asciitilde asciitilde' asciitilde; ignore sub asciitilde' asciitilde asciitilde; - sub asciitilde_asciitilde.liga asciitilde' by LIG; sub asciitilde' asciitilde by asciitilde_asciitilde.liga; } asciitilde_asciitilde; lookup asciitilde_at { + sub asciitilde_at.liga at' by LIG; ignore sub asciitilde asciitilde' at; ignore sub asciitilde' at at; - sub asciitilde_at.liga at' by LIG; sub asciitilde' at by asciitilde_at.liga; } asciitilde_at; lookup asciitilde_greater { + sub asciitilde_greater.liga greater' by LIG; ignore sub asciitilde asciitilde' greater; ignore sub asciitilde' greater greater; - sub asciitilde_greater.liga greater' by LIG; sub asciitilde' greater by asciitilde_greater.liga; } asciitilde_greater; lookup asciitilde_hyphen { + sub asciitilde_hyphen.liga hyphen' by LIG; ignore sub asciitilde asciitilde' hyphen; ignore sub asciitilde' hyphen hyphen; - sub asciitilde_hyphen.liga hyphen' by LIG; sub asciitilde' hyphen by asciitilde_hyphen.liga; } asciitilde_hyphen; lookup asciitilde_asciitilde_greater { - ignore sub asciitilde_asciitilde.liga' LIG greater greater; sub asciitilde_asciitilde_greater.liga LIG greater' by LIG; + ignore sub asciitilde_asciitilde.liga' LIG greater greater; sub asciitilde_asciitilde.liga' LIG greater by asciitilde_asciitilde_greater.liga; } asciitilde_asciitilde_greater; lookup asciitilde_equal { + sub asciitilde_equal.liga equal' by LIG; ignore sub asciitilde asciitilde' equal; ignore sub asciitilde' equal equal; - sub asciitilde_equal.liga equal' by LIG; sub asciitilde' equal by asciitilde_equal.liga; } asciitilde_equal; ### Asterisk lookup asterisk_asterisk { + sub asterisk_asterisk.liga asterisk' by LIG; ignore sub asterisk asterisk' asterisk; ignore sub asterisk' asterisk asterisk asterisk; ignore sub slash asterisk' asterisk; ignore sub asterisk' asterisk slash; - sub asterisk_asterisk.liga asterisk' by LIG; sub asterisk' asterisk by asterisk_asterisk.liga; } asterisk_asterisk; lookup asterisk_asterisk_asterisk { - ignore sub asterisk_asterisk.liga' LIG asterisk slash; sub asterisk_asterisk_asterisk.liga LIG asterisk' by LIG; + ignore sub asterisk_asterisk.liga' LIG asterisk slash; sub asterisk_asterisk.liga' LIG asterisk by asterisk_asterisk_asterisk.liga; } asterisk_asterisk_asterisk; lookup asterisk_greater { + sub asterisk_greater.liga greater' by LIG; ignore sub asterisk asterisk' greater; ignore sub asterisk' greater greater; - sub asterisk_greater.liga greater' by LIG; sub asterisk' greater by asterisk_greater.liga; } asterisk_greater; lookup asterisk_slash { + sub asterisk_slash.liga slash' by LIG; ignore sub asterisk asterisk' slash; ignore sub asterisk' slash slash; ignore sub slash asterisk' slash; ignore sub asterisk' slash asterisk; - sub asterisk_slash.liga slash' by LIG; sub asterisk' slash by asterisk_slash.liga; } asterisk_slash; lookup asterisk_parenright { + sub asterisk_parenright.liga parenright' by LIG; ignore sub parenleft asterisk' parenright; ignore sub asterisk asterisk' parenright; ignore sub asterisk' parenright parenright; - sub asterisk_parenright.liga parenright' by LIG; sub asterisk' parenright by asterisk_parenright.liga; } asterisk_parenright; ### Backslash lookup backslash_slash { + sub backslash_slash.liga slash' by LIG; ignore sub @NotSpace backslash' slash; ignore sub backslash' slash @NotSpace; - sub backslash_slash.liga slash' by LIG; sub backslash' slash by backslash_slash.liga; } backslash_slash; lookup backslash_backslash { + sub backslash_backslash.liga backslash' by LIG; ignore sub backslash backslash' backslash; ignore sub backslash' backslash backslash; - sub backslash_backslash.liga backslash' by LIG; sub backslash' backslash by backslash_backslash.liga; } backslash_backslash; ### Bar lookup bar_bar { + sub bar_bar.liga bar' by LIG; ignore sub bar bar' bar; ignore sub bar' bar bar bar; ignore sub [hyphen equal] bar' bar; @@ -358,7 +359,6 @@ lookup bar_bar { ignore sub [less greater] bar' bar [less greater]; ignore sub less bar' bar; ignore sub less bar bar'; - sub bar_bar.liga bar' by LIG; sub bar' bar by bar_bar.liga; } bar_bar; @@ -368,38 +368,38 @@ lookup bar_bar_bar { } bar_bar_bar; lookup bar_greater { + sub bar_greater.liga greater' by LIG; ignore sub bar bar' greater; ignore sub bar' greater greater; ignore sub less bar bar' greater; - sub bar_greater.liga greater' by LIG; sub bar' greater by bar_greater.liga; } bar_greater; lookup bar_braceright { + sub bar_braceright.liga braceright' by LIG; ignore sub bar bar' braceright; ignore sub bar' braceright braceright; ignore sub braceleft bar' braceright; - sub bar_braceright.liga braceright' by LIG; sub bar' braceright by bar_braceright.liga; } bar_braceright; lookup bar_bracketright { + sub bar_bracketright.liga bracketright' by LIG; ignore sub bar bar' bracketright; ignore sub bar' bracketright bracketright; ignore sub bracketleft bar' bracketright; - sub bar_bracketright.liga bracketright' by LIG; sub bar' bracketright by bar_bracketright.liga; } bar_bracketright; lookup bar_bar_greater { - ignore sub bar_bar.liga' LIG greater greater; sub bar_bar_greater.liga LIG greater' by LIG; + ignore sub bar_bar.liga' LIG greater greater; sub bar_bar.liga' LIG greater by bar_bar_greater.liga; } bar_bar_greater; lookup bar_bar_bar_greater { - ignore sub bar_bar_bar.liga' LIG LIG greater greater; sub bar_bar_bar_greater.liga LIG LIG greater' by LIG; + ignore sub bar_bar_bar.liga' LIG LIG greater greater; sub bar_bar_bar.liga' LIG LIG greater by bar_bar_bar_greater.liga; } bar_bar_bar_greater; @@ -407,48 +407,48 @@ lookup bar_bar_bar_greater { ### Brace left lookup braceleft_bar { + sub braceleft_bar.liga bar' by LIG; ignore sub braceleft braceleft' bar; ignore sub braceleft' bar bar; ignore sub braceleft' bar braceright; - sub braceleft_bar.liga bar' by LIG; sub braceleft' bar by braceleft_bar.liga; } braceleft_bar; ### Brace right lookup braceright_numbersign { + sub braceright_numbersign.liga numbersign' by LIG; ignore sub braceright braceright' numbersign; ignore sub braceright' numbersign numbersign; - sub braceright_numbersign.liga numbersign' by LIG; sub braceright' numbersign by braceright_numbersign.liga; } braceright_numbersign; ### Bracket left lookup bracketleft_bar { + sub bracketleft_bar.liga bar' by LIG; ignore sub bracketleft bracketleft' bar; ignore sub bracketleft' bar bar; ignore sub bracketleft' bar bracketright; - sub bracketleft_bar.liga bar' by LIG; sub bracketleft' bar by bracketleft_bar.liga; } bracketleft_bar; ### Bracket right lookup bracketright_numbersign { + sub bracketright_numbersign.liga numbersign' by LIG; ignore sub bracketright bracketright' numbersign; ignore sub bracketright' numbersign numbersign; - sub bracketright_numbersign.liga numbersign' by LIG; sub bracketright' numbersign by bracketright_numbersign.liga; } bracketright_numbersign; ### Colon lookup colon_colon { + sub colon_colon.liga colon' by LIG; ignore sub colon colon' colon; ignore sub colon' colon colon colon; ignore sub parenleft question colon' colon; ignore sub colon' colon [less greater]; ignore sub [less greater] colon' colon; - sub colon_colon.liga colon' by LIG; sub colon' colon by colon_colon.liga; } colon_colon; @@ -458,63 +458,64 @@ lookup colon_colon_colon { } colon_colon_colon; lookup colon_equal { + sub colon_equal.liga equal' by LIG; ignore sub colon colon' equal; ignore sub colon' equal equal; ignore sub parenleft question colon' equal; ignore sub equal colon' equal; - sub colon_equal.liga equal' by LIG; sub colon' equal by colon_equal.liga; } colon_equal; lookup colon_colon_equal { - ignore sub colon_colon.liga' LIG equal equal; sub colon_colon_equal.liga LIG equal' by LIG; + ignore sub colon_colon.liga' LIG equal equal; sub colon_colon.liga' LIG equal by colon_colon_equal.liga; } colon_colon_equal; lookup colon_slash_slash { - ignore sub colon colon' slash slash; - ignore sub colon' slash slash slash; sub colon_slash_slash.liga LIG slash' by LIG; sub colon_slash_slash.liga slash' slash by LIG; + ignore sub colon colon' slash slash; + ignore sub colon' slash slash slash; sub colon' slash slash by colon_slash_slash.liga; } colon_slash_slash; ## Dollar lookup dollar_greater { + sub dollar_greater.liga greater' by LIG; ignore sub dollar dollar' greater; ignore sub dollar' greater greater; - sub dollar_greater.liga greater' by LIG; sub dollar' greater by dollar_greater.liga; } dollar_greater; ### Hyphen lookup hyphen_asciitilde { + sub hyphen_asciitilde.liga asciitilde' by LIG; ignore sub hyphen hyphen' asciitilde; ignore sub hyphen' asciitilde asciitilde; - sub hyphen_asciitilde.liga asciitilde' by LIG; sub hyphen' asciitilde by hyphen_asciitilde.liga; } hyphen_asciitilde; lookup hyphen_hyphen { + sub hyphen_hyphen.liga hyphen' by LIG; ignore sub hyphen hyphen' hyphen; ignore sub hyphen' hyphen hyphen hyphen; ignore sub [less greater bar] hyphen' hyphen; ignore sub hyphen' hyphen [less greater bar]; - sub hyphen_hyphen.liga hyphen' by LIG; sub hyphen' hyphen by hyphen_hyphen.liga; } hyphen_hyphen; lookup hyphen_hyphen_hyphen { - ignore sub hyphen_hyphen.liga' LIG hyphen [less greater bar]; sub hyphen_hyphen_hyphen.liga LIG hyphen' by LIG; + ignore sub hyphen_hyphen.liga' LIG hyphen [less greater bar]; sub hyphen_hyphen.liga' LIG hyphen by hyphen_hyphen_hyphen.liga; } hyphen_hyphen_hyphen; ### Greater lookup greater_greater { + sub greater_greater.liga greater' by LIG; ignore sub greater greater' greater; ignore sub greater' greater greater greater; ignore sub [asterisk plus dollar] greater' greater; @@ -523,7 +524,6 @@ lookup greater_greater { ignore sub equal equal greater' greater; # for consistency with other similar operators ignore sub greater' greater hyphen; ignore sub greater' greater equal [equal less greater bar colon exclam slash]; - sub greater_greater.liga greater' by LIG; sub greater' greater by greater_greater.liga; } greater_greater; @@ -532,17 +532,17 @@ lookup greater_greater_greater { sub greater_greater.liga' LIG greater by greater_greater_greater.liga; } greater_greater_greater; -# lookup greater_greater_equal { -# sub greater_greater_equal.liga LIG equal' by LIG; -# sub greater_greater.liga' LIG equal by greater_greater_equal.liga; -# } greater_greater_equal; +lookup greater_greater_equal { + sub greater_greater_equal.liga LIG equal' by LIG; + sub greater_greater.liga' LIG equal by greater_greater_equal.liga; +} greater_greater_equal; lookup greater_equal { + sub greater_equal.liga equal' by LIG; ignore sub greater greater' equal; ignore sub greater' equal equal; ignore sub equal greater' equal; ignore sub greater' equal [less greater bar colon exclam slash]; - sub greater_equal.liga equal' by LIG; sub greater' equal by greater_equal.liga; } greater_equal; @@ -550,99 +550,99 @@ lookup greater_equal { ### Numbersign lookup numbersign_braceleft { + sub numbersign_braceleft.liga braceleft' by LIG; ignore sub numbersign numbersign' braceleft; ignore sub numbersign' braceleft braceleft; - sub numbersign_braceleft.liga braceleft' by LIG; sub numbersign' braceleft by numbersign_braceleft.liga; } numbersign_braceleft; lookup numbersign_bracketleft { + sub numbersign_bracketleft.liga bracketleft' by LIG; ignore sub numbersign numbersign' bracketleft; ignore sub numbersign' bracketleft bracketleft; - sub numbersign_bracketleft.liga bracketleft' by LIG; sub numbersign' bracketleft by numbersign_bracketleft.liga; } numbersign_bracketleft; lookup numbersign_colon { + sub numbersign_colon.liga colon' by LIG; ignore sub numbersign numbersign' colon; ignore sub numbersign' colon colon; - sub numbersign_colon.liga colon' by LIG; sub numbersign' colon by numbersign_colon.liga; } numbersign_colon; lookup numbersign_equal { + sub numbersign_equal.liga equal' by LIG; ignore sub numbersign numbersign' equal; ignore sub numbersign' equal equal; - sub numbersign_equal.liga equal' by LIG; sub numbersign' equal by numbersign_equal.liga; } numbersign_equal; lookup numbersign_exclam { + sub numbersign_exclam.liga exclam' by LIG; ignore sub numbersign numbersign' exclam; ignore sub numbersign' exclam exclam; - sub numbersign_exclam.liga exclam' by LIG; sub numbersign' exclam by numbersign_exclam.liga; } numbersign_exclam; lookup numbersign_parenleft { + sub numbersign_parenleft.liga parenleft' by LIG; ignore sub numbersign numbersign' parenleft; ignore sub numbersign' parenleft parenleft; - sub numbersign_parenleft.liga parenleft' by LIG; sub numbersign' parenleft by numbersign_parenleft.liga; } numbersign_parenleft; lookup numbersign_question { + sub numbersign_question.liga question' by LIG; ignore sub numbersign numbersign' question; ignore sub numbersign' question question; - sub numbersign_question.liga question' by LIG; sub numbersign' question by numbersign_question.liga; } numbersign_question; lookup numbersign_underscore { + sub numbersign_underscore.liga underscore' by LIG; ignore sub numbersign numbersign' underscore; ignore sub numbersign' underscore underscore; - sub numbersign_underscore.liga underscore' by LIG; sub numbersign' underscore by numbersign_underscore.liga; } numbersign_underscore; lookup numbersign_underscore_parenleft { - ignore sub numbersign_underscore.liga' LIG parenleft parenleft; sub numbersign_underscore_parenleft.liga LIG parenleft' by LIG; + ignore sub numbersign_underscore.liga' LIG parenleft parenleft; sub numbersign_underscore.liga' LIG parenleft by numbersign_underscore_parenleft.liga; } numbersign_underscore_parenleft; ### Paren left lookup parenleft_asterisk { + sub parenleft_asterisk.liga asterisk' by LIG; ignore sub parenleft parenleft' asterisk; ignore sub parenleft' asterisk asterisk; ignore sub parenleft' asterisk parenright; - sub parenleft_asterisk.liga asterisk' by LIG; sub parenleft' asterisk by parenleft_asterisk.liga; } parenleft_asterisk; ### Percent lookup percent_percent { + sub percent_percent.liga percent' by LIG; ignore sub percent percent' percent; ignore sub percent' percent percent; - sub percent_percent.liga percent' by LIG; sub percent' percent by percent_percent.liga; } percent_percent; ### Period lookup period_equal { + sub period_equal.liga equal' by LIG; ignore sub period period' equal; ignore sub period' equal equal; - sub period_equal.liga equal' by LIG; sub period' equal by period_equal.liga; } period_equal; lookup period_period { + sub period_period.liga period' by LIG; ignore sub period period' period; ignore sub period' period period period; - sub period_period.liga period' by LIG; sub period' period by period_period.liga; } period_period; @@ -652,74 +652,74 @@ lookup period_period_period { } period_period_period; lookup period_question { + sub period_question.liga question' by LIG; ignore sub period period' question; ignore sub period' question question; - sub period_question.liga question' by LIG; sub period' question by period_question.liga; } period_question; lookup period_hyphen { + sub period_hyphen.liga hyphen' by LIG; ignore sub period period' hyphen; ignore sub period' hyphen hyphen; - sub period_hyphen.liga hyphen' by LIG; sub period' hyphen by period_hyphen.liga; } period_hyphen; lookup period_period_equal { - ignore sub period_period.liga' LIG equal equal; sub period_period_equal.liga LIG equal' by LIG; + ignore sub period_period.liga' LIG equal equal; sub period_period.liga' LIG equal by period_period_equal.liga; } period_period_equal; lookup period_period_less { - ignore sub period_period.liga' LIG less less; sub period_period_less.liga LIG less' by LIG; + ignore sub period_period.liga' LIG less less; sub period_period.liga' LIG less by period_period_less.liga; } period_period_less; ### Plus lookup plus_greater { + sub plus_greater.liga greater' by LIG; ignore sub plus plus' greater; ignore sub plus' greater greater; - sub plus_greater.liga greater' by LIG; sub plus' greater by plus_greater.liga; } plus_greater; lookup plus_plus { + sub plus_plus.liga plus' by LIG; ignore sub plus plus' plus; ignore sub plus' plus plus plus; - sub plus_plus.liga plus' by LIG; sub plus' plus by plus_plus.liga; } plus_plus; lookup plus_plus_plus { - ignore sub plus_plus.liga' LIG plus plus; sub plus_plus_plus.liga LIG plus' by LIG; + ignore sub plus_plus.liga' LIG plus plus; sub plus_plus.liga' LIG plus by plus_plus_plus.liga; } plus_plus_plus; ### Question lookup question_equal { + sub question_equal.liga equal' by LIG; ignore sub question question' equal; ignore sub question' equal equal; ignore sub parenleft question' equal; ignore sub less question' equal; - sub question_equal.liga equal' by LIG; sub question' equal by question_equal.liga; } question_equal; lookup question_period { + sub question_period.liga period' by LIG; ignore sub question question' period; ignore sub question' period period; - sub question_period.liga period' by LIG; sub question' period by question_period.liga; } question_period; lookup question_question { + sub question_question.liga question' by LIG; ignore sub question question' question; ignore sub question' question question; - sub question_question.liga question' by LIG; sub question' question by question_question.liga; } question_question; @@ -729,44 +729,44 @@ lookup question_question_equal { } question_question_equal; lookup question_colon { + sub question_colon.liga colon' by LIG; ignore sub question question' colon; ignore sub question' colon colon; - sub question_colon.liga colon' by LIG; sub question' colon by question_colon.liga; } question_colon; ### Semicolon lookup semicolon_semicolon { + sub semicolon_semicolon.liga semicolon' by LIG; ignore sub semicolon semicolon' semicolon; ignore sub semicolon' semicolon semicolon; - sub semicolon_semicolon.liga semicolon' by LIG; sub semicolon' semicolon by semicolon_semicolon.liga; } semicolon_semicolon; ### Slash lookup slash_asterisk { + sub slash_asterisk.liga asterisk' by LIG; ignore sub slash slash' asterisk; ignore sub slash' asterisk asterisk; ignore sub slash' asterisk slash; ignore sub asterisk slash' asterisk; - sub slash_asterisk.liga asterisk' by LIG; sub slash' asterisk by slash_asterisk.liga; } slash_asterisk; lookup slash_greater { + sub slash_greater.liga greater' by LIG; ignore sub slash slash' greater; ignore sub slash' greater greater; - sub slash_greater.liga greater' by LIG; sub slash' greater by slash_greater.liga; } slash_greater; lookup slash_slash { + sub slash_slash.liga slash' by LIG; ignore sub slash slash' slash; ignore sub slash' slash slash slash; ignore sub equal slash' slash; ignore sub slash' slash equal; - sub slash_slash.liga slash' by LIG; sub slash' slash by slash_slash.liga; } slash_slash; @@ -776,28 +776,28 @@ lookup slash_slash_slash { } slash_slash_slash; lookup slash_backslash { + sub slash_backslash.liga backslash' by LIG; ignore sub @NotSpace slash' backslash; ignore sub slash' backslash @NotSpace; - sub slash_backslash.liga backslash' by LIG; sub slash' backslash by slash_backslash.liga; } slash_backslash; ### WWW lookup w_w_w { - ignore sub w w' w w; - ignore sub w' w w w; sub w_w_w.liga LIG w' by LIG; sub w_w_w.liga w' w by LIG; + ignore sub w w' w w; + ignore sub w' w w w; sub w' w w by w_w_w.liga; } w_w_w; #fix rvrn issues :/ lookup less_dollar_rvrn { + sub less_dollar.liga.BRACKET.600 dollar.BRACKET.600' by LIG; ignore sub less less' dollar.BRACKET.600; ignore sub less' dollar.BRACKET.600 dollar.BRACKET.600; - sub less_dollar.liga.BRACKET.600 dollar.BRACKET.600' by LIG; sub less' dollar.BRACKET.600 by less_dollar.liga.BRACKET.600; } less_dollar_rvrn; @@ -807,9 +807,9 @@ lookup less_dollar_greater_rvrn { } less_dollar_greater_rvrn; lookup dollar_greater_rvrn { + sub dollar_greater.liga.BRACKET.600 greater' by LIG; ignore sub dollar.BRACKET.600 dollar.BRACKET.600' greater; ignore sub dollar.BRACKET.600' greater greater; - sub dollar_greater.liga.BRACKET.600 greater' by LIG; sub dollar.BRACKET.600' greater by dollar_greater.liga.BRACKET.600; } dollar_greater_rvrn; @@ -1187,4 +1187,4 @@ lookup condensedar { sub @feh2 @yeh1' by @yeh2; } condensedar; -} calt; \ No newline at end of file +} calt; diff --git a/sources/features/calt_italic.fea b/sources/features/calt_italic.fea index 661bc391e..7fd05b1b8 100644 --- a/sources/features/calt_italic.fea +++ b/sources/features/calt_italic.fea @@ -1,12 +1,12 @@ feature calt { ### Exclam (for equal see below) lookup exclam_equal { + sub exclam_equal.liga equal' by LIG; ignore sub exclam exclam' equal; ignore sub exclam' equal equal equal; ignore sub parenleft question exclam' equal; ignore sub parenleft question less exclam' equal; ignore sub equal exclam' equal; - sub exclam_equal.liga equal' by LIG; sub exclam' equal by exclam_equal.liga; } exclam_equal; @@ -16,36 +16,37 @@ lookup exclam_equal_equal { } exclam_equal_equal; lookup exclam_exclam { + sub exclam_exclam.liga exclam' by LIG; 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_exclam.liga exclam' by LIG; sub exclam' exclam by exclam_exclam.liga; } exclam_exclam; lookup exclam_exclam_period { - ignore sub exclam_exclam.liga' LIG period period; sub exclam_exclam_period.liga LIG period' by LIG; + ignore sub exclam_exclam.liga' LIG period period; sub exclam_exclam.liga' LIG period by exclam_exclam_period.liga; } exclam_exclam_period; lookup exclam_period { + sub exclam_period.liga period' by LIG; ignore sub exclam exclam' period; ignore sub exclam' period period; - sub exclam_period.liga period' by LIG; sub exclam' period by exclam_period.liga; } exclam_period; lookup exclam_colon { + sub exclam_colon.liga colon' by LIG; ignore sub exclam exclam' colon; ignore sub exclam' colon colon; - sub exclam_colon.liga colon' by LIG; sub exclam' colon by exclam_colon.liga; } exclam_colon; ## Equal - Made sense to shift this below the exclam to avoid issues lookup equal_equal { + sub equal_equal.liga equal' by LIG; ignore sub equal equal' equal; ignore sub equal' equal equal equal; ignore sub parenleft question equal' equal; @@ -58,7 +59,6 @@ lookup equal_equal { ignore sub equal' equal [less greater bar slash] ; ignore sub equal' equal equal [less greater bar slash] ; ignore sub equal' equal [colon exclam] equal; - sub equal_equal.liga equal' by LIG; sub equal' equal by equal_equal.liga; } equal_equal; @@ -68,26 +68,26 @@ lookup equal_equal_equal { } equal_equal_equal; lookup equal_greater_greater { - ignore sub equal' greater greater equal; - ignore sub equal equal' greater greater; sub equal_greater_greater.liga LIG greater' by LIG; sub equal_greater_greater.liga greater' greater by LIG; + ignore sub equal' greater greater equal; + ignore sub equal equal' greater greater; sub equal' greater greater by equal_greater_greater.liga; } equal_greater_greater; lookup equal_less_less { - ignore sub equal' less less equal; - ignore sub equal equal' less less; sub equal_less_less.liga LIG less' by LIG; sub equal_less_less.liga less' less by LIG; + ignore sub equal' less less equal; + ignore sub equal equal' less less; sub equal' less less by equal_less_less.liga; } equal_less_less; ### Less - It is convenient to have this lookup set at the start. lookup less_asciitilde { + sub less_asciitilde.liga asciitilde' by LIG; ignore sub less less' asciitilde; ignore sub less' asciitilde asciitilde asciitilde; - sub less_asciitilde.liga asciitilde' by LIG; sub less' asciitilde by less_asciitilde.liga; } less_asciitilde; @@ -97,55 +97,55 @@ lookup less_asciitilde_asciitilde { } less_asciitilde_asciitilde; lookup less_asterisk { + sub less_asterisk.liga asterisk' by LIG; ignore sub less less' asterisk; ignore sub less' asterisk asterisk; - sub less_asterisk.liga asterisk' by LIG; sub less' asterisk by less_asterisk.liga; } less_asterisk; lookup less_dollar { + sub less_dollar.liga dollar' by LIG; ignore sub less less' dollar; ignore sub less' dollar dollar; - sub less_dollar.liga dollar' by LIG; sub less' dollar by less_dollar.liga; } less_dollar; lookup less_equal { + sub less_equal.liga equal' by LIG; ignore sub less less' equal; ignore sub less' equal equal; ignore sub parenleft question less' equal; ignore sub equal less' equal; ignore sub less' equal [less greater bar colon exclam slash]; - sub less_equal.liga equal' by LIG; sub less' equal by less_equal.liga; } less_equal; lookup less_greater { + sub less_greater.liga greater' by LIG; ignore sub less less' greater; ignore sub less' greater greater; - sub less_greater.liga greater' by LIG; sub less' greater by less_greater.liga; } less_greater; lookup less_plus { + sub less_plus.liga plus' by LIG; ignore sub less less' plus; ignore sub less' plus plus; - sub less_plus.liga plus' by LIG; sub less' plus by less_plus.liga; } less_plus; lookup less_slash { + sub less_slash.liga slash' by LIG; ignore sub less less' slash; ignore sub less' slash slash; - sub less_slash.liga slash' by LIG; sub less' slash by less_slash.liga; } less_slash; lookup less_bar { + sub less_bar.liga bar' by LIG; ignore sub less less' bar; ignore sub less' bar bar bar bar; ignore sub less' bar bar greater; - sub less_bar.liga bar' by LIG; sub less' bar by less_bar.liga; } less_bar; @@ -162,6 +162,7 @@ lookup less_bar_bar_bar { # generally it is useful to have the duplicating sequences in a row. This avoids potential badness. lookup less_less { + sub less_less.liga less' by LIG; ignore sub less less' less; ignore sub less' less less less; ignore sub less' less [asterisk plus dollar]; @@ -171,7 +172,6 @@ lookup less_less { ignore sub less' less hyphen; ignore sub less' less equal [equal less greater bar colon exclam slash]; ignore sub less' less less [asterisk plus dollar]; - sub less_less.liga less' by LIG; sub less' less by less_less.liga; } less_less; @@ -186,8 +186,8 @@ lookup less_less_less { } less_less_less; lookup less_asciitilde_greater { - ignore sub less_asciitilde.liga' LIG greater greater; sub less_asciitilde_greater.liga LIG greater' by LIG; + ignore sub less_asciitilde.liga' LIG greater greater; sub less_asciitilde.liga' LIG greater by less_asciitilde_greater.liga; } less_asciitilde_greater; @@ -207,154 +207,148 @@ lookup less_plus_greater { } less_plus_greater; lookup less_slash_greater { - ignore sub less_slash.liga' LIG greater greater; sub less_slash_greater.liga LIG greater' by LIG; + ignore sub less_slash.liga' LIG greater greater; sub less_slash.liga' LIG greater by less_slash_greater.liga; } less_slash_greater; lookup less_bar_greater { - ignore sub less_bar.liga' LIG greater greater; sub less_bar_greater.liga LIG greater' by LIG; + ignore sub less_bar.liga' LIG greater greater; sub less_bar.liga' LIG greater by less_bar_greater.liga; } less_bar_greater; 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_exclam_hyphen_hyphen.liga LIG LIG hyphen' by LIG; sub less_exclam_hyphen_hyphen.liga LIG hyphen' hyphen by LIG; sub less_exclam_hyphen_hyphen.liga exclam' hyphen hyphen by LIG; + ignore sub less less' exclam hyphen hyphen; + ignore sub less' exclam hyphen hyphen hyphen; + ignore sub parenleft question less' exclam hyphen hyphen; sub less' exclam hyphen hyphen by less_exclam_hyphen_hyphen.liga; } less_exclam_hyphen_hyphen; ### Ampersand lookup ampersand_ampersand { + sub ampersand_ampersand.liga ampersand' by LIG; ignore sub ampersand ampersand' ampersand; ignore sub ampersand' ampersand ampersand; - sub ampersand_ampersand.liga ampersand' by LIG; sub ampersand' ampersand by ampersand_ampersand.liga; } ampersand_ampersand; -lookup ampersand_ampersand_rvrn { - ignore sub ampersand.BRACKET.600 ampersand.BRACKET.600' ampersand.BRACKET.600; - ignore sub ampersand.BRACKET.600' ampersand.BRACKET.600 ampersand.BRACKET.600; - sub ampersand_ampersand.liga.BRACKET.600 ampersand.BRACKET.600' by LIG; - sub ampersand.BRACKET.600' ampersand.BRACKET.600 by ampersand_ampersand.liga.BRACKET.600; -} ampersand_ampersand_rvrn; - ### Asciicircum lookup asciicircum_equal { + sub asciicircum_equal.liga equal' by LIG; ignore sub asciicircum asciicircum' equal; ignore sub asciicircum' equal equal; - sub asciicircum_equal.liga equal' by LIG; sub asciicircum' equal by asciicircum_equal.liga; } asciicircum_equal; ### Asciitilde lookup asciitilde_asciitilde { + sub asciitilde_asciitilde.liga asciitilde' by LIG; ignore sub asciitilde asciitilde' asciitilde; ignore sub asciitilde' asciitilde asciitilde; - sub asciitilde_asciitilde.liga asciitilde' by LIG; sub asciitilde' asciitilde by asciitilde_asciitilde.liga; } asciitilde_asciitilde; lookup asciitilde_at { + sub asciitilde_at.liga at' by LIG; ignore sub asciitilde asciitilde' at; ignore sub asciitilde' at at; - sub asciitilde_at.liga at' by LIG; sub asciitilde' at by asciitilde_at.liga; } asciitilde_at; lookup asciitilde_greater { + sub asciitilde_greater.liga greater' by LIG; ignore sub asciitilde asciitilde' greater; ignore sub asciitilde' greater greater; - sub asciitilde_greater.liga greater' by LIG; sub asciitilde' greater by asciitilde_greater.liga; } asciitilde_greater; lookup asciitilde_hyphen { + sub asciitilde_hyphen.liga hyphen' by LIG; ignore sub asciitilde asciitilde' hyphen; ignore sub asciitilde' hyphen hyphen; - sub asciitilde_hyphen.liga hyphen' by LIG; sub asciitilde' hyphen by asciitilde_hyphen.liga; } asciitilde_hyphen; lookup asciitilde_asciitilde_greater { - ignore sub asciitilde_asciitilde.liga' LIG greater greater; sub asciitilde_asciitilde_greater.liga LIG greater' by LIG; + ignore sub asciitilde_asciitilde.liga' LIG greater greater; sub asciitilde_asciitilde.liga' LIG greater by asciitilde_asciitilde_greater.liga; } asciitilde_asciitilde_greater; lookup asciitilde_equal { + sub asciitilde_equal.liga equal' by LIG; ignore sub asciitilde asciitilde' equal; ignore sub asciitilde' equal equal; - sub asciitilde_equal.liga equal' by LIG; sub asciitilde' equal by asciitilde_equal.liga; } asciitilde_equal; ### Asterisk lookup asterisk_asterisk { + sub asterisk_asterisk.liga asterisk' by LIG; ignore sub asterisk asterisk' asterisk; ignore sub asterisk' asterisk asterisk asterisk; ignore sub slash asterisk' asterisk; ignore sub asterisk' asterisk slash; - sub asterisk_asterisk.liga asterisk' by LIG; sub asterisk' asterisk by asterisk_asterisk.liga; } asterisk_asterisk; lookup asterisk_asterisk_asterisk { - ignore sub asterisk_asterisk.liga' LIG asterisk slash; sub asterisk_asterisk_asterisk.liga LIG asterisk' by LIG; + ignore sub asterisk_asterisk.liga' LIG asterisk slash; sub asterisk_asterisk.liga' LIG asterisk by asterisk_asterisk_asterisk.liga; } asterisk_asterisk_asterisk; lookup asterisk_greater { + sub asterisk_greater.liga greater' by LIG; ignore sub asterisk asterisk' greater; ignore sub asterisk' greater greater; - sub asterisk_greater.liga greater' by LIG; sub asterisk' greater by asterisk_greater.liga; } asterisk_greater; lookup asterisk_slash { + sub asterisk_slash.liga slash' by LIG; ignore sub asterisk asterisk' slash; ignore sub asterisk' slash slash; ignore sub slash asterisk' slash; ignore sub asterisk' slash asterisk; - sub asterisk_slash.liga slash' by LIG; sub asterisk' slash by asterisk_slash.liga; } asterisk_slash; lookup asterisk_parenright { + sub asterisk_parenright.liga parenright' by LIG; ignore sub parenleft asterisk' parenright; ignore sub asterisk asterisk' parenright; ignore sub asterisk' parenright parenright; - sub asterisk_parenright.liga parenright' by LIG; sub asterisk' parenright by asterisk_parenright.liga; } asterisk_parenright; ### Backslash lookup backslash_slash { + sub backslash_slash.liga slash' by LIG; ignore sub @NotSpace backslash' slash; ignore sub backslash' slash @NotSpace; - sub backslash_slash.liga slash' by LIG; sub backslash' slash by backslash_slash.liga; } backslash_slash; lookup backslash_backslash { + sub backslash_backslash.liga backslash' by LIG; ignore sub backslash backslash' backslash; ignore sub backslash' backslash backslash; - sub backslash_backslash.liga backslash' by LIG; sub backslash' backslash by backslash_backslash.liga; } backslash_backslash; ### Bar lookup bar_bar { + sub bar_bar.liga bar' by LIG; ignore sub bar bar' bar; ignore sub bar' bar bar bar; ignore sub [hyphen equal] bar' bar; @@ -365,7 +359,6 @@ lookup bar_bar { ignore sub [less greater] bar' bar [less greater]; ignore sub less bar' bar; ignore sub less bar bar'; - sub bar_bar.liga bar' by LIG; sub bar' bar by bar_bar.liga; } bar_bar; @@ -375,38 +368,38 @@ lookup bar_bar_bar { } bar_bar_bar; lookup bar_greater { + sub bar_greater.liga greater' by LIG; ignore sub bar bar' greater; ignore sub bar' greater greater; ignore sub less bar bar' greater; - sub bar_greater.liga greater' by LIG; sub bar' greater by bar_greater.liga; } bar_greater; lookup bar_braceright { + sub bar_braceright.liga braceright' by LIG; ignore sub bar bar' braceright; ignore sub bar' braceright braceright; ignore sub braceleft bar' braceright; - sub bar_braceright.liga braceright' by LIG; sub bar' braceright by bar_braceright.liga; } bar_braceright; lookup bar_bracketright { + sub bar_bracketright.liga bracketright' by LIG; ignore sub bar bar' bracketright; ignore sub bar' bracketright bracketright; ignore sub bracketleft bar' bracketright; - sub bar_bracketright.liga bracketright' by LIG; sub bar' bracketright by bar_bracketright.liga; } bar_bracketright; lookup bar_bar_greater { - ignore sub bar_bar.liga' LIG greater greater; sub bar_bar_greater.liga LIG greater' by LIG; + ignore sub bar_bar.liga' LIG greater greater; sub bar_bar.liga' LIG greater by bar_bar_greater.liga; } bar_bar_greater; lookup bar_bar_bar_greater { - ignore sub bar_bar_bar.liga' LIG LIG greater greater; sub bar_bar_bar_greater.liga LIG LIG greater' by LIG; + ignore sub bar_bar_bar.liga' LIG LIG greater greater; sub bar_bar_bar.liga' LIG LIG greater by bar_bar_bar_greater.liga; } bar_bar_bar_greater; @@ -414,48 +407,48 @@ lookup bar_bar_bar_greater { ### Brace left lookup braceleft_bar { + sub braceleft_bar.liga bar' by LIG; ignore sub braceleft braceleft' bar; ignore sub braceleft' bar bar; ignore sub braceleft' bar braceright; - sub braceleft_bar.liga bar' by LIG; sub braceleft' bar by braceleft_bar.liga; } braceleft_bar; ### Brace right lookup braceright_numbersign { + sub braceright_numbersign.liga numbersign' by LIG; ignore sub braceright braceright' numbersign; ignore sub braceright' numbersign numbersign; - sub braceright_numbersign.liga numbersign' by LIG; sub braceright' numbersign by braceright_numbersign.liga; } braceright_numbersign; ### Bracket left lookup bracketleft_bar { + sub bracketleft_bar.liga bar' by LIG; ignore sub bracketleft bracketleft' bar; ignore sub bracketleft' bar bar; ignore sub bracketleft' bar bracketright; - sub bracketleft_bar.liga bar' by LIG; sub bracketleft' bar by bracketleft_bar.liga; } bracketleft_bar; ### Bracket right lookup bracketright_numbersign { + sub bracketright_numbersign.liga numbersign' by LIG; ignore sub bracketright bracketright' numbersign; ignore sub bracketright' numbersign numbersign; - sub bracketright_numbersign.liga numbersign' by LIG; sub bracketright' numbersign by bracketright_numbersign.liga; } bracketright_numbersign; ### Colon lookup colon_colon { + sub colon_colon.liga colon' by LIG; ignore sub colon colon' colon; ignore sub colon' colon colon colon; ignore sub parenleft question colon' colon; ignore sub colon' colon [less greater]; ignore sub [less greater] colon' colon; - sub colon_colon.liga colon' by LIG; sub colon' colon by colon_colon.liga; } colon_colon; @@ -465,63 +458,64 @@ lookup colon_colon_colon { } colon_colon_colon; lookup colon_equal { + sub colon_equal.liga equal' by LIG; ignore sub colon colon' equal; ignore sub colon' equal equal; ignore sub parenleft question colon' equal; ignore sub equal colon' equal; - sub colon_equal.liga equal' by LIG; sub colon' equal by colon_equal.liga; } colon_equal; lookup colon_colon_equal { - ignore sub colon_colon.liga' LIG equal equal; sub colon_colon_equal.liga LIG equal' by LIG; + ignore sub colon_colon.liga' LIG equal equal; sub colon_colon.liga' LIG equal by colon_colon_equal.liga; } colon_colon_equal; lookup colon_slash_slash { - ignore sub colon colon' slash slash; - ignore sub colon' slash slash slash; sub colon_slash_slash.liga LIG slash' by LIG; sub colon_slash_slash.liga slash' slash by LIG; + ignore sub colon colon' slash slash; + ignore sub colon' slash slash slash; sub colon' slash slash by colon_slash_slash.liga; } colon_slash_slash; ## Dollar lookup dollar_greater { + sub dollar_greater.liga greater' by LIG; ignore sub dollar dollar' greater; ignore sub dollar' greater greater; - sub dollar_greater.liga greater' by LIG; sub dollar' greater by dollar_greater.liga; } dollar_greater; ### Hyphen lookup hyphen_asciitilde { + sub hyphen_asciitilde.liga asciitilde' by LIG; ignore sub hyphen hyphen' asciitilde; ignore sub hyphen' asciitilde asciitilde; - sub hyphen_asciitilde.liga asciitilde' by LIG; sub hyphen' asciitilde by hyphen_asciitilde.liga; } hyphen_asciitilde; lookup hyphen_hyphen { + sub hyphen_hyphen.liga hyphen' by LIG; ignore sub hyphen hyphen' hyphen; ignore sub hyphen' hyphen hyphen hyphen; ignore sub [less greater bar] hyphen' hyphen; ignore sub hyphen' hyphen [less greater bar]; - sub hyphen_hyphen.liga hyphen' by LIG; sub hyphen' hyphen by hyphen_hyphen.liga; } hyphen_hyphen; lookup hyphen_hyphen_hyphen { - ignore sub hyphen_hyphen.liga' LIG hyphen [less greater bar]; sub hyphen_hyphen_hyphen.liga LIG hyphen' by LIG; + ignore sub hyphen_hyphen.liga' LIG hyphen [less greater bar]; sub hyphen_hyphen.liga' LIG hyphen by hyphen_hyphen_hyphen.liga; } hyphen_hyphen_hyphen; ### Greater lookup greater_greater { + sub greater_greater.liga greater' by LIG; ignore sub greater greater' greater; ignore sub greater' greater greater greater; ignore sub [asterisk plus dollar] greater' greater; @@ -530,7 +524,6 @@ lookup greater_greater { ignore sub equal equal greater' greater; # for consistency with other similar operators ignore sub greater' greater hyphen; ignore sub greater' greater equal [equal less greater bar colon exclam slash]; - sub greater_greater.liga greater' by LIG; sub greater' greater by greater_greater.liga; } greater_greater; @@ -545,11 +538,11 @@ lookup greater_greater_equal { } greater_greater_equal; lookup greater_equal { + sub greater_equal.liga equal' by LIG; ignore sub greater greater' equal; ignore sub greater' equal equal; ignore sub equal greater' equal; ignore sub greater' equal [less greater bar colon exclam slash]; - sub greater_equal.liga equal' by LIG; sub greater' equal by greater_equal.liga; } greater_equal; @@ -557,99 +550,99 @@ lookup greater_equal { ### Numbersign lookup numbersign_braceleft { + sub numbersign_braceleft.liga braceleft' by LIG; ignore sub numbersign numbersign' braceleft; ignore sub numbersign' braceleft braceleft; - sub numbersign_braceleft.liga braceleft' by LIG; sub numbersign' braceleft by numbersign_braceleft.liga; } numbersign_braceleft; lookup numbersign_bracketleft { + sub numbersign_bracketleft.liga bracketleft' by LIG; ignore sub numbersign numbersign' bracketleft; ignore sub numbersign' bracketleft bracketleft; - sub numbersign_bracketleft.liga bracketleft' by LIG; sub numbersign' bracketleft by numbersign_bracketleft.liga; } numbersign_bracketleft; lookup numbersign_colon { + sub numbersign_colon.liga colon' by LIG; ignore sub numbersign numbersign' colon; ignore sub numbersign' colon colon; - sub numbersign_colon.liga colon' by LIG; sub numbersign' colon by numbersign_colon.liga; } numbersign_colon; lookup numbersign_equal { + sub numbersign_equal.liga equal' by LIG; ignore sub numbersign numbersign' equal; ignore sub numbersign' equal equal; - sub numbersign_equal.liga equal' by LIG; sub numbersign' equal by numbersign_equal.liga; } numbersign_equal; lookup numbersign_exclam { + sub numbersign_exclam.liga exclam' by LIG; ignore sub numbersign numbersign' exclam; ignore sub numbersign' exclam exclam; - sub numbersign_exclam.liga exclam' by LIG; sub numbersign' exclam by numbersign_exclam.liga; } numbersign_exclam; lookup numbersign_parenleft { + sub numbersign_parenleft.liga parenleft' by LIG; ignore sub numbersign numbersign' parenleft; ignore sub numbersign' parenleft parenleft; - sub numbersign_parenleft.liga parenleft' by LIG; sub numbersign' parenleft by numbersign_parenleft.liga; } numbersign_parenleft; lookup numbersign_question { + sub numbersign_question.liga question' by LIG; ignore sub numbersign numbersign' question; ignore sub numbersign' question question; - sub numbersign_question.liga question' by LIG; sub numbersign' question by numbersign_question.liga; } numbersign_question; lookup numbersign_underscore { + sub numbersign_underscore.liga underscore' by LIG; ignore sub numbersign numbersign' underscore; ignore sub numbersign' underscore underscore; - sub numbersign_underscore.liga underscore' by LIG; sub numbersign' underscore by numbersign_underscore.liga; } numbersign_underscore; lookup numbersign_underscore_parenleft { - ignore sub numbersign_underscore.liga' LIG parenleft parenleft; sub numbersign_underscore_parenleft.liga LIG parenleft' by LIG; + ignore sub numbersign_underscore.liga' LIG parenleft parenleft; sub numbersign_underscore.liga' LIG parenleft by numbersign_underscore_parenleft.liga; } numbersign_underscore_parenleft; ### Paren left lookup parenleft_asterisk { + sub parenleft_asterisk.liga asterisk' by LIG; ignore sub parenleft parenleft' asterisk; ignore sub parenleft' asterisk asterisk; ignore sub parenleft' asterisk parenright; - sub parenleft_asterisk.liga asterisk' by LIG; sub parenleft' asterisk by parenleft_asterisk.liga; } parenleft_asterisk; ### Percent lookup percent_percent { + sub percent_percent.liga percent' by LIG; ignore sub percent percent' percent; ignore sub percent' percent percent; - sub percent_percent.liga percent' by LIG; sub percent' percent by percent_percent.liga; } percent_percent; ### Period lookup period_equal { + sub period_equal.liga equal' by LIG; ignore sub period period' equal; ignore sub period' equal equal; - sub period_equal.liga equal' by LIG; sub period' equal by period_equal.liga; } period_equal; lookup period_period { + sub period_period.liga period' by LIG; ignore sub period period' period; ignore sub period' period period period; - sub period_period.liga period' by LIG; sub period' period by period_period.liga; } period_period; @@ -659,74 +652,74 @@ lookup period_period_period { } period_period_period; lookup period_question { + sub period_question.liga question' by LIG; ignore sub period period' question; ignore sub period' question question; - sub period_question.liga question' by LIG; sub period' question by period_question.liga; } period_question; lookup period_hyphen { + sub period_hyphen.liga hyphen' by LIG; ignore sub period period' hyphen; ignore sub period' hyphen hyphen; - sub period_hyphen.liga hyphen' by LIG; sub period' hyphen by period_hyphen.liga; } period_hyphen; lookup period_period_equal { - ignore sub period_period.liga' LIG equal equal; sub period_period_equal.liga LIG equal' by LIG; + ignore sub period_period.liga' LIG equal equal; sub period_period.liga' LIG equal by period_period_equal.liga; } period_period_equal; lookup period_period_less { - ignore sub period_period.liga' LIG less less; sub period_period_less.liga LIG less' by LIG; + ignore sub period_period.liga' LIG less less; sub period_period.liga' LIG less by period_period_less.liga; } period_period_less; ### Plus lookup plus_greater { + sub plus_greater.liga greater' by LIG; ignore sub plus plus' greater; ignore sub plus' greater greater; - sub plus_greater.liga greater' by LIG; sub plus' greater by plus_greater.liga; } plus_greater; lookup plus_plus { + sub plus_plus.liga plus' by LIG; ignore sub plus plus' plus; ignore sub plus' plus plus plus; - sub plus_plus.liga plus' by LIG; sub plus' plus by plus_plus.liga; } plus_plus; lookup plus_plus_plus { - ignore sub plus_plus.liga' LIG plus plus; sub plus_plus_plus.liga LIG plus' by LIG; + ignore sub plus_plus.liga' LIG plus plus; sub plus_plus.liga' LIG plus by plus_plus_plus.liga; } plus_plus_plus; ### Question lookup question_equal { + sub question_equal.liga equal' by LIG; ignore sub question question' equal; ignore sub question' equal equal; ignore sub parenleft question' equal; ignore sub less question' equal; - sub question_equal.liga equal' by LIG; sub question' equal by question_equal.liga; } question_equal; lookup question_period { + sub question_period.liga period' by LIG; ignore sub question question' period; ignore sub question' period period; - sub question_period.liga period' by LIG; sub question' period by question_period.liga; } question_period; lookup question_question { + sub question_question.liga question' by LIG; ignore sub question question' question; ignore sub question' question question; - sub question_question.liga question' by LIG; sub question' question by question_question.liga; } question_question; @@ -736,44 +729,44 @@ lookup question_question_equal { } question_question_equal; lookup question_colon { + sub question_colon.liga colon' by LIG; ignore sub question question' colon; ignore sub question' colon colon; - sub question_colon.liga colon' by LIG; sub question' colon by question_colon.liga; } question_colon; ### Semicolon lookup semicolon_semicolon { + sub semicolon_semicolon.liga semicolon' by LIG; ignore sub semicolon semicolon' semicolon; ignore sub semicolon' semicolon semicolon; - sub semicolon_semicolon.liga semicolon' by LIG; sub semicolon' semicolon by semicolon_semicolon.liga; } semicolon_semicolon; ### Slash lookup slash_asterisk { + sub slash_asterisk.liga asterisk' by LIG; ignore sub slash slash' asterisk; ignore sub slash' asterisk asterisk; ignore sub slash' asterisk slash; ignore sub asterisk slash' asterisk; - sub slash_asterisk.liga asterisk' by LIG; sub slash' asterisk by slash_asterisk.liga; } slash_asterisk; lookup slash_greater { + sub slash_greater.liga greater' by LIG; ignore sub slash slash' greater; ignore sub slash' greater greater; - sub slash_greater.liga greater' by LIG; sub slash' greater by slash_greater.liga; } slash_greater; lookup slash_slash { + sub slash_slash.liga slash' by LIG; ignore sub slash slash' slash; ignore sub slash' slash slash slash; ignore sub equal slash' slash; ignore sub slash' slash equal; - sub slash_slash.liga slash' by LIG; sub slash' slash by slash_slash.liga; } slash_slash; @@ -783,28 +776,28 @@ lookup slash_slash_slash { } slash_slash_slash; lookup slash_backslash { + sub slash_backslash.liga backslash' by LIG; ignore sub @NotSpace slash' backslash; ignore sub slash' backslash @NotSpace; - sub slash_backslash.liga backslash' by LIG; sub slash' backslash by slash_backslash.liga; } slash_backslash; ### WWW lookup w_w_w { - ignore sub w w' w w; - ignore sub w' w w w; sub w_w_w.liga LIG w' by LIG; sub w_w_w.liga w' w by LIG; + ignore sub w w' w w; + ignore sub w' w w w; sub w' w w by w_w_w.liga; } w_w_w; #fix rvrn issues :/ lookup less_dollar_rvrn { + sub less_dollar.liga.BRACKET.600 dollar.BRACKET.600' by LIG; ignore sub less less' dollar.BRACKET.600; ignore sub less' dollar.BRACKET.600 dollar.BRACKET.600; - sub less_dollar.liga.BRACKET.600 dollar.BRACKET.600' by LIG; sub less' dollar.BRACKET.600 by less_dollar.liga.BRACKET.600; } less_dollar_rvrn; @@ -814,9 +807,9 @@ lookup less_dollar_greater_rvrn { } less_dollar_greater_rvrn; lookup dollar_greater_rvrn { + sub dollar_greater.liga.BRACKET.600 greater' by LIG; ignore sub dollar.BRACKET.600 dollar.BRACKET.600' greater; ignore sub dollar.BRACKET.600' greater greater; - sub dollar_greater.liga.BRACKET.600 greater' by LIG; sub dollar.BRACKET.600' greater by dollar_greater.liga.BRACKET.600; } dollar_greater_rvrn; @@ -1013,4 +1006,4 @@ lookup underscores { sub dcaron' [lacute lcaron lcommaaccent ldot lslash b h k l hbar hcircumflex kcommaaccent @Uppercase] by dcaron.alt; sub [B C D E F G H I J K M N O P Q R S T U V W X Y Z seven f Be-cy Ve-cy Ge-cy Gje-cy Gheupturn-cy De-cy Ie-cy Iegrave-cy Io-cy Zhe-cy Ze-cy Ii-cy Iishort-cy Iigrave-cy Ka-cy Kje-cy El-cy Em-cy En-cy O-cy Pe-cy Er-cy Es-cy Te-cy U-cy Ushort-cy Ef-cy Ha-cy Che-cy Tse-cy Sha-cy Shcha-cy Dzhe-cy Softsign-cy Hardsign-cy Yeru-cy Lje-cy Nje-cy Dze-cy E-cy Ereversed-cy I-cy Yi-cy Je-cy Tshe-cy Iu-cy Ia-cy Dje-cy Ghestroke-cy Zhedescender-cy Kadescender-cy Endescender-cy Ustraight-cy Ustraightstroke-cy Hadescender-cy Chedescender-cy Palochka-cy Schwa-cy Imacron-cy Obarred-cy Umacron-cy De-cy.loclBGR El-cy.loclBGR Ef-cy.loclBGR be-cy ve-cy iishort-cy ushort-cy be-cy.loclSRB ve-cy.salt] [b h k shha-cy iu-cy.loclBGR ka-cy.loclBGR]' by [b.alt h.alt k.alt shha-cy.alt iu-cy.loclBGR.alt ka-cy.loclBGR.alt]; -} calt; \ No newline at end of file +} calt; diff --git a/sources/features/header.fea b/sources/features/header.fea index b88017f0a..55f9a07fc 100644 --- a/sources/features/header.fea +++ b/sources/features/header.fea @@ -41,6 +41,8 @@ languagesystem DFLT dflt; languagesystem arab dflt; languagesystem arab URD; +languagesystem hebr dflt; + languagesystem latn dflt; languagesystem latn ROM; languagesystem latn MOL; diff --git a/sources/stat.yaml b/sources/stat.yaml new file mode 100644 index 000000000..01c058e67 --- /dev/null +++ b/sources/stat.yaml @@ -0,0 +1,195 @@ +# Cascadia Code +CascadiaCode.ttf: +- name: Weight + tag: wght + values: + - name: ExtraLight + value: 200 + - name: Light + value: 300 + - name: SemiLight + value: 350 + - name: Regular + value: 400 + linkedValue: 700 + flags: 2 + - name: SemiBold + value: 600 + - name: Bold + value: 700 +- name: Italic + tag: ital + values: + - name: Roman + value: 0 + linkedValue: 1 + flags: 2 +CascadiaCodeItalic.ttf: +- name: Weight + tag: wght + values: + - name: ExtraLight + value: 200 + - name: Light + value: 300 + - name: SemiLight + value: 350 + - name: Regular + value: 400 + linkedValue: 700 + flags: 2 + - name: SemiBold + value: 600 + - name: Bold + value: 700 +- name: Italic + tag: ital + values: + - name: Italic + value: 1 +CascadiaCodePL.ttf: +- name: Weight + tag: wght + values: + - name: ExtraLight + value: 200 + - name: Light + value: 300 + - name: SemiLight + value: 350 + - name: Regular + value: 400 + linkedValue: 700 + flags: 2 + - name: SemiBold + value: 600 + - name: Bold + value: 700 +- name: Italic + tag: ital + values: + - name: Roman + value: 0 + linkedValue: 1 + flags: 2 +CascadiaCodePLItalic.ttf: +- name: Weight + tag: wght + values: + - name: ExtraLight + value: 200 + - name: Light + value: 300 + - name: SemiLight + value: 350 + - name: Regular + value: 400 + linkedValue: 700 + flags: 2 + - name: SemiBold + value: 600 + - name: Bold + value: 700 +- name: Italic + tag: ital + values: + - name: Italic + value: 1 + +# Cascadia Mono +CascadiaMono.ttf: +- name: Weight + tag: wght + values: + - name: ExtraLight + value: 200 + - name: Light + value: 300 + - name: SemiLight + value: 350 + - name: Regular + value: 400 + linkedValue: 700 + flags: 2 + - name: SemiBold + value: 600 + - name: Bold + value: 700 +- name: Italic + tag: ital + values: + - name: Roman + value: 0 + linkedValue: 1 + flags: 2 +CascadiaMonoItalic.ttf: +- name: Weight + tag: wght + values: + - name: ExtraLight + value: 200 + - name: Light + value: 300 + - name: SemiLight + value: 350 + - name: Regular + value: 400 + linkedValue: 700 + flags: 2 + - name: SemiBold + value: 600 + - name: Bold + value: 700 +- name: Italic + tag: ital + values: + - name: Italic + value: 1 +CascadiaMonoPL.ttf: +- name: Weight + tag: wght + values: + - name: ExtraLight + value: 200 + - name: Light + value: 300 + - name: SemiLight + value: 350 + - name: Regular + value: 400 + linkedValue: 700 + flags: 2 + - name: SemiBold + value: 600 + - name: Bold + value: 700 +- name: Italic + tag: ital + values: + - name: Roman + value: 0 + linkedValue: 1 + flags: 2 +CascadiaMonoPLItalic.ttf: +- name: Weight + tag: wght + values: + - name: ExtraLight + value: 200 + - name: Light + value: 300 + - name: SemiLight + value: 350 + - name: Regular + value: 400 + linkedValue: 700 + flags: 2 + - name: SemiBold + value: 600 + - name: Bold + value: 700 +- name: Italic + tag: ital + values: + - name: Italic + value: 1