From 2c00f0d64c25a3fa686ab4ac980e08a8982e78fd Mon Sep 17 00:00:00 2001 From: Yanone Date: Thu, 1 Jun 2023 16:19:33 +0200 Subject: [PATCH 01/59] Initial commit --- .vscode/settings.json | 6 + .../Latin/languages/GF_Latin_Core.yaml | 31 +++++ GF_glyphsets/Latin/nam/GF_Latin_Core.nam | 107 +++++------------- GF_glyphsets/Latin/nam/GF_Latin_Core.stub.nam | 88 ++++++++++++++ GF_glyphsets/assemble_charactersets.py | 66 +++++++++++ GF_glyphsets/assemble_languages.py | 33 ++++++ requirements.txt | 4 +- 7 files changed, 255 insertions(+), 80 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 GF_glyphsets/Latin/languages/GF_Latin_Core.yaml create mode 100644 GF_glyphsets/Latin/nam/GF_Latin_Core.stub.nam create mode 100644 GF_glyphsets/assemble_charactersets.py create mode 100644 GF_glyphsets/assemble_languages.py diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000000..d99f2f30cc --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "[python]": { + "editor.defaultFormatter": "ms-python.black-formatter" + }, + "python.formatting.provider": "none" +} \ No newline at end of file diff --git a/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml b/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml new file mode 100644 index 0000000000..da1d17b1c7 --- /dev/null +++ b/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml @@ -0,0 +1,31 @@ +language_codes: +# - bar_Latn # Bavarian + - ca_Latn # Catalan + - cs_Latn # Czech + - da_Latn # Danish + - de_Latn # German + - en_Latn # English + - es_Latn # Spanish + - fi_Latn # Finnish +# - fil_Latn # Filipino + - fr_Latn # French + - gn_Latn # Guarani + - gsw_Latn # Swiss German + - hr_Latn # Croatian +# - ht_Latn # Haitian Creole + - hu_Latn # Hungarian +# - id_Latn # Indonesian + - it_Latn # Italian + - nb_Latn # Norwegian Bokmål +# - nds_Latn # Low German + - nl_Latn # Dutch + - pl_Latn # Polish + - pt_Latn # Portuguese + - qu_Latn # Quechua + - ro_Latn # Romanian + - sk_Latn # Slovak + - sq_Latn # Albanian + - sr_Latn # Serbian (Latin) + - sv_Latn # Swedish + - tr_Latn # Turkish +# - vi_Latn # Vietnamese \ No newline at end of file diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam index 4470ce008a..cc7f67954c 100644 --- a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam +++ b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam @@ -106,6 +106,8 @@ 0x00AE REGISTERED SIGN 0x00AF MACRON 0x00B0 DEGREE SIGN +0x00B2 SUPERSCRIPT TWO +0x00B3 SUPERSCRIPT THREE 0x00B4 ACUTE ACCENT 0x00B6 PILCROW SIGN 0x00B7 MIDDLE DOT @@ -113,7 +115,6 @@ 0x00BA MASCULINE ORDINAL INDICATOR 0x00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0x00BF INVERTED QUESTION MARK -0x00C0 LATIN CAPITAL LETTER A WITH GRAVE 0x00C1 LATIN CAPITAL LETTER A WITH ACUTE 0x00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0x00C3 LATIN CAPITAL LETTER A WITH TILDE @@ -121,29 +122,19 @@ 0x00C5 LATIN CAPITAL LETTER A WITH RING ABOVE 0x00C6 LATIN CAPITAL LETTER AE 0x00C7 LATIN CAPITAL LETTER C WITH CEDILLA -0x00C8 LATIN CAPITAL LETTER E WITH GRAVE 0x00C9 LATIN CAPITAL LETTER E WITH ACUTE -0x00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0x00CB LATIN CAPITAL LETTER E WITH DIAERESIS -0x00CC LATIN CAPITAL LETTER I WITH GRAVE 0x00CD LATIN CAPITAL LETTER I WITH ACUTE 0x00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX -0x00CF LATIN CAPITAL LETTER I WITH DIAERESIS -0x00D0 LATIN CAPITAL LETTER ETH 0x00D1 LATIN CAPITAL LETTER N WITH TILDE -0x00D2 LATIN CAPITAL LETTER O WITH GRAVE 0x00D3 LATIN CAPITAL LETTER O WITH ACUTE 0x00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0x00D5 LATIN CAPITAL LETTER O WITH TILDE 0x00D6 LATIN CAPITAL LETTER O WITH DIAERESIS 0x00D7 MULTIPLICATION SIGN 0x00D8 LATIN CAPITAL LETTER O WITH STROKE -0x00D9 LATIN CAPITAL LETTER U WITH GRAVE 0x00DA LATIN CAPITAL LETTER U WITH ACUTE -0x00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0x00DC LATIN CAPITAL LETTER U WITH DIAERESIS -0x00DD LATIN CAPITAL LETTER Y WITH ACUTE -0x00DE LATIN CAPITAL LETTER THORN 0x00DF LATIN SMALL LETTER SHARP S 0x00E0 LATIN SMALL LETTER A WITH GRAVE 0x00E1 LATIN SMALL LETTER A WITH ACUTE @@ -161,7 +152,6 @@ 0x00ED LATIN SMALL LETTER I WITH ACUTE 0x00EE LATIN SMALL LETTER I WITH CIRCUMFLEX 0x00EF LATIN SMALL LETTER I WITH DIAERESIS -0x00F0 LATIN SMALL LETTER ETH 0x00F1 LATIN SMALL LETTER N WITH TILDE 0x00F2 LATIN SMALL LETTER O WITH GRAVE 0x00F3 LATIN SMALL LETTER O WITH ACUTE @@ -175,76 +165,36 @@ 0x00FB LATIN SMALL LETTER U WITH CIRCUMFLEX 0x00FC LATIN SMALL LETTER U WITH DIAERESIS 0x00FD LATIN SMALL LETTER Y WITH ACUTE -0x00FE LATIN SMALL LETTER THORN 0x00FF LATIN SMALL LETTER Y WITH DIAERESIS -0x0100 LATIN CAPITAL LETTER A WITH MACRON -0x0101 LATIN SMALL LETTER A WITH MACRON 0x0102 LATIN CAPITAL LETTER A WITH BREVE 0x0103 LATIN SMALL LETTER A WITH BREVE -0x0104 LATIN CAPITAL LETTER A WITH OGONEK 0x0105 LATIN SMALL LETTER A WITH OGONEK 0x0106 LATIN CAPITAL LETTER C WITH ACUTE 0x0107 LATIN SMALL LETTER C WITH ACUTE -0x010A LATIN CAPITAL LETTER C WITH DOT ABOVE -0x010B LATIN SMALL LETTER C WITH DOT ABOVE 0x010C LATIN CAPITAL LETTER C WITH CARON 0x010D LATIN SMALL LETTER C WITH CARON 0x010E LATIN CAPITAL LETTER D WITH CARON 0x010F LATIN SMALL LETTER D WITH CARON 0x0110 LATIN CAPITAL LETTER D WITH STROKE 0x0111 LATIN SMALL LETTER D WITH STROKE -0x0112 LATIN CAPITAL LETTER E WITH MACRON -0x0113 LATIN SMALL LETTER E WITH MACRON -0x0116 LATIN CAPITAL LETTER E WITH DOT ABOVE -0x0117 LATIN SMALL LETTER E WITH DOT ABOVE -0x0118 LATIN CAPITAL LETTER E WITH OGONEK 0x0119 LATIN SMALL LETTER E WITH OGONEK -0x011A LATIN CAPITAL LETTER E WITH CARON 0x011B LATIN SMALL LETTER E WITH CARON -0x011E LATIN CAPITAL LETTER G WITH BREVE 0x011F LATIN SMALL LETTER G WITH BREVE -0x0120 LATIN CAPITAL LETTER G WITH DOT ABOVE -0x0121 LATIN SMALL LETTER G WITH DOT ABOVE -0x0122 LATIN CAPITAL LETTER G WITH CEDILLA -0x0123 LATIN SMALL LETTER G WITH CEDILLA -0x0126 LATIN CAPITAL LETTER H WITH STROKE -0x0127 LATIN SMALL LETTER H WITH STROKE -0x012A LATIN CAPITAL LETTER I WITH MACRON -0x012B LATIN SMALL LETTER I WITH MACRON -0x012E LATIN CAPITAL LETTER I WITH OGONEK -0x012F LATIN SMALL LETTER I WITH OGONEK +0x0128 LATIN CAPITAL LETTER I WITH TILDE +0x0129 LATIN SMALL LETTER I WITH TILDE 0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE 0x0131 LATIN SMALL LETTER DOTLESS I -0x0132 LATIN CAPITAL LIGATURE IJ -0x0133 LATIN SMALL LIGATURE IJ -0x0136 LATIN CAPITAL LETTER K WITH CEDILLA -0x0137 LATIN SMALL LETTER K WITH CEDILLA -0x0139 LATIN CAPITAL LETTER L WITH ACUTE 0x013A LATIN SMALL LETTER L WITH ACUTE -0x013B LATIN CAPITAL LETTER L WITH CEDILLA -0x013C LATIN SMALL LETTER L WITH CEDILLA 0x013D LATIN CAPITAL LETTER L WITH CARON 0x013E LATIN SMALL LETTER L WITH CARON 0x0141 LATIN CAPITAL LETTER L WITH STROKE 0x0142 LATIN SMALL LETTER L WITH STROKE -0x0143 LATIN CAPITAL LETTER N WITH ACUTE 0x0144 LATIN SMALL LETTER N WITH ACUTE -0x0145 LATIN CAPITAL LETTER N WITH CEDILLA -0x0146 LATIN SMALL LETTER N WITH CEDILLA -0x0147 LATIN CAPITAL LETTER N WITH CARON 0x0148 LATIN SMALL LETTER N WITH CARON -0x014A LATIN CAPITAL LETTER ENG -0x014B LATIN SMALL LETTER ENG -0x014C LATIN CAPITAL LETTER O WITH MACRON -0x014D LATIN SMALL LETTER O WITH MACRON 0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE -0x0152 LATIN CAPITAL LIGATURE OE 0x0153 LATIN SMALL LIGATURE OE -0x0154 LATIN CAPITAL LETTER R WITH ACUTE 0x0155 LATIN SMALL LETTER R WITH ACUTE -0x0156 LATIN CAPITAL LETTER R WITH CEDILLA -0x0157 LATIN SMALL LETTER R WITH CEDILLA 0x0158 LATIN CAPITAL LETTER R WITH CARON 0x0159 LATIN SMALL LETTER R WITH CARON 0x015A LATIN CAPITAL LETTER S WITH ACUTE @@ -255,21 +205,11 @@ 0x0161 LATIN SMALL LETTER S WITH CARON 0x0164 LATIN CAPITAL LETTER T WITH CARON 0x0165 LATIN SMALL LETTER T WITH CARON -0x016A LATIN CAPITAL LETTER U WITH MACRON -0x016B LATIN SMALL LETTER U WITH MACRON -0x016C LATIN CAPITAL LETTER U WITH BREVE -0x016D LATIN SMALL LETTER U WITH BREVE -0x016E LATIN CAPITAL LETTER U WITH RING ABOVE +0x0168 LATIN CAPITAL LETTER U WITH TILDE +0x0169 LATIN SMALL LETTER U WITH TILDE 0x016F LATIN SMALL LETTER U WITH RING ABOVE 0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0x0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE -0x0172 LATIN CAPITAL LETTER U WITH OGONEK -0x0173 LATIN SMALL LETTER U WITH OGONEK -0x0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX -0x0175 LATIN SMALL LETTER W WITH CIRCUMFLEX -0x0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX -0x0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX -0x0178 LATIN CAPITAL LETTER Y WITH DIAERESIS 0x0179 LATIN CAPITAL LETTER Z WITH ACUTE 0x017A LATIN SMALL LETTER Z WITH ACUTE 0x017B LATIN CAPITAL LETTER Z WITH DOT ABOVE @@ -280,7 +220,8 @@ 0x0219 LATIN SMALL LETTER S WITH COMMA BELOW 0x021A LATIN CAPITAL LETTER T WITH COMMA BELOW 0x021B LATIN SMALL LETTER T WITH COMMA BELOW -0x0237 LATIN SMALL LETTER DOTLESS J +0x02B3 MODIFIER LETTER SMALL R +0x02BC MODIFIER LETTER APOSTROPHE 0x02C6 MODIFIER LETTER CIRCUMFLEX ACCENT 0x02C7 CARON 0x02D8 BREVE @@ -289,30 +230,28 @@ 0x02DB OGONEK 0x02DC SMALL TILDE 0x02DD DOUBLE ACUTE ACCENT +0x02E2 MODIFIER LETTER SMALL S 0x0300 COMBINING GRAVE ACCENT 0x0301 COMBINING ACUTE ACCENT 0x0302 COMBINING CIRCUMFLEX ACCENT 0x0303 COMBINING TILDE -0x0304 COMBINING MACRON 0x0306 COMBINING BREVE 0x0307 COMBINING DOT ABOVE 0x0308 COMBINING DIAERESIS 0x030A COMBINING RING ABOVE 0x030B COMBINING DOUBLE ACUTE ACCENT 0x030C COMBINING CARON -0x0312 COMBINING TURNED COMMA ABOVE 0x0326 COMBINING COMMA BELOW 0x0327 COMBINING CEDILLA 0x0328 COMBINING OGONEK -0x1E80 LATIN CAPITAL LETTER W WITH GRAVE -0x1E81 LATIN SMALL LETTER W WITH GRAVE -0x1E82 LATIN CAPITAL LETTER W WITH ACUTE -0x1E83 LATIN SMALL LETTER W WITH ACUTE -0x1E84 LATIN CAPITAL LETTER W WITH DIAERESIS -0x1E85 LATIN SMALL LETTER W WITH DIAERESIS -0x1E9E LATIN CAPITAL LETTER SHARP S -0x1EF2 LATIN CAPITAL LETTER Y WITH GRAVE -0x1EF3 LATIN SMALL LETTER Y WITH GRAVE +0x1D48 MODIFIER LETTER SMALL D +0x1D49 MODIFIER LETTER SMALL E +0x1EBC LATIN CAPITAL LETTER E WITH TILDE +0x1EBD LATIN SMALL LETTER E WITH TILDE +0x1EF8 LATIN CAPITAL LETTER Y WITH TILDE +0x1EF9 LATIN SMALL LETTER Y WITH TILDE +0x2010 HYPHEN +0x2011 NON-BREAKING HYPHEN 0x2013 EN DASH 0x2014 EM DASH 0x2018 LEFT SINGLE QUOTATION MARK @@ -321,10 +260,20 @@ 0x201C LEFT DOUBLE QUOTATION MARK 0x201D RIGHT DOUBLE QUOTATION MARK 0x201E DOUBLE LOW-9 QUOTATION MARK +0x2020 DAGGER +0x2021 DOUBLE DAGGER 0x2022 BULLET 0x2026 HORIZONTAL ELLIPSIS +0x202F NARROW NO-BREAK SPACE +0x2030 PER MILLE SIGN +0x2032 PRIME +0x2033 DOUBLE PRIME 0x2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +0x2052 COMMERCIAL MINUS SIGN 0x20AC EURO SIGN 0x2122 TRADE MARK SIGN -0x2212 MINUS SIGN \ No newline at end of file +0x2212 MINUS SIGN +0x25CC DOTTED CIRCLE +0x27E8 MATHEMATICAL LEFT ANGLE BRACKET +0x27E9 MATHEMATICAL RIGHT ANGLE BRACKET diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.stub.nam b/GF_glyphsets/Latin/nam/GF_Latin_Core.stub.nam new file mode 100644 index 0000000000..134441cede --- /dev/null +++ b/GF_glyphsets/Latin/nam/GF_Latin_Core.stub.nam @@ -0,0 +1,88 @@ +0x0020 SPACE +0x0021 EXCLAMATION MARK +0x0022 QUOTATION MARK +0x0023 NUMBER SIGN +0x0024 DOLLAR SIGN +0x0025 PERCENT SIGN +0x0026 AMPERSAND +0x0027 APOSTROPHE +0x0028 LEFT PARENTHESIS +0x0029 RIGHT PARENTHESIS +0x002A ASTERISK +0x002B PLUS SIGN +0x002C COMMA +0x002D HYPHEN-MINUS +0x002E FULL STOP +0x002F SOLIDUS +0x0030 DIGIT ZERO +0x0031 DIGIT ONE +0x0032 DIGIT TWO +0x0033 DIGIT THREE +0x0034 DIGIT FOUR +0x0035 DIGIT FIVE +0x0036 DIGIT SIX +0x0037 DIGIT SEVEN +0x0038 DIGIT EIGHT +0x0039 DIGIT NINE +0x003A COLON +0x003B SEMICOLON +0x003C LESS-THAN SIGN +0x003D EQUALS SIGN +0x003E GREATER-THAN SIGN +0x003F QUESTION MARK +0x0040 COMMERCIAL AT +0x005B LEFT SQUARE BRACKET +0x005C REVERSE SOLIDUS +0x005D RIGHT SQUARE BRACKET +0x005E CIRCUMFLEX ACCENT +0x005F LOW LINE +0x0060 GRAVE ACCENT +0x007B LEFT CURLY BRACKET +0x007C VERTICAL LINE +0x007D RIGHT CURLY BRACKET +0x007E TILDE +0x00A0 NO-BREAK SPACE +0x00A1 INVERTED EXCLAMATION MARK +0x00A2 CENT SIGN +0x00A3 POUND SIGN +0x00A5 YEN SIGN +0x00A7 SECTION SIGN +0x00A8 DIAERESIS +0x00A9 COPYRIGHT SIGN +0x00AA FEMININE ORDINAL INDICATOR +0x00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0x00AE REGISTERED SIGN +0x00AF MACRON +0x00B0 DEGREE SIGN +0x00B4 ACUTE ACCENT +0x00B6 PILCROW SIGN +0x00B7 MIDDLE DOT +0x00B8 CEDILLA +0x00BA MASCULINE ORDINAL INDICATOR +0x00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0x00BF INVERTED QUESTION MARK +0x00D7 MULTIPLICATION SIGN +0x00F7 DIVISION SIGN +0x02C6 MODIFIER LETTER CIRCUMFLEX ACCENT +0x02C7 CARON +0x02D8 BREVE +0x02D9 DOT ABOVE +0x02DA RING ABOVE +0x02DB OGONEK +0x02DC SMALL TILDE +0x02DD DOUBLE ACUTE ACCENT +0x2013 EN DASH +0x2014 EM DASH +0x2018 LEFT SINGLE QUOTATION MARK +0x2019 RIGHT SINGLE QUOTATION MARK +0x201A SINGLE LOW-9 QUOTATION MARK +0x201C LEFT DOUBLE QUOTATION MARK +0x201D RIGHT DOUBLE QUOTATION MARK +0x201E DOUBLE LOW-9 QUOTATION MARK +0x2022 BULLET +0x2026 HORIZONTAL ELLIPSIS +0x2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK +0x203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +0x20AC EURO SIGN +0x2122 TRADE MARK SIGN +0x2212 MINUS SIGN \ No newline at end of file diff --git a/GF_glyphsets/assemble_charactersets.py b/GF_glyphsets/assemble_charactersets.py new file mode 100644 index 0000000000..d3dd33760e --- /dev/null +++ b/GF_glyphsets/assemble_charactersets.py @@ -0,0 +1,66 @@ +import yaml +import os +import gflanguages +import unicodedata + + +def assemble_characterset(nam_stub_path, nam_path, languages_yaml_path): + character_set = set() + + # Read language definitions + with open(languages_yaml_path, "r") as stream: + language_definitions = yaml.safe_load(stream) + + # Assemble character sets from gflanguages + languages = gflanguages.LoadLanguages() + for language_code in language_definitions["language_codes"]: + chars = languages[language_code].exemplar_chars + character_set.update( + { + ord(c) + for c in list( + set(chars.base) + | set(chars.index) + | set(chars.marks) + | set(chars.numerals) + | set(chars.punctuation) + # | set(chars.auxiliary) + ) + if c not in (" ", "{", "}") + } + ) + + # Read .nam stub file + with open(nam_stub_path, "r") as f: + nam_stub_lines = f.readlines() + for line in nam_stub_lines: + unicode = line.split(" ")[0] + if unicode.startswith("0x"): + character_set.add(int(unicode[2:], 16)) + + # Output sorted character set to .nam file + with open(nam_path, "w") as f: + for unicode in sorted(list(character_set)): + unicode_string = f"{unicode:#0{6}X}".replace("0X", "0x") + f.write(f"{unicode_string} {unicodedata.name(chr(unicode))}\n") + + +if __name__ == "__main__": + for root, dir, files in os.walk(os.path.dirname(__file__)): + for file in files: + if file.endswith(".stub.nam"): + # .nam stub file + nam_stub_path = os.path.join(root, file) + nam_path = os.path.join(root, file).replace(".stub.nam", ".nam") + + # corresponding languages .yaml file + languages_yaml_path = os.path.abspath( + os.path.join( + root, "..", "languages", file.replace(".stub.nam", ".yaml") + ) + ) + + if all( + [os.path.exists(x) for x in [nam_stub_path, languages_yaml_path]] + ): + assemble_characterset(nam_stub_path, nam_path, languages_yaml_path) diff --git a/GF_glyphsets/assemble_languages.py b/GF_glyphsets/assemble_languages.py new file mode 100644 index 0000000000..29c05e2fc4 --- /dev/null +++ b/GF_glyphsets/assemble_languages.py @@ -0,0 +1,33 @@ +import gflanguages + +regions = gflanguages.LoadRegions() +languages = gflanguages.LoadLanguages() + +SPEAKERS = 5000000 + +if __name__ == "__main__": + country_codes = set() + + # Go through countries and add them to the set if they are in Europe or Americas + for country_code in regions: + if set(regions[country_code].region_group).intersection( + set(("Europe", "Americas")) + ): + country_codes.add(country_code) + + # Go through languages and add them to the set if they are in Europe or Americas + language_codes = set() + + # Print languages if they are supported through the logic + for language_code in sorted(languages.keys()): + if ( + set(languages[language_code].region).intersection(country_codes) + and languages[language_code].population > SPEAKERS + and languages[language_code].script == "Latn" + ): + if not languages[language_code].exemplar_chars: + print( + f"WARNING, {languages[language_code].name} has no character defintions." + ) + language_codes.add(language_code) + print(f" - {language_code} # {languages[language_code].name}") diff --git a/requirements.txt b/requirements.txt index 223aae235c..9a7ceed2f1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,6 @@ setuptools FontTools[ufo] glyphsLib -defcon \ No newline at end of file +defcon +pyyaml +gflanguages From 9e6d57e5fb82e3d92b7bbced8cf78e582696b532 Mon Sep 17 00:00:00 2001 From: Yanone Date: Thu, 1 Jun 2023 16:43:14 +0200 Subject: [PATCH 02/59] Added Icelandic, used upper() to get uppercase letters from base --- .../Latin/languages/GF_Latin_Core.yaml | 3 ++- GF_glyphsets/Latin/nam/GF_Latin_Core.nam | 24 +++++++++++++++++++ GF_glyphsets/assemble_charactersets.py | 1 + 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml b/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml index da1d17b1c7..7d94f8ae93 100644 --- a/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml +++ b/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml @@ -28,4 +28,5 @@ language_codes: - sr_Latn # Serbian (Latin) - sv_Latn # Swedish - tr_Latn # Turkish -# - vi_Latn # Vietnamese \ No newline at end of file +# - vi_Latn # Vietnamese + - is_Latn # Icelandic \ No newline at end of file diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam index cc7f67954c..32f1460abf 100644 --- a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam +++ b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam @@ -115,6 +115,7 @@ 0x00BA MASCULINE ORDINAL INDICATOR 0x00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0x00BF INVERTED QUESTION MARK +0x00C0 LATIN CAPITAL LETTER A WITH GRAVE 0x00C1 LATIN CAPITAL LETTER A WITH ACUTE 0x00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0x00C3 LATIN CAPITAL LETTER A WITH TILDE @@ -122,19 +123,29 @@ 0x00C5 LATIN CAPITAL LETTER A WITH RING ABOVE 0x00C6 LATIN CAPITAL LETTER AE 0x00C7 LATIN CAPITAL LETTER C WITH CEDILLA +0x00C8 LATIN CAPITAL LETTER E WITH GRAVE 0x00C9 LATIN CAPITAL LETTER E WITH ACUTE +0x00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0x00CB LATIN CAPITAL LETTER E WITH DIAERESIS +0x00CC LATIN CAPITAL LETTER I WITH GRAVE 0x00CD LATIN CAPITAL LETTER I WITH ACUTE 0x00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0x00CF LATIN CAPITAL LETTER I WITH DIAERESIS +0x00D0 LATIN CAPITAL LETTER ETH 0x00D1 LATIN CAPITAL LETTER N WITH TILDE +0x00D2 LATIN CAPITAL LETTER O WITH GRAVE 0x00D3 LATIN CAPITAL LETTER O WITH ACUTE 0x00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0x00D5 LATIN CAPITAL LETTER O WITH TILDE 0x00D6 LATIN CAPITAL LETTER O WITH DIAERESIS 0x00D7 MULTIPLICATION SIGN 0x00D8 LATIN CAPITAL LETTER O WITH STROKE +0x00D9 LATIN CAPITAL LETTER U WITH GRAVE 0x00DA LATIN CAPITAL LETTER U WITH ACUTE +0x00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0x00DC LATIN CAPITAL LETTER U WITH DIAERESIS +0x00DD LATIN CAPITAL LETTER Y WITH ACUTE +0x00DE LATIN CAPITAL LETTER THORN 0x00DF LATIN SMALL LETTER SHARP S 0x00E0 LATIN SMALL LETTER A WITH GRAVE 0x00E1 LATIN SMALL LETTER A WITH ACUTE @@ -152,6 +163,7 @@ 0x00ED LATIN SMALL LETTER I WITH ACUTE 0x00EE LATIN SMALL LETTER I WITH CIRCUMFLEX 0x00EF LATIN SMALL LETTER I WITH DIAERESIS +0x00F0 LATIN SMALL LETTER ETH 0x00F1 LATIN SMALL LETTER N WITH TILDE 0x00F2 LATIN SMALL LETTER O WITH GRAVE 0x00F3 LATIN SMALL LETTER O WITH ACUTE @@ -165,9 +177,11 @@ 0x00FB LATIN SMALL LETTER U WITH CIRCUMFLEX 0x00FC LATIN SMALL LETTER U WITH DIAERESIS 0x00FD LATIN SMALL LETTER Y WITH ACUTE +0x00FE LATIN SMALL LETTER THORN 0x00FF LATIN SMALL LETTER Y WITH DIAERESIS 0x0102 LATIN CAPITAL LETTER A WITH BREVE 0x0103 LATIN SMALL LETTER A WITH BREVE +0x0104 LATIN CAPITAL LETTER A WITH OGONEK 0x0105 LATIN SMALL LETTER A WITH OGONEK 0x0106 LATIN CAPITAL LETTER C WITH ACUTE 0x0107 LATIN SMALL LETTER C WITH ACUTE @@ -177,23 +191,31 @@ 0x010F LATIN SMALL LETTER D WITH CARON 0x0110 LATIN CAPITAL LETTER D WITH STROKE 0x0111 LATIN SMALL LETTER D WITH STROKE +0x0118 LATIN CAPITAL LETTER E WITH OGONEK 0x0119 LATIN SMALL LETTER E WITH OGONEK +0x011A LATIN CAPITAL LETTER E WITH CARON 0x011B LATIN SMALL LETTER E WITH CARON +0x011E LATIN CAPITAL LETTER G WITH BREVE 0x011F LATIN SMALL LETTER G WITH BREVE 0x0128 LATIN CAPITAL LETTER I WITH TILDE 0x0129 LATIN SMALL LETTER I WITH TILDE 0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE 0x0131 LATIN SMALL LETTER DOTLESS I +0x0139 LATIN CAPITAL LETTER L WITH ACUTE 0x013A LATIN SMALL LETTER L WITH ACUTE 0x013D LATIN CAPITAL LETTER L WITH CARON 0x013E LATIN SMALL LETTER L WITH CARON 0x0141 LATIN CAPITAL LETTER L WITH STROKE 0x0142 LATIN SMALL LETTER L WITH STROKE +0x0143 LATIN CAPITAL LETTER N WITH ACUTE 0x0144 LATIN SMALL LETTER N WITH ACUTE +0x0147 LATIN CAPITAL LETTER N WITH CARON 0x0148 LATIN SMALL LETTER N WITH CARON 0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE +0x0152 LATIN CAPITAL LIGATURE OE 0x0153 LATIN SMALL LIGATURE OE +0x0154 LATIN CAPITAL LETTER R WITH ACUTE 0x0155 LATIN SMALL LETTER R WITH ACUTE 0x0158 LATIN CAPITAL LETTER R WITH CARON 0x0159 LATIN SMALL LETTER R WITH CARON @@ -207,9 +229,11 @@ 0x0165 LATIN SMALL LETTER T WITH CARON 0x0168 LATIN CAPITAL LETTER U WITH TILDE 0x0169 LATIN SMALL LETTER U WITH TILDE +0x016E LATIN CAPITAL LETTER U WITH RING ABOVE 0x016F LATIN SMALL LETTER U WITH RING ABOVE 0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0x0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE +0x0178 LATIN CAPITAL LETTER Y WITH DIAERESIS 0x0179 LATIN CAPITAL LETTER Z WITH ACUTE 0x017A LATIN SMALL LETTER Z WITH ACUTE 0x017B LATIN CAPITAL LETTER Z WITH DOT ABOVE diff --git a/GF_glyphsets/assemble_charactersets.py b/GF_glyphsets/assemble_charactersets.py index d3dd33760e..28311fabe5 100644 --- a/GF_glyphsets/assemble_charactersets.py +++ b/GF_glyphsets/assemble_charactersets.py @@ -20,6 +20,7 @@ def assemble_characterset(nam_stub_path, nam_path, languages_yaml_path): ord(c) for c in list( set(chars.base) + | set(chars.base.upper()) | set(chars.index) | set(chars.marks) | set(chars.numerals) From 4d14242e580b0ba79751b68eb97853824f600767 Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 2 Jun 2023 12:32:56 +0200 Subject: [PATCH 03/59] Move scripts into scripts folder, added small description in the header --- {GF_glyphsets => scripts}/assemble_charactersets.py | 8 +++++++- {GF_glyphsets => scripts}/assemble_languages.py | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) rename {GF_glyphsets => scripts}/assemble_charactersets.py (91%) rename {GF_glyphsets => scripts}/assemble_languages.py (88%) diff --git a/GF_glyphsets/assemble_charactersets.py b/scripts/assemble_charactersets.py similarity index 91% rename from GF_glyphsets/assemble_charactersets.py rename to scripts/assemble_charactersets.py index 28311fabe5..1b2ccfda6e 100644 --- a/GF_glyphsets/assemble_charactersets.py +++ b/scripts/assemble_charactersets.py @@ -1,3 +1,7 @@ +""" +Assemble .nam files from .nam stub files and language definitions. +""" + import yaml import os import gflanguages @@ -47,7 +51,9 @@ def assemble_characterset(nam_stub_path, nam_path, languages_yaml_path): if __name__ == "__main__": - for root, dir, files in os.walk(os.path.dirname(__file__)): + for root, dir, files in os.walk( + os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "GF_Glyphsets")) + ): for file in files: if file.endswith(".stub.nam"): # .nam stub file diff --git a/GF_glyphsets/assemble_languages.py b/scripts/assemble_languages.py similarity index 88% rename from GF_glyphsets/assemble_languages.py rename to scripts/assemble_languages.py index 29c05e2fc4..45893d5d4d 100644 --- a/GF_glyphsets/assemble_languages.py +++ b/scripts/assemble_languages.py @@ -1,3 +1,8 @@ +""" +Read all languages and regions from gflanguages and print out the languages that are supported +in Europe or Americas and have more than 5 million speakers. +""" + import gflanguages regions = gflanguages.LoadRegions() From 52756bb385acea77de61b44bcfff6f8c805174c7 Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 2 Jun 2023 12:53:48 +0200 Subject: [PATCH 04/59] Added Latvian --- GF_glyphsets/Latin/languages/GF_Latin_Core.yaml | 3 ++- GF_glyphsets/Latin/nam/GF_Latin_Core.nam | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml b/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml index 7d94f8ae93..6e96a1fed3 100644 --- a/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml +++ b/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml @@ -29,4 +29,5 @@ language_codes: - sv_Latn # Swedish - tr_Latn # Turkish # - vi_Latn # Vietnamese - - is_Latn # Icelandic \ No newline at end of file + - is_Latn # Icelandic + - lv_Latn # Latvian \ No newline at end of file diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam index 32f1460abf..d089d9ddf9 100644 --- a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam +++ b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam @@ -179,6 +179,8 @@ 0x00FD LATIN SMALL LETTER Y WITH ACUTE 0x00FE LATIN SMALL LETTER THORN 0x00FF LATIN SMALL LETTER Y WITH DIAERESIS +0x0100 LATIN CAPITAL LETTER A WITH MACRON +0x0101 LATIN SMALL LETTER A WITH MACRON 0x0102 LATIN CAPITAL LETTER A WITH BREVE 0x0103 LATIN SMALL LETTER A WITH BREVE 0x0104 LATIN CAPITAL LETTER A WITH OGONEK @@ -191,24 +193,36 @@ 0x010F LATIN SMALL LETTER D WITH CARON 0x0110 LATIN CAPITAL LETTER D WITH STROKE 0x0111 LATIN SMALL LETTER D WITH STROKE +0x0112 LATIN CAPITAL LETTER E WITH MACRON +0x0113 LATIN SMALL LETTER E WITH MACRON 0x0118 LATIN CAPITAL LETTER E WITH OGONEK 0x0119 LATIN SMALL LETTER E WITH OGONEK 0x011A LATIN CAPITAL LETTER E WITH CARON 0x011B LATIN SMALL LETTER E WITH CARON 0x011E LATIN CAPITAL LETTER G WITH BREVE 0x011F LATIN SMALL LETTER G WITH BREVE +0x0122 LATIN CAPITAL LETTER G WITH CEDILLA +0x0123 LATIN SMALL LETTER G WITH CEDILLA 0x0128 LATIN CAPITAL LETTER I WITH TILDE 0x0129 LATIN SMALL LETTER I WITH TILDE +0x012A LATIN CAPITAL LETTER I WITH MACRON +0x012B LATIN SMALL LETTER I WITH MACRON 0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE 0x0131 LATIN SMALL LETTER DOTLESS I +0x0136 LATIN CAPITAL LETTER K WITH CEDILLA +0x0137 LATIN SMALL LETTER K WITH CEDILLA 0x0139 LATIN CAPITAL LETTER L WITH ACUTE 0x013A LATIN SMALL LETTER L WITH ACUTE +0x013B LATIN CAPITAL LETTER L WITH CEDILLA +0x013C LATIN SMALL LETTER L WITH CEDILLA 0x013D LATIN CAPITAL LETTER L WITH CARON 0x013E LATIN SMALL LETTER L WITH CARON 0x0141 LATIN CAPITAL LETTER L WITH STROKE 0x0142 LATIN SMALL LETTER L WITH STROKE 0x0143 LATIN CAPITAL LETTER N WITH ACUTE 0x0144 LATIN SMALL LETTER N WITH ACUTE +0x0145 LATIN CAPITAL LETTER N WITH CEDILLA +0x0146 LATIN SMALL LETTER N WITH CEDILLA 0x0147 LATIN CAPITAL LETTER N WITH CARON 0x0148 LATIN SMALL LETTER N WITH CARON 0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE @@ -229,6 +243,8 @@ 0x0165 LATIN SMALL LETTER T WITH CARON 0x0168 LATIN CAPITAL LETTER U WITH TILDE 0x0169 LATIN SMALL LETTER U WITH TILDE +0x016A LATIN CAPITAL LETTER U WITH MACRON +0x016B LATIN SMALL LETTER U WITH MACRON 0x016E LATIN CAPITAL LETTER U WITH RING ABOVE 0x016F LATIN SMALL LETTER U WITH RING ABOVE 0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE @@ -259,6 +275,7 @@ 0x0301 COMBINING ACUTE ACCENT 0x0302 COMBINING CIRCUMFLEX ACCENT 0x0303 COMBINING TILDE +0x0304 COMBINING MACRON 0x0306 COMBINING BREVE 0x0307 COMBINING DOT ABOVE 0x0308 COMBINING DIAERESIS From dffd9316d8083524771fd008c1d522f57b7615f0 Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 2 Jun 2023 13:25:52 +0200 Subject: [PATCH 05/59] Added Maltese --- GF_glyphsets/Latin/languages/GF_Latin_Core.yaml | 10 +++------- GF_glyphsets/Latin/nam/GF_Latin_Core.nam | 6 ++++++ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml b/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml index 6e96a1fed3..c3e9b69464 100644 --- a/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml +++ b/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml @@ -7,17 +7,16 @@ language_codes: - en_Latn # English - es_Latn # Spanish - fi_Latn # Finnish -# - fil_Latn # Filipino - fr_Latn # French - gn_Latn # Guarani - gsw_Latn # Swiss German - hr_Latn # Croatian -# - ht_Latn # Haitian Creole - hu_Latn # Hungarian -# - id_Latn # Indonesian + - is_Latn # Icelandic - it_Latn # Italian + - lv_Latn # Latvian + - mt_Latn # Maltese - nb_Latn # Norwegian Bokmål -# - nds_Latn # Low German - nl_Latn # Dutch - pl_Latn # Polish - pt_Latn # Portuguese @@ -28,6 +27,3 @@ language_codes: - sr_Latn # Serbian (Latin) - sv_Latn # Swedish - tr_Latn # Turkish -# - vi_Latn # Vietnamese - - is_Latn # Icelandic - - lv_Latn # Latvian \ No newline at end of file diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam index d089d9ddf9..2db39aaec5 100644 --- a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam +++ b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam @@ -187,6 +187,8 @@ 0x0105 LATIN SMALL LETTER A WITH OGONEK 0x0106 LATIN CAPITAL LETTER C WITH ACUTE 0x0107 LATIN SMALL LETTER C WITH ACUTE +0x010A LATIN CAPITAL LETTER C WITH DOT ABOVE +0x010B LATIN SMALL LETTER C WITH DOT ABOVE 0x010C LATIN CAPITAL LETTER C WITH CARON 0x010D LATIN SMALL LETTER C WITH CARON 0x010E LATIN CAPITAL LETTER D WITH CARON @@ -201,8 +203,12 @@ 0x011B LATIN SMALL LETTER E WITH CARON 0x011E LATIN CAPITAL LETTER G WITH BREVE 0x011F LATIN SMALL LETTER G WITH BREVE +0x0120 LATIN CAPITAL LETTER G WITH DOT ABOVE +0x0121 LATIN SMALL LETTER G WITH DOT ABOVE 0x0122 LATIN CAPITAL LETTER G WITH CEDILLA 0x0123 LATIN SMALL LETTER G WITH CEDILLA +0x0126 LATIN CAPITAL LETTER H WITH STROKE +0x0127 LATIN SMALL LETTER H WITH STROKE 0x0128 LATIN CAPITAL LETTER I WITH TILDE 0x0129 LATIN SMALL LETTER I WITH TILDE 0x012A LATIN CAPITAL LETTER I WITH MACRON From 848aa495659261ac464c9317d9807e46b0e05421 Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 2 Jun 2023 13:27:04 +0200 Subject: [PATCH 06/59] Exclude punctuation category altogether --- GF_glyphsets/Latin/nam/GF_Latin_Core.nam | 8 -------- scripts/assemble_charactersets.py | 2 +- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam index 2db39aaec5..20017d997f 100644 --- a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam +++ b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam @@ -297,7 +297,6 @@ 0x1EBD LATIN SMALL LETTER E WITH TILDE 0x1EF8 LATIN CAPITAL LETTER Y WITH TILDE 0x1EF9 LATIN SMALL LETTER Y WITH TILDE -0x2010 HYPHEN 0x2011 NON-BREAKING HYPHEN 0x2013 EN DASH 0x2014 EM DASH @@ -307,20 +306,13 @@ 0x201C LEFT DOUBLE QUOTATION MARK 0x201D RIGHT DOUBLE QUOTATION MARK 0x201E DOUBLE LOW-9 QUOTATION MARK -0x2020 DAGGER -0x2021 DOUBLE DAGGER 0x2022 BULLET 0x2026 HORIZONTAL ELLIPSIS 0x202F NARROW NO-BREAK SPACE 0x2030 PER MILLE SIGN -0x2032 PRIME -0x2033 DOUBLE PRIME 0x2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -0x2052 COMMERCIAL MINUS SIGN 0x20AC EURO SIGN 0x2122 TRADE MARK SIGN 0x2212 MINUS SIGN 0x25CC DOTTED CIRCLE -0x27E8 MATHEMATICAL LEFT ANGLE BRACKET -0x27E9 MATHEMATICAL RIGHT ANGLE BRACKET diff --git a/scripts/assemble_charactersets.py b/scripts/assemble_charactersets.py index 1b2ccfda6e..9fc13b586d 100644 --- a/scripts/assemble_charactersets.py +++ b/scripts/assemble_charactersets.py @@ -28,7 +28,7 @@ def assemble_characterset(nam_stub_path, nam_path, languages_yaml_path): | set(chars.index) | set(chars.marks) | set(chars.numerals) - | set(chars.punctuation) + # | set(chars.punctuation) # | set(chars.auxiliary) ) if c not in (" ", "{", "}") From 572d02eebf363b5e3c44c310ec63c89e86de9207 Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 2 Jun 2023 13:28:09 +0200 Subject: [PATCH 07/59] Exclude dotted circle explicitly (used in language defs for positioning of marks) --- GF_glyphsets/Latin/nam/GF_Latin_Core.nam | 1 - scripts/assemble_charactersets.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam index 20017d997f..72ce342f29 100644 --- a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam +++ b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam @@ -315,4 +315,3 @@ 0x20AC EURO SIGN 0x2122 TRADE MARK SIGN 0x2212 MINUS SIGN -0x25CC DOTTED CIRCLE diff --git a/scripts/assemble_charactersets.py b/scripts/assemble_charactersets.py index 9fc13b586d..1dc15ffa1d 100644 --- a/scripts/assemble_charactersets.py +++ b/scripts/assemble_charactersets.py @@ -31,7 +31,7 @@ def assemble_characterset(nam_stub_path, nam_path, languages_yaml_path): # | set(chars.punctuation) # | set(chars.auxiliary) ) - if c not in (" ", "{", "}") + if c not in (" ", "{", "}", "◌") } ) From d0062ab642ddf27e65818b7d8859d95ce5a0ccde Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 2 Jun 2023 13:31:10 +0200 Subject: [PATCH 08/59] Added Lithuanian --- GF_glyphsets/Latin/languages/GF_Latin_Core.yaml | 1 + GF_glyphsets/Latin/nam/GF_Latin_Core.nam | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml b/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml index c3e9b69464..6ac610f0ac 100644 --- a/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml +++ b/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml @@ -14,6 +14,7 @@ language_codes: - hu_Latn # Hungarian - is_Latn # Icelandic - it_Latn # Italian + - lt_Latn # Lithuanian - lv_Latn # Latvian - mt_Latn # Maltese - nb_Latn # Norwegian Bokmål diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam index 72ce342f29..8697ddbb19 100644 --- a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam +++ b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam @@ -197,6 +197,8 @@ 0x0111 LATIN SMALL LETTER D WITH STROKE 0x0112 LATIN CAPITAL LETTER E WITH MACRON 0x0113 LATIN SMALL LETTER E WITH MACRON +0x0116 LATIN CAPITAL LETTER E WITH DOT ABOVE +0x0117 LATIN SMALL LETTER E WITH DOT ABOVE 0x0118 LATIN CAPITAL LETTER E WITH OGONEK 0x0119 LATIN SMALL LETTER E WITH OGONEK 0x011A LATIN CAPITAL LETTER E WITH CARON @@ -213,6 +215,8 @@ 0x0129 LATIN SMALL LETTER I WITH TILDE 0x012A LATIN CAPITAL LETTER I WITH MACRON 0x012B LATIN SMALL LETTER I WITH MACRON +0x012E LATIN CAPITAL LETTER I WITH OGONEK +0x012F LATIN SMALL LETTER I WITH OGONEK 0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE 0x0131 LATIN SMALL LETTER DOTLESS I 0x0136 LATIN CAPITAL LETTER K WITH CEDILLA @@ -255,6 +259,8 @@ 0x016F LATIN SMALL LETTER U WITH RING ABOVE 0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0x0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE +0x0172 LATIN CAPITAL LETTER U WITH OGONEK +0x0173 LATIN SMALL LETTER U WITH OGONEK 0x0178 LATIN CAPITAL LETTER Y WITH DIAERESIS 0x0179 LATIN CAPITAL LETTER Z WITH ACUTE 0x017A LATIN SMALL LETTER Z WITH ACUTE From 9a4b73e9a39915e6f239badbfb198aba45fad4c3 Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 2 Jun 2023 13:41:18 +0200 Subject: [PATCH 09/59] Added Northern Sami --- GF_glyphsets/Latin/languages/GF_Latin_Core.yaml | 1 + GF_glyphsets/Latin/nam/GF_Latin_Core.nam | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml b/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml index 6ac610f0ac..c381bd7905 100644 --- a/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml +++ b/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml @@ -23,6 +23,7 @@ language_codes: - pt_Latn # Portuguese - qu_Latn # Quechua - ro_Latn # Romanian + - se_Latn # Northern Sami - sk_Latn # Slovak - sq_Latn # Albanian - sr_Latn # Serbian (Latin) diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam index 8697ddbb19..8c0b8d580a 100644 --- a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam +++ b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam @@ -235,6 +235,8 @@ 0x0146 LATIN SMALL LETTER N WITH CEDILLA 0x0147 LATIN CAPITAL LETTER N WITH CARON 0x0148 LATIN SMALL LETTER N WITH CARON +0x014A LATIN CAPITAL LETTER ENG +0x014B LATIN SMALL LETTER ENG 0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE 0x0152 LATIN CAPITAL LIGATURE OE @@ -251,6 +253,8 @@ 0x0161 LATIN SMALL LETTER S WITH CARON 0x0164 LATIN CAPITAL LETTER T WITH CARON 0x0165 LATIN SMALL LETTER T WITH CARON +0x0166 LATIN CAPITAL LETTER T WITH STROKE +0x0167 LATIN SMALL LETTER T WITH STROKE 0x0168 LATIN CAPITAL LETTER U WITH TILDE 0x0169 LATIN SMALL LETTER U WITH TILDE 0x016A LATIN CAPITAL LETTER U WITH MACRON From 6b6340afb47e7fc06a4428af01b2fc5a19d50f94 Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 2 Jun 2023 13:42:15 +0200 Subject: [PATCH 10/59] Added Hawaiian --- GF_glyphsets/Latin/languages/GF_Latin_Core.yaml | 1 + GF_glyphsets/Latin/nam/GF_Latin_Core.nam | 3 +++ 2 files changed, 4 insertions(+) diff --git a/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml b/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml index c381bd7905..599cb6c169 100644 --- a/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml +++ b/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml @@ -10,6 +10,7 @@ language_codes: - fr_Latn # French - gn_Latn # Guarani - gsw_Latn # Swiss German + - haw_Latn # Hawaiian - hr_Latn # Croatian - hu_Latn # Hungarian - is_Latn # Icelandic diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam index 8c0b8d580a..ce45499ba6 100644 --- a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam +++ b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam @@ -237,6 +237,8 @@ 0x0148 LATIN SMALL LETTER N WITH CARON 0x014A LATIN CAPITAL LETTER ENG 0x014B LATIN SMALL LETTER ENG +0x014C LATIN CAPITAL LETTER O WITH MACRON +0x014D LATIN SMALL LETTER O WITH MACRON 0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE 0x0152 LATIN CAPITAL LIGATURE OE @@ -277,6 +279,7 @@ 0x021A LATIN CAPITAL LETTER T WITH COMMA BELOW 0x021B LATIN SMALL LETTER T WITH COMMA BELOW 0x02B3 MODIFIER LETTER SMALL R +0x02BB MODIFIER LETTER TURNED COMMA 0x02BC MODIFIER LETTER APOSTROPHE 0x02C6 MODIFIER LETTER CIRCUMFLEX ACCENT 0x02C7 CARON From ccfa926ad50d20ee73583839fe2ce4064832a3b1 Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 2 Jun 2023 13:43:30 +0200 Subject: [PATCH 11/59] Added Esperanto --- GF_glyphsets/Latin/languages/GF_Latin_Core.yaml | 1 + GF_glyphsets/Latin/nam/GF_Latin_Core.nam | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml b/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml index 599cb6c169..dc7ddefd42 100644 --- a/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml +++ b/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml @@ -5,6 +5,7 @@ language_codes: - da_Latn # Danish - de_Latn # German - en_Latn # English + - eo_Latn # Esperanto - es_Latn # Spanish - fi_Latn # Finnish - fr_Latn # French diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam index ce45499ba6..7f5df63581 100644 --- a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam +++ b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam @@ -187,6 +187,8 @@ 0x0105 LATIN SMALL LETTER A WITH OGONEK 0x0106 LATIN CAPITAL LETTER C WITH ACUTE 0x0107 LATIN SMALL LETTER C WITH ACUTE +0x0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX +0x0109 LATIN SMALL LETTER C WITH CIRCUMFLEX 0x010A LATIN CAPITAL LETTER C WITH DOT ABOVE 0x010B LATIN SMALL LETTER C WITH DOT ABOVE 0x010C LATIN CAPITAL LETTER C WITH CARON @@ -203,12 +205,16 @@ 0x0119 LATIN SMALL LETTER E WITH OGONEK 0x011A LATIN CAPITAL LETTER E WITH CARON 0x011B LATIN SMALL LETTER E WITH CARON +0x011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX +0x011D LATIN SMALL LETTER G WITH CIRCUMFLEX 0x011E LATIN CAPITAL LETTER G WITH BREVE 0x011F LATIN SMALL LETTER G WITH BREVE 0x0120 LATIN CAPITAL LETTER G WITH DOT ABOVE 0x0121 LATIN SMALL LETTER G WITH DOT ABOVE 0x0122 LATIN CAPITAL LETTER G WITH CEDILLA 0x0123 LATIN SMALL LETTER G WITH CEDILLA +0x0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX +0x0125 LATIN SMALL LETTER H WITH CIRCUMFLEX 0x0126 LATIN CAPITAL LETTER H WITH STROKE 0x0127 LATIN SMALL LETTER H WITH STROKE 0x0128 LATIN CAPITAL LETTER I WITH TILDE @@ -219,6 +225,8 @@ 0x012F LATIN SMALL LETTER I WITH OGONEK 0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE 0x0131 LATIN SMALL LETTER DOTLESS I +0x0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX +0x0135 LATIN SMALL LETTER J WITH CIRCUMFLEX 0x0136 LATIN CAPITAL LETTER K WITH CEDILLA 0x0137 LATIN SMALL LETTER K WITH CEDILLA 0x0139 LATIN CAPITAL LETTER L WITH ACUTE @@ -249,6 +257,8 @@ 0x0159 LATIN SMALL LETTER R WITH CARON 0x015A LATIN CAPITAL LETTER S WITH ACUTE 0x015B LATIN SMALL LETTER S WITH ACUTE +0x015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX +0x015D LATIN SMALL LETTER S WITH CIRCUMFLEX 0x015E LATIN CAPITAL LETTER S WITH CEDILLA 0x015F LATIN SMALL LETTER S WITH CEDILLA 0x0160 LATIN CAPITAL LETTER S WITH CARON @@ -261,6 +271,8 @@ 0x0169 LATIN SMALL LETTER U WITH TILDE 0x016A LATIN CAPITAL LETTER U WITH MACRON 0x016B LATIN SMALL LETTER U WITH MACRON +0x016C LATIN CAPITAL LETTER U WITH BREVE +0x016D LATIN SMALL LETTER U WITH BREVE 0x016E LATIN CAPITAL LETTER U WITH RING ABOVE 0x016F LATIN SMALL LETTER U WITH RING ABOVE 0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE From dbff68ab2e24c39270a6aa1d75e3b03105dfd960 Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 2 Jun 2023 13:44:24 +0200 Subject: [PATCH 12/59] Added Welsh --- GF_glyphsets/Latin/languages/GF_Latin_Core.yaml | 1 + GF_glyphsets/Latin/nam/GF_Latin_Core.nam | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml b/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml index dc7ddefd42..311c85d340 100644 --- a/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml +++ b/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml @@ -2,6 +2,7 @@ language_codes: # - bar_Latn # Bavarian - ca_Latn # Catalan - cs_Latn # Czech + - cy_Latn # Welsh - da_Latn # Danish - de_Latn # German - en_Latn # English diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam index 7f5df63581..efecc3409d 100644 --- a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam +++ b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam @@ -279,6 +279,10 @@ 0x0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE 0x0172 LATIN CAPITAL LETTER U WITH OGONEK 0x0173 LATIN SMALL LETTER U WITH OGONEK +0x0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX +0x0175 LATIN SMALL LETTER W WITH CIRCUMFLEX +0x0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +0x0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX 0x0178 LATIN CAPITAL LETTER Y WITH DIAERESIS 0x0179 LATIN CAPITAL LETTER Z WITH ACUTE 0x017A LATIN SMALL LETTER Z WITH ACUTE @@ -318,8 +322,16 @@ 0x0328 COMBINING OGONEK 0x1D48 MODIFIER LETTER SMALL D 0x1D49 MODIFIER LETTER SMALL E +0x1E80 LATIN CAPITAL LETTER W WITH GRAVE +0x1E81 LATIN SMALL LETTER W WITH GRAVE +0x1E82 LATIN CAPITAL LETTER W WITH ACUTE +0x1E83 LATIN SMALL LETTER W WITH ACUTE +0x1E84 LATIN CAPITAL LETTER W WITH DIAERESIS +0x1E85 LATIN SMALL LETTER W WITH DIAERESIS 0x1EBC LATIN CAPITAL LETTER E WITH TILDE 0x1EBD LATIN SMALL LETTER E WITH TILDE +0x1EF2 LATIN CAPITAL LETTER Y WITH GRAVE +0x1EF3 LATIN SMALL LETTER Y WITH GRAVE 0x1EF8 LATIN CAPITAL LETTER Y WITH TILDE 0x1EF9 LATIN SMALL LETTER Y WITH TILDE 0x2011 NON-BREAKING HYPHEN From 1f069a6f813990dcda24d011afd42ed17942f120 Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 2 Jun 2023 13:47:13 +0200 Subject: [PATCH 13/59] No new line at the end of the .nam file --- GF_glyphsets/Latin/nam/GF_Latin_Core.nam | 2 +- scripts/assemble_charactersets.py | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam index efecc3409d..032888e656 100644 --- a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam +++ b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam @@ -351,4 +351,4 @@ 0x203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0x20AC EURO SIGN 0x2122 TRADE MARK SIGN -0x2212 MINUS SIGN +0x2212 MINUS SIGN \ No newline at end of file diff --git a/scripts/assemble_charactersets.py b/scripts/assemble_charactersets.py index 1dc15ffa1d..8863e6a53d 100644 --- a/scripts/assemble_charactersets.py +++ b/scripts/assemble_charactersets.py @@ -45,9 +45,11 @@ def assemble_characterset(nam_stub_path, nam_path, languages_yaml_path): # Output sorted character set to .nam file with open(nam_path, "w") as f: - for unicode in sorted(list(character_set)): + for i, unicode in enumerate(sorted(list(character_set))): unicode_string = f"{unicode:#0{6}X}".replace("0X", "0x") - f.write(f"{unicode_string} {unicodedata.name(chr(unicode))}\n") + f.write(f"{unicode_string} {unicodedata.name(chr(unicode))}") + if i < len(character_set) - 1: + f.write("\n") if __name__ == "__main__": From 5d084b48473646dc4c8d4a43a6c8dcec7ca97e27 Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 2 Jun 2023 14:02:35 +0200 Subject: [PATCH 14/59] Re-added chars after gflanguages changes --- GF_glyphsets/Latin/nam/GF_Latin_Core.nam | 2 ++ 1 file changed, 2 insertions(+) diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam index 032888e656..59823c2dfd 100644 --- a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam +++ b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam @@ -317,6 +317,7 @@ 0x030A COMBINING RING ABOVE 0x030B COMBINING DOUBLE ACUTE ACCENT 0x030C COMBINING CARON +0x0312 COMBINING TURNED COMMA ABOVE 0x0326 COMBINING COMMA BELOW 0x0327 COMBINING CEDILLA 0x0328 COMBINING OGONEK @@ -328,6 +329,7 @@ 0x1E83 LATIN SMALL LETTER W WITH ACUTE 0x1E84 LATIN CAPITAL LETTER W WITH DIAERESIS 0x1E85 LATIN SMALL LETTER W WITH DIAERESIS +0x1E9E LATIN CAPITAL LETTER SHARP S 0x1EBC LATIN CAPITAL LETTER E WITH TILDE 0x1EBD LATIN SMALL LETTER E WITH TILDE 0x1EF2 LATIN CAPITAL LETTER Y WITH GRAVE From 2c2ed8a632f23031b31def7665077748bc242ac0 Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 2 Jun 2023 14:02:53 +0200 Subject: [PATCH 15/59] Added script to identify a character in gflanguages --- scripts/find_language_for_character.py | 68 ++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 scripts/find_language_for_character.py diff --git a/scripts/find_language_for_character.py b/scripts/find_language_for_character.py new file mode 100644 index 0000000000..7a62a1f796 --- /dev/null +++ b/scripts/find_language_for_character.py @@ -0,0 +1,68 @@ +""" +Browse through all gflanguages and find the input character. + +Syntax: +python scripts/find_language_for_character.py +( can be either a single 0x0000 string or unicode character.) + +Please manually install tabulate if not present: pip install tabulate +""" + +import sys +import gflanguages +import sys +import tabulate +import unicodedata + +regions = gflanguages.LoadRegions() +languages = gflanguages.LoadLanguages() + +# print(regions) + +if __name__ == "__main__": + input_character = sys.argv[-1] + if input_character.startswith("0x"): + input_character = chr(int(input_character, 16)) + unicode_string = f"{ord(input_character):#0{6}X}".replace("0X", "0x") + print( + f"Character: {input_character} ({unicode_string} {unicodedata.name(input_character)})" + ) + + found_languages = [] + + # Read language definitions + for lang_code in languages: + lang = languages[lang_code] + if lang.exemplar_chars: + chars = lang.exemplar_chars + for category in ("base", "index", "marks", "numerals", "punctuation"): + if ( + input_character in getattr(chars, category) + or input_character in getattr(chars, category).upper() + ): + # Find regions + found_regions = set() + for country_code in regions: + if country_code in lang.region: + found_regions.update( + set(regions[country_code].region_group) + ) + + found_languages.append( + ( + lang_code, + lang.name, + category, + lang.population, + lang.script, + ", ".join(list(found_regions)), + ) + ) + + found_languages = sorted(found_languages, key=lambda x: x[3], reverse=True) + print( + tabulate.tabulate( + found_languages, + headers=["Language", "Name", "Category", "Speakers", "Script", "Regions"], + ) + ) From 0bdd7c7659fb1876701ae56bfd7f19d84feb617c Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 2 Jun 2023 14:05:08 +0200 Subject: [PATCH 16/59] Re-added chars after gflanguages changes --- GF_glyphsets/Latin/nam/GF_Latin_Core.nam | 2 ++ 1 file changed, 2 insertions(+) diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam index 59823c2dfd..cc7ab71ce0 100644 --- a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam +++ b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam @@ -225,6 +225,8 @@ 0x012F LATIN SMALL LETTER I WITH OGONEK 0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE 0x0131 LATIN SMALL LETTER DOTLESS I +0x0132 LATIN CAPITAL LIGATURE IJ +0x0133 LATIN SMALL LIGATURE IJ 0x0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX 0x0135 LATIN SMALL LETTER J WITH CIRCUMFLEX 0x0136 LATIN CAPITAL LETTER K WITH CEDILLA From b35e3fa50905c1b7f3feecb25f93266cb1f1f583 Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 2 Jun 2023 14:16:35 +0200 Subject: [PATCH 17/59] Re-add punctuation --- GF_glyphsets/Latin/nam/GF_Latin_Core.nam | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam index cc7ab71ce0..9aa9ec30ee 100644 --- a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam +++ b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam @@ -338,6 +338,7 @@ 0x1EF3 LATIN SMALL LETTER Y WITH GRAVE 0x1EF8 LATIN CAPITAL LETTER Y WITH TILDE 0x1EF9 LATIN SMALL LETTER Y WITH TILDE +0x2010 HYPHEN 0x2011 NON-BREAKING HYPHEN 0x2013 EN DASH 0x2014 EM DASH @@ -347,12 +348,19 @@ 0x201C LEFT DOUBLE QUOTATION MARK 0x201D RIGHT DOUBLE QUOTATION MARK 0x201E DOUBLE LOW-9 QUOTATION MARK +0x2020 DAGGER +0x2021 DOUBLE DAGGER 0x2022 BULLET 0x2026 HORIZONTAL ELLIPSIS 0x202F NARROW NO-BREAK SPACE 0x2030 PER MILLE SIGN +0x2032 PRIME +0x2033 DOUBLE PRIME 0x2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +0x2052 COMMERCIAL MINUS SIGN 0x20AC EURO SIGN 0x2122 TRADE MARK SIGN -0x2212 MINUS SIGN \ No newline at end of file +0x2212 MINUS SIGN +0x27E8 MATHEMATICAL LEFT ANGLE BRACKET +0x27E9 MATHEMATICAL RIGHT ANGLE BRACKET \ No newline at end of file From e413dbfc889b67a27b79c07404c5980b924348f1 Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 2 Jun 2023 14:16:42 +0200 Subject: [PATCH 18/59] Re-add punctuation --- scripts/assemble_charactersets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/assemble_charactersets.py b/scripts/assemble_charactersets.py index 8863e6a53d..e45ecb06da 100644 --- a/scripts/assemble_charactersets.py +++ b/scripts/assemble_charactersets.py @@ -28,7 +28,7 @@ def assemble_characterset(nam_stub_path, nam_path, languages_yaml_path): | set(chars.index) | set(chars.marks) | set(chars.numerals) - # | set(chars.punctuation) + | set(chars.punctuation) # | set(chars.auxiliary) ) if c not in (" ", "{", "}", "◌") From 6d428ba8cac4ab48e6133b466136acd2fb75adaa Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 2 Jun 2023 14:41:09 +0200 Subject: [PATCH 19/59] Removed Swiss German, Sami, and Esperanto --- GF_glyphsets/Latin/languages/GF_Latin_Core.yaml | 14 +++++--------- GF_glyphsets/Latin/nam/GF_Latin_Core.nam | 16 ---------------- 2 files changed, 5 insertions(+), 25 deletions(-) diff --git a/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml b/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml index 311c85d340..d09f84604a 100644 --- a/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml +++ b/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml @@ -1,32 +1,28 @@ language_codes: -# - bar_Latn # Bavarian - ca_Latn # Catalan - cs_Latn # Czech - - cy_Latn # Welsh + - cy_Latn # Welsh - da_Latn # Danish - de_Latn # German - en_Latn # English - - eo_Latn # Esperanto - es_Latn # Spanish - fi_Latn # Finnish - fr_Latn # French - gn_Latn # Guarani - - gsw_Latn # Swiss German - - haw_Latn # Hawaiian + - haw_Latn # Hawaiian - hr_Latn # Croatian - hu_Latn # Hungarian - is_Latn # Icelandic - it_Latn # Italian - - lt_Latn # Lithuanian - - lv_Latn # Latvian - - mt_Latn # Maltese + - lt_Latn # Lithuanian + - lv_Latn # Latvian + - mt_Latn # Maltese - nb_Latn # Norwegian Bokmål - nl_Latn # Dutch - pl_Latn # Polish - pt_Latn # Portuguese - qu_Latn # Quechua - ro_Latn # Romanian - - se_Latn # Northern Sami - sk_Latn # Slovak - sq_Latn # Albanian - sr_Latn # Serbian (Latin) diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam index 9aa9ec30ee..738cc138a6 100644 --- a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam +++ b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam @@ -187,8 +187,6 @@ 0x0105 LATIN SMALL LETTER A WITH OGONEK 0x0106 LATIN CAPITAL LETTER C WITH ACUTE 0x0107 LATIN SMALL LETTER C WITH ACUTE -0x0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX -0x0109 LATIN SMALL LETTER C WITH CIRCUMFLEX 0x010A LATIN CAPITAL LETTER C WITH DOT ABOVE 0x010B LATIN SMALL LETTER C WITH DOT ABOVE 0x010C LATIN CAPITAL LETTER C WITH CARON @@ -205,16 +203,12 @@ 0x0119 LATIN SMALL LETTER E WITH OGONEK 0x011A LATIN CAPITAL LETTER E WITH CARON 0x011B LATIN SMALL LETTER E WITH CARON -0x011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX -0x011D LATIN SMALL LETTER G WITH CIRCUMFLEX 0x011E LATIN CAPITAL LETTER G WITH BREVE 0x011F LATIN SMALL LETTER G WITH BREVE 0x0120 LATIN CAPITAL LETTER G WITH DOT ABOVE 0x0121 LATIN SMALL LETTER G WITH DOT ABOVE 0x0122 LATIN CAPITAL LETTER G WITH CEDILLA 0x0123 LATIN SMALL LETTER G WITH CEDILLA -0x0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX -0x0125 LATIN SMALL LETTER H WITH CIRCUMFLEX 0x0126 LATIN CAPITAL LETTER H WITH STROKE 0x0127 LATIN SMALL LETTER H WITH STROKE 0x0128 LATIN CAPITAL LETTER I WITH TILDE @@ -227,8 +221,6 @@ 0x0131 LATIN SMALL LETTER DOTLESS I 0x0132 LATIN CAPITAL LIGATURE IJ 0x0133 LATIN SMALL LIGATURE IJ -0x0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX -0x0135 LATIN SMALL LETTER J WITH CIRCUMFLEX 0x0136 LATIN CAPITAL LETTER K WITH CEDILLA 0x0137 LATIN SMALL LETTER K WITH CEDILLA 0x0139 LATIN CAPITAL LETTER L WITH ACUTE @@ -245,8 +237,6 @@ 0x0146 LATIN SMALL LETTER N WITH CEDILLA 0x0147 LATIN CAPITAL LETTER N WITH CARON 0x0148 LATIN SMALL LETTER N WITH CARON -0x014A LATIN CAPITAL LETTER ENG -0x014B LATIN SMALL LETTER ENG 0x014C LATIN CAPITAL LETTER O WITH MACRON 0x014D LATIN SMALL LETTER O WITH MACRON 0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE @@ -259,22 +249,16 @@ 0x0159 LATIN SMALL LETTER R WITH CARON 0x015A LATIN CAPITAL LETTER S WITH ACUTE 0x015B LATIN SMALL LETTER S WITH ACUTE -0x015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX -0x015D LATIN SMALL LETTER S WITH CIRCUMFLEX 0x015E LATIN CAPITAL LETTER S WITH CEDILLA 0x015F LATIN SMALL LETTER S WITH CEDILLA 0x0160 LATIN CAPITAL LETTER S WITH CARON 0x0161 LATIN SMALL LETTER S WITH CARON 0x0164 LATIN CAPITAL LETTER T WITH CARON 0x0165 LATIN SMALL LETTER T WITH CARON -0x0166 LATIN CAPITAL LETTER T WITH STROKE -0x0167 LATIN SMALL LETTER T WITH STROKE 0x0168 LATIN CAPITAL LETTER U WITH TILDE 0x0169 LATIN SMALL LETTER U WITH TILDE 0x016A LATIN CAPITAL LETTER U WITH MACRON 0x016B LATIN SMALL LETTER U WITH MACRON -0x016C LATIN CAPITAL LETTER U WITH BREVE -0x016D LATIN SMALL LETTER U WITH BREVE 0x016E LATIN CAPITAL LETTER U WITH RING ABOVE 0x016F LATIN SMALL LETTER U WITH RING ABOVE 0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE From fe848431a3bb2ee42d1cecac104a44ff4b3cb48c Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 2 Jun 2023 15:16:23 +0200 Subject: [PATCH 20/59] Removed more characters from gflanguages --- GF_glyphsets/Latin/nam/GF_Latin_Core.nam | 13 ------------- scripts/find_language_for_character.py | 2 +- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam index 738cc138a6..c69a2e9e6b 100644 --- a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam +++ b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam @@ -106,8 +106,6 @@ 0x00AE REGISTERED SIGN 0x00AF MACRON 0x00B0 DEGREE SIGN -0x00B2 SUPERSCRIPT TWO -0x00B3 SUPERSCRIPT THREE 0x00B4 ACUTE ACCENT 0x00B6 PILCROW SIGN 0x00B7 MIDDLE DOT @@ -280,7 +278,6 @@ 0x0219 LATIN SMALL LETTER S WITH COMMA BELOW 0x021A LATIN CAPITAL LETTER T WITH COMMA BELOW 0x021B LATIN SMALL LETTER T WITH COMMA BELOW -0x02B3 MODIFIER LETTER SMALL R 0x02BB MODIFIER LETTER TURNED COMMA 0x02BC MODIFIER LETTER APOSTROPHE 0x02C6 MODIFIER LETTER CIRCUMFLEX ACCENT @@ -291,7 +288,6 @@ 0x02DB OGONEK 0x02DC SMALL TILDE 0x02DD DOUBLE ACUTE ACCENT -0x02E2 MODIFIER LETTER SMALL S 0x0300 COMBINING GRAVE ACCENT 0x0301 COMBINING ACUTE ACCENT 0x0302 COMBINING CIRCUMFLEX ACCENT @@ -307,8 +303,6 @@ 0x0326 COMBINING COMMA BELOW 0x0327 COMBINING CEDILLA 0x0328 COMBINING OGONEK -0x1D48 MODIFIER LETTER SMALL D -0x1D49 MODIFIER LETTER SMALL E 0x1E80 LATIN CAPITAL LETTER W WITH GRAVE 0x1E81 LATIN SMALL LETTER W WITH GRAVE 0x1E82 LATIN CAPITAL LETTER W WITH ACUTE @@ -322,7 +316,6 @@ 0x1EF3 LATIN SMALL LETTER Y WITH GRAVE 0x1EF8 LATIN CAPITAL LETTER Y WITH TILDE 0x1EF9 LATIN SMALL LETTER Y WITH TILDE -0x2010 HYPHEN 0x2011 NON-BREAKING HYPHEN 0x2013 EN DASH 0x2014 EM DASH @@ -332,17 +325,11 @@ 0x201C LEFT DOUBLE QUOTATION MARK 0x201D RIGHT DOUBLE QUOTATION MARK 0x201E DOUBLE LOW-9 QUOTATION MARK -0x2020 DAGGER -0x2021 DOUBLE DAGGER 0x2022 BULLET 0x2026 HORIZONTAL ELLIPSIS 0x202F NARROW NO-BREAK SPACE -0x2030 PER MILLE SIGN -0x2032 PRIME -0x2033 DOUBLE PRIME 0x2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -0x2052 COMMERCIAL MINUS SIGN 0x20AC EURO SIGN 0x2122 TRADE MARK SIGN 0x2212 MINUS SIGN diff --git a/scripts/find_language_for_character.py b/scripts/find_language_for_character.py index 7a62a1f796..66c8741a23 100644 --- a/scripts/find_language_for_character.py +++ b/scripts/find_language_for_character.py @@ -25,7 +25,7 @@ input_character = chr(int(input_character, 16)) unicode_string = f"{ord(input_character):#0{6}X}".replace("0X", "0x") print( - f"Character: {input_character} ({unicode_string} {unicodedata.name(input_character)})" + f"Character: [{input_character}] ({unicode_string} {unicodedata.name(input_character)})" ) found_languages = [] From c267ed91de61bc6647e33dcf778fdf6f5ee3bc66 Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 2 Jun 2023 15:23:52 +0200 Subject: [PATCH 21/59] Removed more characters from gflanguages --- GF_glyphsets/Latin/nam/GF_Latin_Core.nam | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam index c69a2e9e6b..abef5fb89b 100644 --- a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam +++ b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam @@ -316,7 +316,6 @@ 0x1EF3 LATIN SMALL LETTER Y WITH GRAVE 0x1EF8 LATIN CAPITAL LETTER Y WITH TILDE 0x1EF9 LATIN SMALL LETTER Y WITH TILDE -0x2011 NON-BREAKING HYPHEN 0x2013 EN DASH 0x2014 EM DASH 0x2018 LEFT SINGLE QUOTATION MARK @@ -332,6 +331,4 @@ 0x203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0x20AC EURO SIGN 0x2122 TRADE MARK SIGN -0x2212 MINUS SIGN -0x27E8 MATHEMATICAL LEFT ANGLE BRACKET -0x27E9 MATHEMATICAL RIGHT ANGLE BRACKET \ No newline at end of file +0x2212 MINUS SIGN \ No newline at end of file From 120f17eae1f57bd7cb13eab3a5b41a23a5bc84c4 Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 2 Jun 2023 15:25:51 +0200 Subject: [PATCH 22/59] Removed more characters from gflanguages --- GF_glyphsets/Latin/nam/GF_Latin_Core.nam | 1 - 1 file changed, 1 deletion(-) diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam index abef5fb89b..816cfcb321 100644 --- a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam +++ b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam @@ -326,7 +326,6 @@ 0x201E DOUBLE LOW-9 QUOTATION MARK 0x2022 BULLET 0x2026 HORIZONTAL ELLIPSIS -0x202F NARROW NO-BREAK SPACE 0x2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0x20AC EURO SIGN From a70981c977a8dcf9ad08e411f533f48622bda23f Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 2 Jun 2023 15:35:49 +0200 Subject: [PATCH 23/59] Removed Hawaiian & updated gflanguages --- GF_glyphsets/Latin/languages/GF_Latin_Core.yaml | 1 - GF_glyphsets/Latin/nam/GF_Latin_Core.nam | 5 ----- 2 files changed, 6 deletions(-) diff --git a/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml b/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml index d09f84604a..fab050b336 100644 --- a/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml +++ b/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml @@ -9,7 +9,6 @@ language_codes: - fi_Latn # Finnish - fr_Latn # French - gn_Latn # Guarani - - haw_Latn # Hawaiian - hr_Latn # Croatian - hu_Latn # Hungarian - is_Latn # Icelandic diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam index 816cfcb321..5efe0f04ed 100644 --- a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam +++ b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam @@ -217,8 +217,6 @@ 0x012F LATIN SMALL LETTER I WITH OGONEK 0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE 0x0131 LATIN SMALL LETTER DOTLESS I -0x0132 LATIN CAPITAL LIGATURE IJ -0x0133 LATIN SMALL LIGATURE IJ 0x0136 LATIN CAPITAL LETTER K WITH CEDILLA 0x0137 LATIN SMALL LETTER K WITH CEDILLA 0x0139 LATIN CAPITAL LETTER L WITH ACUTE @@ -235,8 +233,6 @@ 0x0146 LATIN SMALL LETTER N WITH CEDILLA 0x0147 LATIN CAPITAL LETTER N WITH CARON 0x0148 LATIN SMALL LETTER N WITH CARON -0x014C LATIN CAPITAL LETTER O WITH MACRON -0x014D LATIN SMALL LETTER O WITH MACRON 0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE 0x0152 LATIN CAPITAL LIGATURE OE @@ -278,7 +274,6 @@ 0x0219 LATIN SMALL LETTER S WITH COMMA BELOW 0x021A LATIN CAPITAL LETTER T WITH COMMA BELOW 0x021B LATIN SMALL LETTER T WITH COMMA BELOW -0x02BB MODIFIER LETTER TURNED COMMA 0x02BC MODIFIER LETTER APOSTROPHE 0x02C6 MODIFIER LETTER CIRCUMFLEX ACCENT 0x02C7 CARON From 12ed660262bafc5ad28f356c071eafecdf5a0738 Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 2 Jun 2023 15:39:33 +0200 Subject: [PATCH 24/59] Annotations --- scripts/assemble_charactersets.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/assemble_charactersets.py b/scripts/assemble_charactersets.py index e45ecb06da..43f121ce31 100644 --- a/scripts/assemble_charactersets.py +++ b/scripts/assemble_charactersets.py @@ -24,12 +24,14 @@ def assemble_characterset(nam_stub_path, nam_path, languages_yaml_path): ord(c) for c in list( set(chars.base) - | set(chars.base.upper()) + | set( + chars.base.upper() + ) # This is important because many Latin languages don't contain a complete set of uppercase letters in "index" | set(chars.index) | set(chars.marks) | set(chars.numerals) | set(chars.punctuation) - # | set(chars.auxiliary) + # | set(chars.auxiliary) # Not to be part of charsets ) if c not in (" ", "{", "}", "◌") } From 2910e22cae04750aa8e74cda0143b5f08708188c Mon Sep 17 00:00:00 2001 From: Yanone Date: Mon, 5 Jun 2023 14:16:21 +0200 Subject: [PATCH 25/59] Removed languages under 5M from Core --- .../Latin/languages/GF_Latin_Core.yaml | 8 ++--- GF_glyphsets/Latin/nam/GF_Latin_Core.nam | 34 ------------------- 2 files changed, 4 insertions(+), 38 deletions(-) diff --git a/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml b/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml index fab050b336..28a9e34f44 100644 --- a/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml +++ b/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml @@ -11,11 +11,11 @@ language_codes: - gn_Latn # Guarani - hr_Latn # Croatian - hu_Latn # Hungarian - - is_Latn # Icelandic + # - is_Latn # Icelandic - it_Latn # Italian - - lt_Latn # Lithuanian - - lv_Latn # Latvian - - mt_Latn # Maltese + # - lt_Latn # Lithuanian + # - lv_Latn # Latvian + # - mt_Latn # Maltese - nb_Latn # Norwegian Bokmål - nl_Latn # Dutch - pl_Latn # Polish diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam index 5efe0f04ed..5b76406a95 100644 --- a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam +++ b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam @@ -129,7 +129,6 @@ 0x00CD LATIN CAPITAL LETTER I WITH ACUTE 0x00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0x00CF LATIN CAPITAL LETTER I WITH DIAERESIS -0x00D0 LATIN CAPITAL LETTER ETH 0x00D1 LATIN CAPITAL LETTER N WITH TILDE 0x00D2 LATIN CAPITAL LETTER O WITH GRAVE 0x00D3 LATIN CAPITAL LETTER O WITH ACUTE @@ -143,7 +142,6 @@ 0x00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0x00DC LATIN CAPITAL LETTER U WITH DIAERESIS 0x00DD LATIN CAPITAL LETTER Y WITH ACUTE -0x00DE LATIN CAPITAL LETTER THORN 0x00DF LATIN SMALL LETTER SHARP S 0x00E0 LATIN SMALL LETTER A WITH GRAVE 0x00E1 LATIN SMALL LETTER A WITH ACUTE @@ -161,7 +159,6 @@ 0x00ED LATIN SMALL LETTER I WITH ACUTE 0x00EE LATIN SMALL LETTER I WITH CIRCUMFLEX 0x00EF LATIN SMALL LETTER I WITH DIAERESIS -0x00F0 LATIN SMALL LETTER ETH 0x00F1 LATIN SMALL LETTER N WITH TILDE 0x00F2 LATIN SMALL LETTER O WITH GRAVE 0x00F3 LATIN SMALL LETTER O WITH ACUTE @@ -175,62 +172,37 @@ 0x00FB LATIN SMALL LETTER U WITH CIRCUMFLEX 0x00FC LATIN SMALL LETTER U WITH DIAERESIS 0x00FD LATIN SMALL LETTER Y WITH ACUTE -0x00FE LATIN SMALL LETTER THORN 0x00FF LATIN SMALL LETTER Y WITH DIAERESIS -0x0100 LATIN CAPITAL LETTER A WITH MACRON -0x0101 LATIN SMALL LETTER A WITH MACRON 0x0102 LATIN CAPITAL LETTER A WITH BREVE 0x0103 LATIN SMALL LETTER A WITH BREVE 0x0104 LATIN CAPITAL LETTER A WITH OGONEK 0x0105 LATIN SMALL LETTER A WITH OGONEK 0x0106 LATIN CAPITAL LETTER C WITH ACUTE 0x0107 LATIN SMALL LETTER C WITH ACUTE -0x010A LATIN CAPITAL LETTER C WITH DOT ABOVE -0x010B LATIN SMALL LETTER C WITH DOT ABOVE 0x010C LATIN CAPITAL LETTER C WITH CARON 0x010D LATIN SMALL LETTER C WITH CARON 0x010E LATIN CAPITAL LETTER D WITH CARON 0x010F LATIN SMALL LETTER D WITH CARON 0x0110 LATIN CAPITAL LETTER D WITH STROKE 0x0111 LATIN SMALL LETTER D WITH STROKE -0x0112 LATIN CAPITAL LETTER E WITH MACRON -0x0113 LATIN SMALL LETTER E WITH MACRON -0x0116 LATIN CAPITAL LETTER E WITH DOT ABOVE -0x0117 LATIN SMALL LETTER E WITH DOT ABOVE 0x0118 LATIN CAPITAL LETTER E WITH OGONEK 0x0119 LATIN SMALL LETTER E WITH OGONEK 0x011A LATIN CAPITAL LETTER E WITH CARON 0x011B LATIN SMALL LETTER E WITH CARON 0x011E LATIN CAPITAL LETTER G WITH BREVE 0x011F LATIN SMALL LETTER G WITH BREVE -0x0120 LATIN CAPITAL LETTER G WITH DOT ABOVE -0x0121 LATIN SMALL LETTER G WITH DOT ABOVE -0x0122 LATIN CAPITAL LETTER G WITH CEDILLA -0x0123 LATIN SMALL LETTER G WITH CEDILLA -0x0126 LATIN CAPITAL LETTER H WITH STROKE -0x0127 LATIN SMALL LETTER H WITH STROKE 0x0128 LATIN CAPITAL LETTER I WITH TILDE 0x0129 LATIN SMALL LETTER I WITH TILDE -0x012A LATIN CAPITAL LETTER I WITH MACRON -0x012B LATIN SMALL LETTER I WITH MACRON -0x012E LATIN CAPITAL LETTER I WITH OGONEK -0x012F LATIN SMALL LETTER I WITH OGONEK 0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE 0x0131 LATIN SMALL LETTER DOTLESS I -0x0136 LATIN CAPITAL LETTER K WITH CEDILLA -0x0137 LATIN SMALL LETTER K WITH CEDILLA 0x0139 LATIN CAPITAL LETTER L WITH ACUTE 0x013A LATIN SMALL LETTER L WITH ACUTE -0x013B LATIN CAPITAL LETTER L WITH CEDILLA -0x013C LATIN SMALL LETTER L WITH CEDILLA 0x013D LATIN CAPITAL LETTER L WITH CARON 0x013E LATIN SMALL LETTER L WITH CARON 0x0141 LATIN CAPITAL LETTER L WITH STROKE 0x0142 LATIN SMALL LETTER L WITH STROKE 0x0143 LATIN CAPITAL LETTER N WITH ACUTE 0x0144 LATIN SMALL LETTER N WITH ACUTE -0x0145 LATIN CAPITAL LETTER N WITH CEDILLA -0x0146 LATIN SMALL LETTER N WITH CEDILLA 0x0147 LATIN CAPITAL LETTER N WITH CARON 0x0148 LATIN SMALL LETTER N WITH CARON 0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE @@ -251,14 +223,10 @@ 0x0165 LATIN SMALL LETTER T WITH CARON 0x0168 LATIN CAPITAL LETTER U WITH TILDE 0x0169 LATIN SMALL LETTER U WITH TILDE -0x016A LATIN CAPITAL LETTER U WITH MACRON -0x016B LATIN SMALL LETTER U WITH MACRON 0x016E LATIN CAPITAL LETTER U WITH RING ABOVE 0x016F LATIN SMALL LETTER U WITH RING ABOVE 0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0x0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE -0x0172 LATIN CAPITAL LETTER U WITH OGONEK -0x0173 LATIN SMALL LETTER U WITH OGONEK 0x0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX 0x0175 LATIN SMALL LETTER W WITH CIRCUMFLEX 0x0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX @@ -287,14 +255,12 @@ 0x0301 COMBINING ACUTE ACCENT 0x0302 COMBINING CIRCUMFLEX ACCENT 0x0303 COMBINING TILDE -0x0304 COMBINING MACRON 0x0306 COMBINING BREVE 0x0307 COMBINING DOT ABOVE 0x0308 COMBINING DIAERESIS 0x030A COMBINING RING ABOVE 0x030B COMBINING DOUBLE ACUTE ACCENT 0x030C COMBINING CARON -0x0312 COMBINING TURNED COMMA ABOVE 0x0326 COMBINING COMMA BELOW 0x0327 COMBINING CEDILLA 0x0328 COMBINING OGONEK From 51538a8212b30c9cc5ff8cfad738b588df6faf6c Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 22 Sep 2023 14:33:32 +0200 Subject: [PATCH 26/59] Re-enable 4 languages for Core --- .../Latin/languages/GF_Latin_Core.yaml | 8 ++--- GF_glyphsets/Latin/nam/GF_Latin_Core.nam | 34 +++++++++++++++++++ 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml b/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml index 28a9e34f44..fab050b336 100644 --- a/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml +++ b/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml @@ -11,11 +11,11 @@ language_codes: - gn_Latn # Guarani - hr_Latn # Croatian - hu_Latn # Hungarian - # - is_Latn # Icelandic + - is_Latn # Icelandic - it_Latn # Italian - # - lt_Latn # Lithuanian - # - lv_Latn # Latvian - # - mt_Latn # Maltese + - lt_Latn # Lithuanian + - lv_Latn # Latvian + - mt_Latn # Maltese - nb_Latn # Norwegian Bokmål - nl_Latn # Dutch - pl_Latn # Polish diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam index 5b76406a95..5efe0f04ed 100644 --- a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam +++ b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam @@ -129,6 +129,7 @@ 0x00CD LATIN CAPITAL LETTER I WITH ACUTE 0x00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0x00CF LATIN CAPITAL LETTER I WITH DIAERESIS +0x00D0 LATIN CAPITAL LETTER ETH 0x00D1 LATIN CAPITAL LETTER N WITH TILDE 0x00D2 LATIN CAPITAL LETTER O WITH GRAVE 0x00D3 LATIN CAPITAL LETTER O WITH ACUTE @@ -142,6 +143,7 @@ 0x00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0x00DC LATIN CAPITAL LETTER U WITH DIAERESIS 0x00DD LATIN CAPITAL LETTER Y WITH ACUTE +0x00DE LATIN CAPITAL LETTER THORN 0x00DF LATIN SMALL LETTER SHARP S 0x00E0 LATIN SMALL LETTER A WITH GRAVE 0x00E1 LATIN SMALL LETTER A WITH ACUTE @@ -159,6 +161,7 @@ 0x00ED LATIN SMALL LETTER I WITH ACUTE 0x00EE LATIN SMALL LETTER I WITH CIRCUMFLEX 0x00EF LATIN SMALL LETTER I WITH DIAERESIS +0x00F0 LATIN SMALL LETTER ETH 0x00F1 LATIN SMALL LETTER N WITH TILDE 0x00F2 LATIN SMALL LETTER O WITH GRAVE 0x00F3 LATIN SMALL LETTER O WITH ACUTE @@ -172,37 +175,62 @@ 0x00FB LATIN SMALL LETTER U WITH CIRCUMFLEX 0x00FC LATIN SMALL LETTER U WITH DIAERESIS 0x00FD LATIN SMALL LETTER Y WITH ACUTE +0x00FE LATIN SMALL LETTER THORN 0x00FF LATIN SMALL LETTER Y WITH DIAERESIS +0x0100 LATIN CAPITAL LETTER A WITH MACRON +0x0101 LATIN SMALL LETTER A WITH MACRON 0x0102 LATIN CAPITAL LETTER A WITH BREVE 0x0103 LATIN SMALL LETTER A WITH BREVE 0x0104 LATIN CAPITAL LETTER A WITH OGONEK 0x0105 LATIN SMALL LETTER A WITH OGONEK 0x0106 LATIN CAPITAL LETTER C WITH ACUTE 0x0107 LATIN SMALL LETTER C WITH ACUTE +0x010A LATIN CAPITAL LETTER C WITH DOT ABOVE +0x010B LATIN SMALL LETTER C WITH DOT ABOVE 0x010C LATIN CAPITAL LETTER C WITH CARON 0x010D LATIN SMALL LETTER C WITH CARON 0x010E LATIN CAPITAL LETTER D WITH CARON 0x010F LATIN SMALL LETTER D WITH CARON 0x0110 LATIN CAPITAL LETTER D WITH STROKE 0x0111 LATIN SMALL LETTER D WITH STROKE +0x0112 LATIN CAPITAL LETTER E WITH MACRON +0x0113 LATIN SMALL LETTER E WITH MACRON +0x0116 LATIN CAPITAL LETTER E WITH DOT ABOVE +0x0117 LATIN SMALL LETTER E WITH DOT ABOVE 0x0118 LATIN CAPITAL LETTER E WITH OGONEK 0x0119 LATIN SMALL LETTER E WITH OGONEK 0x011A LATIN CAPITAL LETTER E WITH CARON 0x011B LATIN SMALL LETTER E WITH CARON 0x011E LATIN CAPITAL LETTER G WITH BREVE 0x011F LATIN SMALL LETTER G WITH BREVE +0x0120 LATIN CAPITAL LETTER G WITH DOT ABOVE +0x0121 LATIN SMALL LETTER G WITH DOT ABOVE +0x0122 LATIN CAPITAL LETTER G WITH CEDILLA +0x0123 LATIN SMALL LETTER G WITH CEDILLA +0x0126 LATIN CAPITAL LETTER H WITH STROKE +0x0127 LATIN SMALL LETTER H WITH STROKE 0x0128 LATIN CAPITAL LETTER I WITH TILDE 0x0129 LATIN SMALL LETTER I WITH TILDE +0x012A LATIN CAPITAL LETTER I WITH MACRON +0x012B LATIN SMALL LETTER I WITH MACRON +0x012E LATIN CAPITAL LETTER I WITH OGONEK +0x012F LATIN SMALL LETTER I WITH OGONEK 0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE 0x0131 LATIN SMALL LETTER DOTLESS I +0x0136 LATIN CAPITAL LETTER K WITH CEDILLA +0x0137 LATIN SMALL LETTER K WITH CEDILLA 0x0139 LATIN CAPITAL LETTER L WITH ACUTE 0x013A LATIN SMALL LETTER L WITH ACUTE +0x013B LATIN CAPITAL LETTER L WITH CEDILLA +0x013C LATIN SMALL LETTER L WITH CEDILLA 0x013D LATIN CAPITAL LETTER L WITH CARON 0x013E LATIN SMALL LETTER L WITH CARON 0x0141 LATIN CAPITAL LETTER L WITH STROKE 0x0142 LATIN SMALL LETTER L WITH STROKE 0x0143 LATIN CAPITAL LETTER N WITH ACUTE 0x0144 LATIN SMALL LETTER N WITH ACUTE +0x0145 LATIN CAPITAL LETTER N WITH CEDILLA +0x0146 LATIN SMALL LETTER N WITH CEDILLA 0x0147 LATIN CAPITAL LETTER N WITH CARON 0x0148 LATIN SMALL LETTER N WITH CARON 0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE @@ -223,10 +251,14 @@ 0x0165 LATIN SMALL LETTER T WITH CARON 0x0168 LATIN CAPITAL LETTER U WITH TILDE 0x0169 LATIN SMALL LETTER U WITH TILDE +0x016A LATIN CAPITAL LETTER U WITH MACRON +0x016B LATIN SMALL LETTER U WITH MACRON 0x016E LATIN CAPITAL LETTER U WITH RING ABOVE 0x016F LATIN SMALL LETTER U WITH RING ABOVE 0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0x0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE +0x0172 LATIN CAPITAL LETTER U WITH OGONEK +0x0173 LATIN SMALL LETTER U WITH OGONEK 0x0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX 0x0175 LATIN SMALL LETTER W WITH CIRCUMFLEX 0x0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX @@ -255,12 +287,14 @@ 0x0301 COMBINING ACUTE ACCENT 0x0302 COMBINING CIRCUMFLEX ACCENT 0x0303 COMBINING TILDE +0x0304 COMBINING MACRON 0x0306 COMBINING BREVE 0x0307 COMBINING DOT ABOVE 0x0308 COMBINING DIAERESIS 0x030A COMBINING RING ABOVE 0x030B COMBINING DOUBLE ACUTE ACCENT 0x030C COMBINING CARON +0x0312 COMBINING TURNED COMMA ABOVE 0x0326 COMBINING COMMA BELOW 0x0327 COMBINING CEDILLA 0x0328 COMBINING OGONEK From 942d1f73b11febd1b175268c7ae50982b370fdbf Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 22 Sep 2023 15:10:11 +0200 Subject: [PATCH 27/59] Update README.md --- README.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/README.md b/README.md index 4e41de53b4..848cd564df 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,22 @@ +Attention: Repository under transition +====================================== + +The assembly of character sets is currently undergoing a transition from the previous approach of using the `glyphsets` command and `data.json` as a database to using the `gflanguages` package as the database and assembling (currently only) .nam files from that. + +This transition is currently complete for: +* GF_Latin_Core + +**Caution:** If you run the existing `sh GF_glyphsets/update-gs.sh` command, it will delete all existing .nam files, including the .stub.nam files that are the basis for the new approach of assembling the character sets. As long as this transition is partial, make sure that you don't run `sh GF_glyphsets/update-gs.sh` and then commit `.nam` files for the above-mentioned character sets. + +How to assemble a .nam file in the new approach +----------------------------------------------- + +* Have a `.stub.nam` file under `nam/` for your character set, even if the file is empty +* Have a `.yaml` file under `languages/` with language codes for your character set +* Run `python scripts/assemble_charactersets.py` to assemble the main `.nam` files from the stub and the language definitions + +.glyphs and .plist files are not yet supported in the new approach, but will be. + Glyphsets ========= From 7b50c52f490b8a14dd2481282c707f22a0e323c3 Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 22 Sep 2023 15:16:36 +0200 Subject: [PATCH 28/59] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 848cd564df..25573c8b04 100644 --- a/README.md +++ b/README.md @@ -11,11 +11,11 @@ This transition is currently complete for: How to assemble a .nam file in the new approach ----------------------------------------------- -* Have a `.stub.nam` file under `nam/` for your character set, even if the file is empty -* Have a `.yaml` file under `languages/` with language codes for your character set +* Have a `.stub.nam` file under `GF_Glyphsets/nam/` for your character set, even if the file is empty +* Have a `.yaml` file under `GF_Glyphsets/languages/` with language codes for your character set * Run `python scripts/assemble_charactersets.py` to assemble the main `.nam` files from the stub and the language definitions -.glyphs and .plist files are not yet supported in the new approach, but will be. +.glyphs and .plist and .txt files are currently not yet supported in the new approach, but will be. Glyphsets ========= From 1f534a713f7530cc8025744138d324fd8603cfe9 Mon Sep 17 00:00:00 2001 From: Denis Moyogo Jacquerye Date: Wed, 20 Sep 2023 00:10:24 +0200 Subject: [PATCH 29/59] find_language_for_character.py: use argparse --- scripts/find_language_for_character.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/scripts/find_language_for_character.py b/scripts/find_language_for_character.py index 66c8741a23..5365684289 100644 --- a/scripts/find_language_for_character.py +++ b/scripts/find_language_for_character.py @@ -8,7 +8,7 @@ Please manually install tabulate if not present: pip install tabulate """ -import sys +import argparse import gflanguages import sys import tabulate @@ -17,10 +17,12 @@ regions = gflanguages.LoadRegions() languages = gflanguages.LoadLanguages() -# print(regions) - if __name__ == "__main__": - input_character = sys.argv[-1] + parser = argparse.ArgumentParser(description="Find languages using a given character.") + parser.add_argument("character", metavar="CHAR", help="Unicode character") + args = parser.parse_args() + + input_character = args.character if input_character.startswith("0x"): input_character = chr(int(input_character, 16)) unicode_string = f"{ord(input_character):#0{6}X}".replace("0X", "0x") From 595bd56a7c193fa28736ce6ba9f7c1205951c652 Mon Sep 17 00:00:00 2001 From: Denis Moyogo Jacquerye Date: Sat, 23 Sep 2023 09:40:32 +0200 Subject: [PATCH 30/59] assemble_languages: use arguments --- scripts/assemble_languages.py | 50 +++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 11 deletions(-) diff --git a/scripts/assemble_languages.py b/scripts/assemble_languages.py index 45893d5d4d..43a53df94a 100644 --- a/scripts/assemble_languages.py +++ b/scripts/assemble_languages.py @@ -3,32 +3,54 @@ in Europe or Americas and have more than 5 million speakers. """ +import argparse import gflanguages -regions = gflanguages.LoadRegions() -languages = gflanguages.LoadLanguages() - SPEAKERS = 5000000 -if __name__ == "__main__": + +def main(args): + arg_parser = argparse.ArgumentParser( + description="Generates a list of language ids based on given requirements." + ) + arg_parser.add_argument( + "--regions", nargs="+", help="Region or region groups where languages are used." + ) + arg_parser.add_argument( + "--population", help="Minimum speakers’ population.", default=SPEAKERS + ) + arg_parser.add_argument("--script", help="Script of the languages.") + arg_parser.add_argument( + "--include-languages", + nargs="+", + default=[], + help="Languages that should be included even if they don’t match the other requirements.", + ) + options = arg_parser.parse_args(args) + options.population = int(options.population) + + regions = gflanguages.LoadRegions() + languages = gflanguages.LoadLanguages() + country_codes = set() - # Go through countries and add them to the set if they are in Europe or Americas + # Go through countries and add them to the set if their region_group is in options.regions or they are in options.regions for country_code in regions: - if set(regions[country_code].region_group).intersection( - set(("Europe", "Americas")) + if set(regions[country_code].region_group).intersection(set(options.regions)) or ( + country_code in options.regions ): country_codes.add(country_code) - # Go through languages and add them to the set if they are in Europe or Americas + # Go through languages and add them to the set if their regions are in country_codes language_codes = set() # Print languages if they are supported through the logic for language_code in sorted(languages.keys()): if ( - set(languages[language_code].region).intersection(country_codes) - and languages[language_code].population > SPEAKERS - and languages[language_code].script == "Latn" + language_code in options.include_languages + or set(languages[language_code].region).intersection(country_codes) + and languages[language_code].population >= options.population + and languages[language_code].script == options.script ): if not languages[language_code].exemplar_chars: print( @@ -36,3 +58,9 @@ ) language_codes.add(language_code) print(f" - {language_code} # {languages[language_code].name}") + + +if __name__ == "__main__": + import sys + + main(sys.argv[1:]) From 6d9d21d1d8d0af0627d07ba85ce97bccbbc1310e Mon Sep 17 00:00:00 2001 From: Yanone Date: Wed, 27 Sep 2023 13:40:04 +0200 Subject: [PATCH 31/59] Update .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 907015bb27..6f26a5f2f2 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ _version* .DS_Store *.pyc +build/ \ No newline at end of file From bd19af05c6c35ac7a873dcdcb54b895fe65c2d50 Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 13 Oct 2023 12:46:39 +0200 Subject: [PATCH 32/59] Move definition files around --- .../definitions/GF_Latin_Core.stub.glyphs | 199 ++++++++++++++++++ .../GF_Latin_Core.stub.nam | 0 .../GF_Latin_Core.yaml | 0 3 files changed, 199 insertions(+) create mode 100644 GF_glyphsets/Latin/definitions/GF_Latin_Core.stub.glyphs rename GF_glyphsets/Latin/{nam => definitions}/GF_Latin_Core.stub.nam (100%) rename GF_glyphsets/Latin/{languages => definitions}/GF_Latin_Core.yaml (100%) diff --git a/GF_glyphsets/Latin/definitions/GF_Latin_Core.stub.glyphs b/GF_glyphsets/Latin/definitions/GF_Latin_Core.stub.glyphs new file mode 100644 index 0000000000..31448af86b --- /dev/null +++ b/GF_glyphsets/Latin/definitions/GF_Latin_Core.stub.glyphs @@ -0,0 +1,199 @@ +{ +.appVersion = "3151"; +.formatVersion = 3; +date = "2021-10-28 12:22:31 +0000"; +familyName = "GF Latin Core"; +featurePrefixes = ( +{ +automatic = 1; +code = "languagesystem DFLT dflt; + +languagesystem latn dflt; +languagesystem latn AZE; +languagesystem latn CRT; +languagesystem latn KAZ; +languagesystem latn TAT; +languagesystem latn TRK; +languagesystem latn ROM; +languagesystem latn MOL; +languagesystem latn CAT; +"; +name = Languagesystems; +} +); +features = ( +{ +automatic = 1; +code = "feature locl; +feature ordn; +feature case; +"; +tag = aalt; +}, +{ +automatic = 1; +code = "lookup ccmp_Other_1 { + @CombiningTopAccents = [acutecomb brevecomb caroncomb circumflexcomb commaturnedabovecomb dieresiscomb dotaccentcomb gravecomb hungarumlautcomb macroncomb ringcomb tildecomb]; + @CombiningNonTopAccents = [cedillacomb ogonekcomb]; + sub [i j]' @CombiningTopAccents by [idotless jdotless]; + sub [i j]' @CombiningNonTopAccents @CombiningTopAccents by [idotless jdotless]; +} ccmp_Other_1; +"; +tag = ccmp; +}, +{ +automatic = 1; +code = "lookup locl_latn_0 { + script latn; + language AZE; + sub i by idotaccent; + language CRT; + sub i by idotaccent; + language KAZ; + sub i by idotaccent; + language TAT; + sub i by idotaccent; + language TRK; + sub i by idotaccent; +} locl_latn_0; + +lookup locl_latn_1 { + script latn; + language ROM; + sub Scedilla by Scommaaccent; + sub scedilla by scommaaccent; + language MOL; + sub Scedilla by Scommaaccent; + sub scedilla by scommaaccent; +} locl_latn_1; + +lookup locl_latn_2 { + script latn; + language CAT; + sub l periodcentered' l by periodcentered.loclCAT; + sub L periodcentered' L by periodcentered.loclCAT.case; +} locl_latn_2; +"; +tag = locl; +}, +{ +automatic = 1; +code = "sub [zero one two three four five six seven eight nine] [A a]' by ordfeminine; +sub [zero one two three four five six seven eight nine] [O o]' by ordmasculine; +"; +tag = ordn; +}, +{ +automatic = 1; +code = "sub periodcentered.loclCAT by periodcentered.loclCAT.case; +"; +tag = case; +} +); +fontMaster = ( +{ +id = m01; +metricValues = ( +{ +over = 16; +pos = 800; +}, +{ +over = 16; +pos = 700; +}, +{ +over = 16; +pos = 500; +}, +{ +over = -16; +}, +{ +over = -16; +pos = -200; +}, +{ +over = -16; +} +); +name = Regular; +} +); +glyphs = ( +{ +glyphname = idotaccent; +lastChange = "2022-03-04 12:31:03 +0000"; +layers = ( +{ +layerId = m01; +width = 600; +} +); +}, +{ +color = 10; +glyphname = .notdef; +lastChange = "2022-03-04 12:31:22 +0000"; +layers = ( +{ +layerId = m01; +width = 600; +} +); +}, +{ +glyphname = periodcentered.loclCAT; +lastChange = "2022-03-04 12:31:03 +0000"; +layers = ( +{ +layerId = m01; +width = 600; +} +); +}, +{ +glyphname = periodcentered.loclCAT.case; +lastChange = "2022-03-04 12:31:03 +0000"; +layers = ( +{ +layerId = m01; +width = 600; +} +); +}, +{ +glyphname = caroncomb.alt; +lastChange = "2022-03-04 12:31:03 +0000"; +layers = ( +{ +layerId = m01; +width = 600; +} +); +} +); +metrics = ( +{ +type = ascender; +}, +{ +type = "cap height"; +}, +{ +type = "x-height"; +}, +{ +type = baseline; +}, +{ +type = descender; +}, +{ +type = "italic angle"; +} +); +unitsPerEm = 1000; +versionMajor = 1; +versionMinor = 0; +} diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.stub.nam b/GF_glyphsets/Latin/definitions/GF_Latin_Core.stub.nam similarity index 100% rename from GF_glyphsets/Latin/nam/GF_Latin_Core.stub.nam rename to GF_glyphsets/Latin/definitions/GF_Latin_Core.stub.nam diff --git a/GF_glyphsets/Latin/languages/GF_Latin_Core.yaml b/GF_glyphsets/Latin/definitions/GF_Latin_Core.yaml similarity index 100% rename from GF_glyphsets/Latin/languages/GF_Latin_Core.yaml rename to GF_glyphsets/Latin/definitions/GF_Latin_Core.yaml From 600b84772eb55d90ff65c27dde7616e029ad856d Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 13 Oct 2023 12:49:19 +0200 Subject: [PATCH 33/59] Leave folder structure intact, only delete files --- GF_glyphsets/update-gs.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GF_glyphsets/update-gs.sh b/GF_glyphsets/update-gs.sh index 4feb4d3225..8873efe3ca 100644 --- a/GF_glyphsets/update-gs.sh +++ b/GF_glyphsets/update-gs.sh @@ -7,7 +7,7 @@ DIR=$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd ) cd $DIR echo "clean-up" -rm -rf ./*/nam ./*/txt ./*/glyphs/*.plist +rm -rf ./*/nam/*.nam ./*/txt/*/*.txt ./*/glyphs/*.plist echo "Updating lists" From 54e581cb6d0d06bb7dbc7958b9d79b89d14dcf99 Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 13 Oct 2023 12:49:27 +0200 Subject: [PATCH 34/59] See previous --- GF_glyphsets/update-gs.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/GF_glyphsets/update-gs.sh b/GF_glyphsets/update-gs.sh index 8873efe3ca..07ed810fab 100644 --- a/GF_glyphsets/update-gs.sh +++ b/GF_glyphsets/update-gs.sh @@ -16,7 +16,6 @@ scripts=$(ls -d */ | cut -f1 -d'/') for script in $scripts do echo $script - mkdir $script/nam $script/txt $script/txt/prod-names $script/txt/nice-names sets=$(ls ./$script/glyphs/*.glyphs | xargs -n 1 basename | sed -e 's/\.glyphs$//') if [[ $sets == *GF_Latin_Core* ]] then From b02ea9a45dab09d9843d274721cdc36bb5cf7cf4 Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 13 Oct 2023 15:52:59 +0200 Subject: [PATCH 35/59] Overhaul complete for now --- .../Latin/definitions/GF_Latin_Core.stub.nam | 1 + .../Latin/glyphs/GF_Latin_Core.glyphs | 4051 ++++------------- GF_glyphsets/Latin/nam/GF_Latin_Core.nam | 1 + .../Latin/txt/nice-names/GF_Latin_Core.txt | 503 +- .../Latin/txt/prod-names/GF_Latin_Core.txt | 503 +- GF_glyphsets/update-gs.sh | 6 + README.md | 20 +- scripts/assemble_charactersets.py | 87 +- 8 files changed, 1406 insertions(+), 3766 deletions(-) diff --git a/GF_glyphsets/Latin/definitions/GF_Latin_Core.stub.nam b/GF_glyphsets/Latin/definitions/GF_Latin_Core.stub.nam index 134441cede..98595a9fd7 100644 --- a/GF_glyphsets/Latin/definitions/GF_Latin_Core.stub.nam +++ b/GF_glyphsets/Latin/definitions/GF_Latin_Core.stub.nam @@ -63,6 +63,7 @@ 0x00BF INVERTED QUESTION MARK 0x00D7 MULTIPLICATION SIGN 0x00F7 DIVISION SIGN +0x0237 LATIN SMALL LETTER DOTLESS J 0x02C6 MODIFIER LETTER CIRCUMFLEX ACCENT 0x02C7 CARON 0x02D8 BREVE diff --git a/GF_glyphsets/Latin/glyphs/GF_Latin_Core.glyphs b/GF_glyphsets/Latin/glyphs/GF_Latin_Core.glyphs index 36969c4c2b..85ce86c492 100644 --- a/GF_glyphsets/Latin/glyphs/GF_Latin_Core.glyphs +++ b/GF_glyphsets/Latin/glyphs/GF_Latin_Core.glyphs @@ -1,5 +1,5 @@ { -.appVersion = "3139"; +.appVersion = "3151"; .formatVersion = 3; date = "2021-10-28 12:22:31 +0000"; familyName = "GF Latin Core"; @@ -92,6 +92,10 @@ tag = case; ); fontMaster = ( { +axesValues = ( +100, +100 +); id = m01; metricValues = ( { @@ -122,19 +126,7 @@ name = Regular; ); glyphs = ( { -color = 10; -glyphname = A; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 65; -}, -{ -glyphname = Aacute; +glyphname = idotaccent; lastChange = "2022-03-04 12:31:03 +0000"; layers = ( { @@ -142,21 +134,20 @@ layerId = m01; width = 600; } ); -unicode = 193; }, { -glyphname = Abreve; -lastChange = "2022-03-04 12:31:03 +0000"; +color = 10; +glyphname = .notdef; +lastChange = "2022-03-04 12:31:22 +0000"; layers = ( { layerId = m01; width = 600; } ); -unicode = 258; }, { -glyphname = Acircumflex; +glyphname = periodcentered.loclCAT; lastChange = "2022-03-04 12:31:03 +0000"; layers = ( { @@ -164,10 +155,9 @@ layerId = m01; width = 600; } ); -unicode = 194; }, { -glyphname = Adieresis; +glyphname = periodcentered.loclCAT.case; lastChange = "2022-03-04 12:31:03 +0000"; layers = ( { @@ -175,10 +165,9 @@ layerId = m01; width = 600; } ); -unicode = 196; }, { -glyphname = Agrave; +glyphname = caroncomb.alt; lastChange = "2022-03-04 12:31:03 +0000"; layers = ( { @@ -186,3738 +175,1328 @@ layerId = m01; width = 600; } ); -unicode = 192; }, { -glyphname = Amacron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = space; +unicode = 32; +}, { -layerId = m01; -width = 600; -} -); -unicode = 256; +glyphname = exclam; +unicode = 33; }, { -glyphname = Aogonek; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = quotedbl; +unicode = 34; +}, { -layerId = m01; -width = 600; -} -); -unicode = 260; +glyphname = numbersign; +unicode = 35; }, { -glyphname = Aring; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = dollar; +unicode = 36; +}, { -layerId = m01; -width = 600; -} -); -unicode = 197; +glyphname = percent; +unicode = 37; }, { -glyphname = Atilde; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = ampersand; +unicode = 38; +}, { -layerId = m01; -width = 600; -} -); -unicode = 195; +glyphname = quotesingle; +unicode = 39; }, { -glyphname = AE; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = parenleft; +unicode = 40; +}, { -layerId = m01; -width = 600; -} -); -unicode = 198; +glyphname = parenright; +unicode = 41; }, { -color = 10; -glyphname = B; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = asterisk; +unicode = 42; +}, { -layerId = m01; -width = 600; -} -); -unicode = 66; +glyphname = plus; +unicode = 43; }, { -color = 10; -glyphname = C; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = comma; +unicode = 44; +}, { -layerId = m01; -width = 600; -} -); -unicode = 67; +glyphname = hyphen; +unicode = 45; }, { -glyphname = Cacute; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = period; +unicode = 46; +}, { -layerId = m01; -width = 600; -} -); -unicode = 262; +glyphname = slash; +unicode = 47; }, { -glyphname = Ccaron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = zero; +unicode = 48; +}, { -layerId = m01; -width = 600; -} -); -unicode = 268; +glyphname = one; +unicode = 49; }, { -glyphname = Ccedilla; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = two; +unicode = 50; +}, { -layerId = m01; -width = 600; -} -); -unicode = 199; +glyphname = three; +unicode = 51; }, { -glyphname = Cdotaccent; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = four; +unicode = 52; +}, { -layerId = m01; -width = 600; -} -); -unicode = 266; +glyphname = five; +unicode = 53; }, { -color = 10; -glyphname = D; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = six; +unicode = 54; +}, { -layerId = m01; -width = 600; -} -); -unicode = 68; +glyphname = seven; +unicode = 55; }, { -glyphname = Eth; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = eight; +unicode = 56; +}, { -layerId = m01; -width = 600; -} -); -unicode = 208; +glyphname = nine; +unicode = 57; }, { -glyphname = Dcaron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = colon; +unicode = 58; +}, { -layerId = m01; -width = 600; -} -); -unicode = 270; +glyphname = semicolon; +unicode = 59; }, { -glyphname = Dcroat; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = less; +unicode = 60; +}, { -layerId = m01; -width = 600; -} -); -unicode = 272; +glyphname = equal; +unicode = 61; }, { -color = 10; -glyphname = E; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = greater; +unicode = 62; +}, { -layerId = m01; -width = 600; -} -); -unicode = 69; +glyphname = question; +unicode = 63; }, { -glyphname = Eacute; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = at; +unicode = 64; +}, { -layerId = m01; -width = 600; -} -); -unicode = 201; +glyphname = A; +unicode = 65; }, { -glyphname = Ecaron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = B; +unicode = 66; +}, { -layerId = m01; -width = 600; -} -); -unicode = 282; +glyphname = C; +unicode = 67; }, { -glyphname = Ecircumflex; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = D; +unicode = 68; +}, { -layerId = m01; -width = 600; -} -); -unicode = 202; +glyphname = E; +unicode = 69; }, { -glyphname = Edieresis; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = F; +unicode = 70; +}, { -layerId = m01; -width = 600; -} -); -unicode = 203; +glyphname = G; +unicode = 71; }, { -glyphname = Edotaccent; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = H; +unicode = 72; +}, { -layerId = m01; -width = 600; -} -); -unicode = 278; +glyphname = I; +unicode = 73; }, { -glyphname = Egrave; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = J; +unicode = 74; +}, { -layerId = m01; -width = 600; -} -); -unicode = 200; +glyphname = K; +unicode = 75; }, { -glyphname = Emacron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = L; +unicode = 76; +}, { -layerId = m01; -width = 600; -} -); -unicode = 274; +glyphname = M; +unicode = 77; }, { -glyphname = Eogonek; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = N; +unicode = 78; +}, { -layerId = m01; -width = 600; -} -); -unicode = 280; +glyphname = O; +unicode = 79; }, { -color = 10; -glyphname = F; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = P; +unicode = 80; +}, { -layerId = m01; -width = 600; -} -); -unicode = 70; +glyphname = Q; +unicode = 81; }, { -color = 10; -glyphname = G; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = R; +unicode = 82; +}, { -layerId = m01; -width = 600; -} -); -unicode = 71; +glyphname = S; +unicode = 83; }, { -glyphname = Gbreve; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = T; +unicode = 84; +}, { -layerId = m01; -width = 600; -} -); -unicode = 286; +glyphname = U; +unicode = 85; }, { -glyphname = Gcommaaccent; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = V; +unicode = 86; +}, { -layerId = m01; -width = 600; -} -); -unicode = 290; +glyphname = W; +unicode = 87; }, { -glyphname = Gdotaccent; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = X; +unicode = 88; +}, { -layerId = m01; -width = 600; -} -); -unicode = 288; +glyphname = Y; +unicode = 89; }, { -color = 10; -glyphname = H; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = Z; +unicode = 90; +}, { -layerId = m01; -width = 600; -} -); -unicode = 72; +glyphname = bracketleft; +unicode = 91; }, { -glyphname = Hbar; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = backslash; +unicode = 92; +}, { -layerId = m01; -width = 600; -} -); -unicode = 294; +glyphname = bracketright; +unicode = 93; }, { -color = 10; -glyphname = I; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = asciicircum; +unicode = 94; +}, { -layerId = m01; -width = 600; -} -); -unicode = 73; +glyphname = underscore; +unicode = 95; }, { -glyphname = IJ; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = grave; +unicode = 96; +}, { -layerId = m01; -width = 1200; -} -); -unicode = 306; +glyphname = a; +unicode = 97; }, { -glyphname = Iacute; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = b; +unicode = 98; +}, { -layerId = m01; -width = 600; -} -); -unicode = 205; +glyphname = c; +unicode = 99; }, { -glyphname = Icircumflex; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = d; +unicode = 100; +}, { -layerId = m01; -width = 600; -} -); -unicode = 206; +glyphname = e; +unicode = 101; }, { -glyphname = Idieresis; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = f; +unicode = 102; +}, { -layerId = m01; -width = 600; -} -); -unicode = 207; +glyphname = g; +unicode = 103; }, { -glyphname = Idotaccent; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = h; +unicode = 104; +}, { -layerId = m01; -width = 600; -} -); -unicode = 304; +glyphname = i; +unicode = 105; }, { -glyphname = Igrave; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = j; +unicode = 106; +}, { -layerId = m01; -width = 600; -} -); -unicode = 204; +glyphname = k; +unicode = 107; }, { -glyphname = Imacron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = l; +unicode = 108; +}, { -layerId = m01; -width = 600; -} -); -unicode = 298; +glyphname = m; +unicode = 109; }, { -glyphname = Iogonek; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = n; +unicode = 110; +}, { -layerId = m01; -width = 600; -} -); -unicode = 302; +glyphname = o; +unicode = 111; }, { -color = 10; -glyphname = J; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = p; +unicode = 112; +}, { -layerId = m01; -width = 600; -} -); -unicode = 74; +glyphname = q; +unicode = 113; }, { -color = 10; -glyphname = K; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = r; +unicode = 114; +}, { -layerId = m01; -width = 600; -} -); -unicode = 75; +glyphname = s; +unicode = 115; }, { -glyphname = Kcommaaccent; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = t; +unicode = 116; +}, { -layerId = m01; -width = 600; -} -); -unicode = 310; +glyphname = u; +unicode = 117; }, { -color = 10; -glyphname = L; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = v; +unicode = 118; +}, { -layerId = m01; -width = 600; -} -); -unicode = 76; +glyphname = w; +unicode = 119; }, { -glyphname = Lacute; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = x; +unicode = 120; +}, { -layerId = m01; -width = 600; -} -); -unicode = 313; +glyphname = y; +unicode = 121; }, { -glyphname = Lcaron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = z; +unicode = 122; +}, { -layerId = m01; -width = 600; -} -); -unicode = 317; +glyphname = braceleft; +unicode = 123; }, { -glyphname = Lcommaaccent; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = bar; +unicode = 124; +}, { -layerId = m01; -width = 600; -} -); -unicode = 315; +glyphname = braceright; +unicode = 125; }, { -glyphname = Lslash; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = asciitilde; +unicode = 126; +}, { -layerId = m01; -width = 600; -} -); -unicode = 321; +glyphname = nbspace; +unicode = 160; }, { -color = 10; -glyphname = M; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = exclamdown; +unicode = 161; +}, { -layerId = m01; -width = 600; -} -); -unicode = 77; +glyphname = cent; +unicode = 162; }, { -color = 10; -glyphname = N; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = sterling; +unicode = 163; +}, { -layerId = m01; -width = 600; -} -); -unicode = 78; +glyphname = yen; +unicode = 165; }, { -glyphname = Nacute; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = section; +unicode = 167; +}, { -layerId = m01; -width = 600; -} -); -unicode = 323; +glyphname = dieresis; +unicode = 168; }, { -glyphname = Ncaron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = copyright; +unicode = 169; +}, { -layerId = m01; -width = 600; -} -); -unicode = 327; +glyphname = ordfeminine; +unicode = 170; }, { -glyphname = Ncommaaccent; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = guillemetleft; +unicode = 171; +}, { -layerId = m01; -width = 600; -} -); -unicode = 325; +glyphname = registered; +unicode = 174; }, { -glyphname = Ntilde; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = macron; +unicode = 175; +}, { -layerId = m01; -width = 600; -} -); -unicode = 209; +glyphname = degree; +unicode = 176; }, { -glyphname = Eng; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = acute; +unicode = 180; +}, { -layerId = m01; -width = 600; -} -); -unicode = 330; +glyphname = paragraph; +unicode = 182; }, { -color = 10; -glyphname = O; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = periodcentered; +unicode = 183; +}, { -layerId = m01; -width = 600; -} -); -unicode = 79; +glyphname = cedilla; +unicode = 184; }, { -glyphname = Oacute; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 211; +glyphname = ordmasculine; +unicode = 186; }, { -glyphname = Ocircumflex; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 212; +glyphname = guillemetright; +unicode = 187; }, { -glyphname = Odieresis; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = questiondown; +unicode = 191; +}, { -layerId = m01; -width = 600; -} -); -unicode = 214; +glyphname = Agrave; +unicode = 192; }, { -glyphname = Ograve; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = Aacute; +unicode = 193; +}, { -layerId = m01; -width = 600; -} -); -unicode = 210; +glyphname = Acircumflex; +unicode = 194; }, { -glyphname = Ohungarumlaut; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = Atilde; +unicode = 195; +}, { -layerId = m01; -width = 600; -} -); -unicode = 336; +glyphname = Adieresis; +unicode = 196; }, { -glyphname = Omacron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = Aring; +unicode = 197; +}, { -layerId = m01; -width = 600; -} -); -unicode = 332; +glyphname = AE; +unicode = 198; }, { -glyphname = Oslash; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = Ccedilla; +unicode = 199; +}, { -layerId = m01; -width = 600; -} -); -unicode = 216; +glyphname = Egrave; +unicode = 200; }, { -glyphname = Otilde; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = Eacute; +unicode = 201; +}, { -layerId = m01; -width = 600; -} -); -unicode = 213; +glyphname = Ecircumflex; +unicode = 202; }, { -glyphname = OE; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = Edieresis; +unicode = 203; +}, { -layerId = m01; -width = 600; -} -); -unicode = 338; +glyphname = Igrave; +unicode = 204; }, { -color = 10; -glyphname = P; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = Iacute; +unicode = 205; +}, { -layerId = m01; -width = 600; -} -); -unicode = 80; +glyphname = Icircumflex; +unicode = 206; }, { -glyphname = Thorn; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = Idieresis; +unicode = 207; +}, { -layerId = m01; -width = 600; -} -); -unicode = 222; +glyphname = Eth; +unicode = 208; }, { -color = 10; -glyphname = Q; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = Ntilde; +unicode = 209; +}, { -layerId = m01; -width = 600; -} -); -unicode = 81; +glyphname = Ograve; +unicode = 210; }, { -color = 10; -glyphname = R; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = Oacute; +unicode = 211; +}, { -layerId = m01; -width = 600; -} -); -unicode = 82; +glyphname = Ocircumflex; +unicode = 212; }, { -glyphname = Racute; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = Otilde; +unicode = 213; +}, { -layerId = m01; -width = 600; -} -); -unicode = 340; +glyphname = Odieresis; +unicode = 214; }, { -glyphname = Rcaron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = multiply; +unicode = 215; +}, { -layerId = m01; -width = 600; -} -); -unicode = 344; +glyphname = Oslash; +unicode = 216; }, { -glyphname = Rcommaaccent; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = Ugrave; +unicode = 217; +}, { -layerId = m01; -width = 600; -} -); -unicode = 342; +glyphname = Uacute; +unicode = 218; }, { -color = 10; -glyphname = S; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = Ucircumflex; +unicode = 219; +}, { -layerId = m01; -width = 600; -} -); -unicode = 83; +glyphname = Udieresis; +unicode = 220; }, { -glyphname = Sacute; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = Yacute; +unicode = 221; +}, { -layerId = m01; -width = 600; -} -); -unicode = 346; +glyphname = Thorn; +unicode = 222; }, { -glyphname = Scaron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = germandbls; +unicode = 223; +}, { -layerId = m01; -width = 600; -} -); -unicode = 352; +glyphname = agrave; +unicode = 224; }, { -glyphname = Scedilla; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = aacute; +unicode = 225; +}, { -layerId = m01; -width = 600; -} -); -unicode = 350; +glyphname = acircumflex; +unicode = 226; }, { -glyphname = Scommaaccent; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = atilde; +unicode = 227; +}, { -layerId = m01; -width = 600; -} -); -unicode = 536; +glyphname = adieresis; +unicode = 228; }, { -glyphname = Germandbls; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = aring; +unicode = 229; +}, { -layerId = m01; -width = 600; -} -); -unicode = 7838; +glyphname = ae; +unicode = 230; }, { -color = 10; -glyphname = T; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = ccedilla; +unicode = 231; +}, { -layerId = m01; -width = 600; -} -); -unicode = 84; +glyphname = egrave; +unicode = 232; }, { -glyphname = Tcaron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = eacute; +unicode = 233; +}, { -layerId = m01; -width = 600; -} -); -unicode = 356; +glyphname = ecircumflex; +unicode = 234; }, { -glyphname = Tcommaaccent; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = edieresis; +unicode = 235; +}, { -layerId = m01; -width = 600; -} -); -unicode = 538; +glyphname = igrave; +unicode = 236; }, { -color = 10; -glyphname = U; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = iacute; +unicode = 237; +}, { -layerId = m01; -width = 600; -} -); -unicode = 85; +glyphname = icircumflex; +unicode = 238; }, { -glyphname = Uacute; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = idieresis; +unicode = 239; +}, { -layerId = m01; -width = 600; -} -); -unicode = 218; +glyphname = eth; +unicode = 240; }, { -glyphname = Ubreve; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = ntilde; +unicode = 241; +}, { -layerId = m01; -width = 600; -} -); -unicode = 364; +glyphname = ograve; +unicode = 242; }, { -glyphname = Ucircumflex; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = oacute; +unicode = 243; +}, { -layerId = m01; -width = 600; -} -); -unicode = 219; +glyphname = ocircumflex; +unicode = 244; }, { -glyphname = Udieresis; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = otilde; +unicode = 245; +}, { -layerId = m01; -width = 600; -} -); -unicode = 220; +glyphname = odieresis; +unicode = 246; }, { -glyphname = Ugrave; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = divide; +unicode = 247; +}, { -layerId = m01; -width = 600; -} -); -unicode = 217; +glyphname = oslash; +unicode = 248; }, { -glyphname = Uhungarumlaut; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = ugrave; +unicode = 249; +}, { -layerId = m01; -width = 600; -} -); -unicode = 368; +glyphname = uacute; +unicode = 250; }, { -glyphname = Umacron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = ucircumflex; +unicode = 251; +}, { -layerId = m01; -width = 600; -} -); -unicode = 362; +glyphname = udieresis; +unicode = 252; }, { -glyphname = Uogonek; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = yacute; +unicode = 253; +}, { -layerId = m01; -width = 600; -} -); -unicode = 370; +glyphname = thorn; +unicode = 254; }, { -glyphname = Uring; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = ydieresis; +unicode = 255; +}, { -layerId = m01; -width = 600; -} -); -unicode = 366; +glyphname = Amacron; +unicode = 256; }, { -color = 10; -glyphname = V; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = amacron; +unicode = 257; +}, { -layerId = m01; -width = 600; -} -); -unicode = 86; +glyphname = Abreve; +unicode = 258; }, { -color = 10; -glyphname = W; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = abreve; +unicode = 259; +}, { -layerId = m01; -width = 600; -} -); -unicode = 87; +glyphname = Aogonek; +unicode = 260; }, { -glyphname = Wacute; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = aogonek; +unicode = 261; +}, { -layerId = m01; -width = 600; -} -); -unicode = 7810; +glyphname = Cacute; +unicode = 262; }, { -glyphname = Wcircumflex; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = cacute; +unicode = 263; +}, { -layerId = m01; -width = 600; -} -); -unicode = 372; +glyphname = Cdotaccent; +unicode = 266; }, { -glyphname = Wdieresis; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = cdotaccent; +unicode = 267; +}, { -layerId = m01; -width = 600; -} -); -unicode = 7812; +glyphname = Ccaron; +unicode = 268; }, { -glyphname = Wgrave; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = ccaron; +unicode = 269; +}, { -layerId = m01; -width = 600; -} -); -unicode = 7808; +glyphname = Dcaron; +unicode = 270; }, { -color = 10; -glyphname = X; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = dcaron; +unicode = 271; +}, { -layerId = m01; -width = 600; -} -); -unicode = 88; +glyphname = Dcroat; +unicode = 272; }, { -color = 10; -glyphname = Y; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = dcroat; +unicode = 273; +}, { -layerId = m01; -width = 600; -} -); -unicode = 89; +glyphname = Emacron; +unicode = 274; }, { -glyphname = Yacute; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = emacron; +unicode = 275; +}, { -layerId = m01; -width = 600; -} -); -unicode = 221; +glyphname = Edotaccent; +unicode = 278; }, { -glyphname = Ycircumflex; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = edotaccent; +unicode = 279; +}, { -layerId = m01; -width = 600; -} -); -unicode = 374; +glyphname = Eogonek; +unicode = 280; }, { -glyphname = Ydieresis; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = eogonek; +unicode = 281; +}, { -layerId = m01; -width = 600; -} -); -unicode = 376; +glyphname = Ecaron; +unicode = 282; }, { -glyphname = Ygrave; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = ecaron; +unicode = 283; +}, { -layerId = m01; -width = 600; -} -); -unicode = 7922; +glyphname = Gbreve; +unicode = 286; }, { -color = 10; -glyphname = Z; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = gbreve; +unicode = 287; +}, { -layerId = m01; -width = 600; -} -); -unicode = 90; +glyphname = Gdotaccent; +unicode = 288; }, { -glyphname = Zacute; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = gdotaccent; +unicode = 289; +}, { -layerId = m01; -width = 600; -} -); -unicode = 377; +glyphname = Gcommaaccent; +unicode = 290; }, { -glyphname = Zcaron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = gcommaaccent; +unicode = 291; +}, { -layerId = m01; -width = 600; -} -); -unicode = 381; +glyphname = Hbar; +unicode = 294; }, { -glyphname = Zdotaccent; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = hbar; +unicode = 295; +}, { -layerId = m01; -width = 600; -} -); -unicode = 379; +glyphname = Itilde; +unicode = 296; }, { -color = 10; -glyphname = a; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = itilde; +unicode = 297; +}, { -layerId = m01; -width = 600; -} -); -unicode = 97; +glyphname = Imacron; +unicode = 298; }, { -glyphname = aacute; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = imacron; +unicode = 299; +}, { -layerId = m01; -width = 600; -} -); -unicode = 225; +glyphname = Iogonek; +unicode = 302; }, { -glyphname = abreve; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = iogonek; +unicode = 303; +}, { -layerId = m01; -width = 600; -} -); -unicode = 259; +glyphname = Idotaccent; +unicode = 304; }, { -glyphname = acircumflex; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = idotless; +unicode = 305; +}, { -layerId = m01; -width = 600; -} -); -unicode = 226; +glyphname = Kcommaaccent; +unicode = 310; }, { -glyphname = adieresis; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = kcommaaccent; +unicode = 311; +}, { -layerId = m01; -width = 600; -} -); -unicode = 228; +glyphname = Lacute; +unicode = 313; }, { -glyphname = agrave; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = lacute; +unicode = 314; +}, { -layerId = m01; -width = 600; -} -); -unicode = 224; +glyphname = Lcommaaccent; +unicode = 315; }, { -glyphname = amacron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = lcommaaccent; +unicode = 316; +}, { -layerId = m01; -width = 600; -} -); -unicode = 257; +glyphname = Lcaron; +unicode = 317; }, { -glyphname = aogonek; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = lcaron; +unicode = 318; +}, { -layerId = m01; -width = 600; -} -); -unicode = 261; +glyphname = Lslash; +unicode = 321; }, { -glyphname = aring; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 229; -}, -{ -glyphname = atilde; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 227; -}, -{ -glyphname = ae; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 230; -}, -{ -color = 10; -glyphname = b; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 98; -}, -{ -color = 10; -glyphname = c; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 99; -}, -{ -glyphname = cacute; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 263; -}, -{ -glyphname = ccaron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 269; -}, -{ -glyphname = ccedilla; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 231; -}, -{ -glyphname = cdotaccent; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 267; -}, -{ -color = 10; -glyphname = d; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 100; -}, -{ -glyphname = eth; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 240; -}, -{ -glyphname = dcaron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 271; -}, -{ -glyphname = dcroat; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 273; -}, -{ -color = 10; -glyphname = e; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 101; -}, -{ -glyphname = eacute; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 233; -}, -{ -glyphname = ecaron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 283; -}, -{ -glyphname = ecircumflex; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 234; -}, -{ -glyphname = edieresis; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 235; -}, -{ -glyphname = edotaccent; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 279; -}, -{ -glyphname = egrave; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 232; -}, -{ -glyphname = emacron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 275; -}, -{ -glyphname = eogonek; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 281; -}, -{ -color = 10; -glyphname = f; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 102; -}, -{ -color = 10; -glyphname = g; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 103; -}, -{ -glyphname = gbreve; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 287; -}, -{ -glyphname = gcommaaccent; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 291; -}, -{ -glyphname = gdotaccent; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 289; -}, -{ -color = 10; -glyphname = h; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 104; -}, -{ -glyphname = hbar; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 295; -}, -{ -color = 10; -glyphname = i; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 105; -}, -{ -glyphname = idotless; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 305; -}, -{ -glyphname = iacute; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 237; -}, -{ -glyphname = icircumflex; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 238; -}, -{ -glyphname = idieresis; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 239; -}, -{ -glyphname = idotaccent; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -}, -{ -glyphname = igrave; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 236; -}, -{ -glyphname = ij; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 1200; -} -); -unicode = 307; -}, -{ -glyphname = imacron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 299; -}, -{ -glyphname = iogonek; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 303; -}, -{ -color = 10; -glyphname = j; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 106; -}, -{ -glyphname = jdotless; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 567; -}, -{ -color = 10; -glyphname = k; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 107; -}, -{ -glyphname = kcommaaccent; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 311; -}, -{ -color = 10; -glyphname = l; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 108; -}, -{ -glyphname = lacute; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 314; -}, -{ -glyphname = lcaron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 318; -}, -{ -glyphname = lcommaaccent; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 316; -}, -{ -glyphname = lslash; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 322; -}, -{ -color = 10; -glyphname = m; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 109; -}, -{ -color = 10; -glyphname = n; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 110; -}, -{ -glyphname = nacute; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 324; -}, -{ -glyphname = ncaron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 328; -}, -{ -glyphname = ncommaaccent; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 326; -}, -{ -glyphname = ntilde; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 241; -}, -{ -glyphname = eng; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 331; -}, -{ -color = 10; -glyphname = o; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 111; -}, -{ -glyphname = oacute; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 243; -}, -{ -glyphname = ocircumflex; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 244; -}, -{ -glyphname = odieresis; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 246; -}, -{ -glyphname = ograve; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 242; -}, -{ -glyphname = ohungarumlaut; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 337; -}, -{ -glyphname = omacron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 333; -}, -{ -glyphname = oslash; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 248; -}, -{ -glyphname = otilde; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 245; -}, -{ -glyphname = oe; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 339; -}, -{ -color = 10; -glyphname = p; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 112; -}, -{ -glyphname = thorn; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 254; -}, -{ -color = 10; -glyphname = q; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 113; -}, -{ -color = 10; -glyphname = r; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 114; -}, -{ -glyphname = racute; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 341; -}, -{ -glyphname = rcaron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 345; -}, -{ -glyphname = rcommaaccent; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 343; -}, -{ -color = 10; -glyphname = s; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 115; -}, -{ -glyphname = sacute; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 347; -}, -{ -glyphname = scaron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 353; -}, -{ -glyphname = scedilla; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 351; -}, -{ -glyphname = scommaaccent; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 537; -}, -{ -glyphname = germandbls; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 223; -}, -{ -color = 10; -glyphname = t; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 116; -}, -{ -glyphname = tcaron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 357; -}, -{ -glyphname = tcommaaccent; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 539; -}, -{ -color = 10; -glyphname = u; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 117; -}, -{ -glyphname = uacute; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 250; -}, -{ -glyphname = ubreve; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 365; -}, -{ -glyphname = ucircumflex; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 251; -}, -{ -glyphname = udieresis; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 252; -}, -{ -glyphname = ugrave; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 249; -}, -{ -glyphname = uhungarumlaut; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 369; -}, -{ -glyphname = umacron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 363; -}, -{ -glyphname = uogonek; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 371; -}, -{ -glyphname = uring; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 367; -}, -{ -color = 10; -glyphname = v; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 118; -}, -{ -color = 10; -glyphname = w; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 119; -}, -{ -glyphname = wacute; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 7811; -}, -{ -glyphname = wcircumflex; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 373; -}, -{ -glyphname = wdieresis; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 7813; -}, -{ -glyphname = wgrave; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 7809; -}, -{ -color = 10; -glyphname = x; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 120; -}, -{ -color = 10; -glyphname = y; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 121; -}, -{ -glyphname = yacute; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 253; -}, -{ -glyphname = ycircumflex; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 375; -}, -{ -glyphname = ydieresis; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 255; -}, -{ -glyphname = ygrave; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 7923; -}, -{ -color = 10; -glyphname = z; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 122; -}, -{ -glyphname = zacute; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 378; -}, -{ -glyphname = zcaron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 382; -}, -{ -glyphname = zdotaccent; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 380; -}, -{ -glyphname = ordfeminine; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 170; -}, -{ -glyphname = ordmasculine; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 186; -}, -{ -color = 10; -glyphname = zero; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 48; -}, -{ -color = 10; -glyphname = one; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 49; -}, -{ -color = 10; -glyphname = two; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 50; -}, -{ -color = 10; -glyphname = three; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 51; -}, -{ -color = 10; -glyphname = four; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 52; -}, -{ -color = 10; -glyphname = five; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 53; -}, -{ -color = 10; -glyphname = six; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 54; -}, -{ -color = 10; -glyphname = seven; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 55; -}, -{ -color = 10; -glyphname = eight; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 56; -}, -{ -color = 10; -glyphname = nine; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 57; -}, -{ -color = 10; -glyphname = .notdef; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -}, -{ -color = 10; -glyphname = space; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 200; -} -); -unicode = 32; -}, -{ -color = 10; -glyphname = nbspace; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 200; -} -); -metricWidth = space; -unicode = 160; -}, -{ -color = 10; -glyphname = period; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 46; -}, -{ -color = 10; -glyphname = comma; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 44; -}, -{ -color = 10; -glyphname = colon; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 58; -}, -{ -color = 10; -glyphname = semicolon; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 59; -}, -{ -color = 10; -glyphname = ellipsis; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 8230; -}, -{ -color = 10; -glyphname = exclam; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 33; -}, -{ -glyphname = exclamdown; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 161; -}, -{ -color = 10; -glyphname = question; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 63; -}, -{ -glyphname = questiondown; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 191; -}, -{ -color = 10; -glyphname = periodcentered; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 183; -}, -{ -color = 10; -glyphname = bullet; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 8226; -}, -{ -color = 10; -glyphname = asterisk; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 42; -}, -{ -color = 10; -glyphname = numbersign; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 35; -}, -{ -color = 10; -glyphname = slash; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 47; -}, -{ -color = 10; -glyphname = backslash; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 92; -}, -{ -glyphname = periodcentered.loclCAT; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -}, -{ -glyphname = periodcentered.loclCAT.case; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -}, -{ -color = 10; -glyphname = hyphen; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 45; -}, -{ -color = 10; -glyphname = endash; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 8211; -}, -{ -color = 10; -glyphname = emdash; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 8212; -}, -{ -color = 10; -glyphname = underscore; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 95; -}, -{ -color = 10; -glyphname = parenleft; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 40; -}, -{ -color = 10; -glyphname = parenright; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 41; -}, -{ -color = 10; -glyphname = braceleft; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 123; -}, -{ -color = 10; -glyphname = braceright; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 125; -}, -{ -color = 10; -glyphname = bracketleft; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 91; -}, -{ -color = 10; -glyphname = bracketright; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 93; -}, -{ -glyphname = quotesinglbase; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 8218; -}, -{ -glyphname = quotedblbase; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 8222; +glyphname = lslash; +unicode = 322; }, { -color = 10; -glyphname = quotedblleft; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 8220; +glyphname = Nacute; +unicode = 323; }, { -color = 10; -glyphname = quotedblright; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 8221; +glyphname = nacute; +unicode = 324; }, { -color = 10; -glyphname = quoteleft; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 8216; +glyphname = Ncommaaccent; +unicode = 325; }, { -color = 10; -glyphname = quoteright; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 8217; +glyphname = ncommaaccent; +unicode = 326; }, { -glyphname = guillemetleft; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 171; +glyphname = Ncaron; +unicode = 327; }, { -glyphname = guillemetright; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 187; +glyphname = ncaron; +unicode = 328; }, { -glyphname = guilsinglleft; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 8249; +glyphname = Ohungarumlaut; +unicode = 336; }, { -glyphname = guilsinglright; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 8250; +glyphname = ohungarumlaut; +unicode = 337; }, { -color = 10; -glyphname = quotedbl; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 34; +glyphname = OE; +unicode = 338; }, { -color = 10; -glyphname = quotesingle; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 39; +glyphname = oe; +unicode = 339; }, { -color = 10; -glyphname = at; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 64; +glyphname = Racute; +unicode = 340; }, { -color = 10; -glyphname = ampersand; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 38; +glyphname = racute; +unicode = 341; }, { -glyphname = paragraph; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 182; +glyphname = Rcaron; +unicode = 344; }, { -glyphname = section; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 167; +glyphname = rcaron; +unicode = 345; }, { -color = 10; -glyphname = copyright; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 169; +glyphname = Sacute; +unicode = 346; }, { -color = 10; -glyphname = registered; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 174; +glyphname = sacute; +unicode = 347; }, { -color = 10; -glyphname = trademark; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 1200; -} -); -unicode = 8482; +glyphname = Scedilla; +unicode = 350; }, { -color = 10; -glyphname = degree; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 176; +glyphname = scedilla; +unicode = 351; }, { -color = 10; -glyphname = bar; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 124; +glyphname = Scaron; +unicode = 352; }, { -color = 10; -glyphname = cent; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 162; +glyphname = scaron; +unicode = 353; }, { -color = 10; -glyphname = dollar; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 36; +glyphname = Tcaron; +unicode = 356; }, { -color = 10; -glyphname = euro; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 8364; +glyphname = tcaron; +unicode = 357; }, { -color = 10; -glyphname = sterling; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = Utilde; +unicode = 360; +}, { -layerId = m01; -width = 600; -} -); -unicode = 163; +glyphname = utilde; +unicode = 361; }, { -color = 10; -glyphname = yen; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = Umacron; +unicode = 362; +}, { -layerId = m01; -width = 600; -} -); -unicode = 165; +glyphname = umacron; +unicode = 363; }, { -color = 10; -glyphname = plus; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = Uring; +unicode = 366; +}, { -layerId = m01; -width = 600; -} -); -unicode = 43; +glyphname = uring; +unicode = 367; }, { -color = 10; -glyphname = minus; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = Uhungarumlaut; +unicode = 368; +}, { -layerId = m01; -width = 600; -} -); -unicode = 8722; +glyphname = uhungarumlaut; +unicode = 369; }, { -color = 10; -glyphname = multiply; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = Uogonek; +unicode = 370; +}, { -layerId = m01; -width = 600; -} -); -unicode = 215; +glyphname = uogonek; +unicode = 371; }, { -color = 10; -glyphname = divide; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = Wcircumflex; +unicode = 372; +}, { -layerId = m01; -width = 600; -} -); -unicode = 247; +glyphname = wcircumflex; +unicode = 373; }, { -color = 10; -glyphname = equal; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = Ycircumflex; +unicode = 374; +}, { -layerId = m01; -width = 600; -} -); -unicode = 61; +glyphname = ycircumflex; +unicode = 375; }, { -color = 10; -glyphname = greater; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = Ydieresis; +unicode = 376; +}, { -layerId = m01; -width = 600; -} -); -unicode = 62; +glyphname = Zacute; +unicode = 377; }, { -color = 10; -glyphname = less; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = zacute; +unicode = 378; +}, { -layerId = m01; -width = 600; -} -); -unicode = 60; +glyphname = Zdotaccent; +unicode = 379; }, { -color = 10; -glyphname = asciitilde; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = zdotaccent; +unicode = 380; +}, { -layerId = m01; -width = 600; -} -); -unicode = 126; +glyphname = Zcaron; +unicode = 381; }, { -color = 10; -glyphname = asciicircum; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = zcaron; +unicode = 382; +}, { -layerId = m01; -width = 600; -} -); -unicode = 94; +glyphname = Scommaaccent; +unicode = 536; }, { -color = 10; -glyphname = percent; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = scommaaccent; +unicode = 537; +}, { -layerId = m01; -width = 600; -} -); -unicode = 37; +glyphname = Tcommaaccent; +unicode = 538; }, { -glyphname = dieresiscomb; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = tcommaaccent; +unicode = 539; +}, { -layerId = m01; -width = 600; -} -); -unicode = 776; +glyphname = jdotless; +unicode = 567; }, { -glyphname = dotaccentcomb; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = apostrophemod; +unicode = 700; +}, { -layerId = m01; -width = 600; -} -); -unicode = 775; +glyphname = circumflex; +unicode = 710; }, { -glyphname = gravecomb; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = caron; +unicode = 711; +}, { -layerId = m01; -width = 600; -} -); -unicode = 768; +glyphname = breve; +unicode = 728; }, { -glyphname = acutecomb; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = dotaccent; +unicode = 729; +}, { -layerId = m01; -width = 600; -} -); -unicode = 769; +glyphname = ring; +unicode = 730; }, { -glyphname = hungarumlautcomb; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = ogonek; +unicode = 731; +}, { -layerId = m01; -width = 600; -} -); -unicode = 779; +glyphname = tilde; +unicode = 732; }, { -glyphname = caroncomb.alt; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = hungarumlaut; +unicode = 733; +}, { -layerId = m01; -width = 600; -} -); +glyphname = gravecomb; +unicode = 768; }, { -glyphname = circumflexcomb; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = acutecomb; +unicode = 769; +}, { -layerId = m01; -width = 600; -} -); +glyphname = circumflexcomb; unicode = 770; }, { -glyphname = caroncomb; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = tildecomb; +unicode = 771; +}, { -layerId = m01; -width = 600; -} -); -unicode = 780; +glyphname = macroncomb; +unicode = 772; }, { glyphname = brevecomb; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 774; }, { -glyphname = ringcomb; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 778; +glyphname = dotaccentcomb; +unicode = 775; }, { -glyphname = tildecomb; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = dieresiscomb; +unicode = 776; +}, { -layerId = m01; -width = 600; -} -); -unicode = 771; +glyphname = ringcomb; +unicode = 778; }, { -glyphname = macroncomb; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = hungarumlautcomb; +unicode = 779; +}, { -layerId = m01; -width = 600; -} -); -unicode = 772; +glyphname = caroncomb; +unicode = 780; }, { glyphname = commaturnedabovecomb; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 786; }, { glyphname = commaaccentcomb; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 806; }, { glyphname = cedillacomb; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 807; }, { glyphname = ogonekcomb; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 808; }, { -glyphname = dieresis; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = Wgrave; +unicode = 7808; +}, { -layerId = m01; -width = 600; -} -); -unicode = 168; +glyphname = wgrave; +unicode = 7809; }, { -glyphname = dotaccent; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = Wacute; +unicode = 7810; +}, { -layerId = m01; -width = 600; -} -); -unicode = 729; +glyphname = wacute; +unicode = 7811; }, { -color = 10; -glyphname = grave; -lastChange = "2022-03-04 12:31:22 +0000"; -layers = ( +glyphname = Wdieresis; +unicode = 7812; +}, { -layerId = m01; -width = 600; -} -); -unicode = 96; +glyphname = wdieresis; +unicode = 7813; }, { -glyphname = acute; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = Germandbls; +unicode = 7838; +}, { -layerId = m01; -width = 600; -} -); -unicode = 180; +glyphname = Etilde; +unicode = 7868; }, { -glyphname = hungarumlaut; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = etilde; +unicode = 7869; +}, { -layerId = m01; -width = 600; -} -); -unicode = 733; +glyphname = Ygrave; +unicode = 7922; }, { -glyphname = circumflex; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = ygrave; +unicode = 7923; +}, { -layerId = m01; -width = 600; -} -); -unicode = 710; +glyphname = Ytilde; +unicode = 7928; }, { -glyphname = caron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = ytilde; +unicode = 7929; +}, { -layerId = m01; -width = 600; -} -); -unicode = 711; +glyphname = endash; +unicode = 8211; }, { -glyphname = breve; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = emdash; +unicode = 8212; +}, { -layerId = m01; -width = 600; -} -); -unicode = 728; +glyphname = quoteleft; +unicode = 8216; }, { -glyphname = ring; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = quoteright; +unicode = 8217; +}, { -layerId = m01; -width = 600; -} -); -unicode = 730; +glyphname = quotesinglbase; +unicode = 8218; }, { -glyphname = tilde; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = quotedblleft; +unicode = 8220; +}, { -layerId = m01; -width = 600; -} -); -unicode = 732; +glyphname = quotedblright; +unicode = 8221; }, { -glyphname = macron; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = quotedblbase; +unicode = 8222; +}, { -layerId = m01; -width = 600; -} -); -unicode = 175; +glyphname = bullet; +unicode = 8226; }, { -glyphname = cedilla; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = ellipsis; +unicode = 8230; +}, { -layerId = m01; -width = 600; -} -); -unicode = 184; +glyphname = guilsinglleft; +unicode = 8249; }, { -glyphname = ogonek; -lastChange = "2022-03-04 12:31:03 +0000"; -layers = ( +glyphname = guilsinglright; +unicode = 8250; +}, { -layerId = m01; -width = 600; +glyphname = euro; +unicode = 8364; +}, +{ +glyphname = trademark; +unicode = 8482; +}, +{ +glyphname = minus; +unicode = 8722; } ); -unicode = 731; -} +instances = ( ); +kerningLTR = { +}; metrics = ( { type = ascender; @@ -3938,6 +1517,8 @@ type = descender; type = "italic angle"; } ); +stems = ( +); unitsPerEm = 1000; versionMajor = 1; versionMinor = 0; diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam index 5efe0f04ed..6f567715e0 100644 --- a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam +++ b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam @@ -274,6 +274,7 @@ 0x0219 LATIN SMALL LETTER S WITH COMMA BELOW 0x021A LATIN CAPITAL LETTER T WITH COMMA BELOW 0x021B LATIN SMALL LETTER T WITH COMMA BELOW +0x0237 LATIN SMALL LETTER DOTLESS J 0x02BC MODIFIER LETTER APOSTROPHE 0x02C6 MODIFIER LETTER CIRCUMFLEX ACCENT 0x02C7 CARON diff --git a/GF_glyphsets/Latin/txt/nice-names/GF_Latin_Core.txt b/GF_glyphsets/Latin/txt/nice-names/GF_Latin_Core.txt index 2d573797ad..35ccd773bf 100644 --- a/GF_glyphsets/Latin/txt/nice-names/GF_Latin_Core.txt +++ b/GF_glyphsets/Latin/txt/nice-names/GF_Latin_Core.txt @@ -1,3 +1,19 @@ +space +exclam +quotedbl +numbersign +dollar +percent +ampersand +quotesingle +parenleft +parenright +asterisk +plus +comma +hyphen +period +slash zero one two @@ -8,328 +24,311 @@ six seven eight nine -space -nbspace -period colon -ellipsis -exclam -asterisk -numbersign -slash -backslash -hyphen -parenleft -parenright -braceleft -braceright -bracketleft -bracketright -quotedblleft -quotedblright -quoteleft -quoteright -guillemetleft -guillemetright -quotedbl -quotesingle -bar -plus -multiply -divide +semicolon +less equal greater -less -percent -dieresiscomb -gravecomb -acutecomb -hungarumlautcomb -macroncomb -dotaccent -degree +question +at A -Aacute -Abreve -Acircumflex -Adieresis -Agrave -Amacron -Aogonek -Aring -Atilde -AE B C -Cacute -Ccaron -Ccedilla -Cdotaccent D -Eth -Dcaron -Dcroat E -Eacute -Ecaron -Ecircumflex -Edieresis -Edotaccent -Egrave -Emacron -Eogonek F G -Gbreve -Gcommaaccent -Gdotaccent H -Hbar I -IJ -Iacute -Icircumflex -Idieresis -Idotaccent -Igrave -Imacron -Iogonek J K -Kcommaaccent L -Lacute -Lcaron -Lcommaaccent -Lslash M N -Nacute -Ncaron -Ncommaaccent -Ntilde -Eng O -Oacute -Ocircumflex -Odieresis -Ograve -Ohungarumlaut -Omacron -Oslash -Otilde -OE P -Thorn Q R -Racute -Rcaron -Rcommaaccent S -Sacute -Scaron -Scedilla -Scommaaccent -Germandbls T -Tcaron -Tcommaaccent U -Uacute -Ubreve -Ucircumflex -Udieresis -Ugrave -Uhungarumlaut -Umacron -Uogonek -Uring V W -Wacute -Wcircumflex -Wdieresis -Wgrave X Y -Yacute -Ycircumflex -Ydieresis -Ygrave Z -Zacute -Zcaron -Zdotaccent +bracketleft +backslash +bracketright +asciicircum +underscore +grave a +b +c +d +e +f +g +h +i +j +k +l +m +n +o +p +q +r +s +t +u +v +w +x +y +z +braceleft +bar +braceright +asciitilde +nbspace +exclamdown +cent +sterling +yen +section +dieresis +copyright +ordfeminine +guillemetleft +registered +macron +degree +acute +paragraph +periodcentered +cedilla +ordmasculine +guillemetright +questiondown +Agrave +Aacute +Acircumflex +Atilde +Adieresis +Aring +AE +Ccedilla +Egrave +Eacute +Ecircumflex +Edieresis +Igrave +Iacute +Icircumflex +Idieresis +Eth +Ntilde +Ograve +Oacute +Ocircumflex +Otilde +Odieresis +multiply +Oslash +Ugrave +Uacute +Ucircumflex +Udieresis +Yacute +Thorn +germandbls +agrave aacute -abreve acircumflex +atilde adieresis -agrave -amacron -aogonek aring -atilde ae -b -c -cacute -ccaron ccedilla -cdotaccent -d -eth -dcaron -dcroat -e +egrave eacute -ecaron ecircumflex edieresis -edotaccent -egrave +igrave +iacute +icircumflex +idieresis +eth +ntilde +ograve +oacute +ocircumflex +otilde +odieresis +divide +oslash +ugrave +uacute +ucircumflex +udieresis +yacute +thorn +ydieresis +Amacron +amacron +Abreve +abreve +Aogonek +aogonek +Cacute +cacute +Cdotaccent +cdotaccent +Ccaron +ccaron +Dcaron +dcaron +Dcroat +dcroat +Emacron emacron +Edotaccent +edotaccent +Eogonek eogonek -f -g +Ecaron +ecaron +Gbreve gbreve -gcommaaccent +Gdotaccent gdotaccent -h +Gcommaaccent +gcommaaccent +Hbar hbar -i -idotless -iacute -icircumflex -idieresis -idotaccent -igrave -ij +Itilde +itilde +Imacron imacron +Iogonek iogonek -j -jdotless -k +Idotaccent +idotless +Kcommaaccent kcommaaccent -l +Lacute lacute -lcaron +Lcommaaccent lcommaaccent +Lcaron +lcaron +Lslash lslash -m -n +Nacute nacute -ncaron +Ncommaaccent ncommaaccent -ntilde -eng -o -oacute -ocircumflex -odieresis -ograve +Ncaron +ncaron +Ohungarumlaut ohungarumlaut -omacron -oslash -otilde +OE oe -p -thorn -q -r +Racute racute +Rcaron rcaron -rcommaaccent -s +Sacute sacute -scaron +Scedilla scedilla -scommaaccent -germandbls -t +Scaron +scaron +Tcaron tcaron -tcommaaccent -u -uacute -ubreve -ucircumflex -udieresis -ugrave -uhungarumlaut +Utilde +utilde +Umacron umacron -uogonek +Uring uring -v -w -wacute +Uhungarumlaut +uhungarumlaut +Uogonek +uogonek +Wcircumflex wcircumflex -wdieresis -wgrave -x -y -yacute +Ycircumflex ycircumflex -ydieresis -ygrave -z +Ydieresis +Zacute zacute -zcaron +Zdotaccent zdotaccent -ordfeminine -ordmasculine -.notdef -comma -semicolon -exclamdown -question -questiondown -periodcentered -bullet -periodcentered.loclCAT -periodcentered.loclCAT.case +Zcaron +zcaron +Scommaaccent +scommaaccent +Tcommaaccent +tcommaaccent +jdotless +apostrophemod +circumflex +caron +breve +dotaccent +ring +ogonek +tilde +hungarumlaut +gravecomb +acutecomb +circumflexcomb +tildecomb +macroncomb +brevecomb +dotaccentcomb +dieresiscomb +ringcomb +hungarumlautcomb +caroncomb +commaturnedabovecomb +commaaccentcomb +cedillacomb +ogonekcomb +Wgrave +wgrave +Wacute +wacute +Wdieresis +wdieresis +Germandbls +Etilde +etilde +Ygrave +ygrave +Ytilde +ytilde endash emdash -underscore +quoteleft +quoteright quotesinglbase +quotedblleft +quotedblright quotedblbase +bullet +ellipsis guilsinglleft guilsinglright -at -ampersand -paragraph -section -copyright -registered -trademark -cent -dollar euro -sterling -yen +trademark minus -asciitilde -asciicircum -dotaccentcomb -caroncomb.alt -circumflexcomb -caroncomb -brevecomb -ringcomb -tildecomb -commaturnedabovecomb -commaaccentcomb -cedillacomb -ogonekcomb -dieresis -grave -acute -hungarumlaut -circumflex -caron -breve -ring -tilde -macron -cedilla -ogonek \ No newline at end of file +idotaccent +.notdef +periodcentered.loclCAT +periodcentered.loclCAT.case +caroncomb.alt \ No newline at end of file diff --git a/GF_glyphsets/Latin/txt/prod-names/GF_Latin_Core.txt b/GF_glyphsets/Latin/txt/prod-names/GF_Latin_Core.txt index 722ff56537..60357effe6 100644 --- a/GF_glyphsets/Latin/txt/prod-names/GF_Latin_Core.txt +++ b/GF_glyphsets/Latin/txt/prod-names/GF_Latin_Core.txt @@ -1,3 +1,19 @@ +space +exclam +quotedbl +numbersign +dollar +percent +ampersand +quotesingle +parenleft +parenright +asterisk +plus +comma +hyphen +period +slash zero one two @@ -8,328 +24,311 @@ six seven eight nine -space -uni00A0 -period colon -ellipsis -exclam -asterisk -numbersign -slash -backslash -hyphen -parenleft -parenright -braceleft -braceright -bracketleft -bracketright -quotedblleft -quotedblright -quoteleft -quoteright -guillemotleft -guillemotright -quotedbl -quotesingle -bar -plus -multiply -divide +semicolon +less equal greater -less -percent -uni0308 -gravecomb -acutecomb -uni030B -uni0304 -dotaccent -degree +question +at A -Aacute -Abreve -Acircumflex -Adieresis -Agrave -Amacron -Aogonek -Aring -Atilde -AE B C -Cacute -Ccaron -Ccedilla -Cdotaccent D -Eth -Dcaron -Dcroat E -Eacute -Ecaron -Ecircumflex -Edieresis -Edotaccent -Egrave -Emacron -Eogonek F G -Gbreve -uni0122 -Gdotaccent H -Hbar I -IJ -Iacute -Icircumflex -Idieresis -Idotaccent -Igrave -Imacron -Iogonek J K -uni0136 L -Lacute -Lcaron -uni013B -Lslash M N -Nacute -Ncaron -uni0145 -Ntilde -Eng O -Oacute -Ocircumflex -Odieresis -Ograve -Ohungarumlaut -Omacron -Oslash -Otilde -OE P -Thorn Q R -Racute -Rcaron -uni0156 S -Sacute -Scaron -Scedilla -uni0218 -uni1E9E T -Tcaron -uni021A U -Uacute -Ubreve -Ucircumflex -Udieresis -Ugrave -Uhungarumlaut -Umacron -Uogonek -Uring V W -Wacute -Wcircumflex -Wdieresis -Wgrave X Y -Yacute -Ycircumflex -Ydieresis -Ygrave Z -Zacute -Zcaron -Zdotaccent +bracketleft +backslash +bracketright +asciicircum +underscore +grave a +b +c +d +e +f +g +h +i +j +k +l +m +n +o +p +q +r +s +t +u +v +w +x +y +z +braceleft +bar +braceright +asciitilde +uni00A0 +exclamdown +cent +sterling +yen +section +dieresis +copyright +ordfeminine +guillemotleft +registered +macron +degree +acute +paragraph +periodcentered +cedilla +ordmasculine +guillemotright +questiondown +Agrave +Aacute +Acircumflex +Atilde +Adieresis +Aring +AE +Ccedilla +Egrave +Eacute +Ecircumflex +Edieresis +Igrave +Iacute +Icircumflex +Idieresis +Eth +Ntilde +Ograve +Oacute +Ocircumflex +Otilde +Odieresis +multiply +Oslash +Ugrave +Uacute +Ucircumflex +Udieresis +Yacute +Thorn +germandbls +agrave aacute -abreve acircumflex +atilde adieresis -agrave -amacron -aogonek aring -atilde ae -b -c -cacute -ccaron ccedilla -cdotaccent -d -eth -dcaron -dcroat -e +egrave eacute -ecaron ecircumflex edieresis -edotaccent -egrave +igrave +iacute +icircumflex +idieresis +eth +ntilde +ograve +oacute +ocircumflex +otilde +odieresis +divide +oslash +ugrave +uacute +ucircumflex +udieresis +yacute +thorn +ydieresis +Amacron +amacron +Abreve +abreve +Aogonek +aogonek +Cacute +cacute +Cdotaccent +cdotaccent +Ccaron +ccaron +Dcaron +dcaron +Dcroat +dcroat +Emacron emacron +Edotaccent +edotaccent +Eogonek eogonek -f -g +Ecaron +ecaron +Gbreve gbreve -uni0123 +Gdotaccent gdotaccent -h +uni0122 +uni0123 +Hbar hbar -i -dotlessi -iacute -icircumflex -idieresis -i.loclTRK -igrave -ij +Itilde +itilde +Imacron imacron +Iogonek iogonek -j -uni0237 -k +Idotaccent +dotlessi +uni0136 uni0137 -l +Lacute lacute -lcaron +uni013B uni013C +Lcaron +lcaron +Lslash lslash -m -n +Nacute nacute -ncaron +uni0145 uni0146 -ntilde -eng -o -oacute -ocircumflex -odieresis -ograve +Ncaron +ncaron +Ohungarumlaut ohungarumlaut -omacron -oslash -otilde +OE oe -p -thorn -q -r +Racute racute +Rcaron rcaron -uni0157 -s +Sacute sacute -scaron +Scedilla scedilla -uni0219 -germandbls -t +Scaron +scaron +Tcaron tcaron -uni021B -u -uacute -ubreve -ucircumflex -udieresis -ugrave -uhungarumlaut +Utilde +utilde +Umacron umacron -uogonek +Uring uring -v -w -wacute +Uhungarumlaut +uhungarumlaut +Uogonek +uogonek +Wcircumflex wcircumflex -wdieresis -wgrave -x -y -yacute +Ycircumflex ycircumflex -ydieresis -ygrave -z +Ydieresis +Zacute zacute -zcaron +Zdotaccent zdotaccent -ordfeminine -ordmasculine -.notdef -comma -semicolon -exclamdown -question -questiondown -periodcentered -bullet -periodcentered.loclCAT -periodcentered.loclCAT.case +Zcaron +zcaron +uni0218 +uni0219 +uni021A +uni021B +uni0237 +uni02BC +circumflex +caron +breve +dotaccent +ring +ogonek +tilde +hungarumlaut +gravecomb +acutecomb +uni0302 +tildecomb +uni0304 +uni0306 +uni0307 +uni0308 +uni030A +uni030B +uni030C +uni0312 +uni0326 +uni0327 +uni0328 +Wgrave +wgrave +Wacute +wacute +Wdieresis +wdieresis +uni1E9E +uni1EBC +uni1EBD +Ygrave +ygrave +uni1EF8 +uni1EF9 endash emdash -underscore +quoteleft +quoteright quotesinglbase +quotedblleft +quotedblright quotedblbase +bullet +ellipsis guilsinglleft guilsinglright -at -ampersand -paragraph -section -copyright -registered -trademark -cent -dollar Euro -sterling -yen +trademark minus -asciitilde -asciicircum -uni0307 -uni030C.alt -uni0302 -uni030C -uni0306 -uni030A -tildecomb -uni0312 -uni0326 -uni0327 -uni0328 -dieresis -grave -acute -hungarumlaut -circumflex -caron -breve -ring -tilde -macron -cedilla -ogonek \ No newline at end of file +i.loclTRK +.notdef +periodcentered.loclCAT +periodcentered.loclCAT.case +uni030C.alt \ No newline at end of file diff --git a/GF_glyphsets/update-gs.sh b/GF_glyphsets/update-gs.sh index 07ed810fab..dbdf9be0c2 100644 --- a/GF_glyphsets/update-gs.sh +++ b/GF_glyphsets/update-gs.sh @@ -33,3 +33,9 @@ do glyphsets filter-list $set -o $script/txt/prod-names/$set.txt --prod-names done done + +# Language definition overhaul: +# After all the files were created using the old approach, +# now use the new approach to replace files for those glyphsets +# that are supported under the new approach +python ../scripts/assemble_charactersets.py \ No newline at end of file diff --git a/README.md b/README.md index 25573c8b04..540b6797bd 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,25 @@ Attention: Repository under transition ====================================== -The assembly of character sets is currently undergoing a transition from the previous approach of using the `glyphsets` command and `data.json` as a database to using the `gflanguages` package as the database and assembling (currently only) .nam files from that. +The assembly of character sets is currently undergoing a transition from the previous approach of using the `glyphsets` command and `data.json` as a database to using the `gflanguages` package as the database and assembling .nam and other files from that. This transition is currently complete for: * GF_Latin_Core -**Caution:** If you run the existing `sh GF_glyphsets/update-gs.sh` command, it will delete all existing .nam files, including the .stub.nam files that are the basis for the new approach of assembling the character sets. As long as this transition is partial, make sure that you don't run `sh GF_glyphsets/update-gs.sh` and then commit `.nam` files for the above-mentioned character sets. +How to assemble glyphs and characters using the new appraoch +------------------------------------------------------------ -How to assemble a .nam file in the new approach ------------------------------------------------ +* Have a `.yaml` file under `GF_Glyphsets/*/definitions/` with language codes for your character set +* Optional: Have a `.stub.nam` file under `GF_Glyphsets/*/definitions/` for your character set, containing characters that you want to see included that can't be inferred from the `gflanguages` definitions +* Optional: Have a `.stub.glyphs` file under `GF_Glyphsets/*/definitions/` for your character set, containing glyphs that you want to see included that aren't even encoded +* Update all glyphsets using `cd GF_Glyphsets` and the running `sh update-gs.sh` from there (won't work from repo root), see below for details on what's happening -* Have a `.stub.nam` file under `GF_Glyphsets/nam/` for your character set, even if the file is empty -* Have a `.yaml` file under `GF_Glyphsets/languages/` with language codes for your character set -* Run `python scripts/assemble_charactersets.py` to assemble the main `.nam` files from the stub and the language definitions +What happens under the hood +--------------------------- -.glyphs and .plist and .txt files are currently not yet supported in the new approach, but will be. +* `update-gs.sh` runs as previously, except that it won't deleted the entire folder structure as previously, thus preserving the vital `definitions` folder. +* It continues to build all file as under the old approach. +* Afterwards, it calls the new script (`scripts/assemble_charactersets.py`) which will write over existing files (for supported glyphsets, see list at top). Glyphsets ========= diff --git a/scripts/assemble_charactersets.py b/scripts/assemble_charactersets.py index 43f121ce31..5b98258f61 100644 --- a/scripts/assemble_charactersets.py +++ b/scripts/assemble_charactersets.py @@ -2,13 +2,26 @@ Assemble .nam files from .nam stub files and language definitions. """ +global GLYPHDATA + import yaml import os import gflanguages import unicodedata +import glyphsLib +import functools +from glyphsLib.glyphdata import get_glyph, _lookup_attributes_by_unicode + +def assemble_characterset(languages_yaml_path): + glyphset_name = os.path.basename(languages_yaml_path).replace(".yaml", "") + nam_stub_path = languages_yaml_path.replace(".yaml", ".stub.nam") + nam_path = languages_yaml_path.replace(".yaml", ".nam").replace("definitions", "nam") + glyphs_stub_path = languages_yaml_path.replace(".yaml", ".stub.glyphs") + glyphs_path = languages_yaml_path.replace(".yaml", ".glyphs").replace("definitions", "glyphs") + txt_nicenames_path = languages_yaml_path.replace(".yaml", ".txt").replace("definitions", "txt/nice-names") + txt_prodnames_path = languages_yaml_path.replace(".yaml", ".txt").replace("definitions", "txt/prod-names") -def assemble_characterset(nam_stub_path, nam_path, languages_yaml_path): character_set = set() # Read language definitions @@ -37,13 +50,38 @@ def assemble_characterset(nam_stub_path, nam_path, languages_yaml_path): } ) - # Read .nam stub file - with open(nam_stub_path, "r") as f: - nam_stub_lines = f.readlines() - for line in nam_stub_lines: - unicode = line.split(" ")[0] - if unicode.startswith("0x"): - character_set.add(int(unicode[2:], 16)) + # Read .stub.nam file + if os.path.exists(nam_stub_path): + with open(nam_stub_path, "r") as f: + nam_stub_lines = f.readlines() + for line in nam_stub_lines: + unicode = line.split(" ")[0] + if unicode.startswith("0x"): + character_set.add(int(unicode[2:], 16)) + + # Call get_glyph once so that GLYPHDATA gets filled in glyphsLib + get_glyph("A") + # If I import GLYPHDATA at the top of the file, it doesn't get filled + from glyphsLib.glyphdata import GLYPHDATA + assert type(GLYPHDATA) == glyphsLib.glyphdata.GlyphData + + # Create glyphs file and add characters + if os.path.exists(glyphs_stub_path): + font = glyphsLib.load(glyphs_stub_path) + else: + font = glyphsLib.GSFont() + font.familyName = glyphset_name + for i, unicode in enumerate(sorted(list(character_set))): + unicode = f"{unicode:#0{6}X}".replace("0X", "") + glyph_info = _lookup_attributes_by_unicode(unicode, GLYPHDATA) + glyph = glyphsLib.GSGlyph() + glyph.name = glyph_info["name"] + glyph.unicode = unicode + font.glyphs.append(glyph) + + # Save glyphs file + font.axes = [] + font.save(glyphs_path) # Output sorted character set to .nam file with open(nam_path, "w") as f: @@ -53,25 +91,36 @@ def assemble_characterset(nam_stub_path, nam_path, languages_yaml_path): if i < len(character_set) - 1: f.write("\n") + def sort_unicodes(a, b): + if a.unicode and b.unicode: + return int(a.unicode, 16) - int(b.unicode, 16) + elif a.unicode: + return -1 + elif b.unicode: + return 1 + else: + return 0 + + # Output txt files + with open(txt_nicenames_path, "w") as f: + glyphs = sorted(font.glyphs, key=functools.cmp_to_key(sort_unicodes)) + f.write("\n".join([glyph.name for glyph in glyphs])) + with open(txt_prodnames_path, "w") as f: + glyphs = sorted(font.glyphs, key=functools.cmp_to_key(sort_unicodes)) + f.write("\n".join([get_glyph(glyph.name).production_name for glyph in glyphs])) + if __name__ == "__main__": for root, dir, files in os.walk( os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "GF_Glyphsets")) ): for file in files: - if file.endswith(".stub.nam"): - # .nam stub file - nam_stub_path = os.path.join(root, file) - nam_path = os.path.join(root, file).replace(".stub.nam", ".nam") + if file.endswith(".yaml"): - # corresponding languages .yaml file + # Find definition file languages_yaml_path = os.path.abspath( os.path.join( - root, "..", "languages", file.replace(".stub.nam", ".yaml") + root, "..", "definitions", file) ) - ) - if all( - [os.path.exists(x) for x in [nam_stub_path, languages_yaml_path]] - ): - assemble_characterset(nam_stub_path, nam_path, languages_yaml_path) + assemble_characterset(languages_yaml_path) From edcd19bc0ef55f7c3f627decaaecb889b21cb15c Mon Sep 17 00:00:00 2001 From: Yanone Date: Thu, 19 Oct 2023 11:01:48 +0200 Subject: [PATCH 36/59] Include adjusting .plist --- .../Latin/glyphs/CustomFilter_GF_Latin.plist | 501 +++++++++--------- README.md | 12 +- scripts/assemble_charactersets.py | 65 ++- 3 files changed, 298 insertions(+), 280 deletions(-) diff --git a/GF_glyphsets/Latin/glyphs/CustomFilter_GF_Latin.plist b/GF_glyphsets/Latin/glyphs/CustomFilter_GF_Latin.plist index 1b6d8103f0..ddcc3b7dc8 100644 --- a/GF_glyphsets/Latin/glyphs/CustomFilter_GF_Latin.plist +++ b/GF_glyphsets/Latin/glyphs/CustomFilter_GF_Latin.plist @@ -571,6 +571,22 @@ list + space + exclam + quotedbl + numbersign + dollar + percent + ampersand + quotesingle + parenleft + parenright + asterisk + plus + comma + hyphen + period + slash zero one two @@ -581,331 +597,314 @@ seven eight nine - space - nbspace - period colon - ellipsis - exclam - asterisk - numbersign - slash - backslash - hyphen - parenleft - parenright - braceleft - braceright - bracketleft - bracketright - quotedblleft - quotedblright - quoteleft - quoteright - guillemetleft - guillemetright - quotedbl - quotesingle - bar - plus - multiply - divide + semicolon + less equal greater - less - percent - dieresiscomb - gravecomb - acutecomb - hungarumlautcomb - macroncomb - dotaccent - degree + question + at A - Aacute - Abreve - Acircumflex - Adieresis - Agrave - Amacron - Aogonek - Aring - Atilde - AE B C - Cacute - Ccaron - Ccedilla - Cdotaccent D - Eth - Dcaron - Dcroat E - Eacute - Ecaron - Ecircumflex - Edieresis - Edotaccent - Egrave - Emacron - Eogonek F G - Gbreve - Gcommaaccent - Gdotaccent H - Hbar I - IJ - Iacute - Icircumflex - Idieresis - Idotaccent - Igrave - Imacron - Iogonek J K - Kcommaaccent L - Lacute - Lcaron - Lcommaaccent - Lslash M N - Nacute - Ncaron - Ncommaaccent - Ntilde - Eng O - Oacute - Ocircumflex - Odieresis - Ograve - Ohungarumlaut - Omacron - Oslash - Otilde - OE P - Thorn Q R - Racute - Rcaron - Rcommaaccent S - Sacute - Scaron - Scedilla - Scommaaccent - Germandbls T - Tcaron - Tcommaaccent U - Uacute - Ubreve - Ucircumflex - Udieresis - Ugrave - Uhungarumlaut - Umacron - Uogonek - Uring V W - Wacute - Wcircumflex - Wdieresis - Wgrave X Y - Yacute - Ycircumflex - Ydieresis - Ygrave Z - Zacute - Zcaron - Zdotaccent + bracketleft + backslash + bracketright + asciicircum + underscore + grave a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p + q + r + s + t + u + v + w + x + y + z + braceleft + bar + braceright + asciitilde + nbspace + exclamdown + cent + sterling + yen + section + dieresis + copyright + ordfeminine + guillemetleft + registered + macron + degree + acute + paragraph + periodcentered + cedilla + ordmasculine + guillemetright + questiondown + Agrave + Aacute + Acircumflex + Atilde + Adieresis + Aring + AE + Ccedilla + Egrave + Eacute + Ecircumflex + Edieresis + Igrave + Iacute + Icircumflex + Idieresis + Eth + Ntilde + Ograve + Oacute + Ocircumflex + Otilde + Odieresis + multiply + Oslash + Ugrave + Uacute + Ucircumflex + Udieresis + Yacute + Thorn + germandbls + agrave aacute - abreve acircumflex + atilde adieresis - agrave - amacron - aogonek aring - atilde ae - b - c - cacute - ccaron ccedilla - cdotaccent - d - eth - dcaron - dcroat - e + egrave eacute - ecaron ecircumflex edieresis - edotaccent - egrave + igrave + iacute + icircumflex + idieresis + eth + ntilde + ograve + oacute + ocircumflex + otilde + odieresis + divide + oslash + ugrave + uacute + ucircumflex + udieresis + yacute + thorn + ydieresis + Amacron + amacron + Abreve + abreve + Aogonek + aogonek + Cacute + cacute + Cdotaccent + cdotaccent + Ccaron + ccaron + Dcaron + dcaron + Dcroat + dcroat + Emacron emacron + Edotaccent + edotaccent + Eogonek eogonek - f - g + Ecaron + ecaron + Gbreve gbreve - gcommaaccent + Gdotaccent gdotaccent - h + Gcommaaccent + gcommaaccent + Hbar hbar - i - idotless - iacute - icircumflex - idieresis - idotaccent - igrave - ij + Itilde + itilde + Imacron imacron + Iogonek iogonek - j - jdotless - k + Idotaccent + idotless + Kcommaaccent kcommaaccent - l + Lacute lacute - lcaron + Lcommaaccent lcommaaccent + Lcaron + lcaron + Lslash lslash - m - n + Nacute nacute - ncaron + Ncommaaccent ncommaaccent - ntilde - eng - o - oacute - ocircumflex - odieresis - ograve + Ncaron + ncaron + Ohungarumlaut ohungarumlaut - omacron - oslash - otilde + OE oe - p - thorn - q - r + Racute racute + Rcaron rcaron - rcommaaccent - s + Sacute sacute - scaron + Scedilla scedilla - scommaaccent - germandbls - t + Scaron + scaron + Tcaron tcaron - tcommaaccent - u - uacute - ubreve - ucircumflex - udieresis - ugrave - uhungarumlaut + Utilde + utilde + Umacron umacron - uogonek + Uring uring - v - w - wacute + Uhungarumlaut + uhungarumlaut + Uogonek + uogonek + Wcircumflex wcircumflex - wdieresis - wgrave - x - y - yacute + Ycircumflex ycircumflex - ydieresis - ygrave - z + Ydieresis + Zacute zacute - zcaron + Zdotaccent zdotaccent - ordfeminine - ordmasculine - .notdef - comma - semicolon - exclamdown - question - questiondown - periodcentered - bullet - periodcentered.loclCAT - periodcentered.loclCAT.case + Zcaron + zcaron + Scommaaccent + scommaaccent + Tcommaaccent + tcommaaccent + jdotless + apostrophemod + circumflex + caron + breve + dotaccent + ring + ogonek + tilde + hungarumlaut + gravecomb + acutecomb + circumflexcomb + tildecomb + macroncomb + brevecomb + dotaccentcomb + dieresiscomb + ringcomb + hungarumlautcomb + caroncomb + commaturnedabovecomb + commaaccentcomb + cedillacomb + ogonekcomb + Wgrave + wgrave + Wacute + wacute + Wdieresis + wdieresis + Germandbls + Etilde + etilde + Ygrave + ygrave + Ytilde + ytilde endash emdash - underscore + quoteleft + quoteright quotesinglbase + quotedblleft + quotedblright quotedblbase + bullet + ellipsis guilsinglleft guilsinglright - at - ampersand - paragraph - section - copyright - registered - trademark - cent - dollar euro - sterling - yen + trademark minus - asciitilde - asciicircum - dotaccentcomb + idotaccent + .notdef + periodcentered.loclCAT + periodcentered.loclCAT.case caroncomb.alt - circumflexcomb - caroncomb - brevecomb - ringcomb - tildecomb - commaturnedabovecomb - commaaccentcomb - cedillacomb - ogonekcomb - dieresis - grave - acute - hungarumlaut - circumflex - caron - breve - ring - tilde - macron - cedilla - ogonek name GF_Latin_Core diff --git a/README.md b/README.md index 540b6797bd..9b0245fcb7 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,25 @@ Attention: Repository under transition ====================================== -The assembly of character sets is currently undergoing a transition from the previous approach of using the `glyphsets` command and `data.json` as a database to using the `gflanguages` package as the database and assembling .nam and other files from that. +The assembly of character sets is currently undergoing a transition from the previous approach of using the `glyphsets` command and `data.json` as a database to using the `gflanguages` package as the database and assembling `.nam` and other files from that. This transition is currently complete for: * GF_Latin_Core -How to assemble glyphs and characters using the new appraoch +How to assemble glyphs and characters using the new approach ------------------------------------------------------------ * Have a `.yaml` file under `GF_Glyphsets/*/definitions/` with language codes for your character set -* Optional: Have a `.stub.nam` file under `GF_Glyphsets/*/definitions/` for your character set, containing characters that you want to see included that can't be inferred from the `gflanguages` definitions -* Optional: Have a `.stub.glyphs` file under `GF_Glyphsets/*/definitions/` for your character set, containing glyphs that you want to see included that aren't even encoded -* Update all glyphsets using `cd GF_Glyphsets` and the running `sh update-gs.sh` from there (won't work from repo root), see below for details on what's happening +* Optional: Have a `.stub.nam` file under `GF_Glyphsets/*/definitions/` for your character set, containing _encoded_ characters that you want to see included that can't be inferred from the `gflanguages` definitions +* Optional: Have a `.stub.glyphs` file under `GF_Glyphsets/*/definitions/` for your character set, containing _unencoded_ glyphs that you want to see included +* Update all glyphsets using `sh GF_glyphsets/update-gs.sh` as usual, see below for details What happens under the hood --------------------------- * `update-gs.sh` runs as previously, except that it won't deleted the entire folder structure as previously, thus preserving the vital `definitions` folder. * It continues to build all file as under the old approach. -* Afterwards, it calls the new script (`scripts/assemble_charactersets.py`) which will write over existing files (for supported glyphsets, see list at top). +* Afterwards, it calls the new script (`scripts/assemble_charactersets.py`) which will write over existing nam/glyphs/txt files (for supported glyphsets, see list at top). Glyphsets ========= diff --git a/scripts/assemble_charactersets.py b/scripts/assemble_charactersets.py index 5b98258f61..2c9c2ec7e0 100644 --- a/scripts/assemble_charactersets.py +++ b/scripts/assemble_charactersets.py @@ -2,25 +2,36 @@ Assemble .nam files from .nam stub files and language definitions. """ -global GLYPHDATA - import yaml import os import gflanguages import unicodedata import glyphsLib import functools +import plistlib from glyphsLib.glyphdata import get_glyph, _lookup_attributes_by_unicode -def assemble_characterset(languages_yaml_path): +def assemble_characterset(languages_yaml_path): glyphset_name = os.path.basename(languages_yaml_path).replace(".yaml", "") + glyphset_category_name = "_".join(glyphset_name.split("_")[:2]) nam_stub_path = languages_yaml_path.replace(".yaml", ".stub.nam") - nam_path = languages_yaml_path.replace(".yaml", ".nam").replace("definitions", "nam") + nam_path = languages_yaml_path.replace(".yaml", ".nam").replace( + "definitions", "nam" + ) glyphs_stub_path = languages_yaml_path.replace(".yaml", ".stub.glyphs") - glyphs_path = languages_yaml_path.replace(".yaml", ".glyphs").replace("definitions", "glyphs") - txt_nicenames_path = languages_yaml_path.replace(".yaml", ".txt").replace("definitions", "txt/nice-names") - txt_prodnames_path = languages_yaml_path.replace(".yaml", ".txt").replace("definitions", "txt/prod-names") + glyphs_path = languages_yaml_path.replace(".yaml", ".glyphs").replace( + "definitions", "glyphs" + ) + txt_nicenames_path = languages_yaml_path.replace(".yaml", ".txt").replace( + "definitions", "txt/nice-names" + ) + txt_prodnames_path = languages_yaml_path.replace(".yaml", ".txt").replace( + "definitions", "txt/prod-names" + ) + plist_path = os.path.join( + os.path.dirname(glyphs_path), f"CustomFilter_{glyphset_category_name}.plist" + ) character_set = set() @@ -32,14 +43,14 @@ def assemble_characterset(languages_yaml_path): languages = gflanguages.LoadLanguages() for language_code in language_definitions["language_codes"]: chars = languages[language_code].exemplar_chars + # chars.base.upper() is important because many Latin languages don't + # contain a complete set of uppercase letters in "index" character_set.update( { ord(c) for c in list( set(chars.base) - | set( - chars.base.upper() - ) # This is important because many Latin languages don't contain a complete set of uppercase letters in "index" + | set(chars.base.upper()) | set(chars.index) | set(chars.marks) | set(chars.numerals) @@ -63,7 +74,8 @@ def assemble_characterset(languages_yaml_path): get_glyph("A") # If I import GLYPHDATA at the top of the file, it doesn't get filled from glyphsLib.glyphdata import GLYPHDATA - assert type(GLYPHDATA) == glyphsLib.glyphdata.GlyphData + + assert type(GLYPHDATA) is glyphsLib.glyphdata.GlyphData # Create glyphs file and add characters if os.path.exists(glyphs_stub_path): @@ -71,7 +83,7 @@ def assemble_characterset(languages_yaml_path): else: font = glyphsLib.GSFont() font.familyName = glyphset_name - for i, unicode in enumerate(sorted(list(character_set))): + for _i, unicode in enumerate(sorted(list(character_set))): unicode = f"{unicode:#0{6}X}".replace("0X", "") glyph_info = _lookup_attributes_by_unicode(unicode, GLYPHDATA) glyph = glyphsLib.GSGlyph() @@ -102,25 +114,32 @@ def sort_unicodes(a, b): return 0 # Output txt files + glyphs = sorted(font.glyphs, key=functools.cmp_to_key(sort_unicodes)) + glyph_names = [glyph.name for glyph in glyphs] + production_glyph_names = [get_glyph(glyph.name).production_name for glyph in glyphs] with open(txt_nicenames_path, "w") as f: - glyphs = sorted(font.glyphs, key=functools.cmp_to_key(sort_unicodes)) - f.write("\n".join([glyph.name for glyph in glyphs])) + f.write("\n".join(glyph_names)) with open(txt_prodnames_path, "w") as f: - glyphs = sorted(font.glyphs, key=functools.cmp_to_key(sort_unicodes)) - f.write("\n".join([get_glyph(glyph.name).production_name for glyph in glyphs])) + f.write("\n".join(production_glyph_names)) + + # Adjust .plist + with open(plist_path, "rb") as f: + plist = plistlib.load(f) + for plist_glyphset in plist: + if plist_glyphset["name"] == glyphset_name: + plist_glyphset["list"] = glyph_names + with open(plist_path, "wb") as f: + plistlib.dump(plist, f) if __name__ == "__main__": - for root, dir, files in os.walk( - os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "GF_Glyphsets")) - ): + path = os.path.join(os.path.dirname(__file__), "..", "GF_Glyphsets") + for root, _dir, files in os.walk(os.path.abspath(path)): for file in files: if file.endswith(".yaml"): - # Find definition file languages_yaml_path = os.path.abspath( - os.path.join( - root, "..", "definitions", file) - ) + os.path.join(root, "..", "definitions", file) + ) assemble_characterset(languages_yaml_path) From b4744037470a43c0e37f34c4c93d50847915fac7 Mon Sep 17 00:00:00 2001 From: Yanone Date: Thu, 19 Oct 2023 11:03:55 +0200 Subject: [PATCH 37/59] Update README.md --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9b0245fcb7..57217e8fd7 100644 --- a/README.md +++ b/README.md @@ -14,11 +14,13 @@ How to assemble glyphs and characters using the new approach * Optional: Have a `.stub.glyphs` file under `GF_Glyphsets/*/definitions/` for your character set, containing _unencoded_ glyphs that you want to see included * Update all glyphsets using `sh GF_glyphsets/update-gs.sh` as usual, see below for details +So, the final `.glyphs` files are the sum of `gflanguages` + `.stub.nam` + `.stub.glyphs`. + What happens under the hood --------------------------- -* `update-gs.sh` runs as previously, except that it won't deleted the entire folder structure as previously, thus preserving the vital `definitions` folder. -* It continues to build all file as under the old approach. +* `update-gs.sh` runs as previously, except that it won't deleted the entire folder structure as previously, thus preserving the vital new `definitions` folder. +* It continues to build all files under the old approach. * Afterwards, it calls the new script (`scripts/assemble_charactersets.py`) which will write over existing nam/glyphs/txt files (for supported glyphsets, see list at top). Glyphsets From a0b6aa686d7187ffc7699c1162c35ddd84e59cae Mon Sep 17 00:00:00 2001 From: Yanone Date: Thu, 19 Oct 2023 11:12:17 +0200 Subject: [PATCH 38/59] Delete values here --- GF_glyphsets/Latin/glyphs/GF_Latin_Core.glyphs | 4 ---- scripts/assemble_charactersets.py | 2 ++ 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/GF_glyphsets/Latin/glyphs/GF_Latin_Core.glyphs b/GF_glyphsets/Latin/glyphs/GF_Latin_Core.glyphs index 85ce86c492..8fbe554568 100644 --- a/GF_glyphsets/Latin/glyphs/GF_Latin_Core.glyphs +++ b/GF_glyphsets/Latin/glyphs/GF_Latin_Core.glyphs @@ -92,10 +92,6 @@ tag = case; ); fontMaster = ( { -axesValues = ( -100, -100 -); id = m01; metricValues = ( { diff --git a/scripts/assemble_charactersets.py b/scripts/assemble_charactersets.py index 2c9c2ec7e0..bb887f3bbf 100644 --- a/scripts/assemble_charactersets.py +++ b/scripts/assemble_charactersets.py @@ -93,6 +93,8 @@ def assemble_characterset(languages_yaml_path): # Save glyphs file font.axes = [] + for master in font.masters: + master.axes = [] font.save(glyphs_path) # Output sorted character set to .nam file From 9ffff2163e94e014ce6b8987e492daee30dde71a Mon Sep 17 00:00:00 2001 From: Yanone Date: Thu, 19 Oct 2023 12:50:42 +0200 Subject: [PATCH 39/59] Sort glyphs by category --- .../Latin/glyphs/CustomFilter_GF_Latin.plist | 170 +- .../Latin/glyphs/GF_Latin_Core.glyphs | 2780 ++++++++++++++--- .../Latin/txt/nice-names/GF_Latin_Core.txt | 172 +- .../Latin/txt/prod-names/GF_Latin_Core.txt | 172 +- scripts/assemble_charactersets.py | 54 +- 5 files changed, 2673 insertions(+), 675 deletions(-) diff --git a/GF_glyphsets/Latin/glyphs/CustomFilter_GF_Latin.plist b/GF_glyphsets/Latin/glyphs/CustomFilter_GF_Latin.plist index ddcc3b7dc8..9601ebbc6b 100644 --- a/GF_glyphsets/Latin/glyphs/CustomFilter_GF_Latin.plist +++ b/GF_glyphsets/Latin/glyphs/CustomFilter_GF_Latin.plist @@ -571,22 +571,72 @@ list + dollar + percent + ampersand + plus + less + equal + greater + at + asciicircum + bar + asciitilde + cent + sterling + yen + section + copyright + registered + degree + paragraph + multiply + divide + euro + trademark + minus + .notdef space + nbspace + periodcentered.loclCAT + periodcentered.loclCAT.case exclam quotedbl numbersign - dollar - percent - ampersand quotesingle parenleft parenright asterisk - plus comma hyphen period slash + colon + semicolon + question + bracketleft + backslash + bracketright + underscore + braceleft + braceright + exclamdown + guillemetleft + periodcentered + guillemetright + questiondown + endash + emdash + quoteleft + quoteright + quotesinglbase + quotedblleft + quotedblright + quotedblbase + bullet + ellipsis + guilsinglleft + guilsinglright zero one two @@ -597,13 +647,37 @@ seven eight nine - colon - semicolon - less - equal - greater - question - at + caroncomb.alt + grave + dieresis + macron + acute + cedilla + apostrophemod + circumflex + caron + breve + dotaccent + ring + ogonek + tilde + hungarumlaut + gravecomb + acutecomb + circumflexcomb + tildecomb + macroncomb + brevecomb + dotaccentcomb + dieresiscomb + ringcomb + hungarumlautcomb + caroncomb + commaturnedabovecomb + commaaccentcomb + cedillacomb + ogonekcomb + idotaccent A B C @@ -630,12 +704,6 @@ X Y Z - bracketleft - backslash - bracketright - asciicircum - underscore - grave a b c @@ -662,30 +730,8 @@ x y z - braceleft - bar - braceright - asciitilde - nbspace - exclamdown - cent - sterling - yen - section - dieresis - copyright ordfeminine - guillemetleft - registered - macron - degree - acute - paragraph - periodcentered - cedilla ordmasculine - guillemetright - questiondown Agrave Aacute Acircumflex @@ -709,7 +755,6 @@ Ocircumflex Otilde Odieresis - multiply Oslash Ugrave Uacute @@ -741,7 +786,6 @@ ocircumflex otilde odieresis - divide oslash ugrave uacute @@ -848,30 +892,6 @@ Tcommaaccent tcommaaccent jdotless - apostrophemod - circumflex - caron - breve - dotaccent - ring - ogonek - tilde - hungarumlaut - gravecomb - acutecomb - circumflexcomb - tildecomb - macroncomb - brevecomb - dotaccentcomb - dieresiscomb - ringcomb - hungarumlautcomb - caroncomb - commaturnedabovecomb - commaaccentcomb - cedillacomb - ogonekcomb Wgrave wgrave Wacute @@ -885,26 +905,6 @@ ygrave Ytilde ytilde - endash - emdash - quoteleft - quoteright - quotesinglbase - quotedblleft - quotedblright - quotedblbase - bullet - ellipsis - guilsinglleft - guilsinglright - euro - trademark - minus - idotaccent - .notdef - periodcentered.loclCAT - periodcentered.loclCAT.case - caroncomb.alt name GF_Latin_Core diff --git a/GF_glyphsets/Latin/glyphs/GF_Latin_Core.glyphs b/GF_glyphsets/Latin/glyphs/GF_Latin_Core.glyphs index 8fbe554568..256012f65b 100644 --- a/GF_glyphsets/Latin/glyphs/GF_Latin_Core.glyphs +++ b/GF_glyphsets/Latin/glyphs/GF_Latin_Core.glyphs @@ -122,1371 +122,3345 @@ name = Regular; ); glyphs = ( { -glyphname = idotaccent; -lastChange = "2022-03-04 12:31:03 +0000"; +glyphname = dollar; layers = ( { layerId = m01; width = 600; } ); +unicode = 36; }, { -color = 10; -glyphname = .notdef; -lastChange = "2022-03-04 12:31:22 +0000"; +glyphname = percent; layers = ( { layerId = m01; width = 600; } ); +unicode = 37; }, { -glyphname = periodcentered.loclCAT; -lastChange = "2022-03-04 12:31:03 +0000"; +glyphname = ampersand; layers = ( { layerId = m01; width = 600; } ); +unicode = 38; }, { -glyphname = periodcentered.loclCAT.case; -lastChange = "2022-03-04 12:31:03 +0000"; +glyphname = plus; layers = ( { layerId = m01; width = 600; } ); +unicode = 43; }, { -glyphname = caroncomb.alt; -lastChange = "2022-03-04 12:31:03 +0000"; +glyphname = less; layers = ( { layerId = m01; width = 600; } ); +unicode = 60; }, { -glyphname = space; -unicode = 32; -}, +glyphname = equal; +layers = ( { -glyphname = exclam; -unicode = 33; +layerId = m01; +width = 600; +} +); +unicode = 61; }, { -glyphname = quotedbl; -unicode = 34; -}, +glyphname = greater; +layers = ( { -glyphname = numbersign; -unicode = 35; +layerId = m01; +width = 600; +} +); +unicode = 62; }, { -glyphname = dollar; -unicode = 36; -}, +glyphname = at; +layers = ( { -glyphname = percent; -unicode = 37; +layerId = m01; +width = 600; +} +); +unicode = 64; }, { -glyphname = ampersand; -unicode = 38; -}, +glyphname = asciicircum; +layers = ( { -glyphname = quotesingle; -unicode = 39; +layerId = m01; +width = 600; +} +); +unicode = 94; }, { -glyphname = parenleft; -unicode = 40; -}, +glyphname = bar; +layers = ( { -glyphname = parenright; -unicode = 41; +layerId = m01; +width = 600; +} +); +unicode = 124; }, { -glyphname = asterisk; -unicode = 42; -}, +glyphname = asciitilde; +layers = ( { -glyphname = plus; -unicode = 43; +layerId = m01; +width = 600; +} +); +unicode = 126; }, { -glyphname = comma; -unicode = 44; -}, +glyphname = cent; +layers = ( { -glyphname = hyphen; -unicode = 45; +layerId = m01; +width = 600; +} +); +unicode = 162; }, { -glyphname = period; -unicode = 46; -}, +glyphname = sterling; +layers = ( { -glyphname = slash; -unicode = 47; +layerId = m01; +width = 600; +} +); +unicode = 163; }, { -glyphname = zero; -unicode = 48; -}, +glyphname = yen; +layers = ( { -glyphname = one; -unicode = 49; +layerId = m01; +width = 600; +} +); +unicode = 165; }, { -glyphname = two; -unicode = 50; -}, +glyphname = section; +layers = ( { -glyphname = three; -unicode = 51; +layerId = m01; +width = 600; +} +); +unicode = 167; }, { -glyphname = four; -unicode = 52; -}, +glyphname = copyright; +layers = ( { -glyphname = five; -unicode = 53; +layerId = m01; +width = 600; +} +); +unicode = 169; }, { -glyphname = six; -unicode = 54; -}, +glyphname = registered; +layers = ( { -glyphname = seven; -unicode = 55; +layerId = m01; +width = 600; +} +); +unicode = 174; }, { -glyphname = eight; -unicode = 56; -}, +glyphname = degree; +layers = ( { -glyphname = nine; -unicode = 57; +layerId = m01; +width = 600; +} +); +unicode = 176; }, { -glyphname = colon; -unicode = 58; -}, +glyphname = paragraph; +layers = ( { -glyphname = semicolon; -unicode = 59; +layerId = m01; +width = 600; +} +); +unicode = 182; }, { -glyphname = less; -unicode = 60; -}, +glyphname = multiply; +layers = ( { -glyphname = equal; -unicode = 61; +layerId = m01; +width = 600; +} +); +unicode = 215; }, { -glyphname = greater; -unicode = 62; -}, +glyphname = divide; +layers = ( { -glyphname = question; -unicode = 63; +layerId = m01; +width = 600; +} +); +unicode = 247; }, { -glyphname = at; -unicode = 64; -}, +glyphname = euro; +layers = ( { -glyphname = A; -unicode = 65; +layerId = m01; +width = 600; +} +); +unicode = 8364; }, { -glyphname = B; -unicode = 66; -}, +glyphname = trademark; +layers = ( { -glyphname = C; -unicode = 67; +layerId = m01; +width = 600; +} +); +unicode = 8482; }, { -glyphname = D; -unicode = 68; -}, +glyphname = minus; +layers = ( { -glyphname = E; -unicode = 69; +layerId = m01; +width = 600; +} +); +unicode = 8722; }, { -glyphname = F; -unicode = 70; -}, +color = 10; +glyphname = .notdef; +lastChange = "2022-03-04 12:31:22 +0000"; +layers = ( +{ +layerId = m01; +width = 600; +} +); +}, +{ +glyphname = space; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 32; +}, +{ +glyphname = nbspace; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 160; +}, +{ +glyphname = periodcentered.loclCAT; +lastChange = "2022-03-04 12:31:03 +0000"; +layers = ( +{ +layerId = m01; +width = 600; +} +); +}, +{ +glyphname = periodcentered.loclCAT.case; +lastChange = "2022-03-04 12:31:03 +0000"; +layers = ( +{ +layerId = m01; +width = 600; +} +); +}, +{ +glyphname = exclam; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 33; +}, +{ +glyphname = quotedbl; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 34; +}, +{ +glyphname = numbersign; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 35; +}, +{ +glyphname = quotesingle; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 39; +}, +{ +glyphname = parenleft; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 40; +}, +{ +glyphname = parenright; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 41; +}, +{ +glyphname = asterisk; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 42; +}, +{ +glyphname = comma; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 44; +}, +{ +glyphname = hyphen; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 45; +}, +{ +glyphname = period; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 46; +}, +{ +glyphname = slash; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 47; +}, +{ +glyphname = colon; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 58; +}, +{ +glyphname = semicolon; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 59; +}, +{ +glyphname = question; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 63; +}, +{ +glyphname = bracketleft; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 91; +}, +{ +glyphname = backslash; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 92; +}, +{ +glyphname = bracketright; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 93; +}, +{ +glyphname = underscore; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 95; +}, +{ +glyphname = braceleft; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 123; +}, +{ +glyphname = braceright; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 125; +}, +{ +glyphname = exclamdown; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 161; +}, +{ +glyphname = guillemetleft; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 171; +}, +{ +glyphname = periodcentered; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 183; +}, +{ +glyphname = guillemetright; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 187; +}, +{ +glyphname = questiondown; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 191; +}, +{ +glyphname = endash; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 8211; +}, +{ +glyphname = emdash; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 8212; +}, +{ +glyphname = quoteleft; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 8216; +}, +{ +glyphname = quoteright; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 8217; +}, +{ +glyphname = quotesinglbase; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 8218; +}, +{ +glyphname = quotedblleft; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 8220; +}, +{ +glyphname = quotedblright; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 8221; +}, +{ +glyphname = quotedblbase; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 8222; +}, +{ +glyphname = bullet; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 8226; +}, +{ +glyphname = ellipsis; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 8230; +}, +{ +glyphname = guilsinglleft; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 8249; +}, +{ +glyphname = guilsinglright; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 8250; +}, +{ +glyphname = zero; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 48; +}, +{ +glyphname = one; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 49; +}, +{ +glyphname = two; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 50; +}, +{ +glyphname = three; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 51; +}, +{ +glyphname = four; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 52; +}, +{ +glyphname = five; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 53; +}, +{ +glyphname = six; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 54; +}, +{ +glyphname = seven; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 55; +}, +{ +glyphname = eight; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 56; +}, +{ +glyphname = nine; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 57; +}, +{ +glyphname = caroncomb.alt; +lastChange = "2022-03-04 12:31:03 +0000"; +layers = ( +{ +layerId = m01; +width = 600; +} +); +}, +{ +glyphname = grave; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 96; +}, +{ +glyphname = dieresis; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 168; +}, +{ +glyphname = macron; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 175; +}, +{ +glyphname = acute; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 180; +}, +{ +glyphname = cedilla; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 184; +}, +{ +glyphname = apostrophemod; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 700; +}, +{ +glyphname = circumflex; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 710; +}, +{ +glyphname = caron; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 711; +}, +{ +glyphname = breve; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 728; +}, +{ +glyphname = dotaccent; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 729; +}, +{ +glyphname = ring; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 730; +}, +{ +glyphname = ogonek; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 731; +}, +{ +glyphname = tilde; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 732; +}, +{ +glyphname = hungarumlaut; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 733; +}, +{ +glyphname = gravecomb; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 768; +}, +{ +glyphname = acutecomb; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 769; +}, +{ +glyphname = circumflexcomb; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 770; +}, +{ +glyphname = tildecomb; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 771; +}, +{ +glyphname = macroncomb; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 772; +}, +{ +glyphname = brevecomb; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 774; +}, +{ +glyphname = dotaccentcomb; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 775; +}, +{ +glyphname = dieresiscomb; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 776; +}, +{ +glyphname = ringcomb; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 778; +}, +{ +glyphname = hungarumlautcomb; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 779; +}, +{ +glyphname = caroncomb; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 780; +}, +{ +glyphname = commaturnedabovecomb; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 786; +}, +{ +glyphname = commaaccentcomb; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 806; +}, +{ +glyphname = cedillacomb; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 807; +}, +{ +glyphname = ogonekcomb; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 808; +}, +{ +glyphname = idotaccent; +lastChange = "2022-03-04 12:31:03 +0000"; +layers = ( +{ +layerId = m01; +width = 600; +} +); +}, +{ +glyphname = A; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 65; +}, +{ +glyphname = B; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 66; +}, +{ +glyphname = C; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 67; +}, +{ +glyphname = D; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 68; +}, +{ +glyphname = E; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 69; +}, +{ +glyphname = F; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 70; +}, { glyphname = G; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 71; }, { glyphname = H; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 72; }, { glyphname = I; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 73; }, { glyphname = J; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 74; }, { glyphname = K; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 75; }, { glyphname = L; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 76; }, { glyphname = M; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 77; }, { glyphname = N; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 78; }, { glyphname = O; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 79; }, { glyphname = P; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 80; }, { glyphname = Q; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 81; }, { glyphname = R; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 82; }, { glyphname = S; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 83; }, { glyphname = T; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 84; }, { glyphname = U; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 85; }, { glyphname = V; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 86; }, { glyphname = W; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 87; }, { glyphname = X; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 88; }, { glyphname = Y; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 89; }, { glyphname = Z; -unicode = 90; -}, -{ -glyphname = bracketleft; -unicode = 91; -}, -{ -glyphname = backslash; -unicode = 92; -}, -{ -glyphname = bracketright; -unicode = 93; -}, -{ -glyphname = asciicircum; -unicode = 94; -}, -{ -glyphname = underscore; -unicode = 95; -}, +layers = ( { -glyphname = grave; -unicode = 96; +layerId = m01; +width = 600; +} +); +unicode = 90; }, { glyphname = a; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 97; }, { glyphname = b; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 98; }, { glyphname = c; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 99; }, { glyphname = d; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 100; }, { glyphname = e; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 101; }, { glyphname = f; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 102; }, { glyphname = g; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 103; }, { glyphname = h; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 104; }, { glyphname = i; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 105; }, { glyphname = j; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 106; }, { glyphname = k; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 107; }, { glyphname = l; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 108; }, { glyphname = m; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 109; }, { glyphname = n; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 110; }, { glyphname = o; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 111; }, { glyphname = p; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 112; }, { glyphname = q; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 113; }, { glyphname = r; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 114; }, { glyphname = s; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 115; }, { glyphname = t; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 116; }, { glyphname = u; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 117; }, { glyphname = v; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 118; }, { glyphname = w; -unicode = 119; -}, -{ -glyphname = x; -unicode = 120; -}, -{ -glyphname = y; -unicode = 121; -}, -{ -glyphname = z; -unicode = 122; -}, -{ -glyphname = braceleft; -unicode = 123; -}, -{ -glyphname = bar; -unicode = 124; -}, -{ -glyphname = braceright; -unicode = 125; -}, -{ -glyphname = asciitilde; -unicode = 126; -}, -{ -glyphname = nbspace; -unicode = 160; -}, -{ -glyphname = exclamdown; -unicode = 161; -}, -{ -glyphname = cent; -unicode = 162; -}, -{ -glyphname = sterling; -unicode = 163; -}, -{ -glyphname = yen; -unicode = 165; -}, -{ -glyphname = section; -unicode = 167; -}, -{ -glyphname = dieresis; -unicode = 168; -}, -{ -glyphname = copyright; -unicode = 169; -}, -{ -glyphname = ordfeminine; -unicode = 170; -}, -{ -glyphname = guillemetleft; -unicode = 171; -}, -{ -glyphname = registered; -unicode = 174; -}, +layers = ( { -glyphname = macron; -unicode = 175; +layerId = m01; +width = 600; +} +); +unicode = 119; }, { -glyphname = degree; -unicode = 176; -}, +glyphname = x; +layers = ( { -glyphname = acute; -unicode = 180; +layerId = m01; +width = 600; +} +); +unicode = 120; }, { -glyphname = paragraph; -unicode = 182; -}, +glyphname = y; +layers = ( { -glyphname = periodcentered; -unicode = 183; +layerId = m01; +width = 600; +} +); +unicode = 121; }, { -glyphname = cedilla; -unicode = 184; -}, +glyphname = z; +layers = ( { -glyphname = ordmasculine; -unicode = 186; +layerId = m01; +width = 600; +} +); +unicode = 122; }, { -glyphname = guillemetright; -unicode = 187; +glyphname = ordfeminine; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 170; }, { -glyphname = questiondown; -unicode = 191; +glyphname = ordmasculine; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 186; }, { glyphname = Agrave; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 192; }, { glyphname = Aacute; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 193; }, { glyphname = Acircumflex; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 194; }, { glyphname = Atilde; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 195; }, { glyphname = Adieresis; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 196; }, { glyphname = Aring; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 197; }, { glyphname = AE; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 198; }, { glyphname = Ccedilla; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 199; }, { glyphname = Egrave; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 200; }, { glyphname = Eacute; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 201; }, { glyphname = Ecircumflex; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 202; }, { glyphname = Edieresis; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 203; }, { glyphname = Igrave; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 204; }, { glyphname = Iacute; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 205; }, { glyphname = Icircumflex; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 206; }, { glyphname = Idieresis; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 207; }, { glyphname = Eth; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 208; }, { glyphname = Ntilde; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 209; }, { glyphname = Ograve; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 210; }, { glyphname = Oacute; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 211; }, { glyphname = Ocircumflex; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 212; }, { glyphname = Otilde; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 213; }, { glyphname = Odieresis; -unicode = 214; -}, +layers = ( { -glyphname = multiply; -unicode = 215; +layerId = m01; +width = 600; +} +); +unicode = 214; }, { glyphname = Oslash; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 216; }, { glyphname = Ugrave; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 217; }, { glyphname = Uacute; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 218; }, { glyphname = Ucircumflex; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 219; }, { glyphname = Udieresis; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 220; }, { glyphname = Yacute; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 221; }, { glyphname = Thorn; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 222; }, { glyphname = germandbls; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 223; }, { glyphname = agrave; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 224; }, { glyphname = aacute; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 225; }, { glyphname = acircumflex; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 226; }, { glyphname = atilde; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 227; }, { glyphname = adieresis; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 228; }, { glyphname = aring; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 229; }, { glyphname = ae; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 230; }, { glyphname = ccedilla; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 231; }, { glyphname = egrave; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 232; }, { glyphname = eacute; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 233; }, { glyphname = ecircumflex; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 234; }, { glyphname = edieresis; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 235; }, { glyphname = igrave; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 236; }, { glyphname = iacute; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 237; }, { glyphname = icircumflex; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 238; }, { glyphname = idieresis; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 239; }, { glyphname = eth; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 240; }, { glyphname = ntilde; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 241; }, { glyphname = ograve; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 242; }, { glyphname = oacute; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 243; }, { glyphname = ocircumflex; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 244; }, { glyphname = otilde; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 245; }, { glyphname = odieresis; -unicode = 246; -}, +layers = ( { -glyphname = divide; -unicode = 247; +layerId = m01; +width = 600; +} +); +unicode = 246; }, { glyphname = oslash; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 248; }, { glyphname = ugrave; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 249; }, { glyphname = uacute; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 250; }, { glyphname = ucircumflex; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 251; }, { glyphname = udieresis; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 252; }, { glyphname = yacute; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 253; }, { glyphname = thorn; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 254; }, { glyphname = ydieresis; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 255; }, { glyphname = Amacron; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 256; }, { glyphname = amacron; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 257; }, { glyphname = Abreve; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 258; }, { glyphname = abreve; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 259; }, { glyphname = Aogonek; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 260; }, { glyphname = aogonek; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 261; }, { glyphname = Cacute; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 262; }, { glyphname = cacute; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 263; }, { glyphname = Cdotaccent; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 266; }, { glyphname = cdotaccent; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 267; }, { glyphname = Ccaron; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 268; }, { glyphname = ccaron; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 269; }, { glyphname = Dcaron; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 270; }, { glyphname = dcaron; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 271; }, { glyphname = Dcroat; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 272; }, { glyphname = dcroat; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 273; }, { glyphname = Emacron; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 274; }, { glyphname = emacron; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 275; }, { glyphname = Edotaccent; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 278; }, { glyphname = edotaccent; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 279; }, { glyphname = Eogonek; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 280; }, { glyphname = eogonek; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 281; }, { glyphname = Ecaron; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 282; }, { glyphname = ecaron; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 283; }, { glyphname = Gbreve; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 286; }, { glyphname = gbreve; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 287; }, { glyphname = Gdotaccent; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 288; }, { glyphname = gdotaccent; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 289; }, { glyphname = Gcommaaccent; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 290; }, { glyphname = gcommaaccent; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 291; }, { glyphname = Hbar; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 294; }, { glyphname = hbar; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 295; }, { glyphname = Itilde; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 296; }, { glyphname = itilde; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 297; }, { glyphname = Imacron; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 298; }, { glyphname = imacron; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 299; }, { glyphname = Iogonek; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 302; }, { glyphname = iogonek; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 303; }, { glyphname = Idotaccent; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 304; }, { glyphname = idotless; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 305; }, { glyphname = Kcommaaccent; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 310; }, { glyphname = kcommaaccent; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 311; }, { glyphname = Lacute; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 313; }, { glyphname = lacute; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 314; }, { glyphname = Lcommaaccent; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 315; }, { glyphname = lcommaaccent; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 316; }, { glyphname = Lcaron; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 317; }, { glyphname = lcaron; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 318; }, { glyphname = Lslash; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 321; }, { glyphname = lslash; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 322; }, { glyphname = Nacute; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 323; }, { glyphname = nacute; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 324; }, { glyphname = Ncommaaccent; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 325; }, { glyphname = ncommaaccent; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 326; }, { glyphname = Ncaron; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 327; }, { glyphname = ncaron; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 328; }, { glyphname = Ohungarumlaut; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 336; }, { glyphname = ohungarumlaut; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 337; }, { glyphname = OE; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 338; }, { glyphname = oe; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 339; }, { glyphname = Racute; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 340; }, { glyphname = racute; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 341; }, { glyphname = Rcaron; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 344; }, { glyphname = rcaron; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 345; }, { glyphname = Sacute; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 346; }, { glyphname = sacute; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 347; }, { glyphname = Scedilla; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 350; }, { glyphname = scedilla; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 351; }, { glyphname = Scaron; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 352; }, { glyphname = scaron; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 353; }, { glyphname = Tcaron; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 356; }, { glyphname = tcaron; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 357; }, { glyphname = Utilde; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 360; }, { glyphname = utilde; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 361; }, { glyphname = Umacron; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 362; }, { glyphname = umacron; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 363; }, { glyphname = Uring; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 366; }, { glyphname = uring; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 367; }, { glyphname = Uhungarumlaut; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 368; }, { glyphname = uhungarumlaut; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 369; }, { glyphname = Uogonek; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 370; }, { glyphname = uogonek; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 371; }, { glyphname = Wcircumflex; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 372; }, { glyphname = wcircumflex; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 373; }, { glyphname = Ycircumflex; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 374; }, { glyphname = ycircumflex; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 375; }, { glyphname = Ydieresis; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 376; }, { glyphname = Zacute; -unicode = 377; -}, -{ -glyphname = zacute; -unicode = 378; -}, -{ -glyphname = Zdotaccent; -unicode = 379; -}, -{ -glyphname = zdotaccent; -unicode = 380; -}, -{ -glyphname = Zcaron; -unicode = 381; -}, -{ -glyphname = zcaron; -unicode = 382; -}, -{ -glyphname = Scommaaccent; -unicode = 536; -}, -{ -glyphname = scommaaccent; -unicode = 537; -}, -{ -glyphname = Tcommaaccent; -unicode = 538; -}, -{ -glyphname = tcommaaccent; -unicode = 539; -}, -{ -glyphname = jdotless; -unicode = 567; -}, -{ -glyphname = apostrophemod; -unicode = 700; -}, -{ -glyphname = circumflex; -unicode = 710; -}, -{ -glyphname = caron; -unicode = 711; -}, -{ -glyphname = breve; -unicode = 728; -}, +layers = ( { -glyphname = dotaccent; -unicode = 729; +layerId = m01; +width = 600; +} +); +unicode = 377; }, { -glyphname = ring; -unicode = 730; -}, +glyphname = zacute; +layers = ( { -glyphname = ogonek; -unicode = 731; +layerId = m01; +width = 600; +} +); +unicode = 378; }, { -glyphname = tilde; -unicode = 732; -}, +glyphname = Zdotaccent; +layers = ( { -glyphname = hungarumlaut; -unicode = 733; +layerId = m01; +width = 600; +} +); +unicode = 379; }, { -glyphname = gravecomb; -unicode = 768; -}, +glyphname = zdotaccent; +layers = ( { -glyphname = acutecomb; -unicode = 769; +layerId = m01; +width = 600; +} +); +unicode = 380; }, { -glyphname = circumflexcomb; -unicode = 770; -}, +glyphname = Zcaron; +layers = ( { -glyphname = tildecomb; -unicode = 771; +layerId = m01; +width = 600; +} +); +unicode = 381; }, { -glyphname = macroncomb; -unicode = 772; -}, +glyphname = zcaron; +layers = ( { -glyphname = brevecomb; -unicode = 774; +layerId = m01; +width = 600; +} +); +unicode = 382; }, { -glyphname = dotaccentcomb; -unicode = 775; -}, +glyphname = Scommaaccent; +layers = ( { -glyphname = dieresiscomb; -unicode = 776; +layerId = m01; +width = 600; +} +); +unicode = 536; }, { -glyphname = ringcomb; -unicode = 778; -}, +glyphname = scommaaccent; +layers = ( { -glyphname = hungarumlautcomb; -unicode = 779; +layerId = m01; +width = 600; +} +); +unicode = 537; }, { -glyphname = caroncomb; -unicode = 780; -}, +glyphname = Tcommaaccent; +layers = ( { -glyphname = commaturnedabovecomb; -unicode = 786; +layerId = m01; +width = 600; +} +); +unicode = 538; }, { -glyphname = commaaccentcomb; -unicode = 806; -}, +glyphname = tcommaaccent; +layers = ( { -glyphname = cedillacomb; -unicode = 807; +layerId = m01; +width = 600; +} +); +unicode = 539; }, { -glyphname = ogonekcomb; -unicode = 808; +glyphname = jdotless; +layers = ( +{ +layerId = m01; +width = 600; +} +); +unicode = 567; }, { glyphname = Wgrave; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 7808; }, { glyphname = wgrave; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 7809; }, { glyphname = Wacute; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 7810; }, { glyphname = wacute; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 7811; }, { glyphname = Wdieresis; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 7812; }, { glyphname = wdieresis; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 7813; }, { glyphname = Germandbls; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 7838; }, { glyphname = Etilde; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 7868; }, { glyphname = etilde; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 7869; }, { glyphname = Ygrave; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 7922; }, { glyphname = ygrave; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 7923; }, { glyphname = Ytilde; +layers = ( +{ +layerId = m01; +width = 600; +} +); unicode = 7928; }, { glyphname = ytilde; -unicode = 7929; -}, -{ -glyphname = endash; -unicode = 8211; -}, -{ -glyphname = emdash; -unicode = 8212; -}, -{ -glyphname = quoteleft; -unicode = 8216; -}, -{ -glyphname = quoteright; -unicode = 8217; -}, -{ -glyphname = quotesinglbase; -unicode = 8218; -}, -{ -glyphname = quotedblleft; -unicode = 8220; -}, -{ -glyphname = quotedblright; -unicode = 8221; -}, -{ -glyphname = quotedblbase; -unicode = 8222; -}, -{ -glyphname = bullet; -unicode = 8226; -}, -{ -glyphname = ellipsis; -unicode = 8230; -}, -{ -glyphname = guilsinglleft; -unicode = 8249; -}, -{ -glyphname = guilsinglright; -unicode = 8250; -}, -{ -glyphname = euro; -unicode = 8364; -}, -{ -glyphname = trademark; -unicode = 8482; -}, +layers = ( { -glyphname = minus; -unicode = 8722; +layerId = m01; +width = 600; +} +); +unicode = 7929; } ); instances = ( diff --git a/GF_glyphsets/Latin/txt/nice-names/GF_Latin_Core.txt b/GF_glyphsets/Latin/txt/nice-names/GF_Latin_Core.txt index 35ccd773bf..715e9d33a9 100644 --- a/GF_glyphsets/Latin/txt/nice-names/GF_Latin_Core.txt +++ b/GF_glyphsets/Latin/txt/nice-names/GF_Latin_Core.txt @@ -1,19 +1,69 @@ +dollar +percent +ampersand +plus +less +equal +greater +at +asciicircum +bar +asciitilde +cent +sterling +yen +section +copyright +registered +degree +paragraph +multiply +divide +euro +trademark +minus +.notdef space +nbspace +periodcentered.loclCAT +periodcentered.loclCAT.case exclam quotedbl numbersign -dollar -percent -ampersand quotesingle parenleft parenright asterisk -plus comma hyphen period slash +colon +semicolon +question +bracketleft +backslash +bracketright +underscore +braceleft +braceright +exclamdown +guillemetleft +periodcentered +guillemetright +questiondown +endash +emdash +quoteleft +quoteright +quotesinglbase +quotedblleft +quotedblright +quotedblbase +bullet +ellipsis +guilsinglleft +guilsinglright zero one two @@ -24,13 +74,37 @@ six seven eight nine -colon -semicolon -less -equal -greater -question -at +caroncomb.alt +grave +dieresis +macron +acute +cedilla +apostrophemod +circumflex +caron +breve +dotaccent +ring +ogonek +tilde +hungarumlaut +gravecomb +acutecomb +circumflexcomb +tildecomb +macroncomb +brevecomb +dotaccentcomb +dieresiscomb +ringcomb +hungarumlautcomb +caroncomb +commaturnedabovecomb +commaaccentcomb +cedillacomb +ogonekcomb +idotaccent A B C @@ -57,12 +131,6 @@ W X Y Z -bracketleft -backslash -bracketright -asciicircum -underscore -grave a b c @@ -89,30 +157,8 @@ w x y z -braceleft -bar -braceright -asciitilde -nbspace -exclamdown -cent -sterling -yen -section -dieresis -copyright ordfeminine -guillemetleft -registered -macron -degree -acute -paragraph -periodcentered -cedilla ordmasculine -guillemetright -questiondown Agrave Aacute Acircumflex @@ -136,7 +182,6 @@ Oacute Ocircumflex Otilde Odieresis -multiply Oslash Ugrave Uacute @@ -168,7 +213,6 @@ oacute ocircumflex otilde odieresis -divide oslash ugrave uacute @@ -275,30 +319,6 @@ scommaaccent Tcommaaccent tcommaaccent jdotless -apostrophemod -circumflex -caron -breve -dotaccent -ring -ogonek -tilde -hungarumlaut -gravecomb -acutecomb -circumflexcomb -tildecomb -macroncomb -brevecomb -dotaccentcomb -dieresiscomb -ringcomb -hungarumlautcomb -caroncomb -commaturnedabovecomb -commaaccentcomb -cedillacomb -ogonekcomb Wgrave wgrave Wacute @@ -311,24 +331,4 @@ etilde Ygrave ygrave Ytilde -ytilde -endash -emdash -quoteleft -quoteright -quotesinglbase -quotedblleft -quotedblright -quotedblbase -bullet -ellipsis -guilsinglleft -guilsinglright -euro -trademark -minus -idotaccent -.notdef -periodcentered.loclCAT -periodcentered.loclCAT.case -caroncomb.alt \ No newline at end of file +ytilde \ No newline at end of file diff --git a/GF_glyphsets/Latin/txt/prod-names/GF_Latin_Core.txt b/GF_glyphsets/Latin/txt/prod-names/GF_Latin_Core.txt index 60357effe6..b2bb8e7d40 100644 --- a/GF_glyphsets/Latin/txt/prod-names/GF_Latin_Core.txt +++ b/GF_glyphsets/Latin/txt/prod-names/GF_Latin_Core.txt @@ -1,19 +1,69 @@ +dollar +percent +ampersand +plus +less +equal +greater +at +asciicircum +bar +asciitilde +cent +sterling +yen +section +copyright +registered +degree +paragraph +multiply +divide +Euro +trademark +minus +.notdef space +uni00A0 +periodcentered.loclCAT +periodcentered.loclCAT.case exclam quotedbl numbersign -dollar -percent -ampersand quotesingle parenleft parenright asterisk -plus comma hyphen period slash +colon +semicolon +question +bracketleft +backslash +bracketright +underscore +braceleft +braceright +exclamdown +guillemotleft +periodcentered +guillemotright +questiondown +endash +emdash +quoteleft +quoteright +quotesinglbase +quotedblleft +quotedblright +quotedblbase +bullet +ellipsis +guilsinglleft +guilsinglright zero one two @@ -24,13 +74,37 @@ six seven eight nine -colon -semicolon -less -equal -greater -question -at +uni030C.alt +grave +dieresis +macron +acute +cedilla +uni02BC +circumflex +caron +breve +dotaccent +ring +ogonek +tilde +hungarumlaut +gravecomb +acutecomb +uni0302 +tildecomb +uni0304 +uni0306 +uni0307 +uni0308 +uni030A +uni030B +uni030C +uni0312 +uni0326 +uni0327 +uni0328 +i.loclTRK A B C @@ -57,12 +131,6 @@ W X Y Z -bracketleft -backslash -bracketright -asciicircum -underscore -grave a b c @@ -89,30 +157,8 @@ w x y z -braceleft -bar -braceright -asciitilde -uni00A0 -exclamdown -cent -sterling -yen -section -dieresis -copyright ordfeminine -guillemotleft -registered -macron -degree -acute -paragraph -periodcentered -cedilla ordmasculine -guillemotright -questiondown Agrave Aacute Acircumflex @@ -136,7 +182,6 @@ Oacute Ocircumflex Otilde Odieresis -multiply Oslash Ugrave Uacute @@ -168,7 +213,6 @@ oacute ocircumflex otilde odieresis -divide oslash ugrave uacute @@ -275,30 +319,6 @@ uni0219 uni021A uni021B uni0237 -uni02BC -circumflex -caron -breve -dotaccent -ring -ogonek -tilde -hungarumlaut -gravecomb -acutecomb -uni0302 -tildecomb -uni0304 -uni0306 -uni0307 -uni0308 -uni030A -uni030B -uni030C -uni0312 -uni0326 -uni0327 -uni0328 Wgrave wgrave Wacute @@ -311,24 +331,4 @@ uni1EBD Ygrave ygrave uni1EF8 -uni1EF9 -endash -emdash -quoteleft -quoteright -quotesinglbase -quotedblleft -quotedblright -quotedblbase -bullet -ellipsis -guilsinglleft -guilsinglright -Euro -trademark -minus -i.loclTRK -.notdef -periodcentered.loclCAT -periodcentered.loclCAT.case -uni030C.alt \ No newline at end of file +uni1EF9 \ No newline at end of file diff --git a/scripts/assemble_charactersets.py b/scripts/assemble_charactersets.py index bb887f3bbf..30b77ad3d9 100644 --- a/scripts/assemble_charactersets.py +++ b/scripts/assemble_charactersets.py @@ -12,6 +12,29 @@ from glyphsLib.glyphdata import get_glyph, _lookup_attributes_by_unicode +def sort_unicodes(a, b): + if a.unicode and b.unicode: + return int(a.unicode, 16) - int(b.unicode, 16) + elif a.unicode: + return -1 + elif b.unicode: + return 1 + else: + return 0 + + +def sort_by_category(a, b): + info_a = get_glyph(a.name) + info_b = get_glyph(b.name) + + value = sorted([info_a.category, info_b.category]).index(info_a.category) + if value == 0: + value = -1 + value *= -1 + + return value + + def assemble_characterset(languages_yaml_path): glyphset_name = os.path.basename(languages_yaml_path).replace(".yaml", "") glyphset_category_name = "_".join(glyphset_name.split("_")[:2]) @@ -86,15 +109,29 @@ def assemble_characterset(languages_yaml_path): for _i, unicode in enumerate(sorted(list(character_set))): unicode = f"{unicode:#0{6}X}".replace("0X", "") glyph_info = _lookup_attributes_by_unicode(unicode, GLYPHDATA) - glyph = glyphsLib.GSGlyph() - glyph.name = glyph_info["name"] + glyph = glyphsLib.GSGlyph(glyph_info["name"]) + # glyph.color = 1 glyph.unicode = unicode + # glyph.lastChange = "2023-10-19 09:12:40 +0000" font.glyphs.append(glyph) + layer = glyphsLib.GSLayer() + layer.layerId = "m01" + layer.associatedMasterId = font.masters[0].id + layer.width = 600 + glyph.layers.append(layer) + + # Sort + font.glyphs = sorted(font.glyphs, key=functools.cmp_to_key(sort_by_category)) + glyph_names = [glyph.name for glyph in font.glyphs] + production_glyph_names = [ + get_glyph(glyph.name).production_name for glyph in font.glyphs + ] # Save glyphs file font.axes = [] for master in font.masters: master.axes = [] + font.instances = [] font.save(glyphs_path) # Output sorted character set to .nam file @@ -105,20 +142,7 @@ def assemble_characterset(languages_yaml_path): if i < len(character_set) - 1: f.write("\n") - def sort_unicodes(a, b): - if a.unicode and b.unicode: - return int(a.unicode, 16) - int(b.unicode, 16) - elif a.unicode: - return -1 - elif b.unicode: - return 1 - else: - return 0 - # Output txt files - glyphs = sorted(font.glyphs, key=functools.cmp_to_key(sort_unicodes)) - glyph_names = [glyph.name for glyph in glyphs] - production_glyph_names = [get_glyph(glyph.name).production_name for glyph in glyphs] with open(txt_nicenames_path, "w") as f: f.write("\n".join(glyph_names)) with open(txt_prodnames_path, "w") as f: From 7ec407216a1150c9d274afa253e8f57b080a1c75 Mon Sep 17 00:00:00 2001 From: Yanone Date: Thu, 19 Oct 2023 16:35:55 +0200 Subject: [PATCH 40/59] Formatting --- scripts/assemble_languages.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/assemble_languages.py b/scripts/assemble_languages.py index 43a53df94a..3b03d5126c 100644 --- a/scripts/assemble_languages.py +++ b/scripts/assemble_languages.py @@ -36,9 +36,9 @@ def main(args): # Go through countries and add them to the set if their region_group is in options.regions or they are in options.regions for country_code in regions: - if set(regions[country_code].region_group).intersection(set(options.regions)) or ( - country_code in options.regions - ): + if set(regions[country_code].region_group).intersection( + set(options.regions) + ) or (country_code in options.regions): country_codes.add(country_code) # Go through languages and add them to the set if their regions are in country_codes From 09a10bb1c6ed0f62b9b600ed5b00d642efe8d4b4 Mon Sep 17 00:00:00 2001 From: Yanone Date: Thu, 19 Oct 2023 16:36:12 +0200 Subject: [PATCH 41/59] Prioritizinh the OR statement --- scripts/assemble_languages.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/assemble_languages.py b/scripts/assemble_languages.py index 3b03d5126c..0992c4c345 100644 --- a/scripts/assemble_languages.py +++ b/scripts/assemble_languages.py @@ -47,8 +47,10 @@ def main(args): # Print languages if they are supported through the logic for language_code in sorted(languages.keys()): if ( - language_code in options.include_languages - or set(languages[language_code].region).intersection(country_codes) + ( + language_code in options.include_languages + or set(languages[language_code].region).intersection(country_codes) + ) and languages[language_code].population >= options.population and languages[language_code].script == options.script ): From 387198503fd2237accbfb3b9fabda2c7531c666d Mon Sep 17 00:00:00 2001 From: Yanone Date: Thu, 19 Oct 2023 16:36:51 +0200 Subject: [PATCH 42/59] Added 0x0000 --- scripts/find_language_for_character.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/scripts/find_language_for_character.py b/scripts/find_language_for_character.py index 5365684289..b37f0fd9f6 100644 --- a/scripts/find_language_for_character.py +++ b/scripts/find_language_for_character.py @@ -18,8 +18,12 @@ languages = gflanguages.LoadLanguages() if __name__ == "__main__": - parser = argparse.ArgumentParser(description="Find languages using a given character.") - parser.add_argument("character", metavar="CHAR", help="Unicode character") + parser = argparse.ArgumentParser( + description="Find languages using a given character." + ) + parser.add_argument( + "character", metavar="CHAR", help="Unicode character or 0x0000 string" + ) args = parser.parse_args() input_character = args.character From 048bf2e952ce5411cd7ce587155bf0a5a9c5c6a4 Mon Sep 17 00:00:00 2001 From: Yanone Date: Thu, 19 Oct 2023 16:37:33 +0200 Subject: [PATCH 43/59] Sort glyphs in glyphs file by category, in other files by unicode --- .../Latin/glyphs/CustomFilter_GF_Latin.plist | 170 +- .../Latin/glyphs/GF_Latin_Core.glyphs | 2002 +---------------- .../Latin/txt/nice-names/GF_Latin_Core.txt | 172 +- .../Latin/txt/prod-names/GF_Latin_Core.txt | 172 +- scripts/assemble_charactersets.py | 12 +- 5 files changed, 274 insertions(+), 2254 deletions(-) diff --git a/GF_glyphsets/Latin/glyphs/CustomFilter_GF_Latin.plist b/GF_glyphsets/Latin/glyphs/CustomFilter_GF_Latin.plist index 9601ebbc6b..c13fee252f 100644 --- a/GF_glyphsets/Latin/glyphs/CustomFilter_GF_Latin.plist +++ b/GF_glyphsets/Latin/glyphs/CustomFilter_GF_Latin.plist @@ -571,72 +571,22 @@ list - dollar - percent - ampersand - plus - less - equal - greater - at - asciicircum - bar - asciitilde - cent - sterling - yen - section - copyright - registered - degree - paragraph - multiply - divide - euro - trademark - minus - .notdef space - nbspace - periodcentered.loclCAT - periodcentered.loclCAT.case exclam quotedbl numbersign + dollar + percent + ampersand quotesingle parenleft parenright asterisk + plus comma hyphen period slash - colon - semicolon - question - bracketleft - backslash - bracketright - underscore - braceleft - braceright - exclamdown - guillemetleft - periodcentered - guillemetright - questiondown - endash - emdash - quoteleft - quoteright - quotesinglbase - quotedblleft - quotedblright - quotedblbase - bullet - ellipsis - guilsinglleft - guilsinglright zero one two @@ -647,37 +597,13 @@ seven eight nine - caroncomb.alt - grave - dieresis - macron - acute - cedilla - apostrophemod - circumflex - caron - breve - dotaccent - ring - ogonek - tilde - hungarumlaut - gravecomb - acutecomb - circumflexcomb - tildecomb - macroncomb - brevecomb - dotaccentcomb - dieresiscomb - ringcomb - hungarumlautcomb - caroncomb - commaturnedabovecomb - commaaccentcomb - cedillacomb - ogonekcomb - idotaccent + colon + semicolon + less + equal + greater + question + at A B C @@ -704,6 +630,12 @@ X Y Z + bracketleft + backslash + bracketright + asciicircum + underscore + grave a b c @@ -730,8 +662,30 @@ x y z + braceleft + bar + braceright + asciitilde + nbspace + exclamdown + cent + sterling + yen + section + dieresis + copyright ordfeminine + guillemetleft + registered + macron + degree + acute + paragraph + periodcentered + cedilla ordmasculine + guillemetright + questiondown Agrave Aacute Acircumflex @@ -755,6 +709,7 @@ Ocircumflex Otilde Odieresis + multiply Oslash Ugrave Uacute @@ -786,6 +741,7 @@ ocircumflex otilde odieresis + divide oslash ugrave uacute @@ -892,6 +848,30 @@ Tcommaaccent tcommaaccent jdotless + apostrophemod + circumflex + caron + breve + dotaccent + ring + ogonek + tilde + hungarumlaut + gravecomb + acutecomb + circumflexcomb + tildecomb + macroncomb + brevecomb + dotaccentcomb + dieresiscomb + ringcomb + hungarumlautcomb + caroncomb + commaturnedabovecomb + commaaccentcomb + cedillacomb + ogonekcomb Wgrave wgrave Wacute @@ -905,6 +885,26 @@ ygrave Ytilde ytilde + endash + emdash + quoteleft + quoteright + quotesinglbase + quotedblleft + quotedblright + quotedblbase + bullet + ellipsis + guilsinglleft + guilsinglright + euro + trademark + minus + .notdef + periodcentered.loclCAT + periodcentered.loclCAT.case + caroncomb.alt + idotaccent name GF_Latin_Core diff --git a/GF_glyphsets/Latin/glyphs/GF_Latin_Core.glyphs b/GF_glyphsets/Latin/glyphs/GF_Latin_Core.glyphs index 256012f65b..bbf03cc6be 100644 --- a/GF_glyphsets/Latin/glyphs/GF_Latin_Core.glyphs +++ b/GF_glyphsets/Latin/glyphs/GF_Latin_Core.glyphs @@ -123,242 +123,98 @@ name = Regular; glyphs = ( { glyphname = dollar; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 36; }, { glyphname = percent; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 37; }, { glyphname = ampersand; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 38; }, { glyphname = plus; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 43; }, { glyphname = less; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 60; }, { glyphname = equal; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 61; }, { glyphname = greater; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 62; }, { glyphname = at; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 64; }, { glyphname = asciicircum; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 94; }, { glyphname = bar; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 124; }, { glyphname = asciitilde; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 126; }, { glyphname = cent; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 162; }, { glyphname = sterling; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 163; }, { glyphname = yen; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 165; }, { glyphname = section; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 167; }, { glyphname = copyright; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 169; }, { glyphname = registered; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 174; }, { glyphname = degree; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 176; }, { glyphname = paragraph; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 182; }, { glyphname = multiply; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 215; }, { glyphname = divide; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 247; }, { glyphname = euro; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 8364; }, { glyphname = trademark; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 8482; }, { glyphname = minus; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 8722; }, { @@ -374,22 +230,10 @@ width = 600; }, { glyphname = space; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 32; }, { glyphname = nbspace; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 160; }, { @@ -414,472 +258,190 @@ width = 600; }, { glyphname = exclam; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 33; }, { glyphname = quotedbl; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 34; }, { glyphname = numbersign; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 35; }, { glyphname = quotesingle; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 39; }, { glyphname = parenleft; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 40; }, { glyphname = parenright; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 41; }, { glyphname = asterisk; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 42; }, { glyphname = comma; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 44; }, { glyphname = hyphen; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 45; }, { glyphname = period; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 46; }, { glyphname = slash; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 47; }, { glyphname = colon; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 58; }, { glyphname = semicolon; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 59; }, { glyphname = question; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 63; }, { glyphname = bracketleft; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 91; }, { glyphname = backslash; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 92; }, { glyphname = bracketright; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 93; -}, +unicode = 93; +}, { glyphname = underscore; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 95; }, { glyphname = braceleft; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 123; }, { glyphname = braceright; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 125; }, { glyphname = exclamdown; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 161; }, { glyphname = guillemetleft; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 171; }, { glyphname = periodcentered; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 183; }, { glyphname = guillemetright; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 187; }, { glyphname = questiondown; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 191; }, { glyphname = endash; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 8211; }, { glyphname = emdash; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 8212; }, { glyphname = quoteleft; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 8216; }, { glyphname = quoteright; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 8217; }, { glyphname = quotesinglbase; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 8218; }, { glyphname = quotedblleft; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 8220; }, { glyphname = quotedblright; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 8221; }, { glyphname = quotedblbase; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 8222; }, { glyphname = bullet; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 8226; }, { glyphname = ellipsis; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 8230; }, { glyphname = guilsinglleft; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 8249; }, { glyphname = guilsinglright; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 8250; }, { glyphname = zero; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 48; }, { glyphname = one; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 49; }, { glyphname = two; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 50; }, { glyphname = three; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 51; }, { glyphname = four; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 52; }, { glyphname = five; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 53; }, { glyphname = six; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 54; }, { glyphname = seven; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 55; }, { glyphname = eight; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 56; }, { glyphname = nine; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 57; }, { @@ -894,292 +456,118 @@ width = 600; }, { glyphname = grave; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 96; }, { glyphname = dieresis; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 168; }, { glyphname = macron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 175; }, { glyphname = acute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 180; }, { glyphname = cedilla; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 184; }, { glyphname = apostrophemod; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 700; }, { glyphname = circumflex; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 710; }, { glyphname = caron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 711; }, { glyphname = breve; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 728; }, { glyphname = dotaccent; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 729; }, { glyphname = ring; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 730; }, { glyphname = ogonek; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 731; -}, +unicode = 731; +}, { glyphname = tilde; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 732; }, { glyphname = hungarumlaut; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 733; }, { glyphname = gravecomb; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 768; }, { glyphname = acutecomb; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 769; }, { glyphname = circumflexcomb; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 770; }, { glyphname = tildecomb; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 771; }, { glyphname = macroncomb; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 772; }, { glyphname = brevecomb; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 774; }, { glyphname = dotaccentcomb; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 775; }, { glyphname = dieresiscomb; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 776; }, { glyphname = ringcomb; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 778; }, { glyphname = hungarumlautcomb; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 779; }, { glyphname = caroncomb; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 780; }, { glyphname = commaturnedabovecomb; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 786; }, { glyphname = commaaccentcomb; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 806; }, { glyphname = cedillacomb; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 807; }, { glyphname = ogonekcomb; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 808; }, { @@ -1194,2272 +582,910 @@ width = 600; }, { glyphname = A; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 65; }, { glyphname = B; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 66; }, { glyphname = C; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 67; }, { glyphname = D; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 68; }, { glyphname = E; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 69; }, { glyphname = F; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 70; }, { glyphname = G; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 71; }, { glyphname = H; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 72; }, { glyphname = I; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 73; }, { glyphname = J; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 74; }, { glyphname = K; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 75; }, { glyphname = L; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 76; }, { glyphname = M; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 77; }, { glyphname = N; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 78; }, { glyphname = O; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 79; }, { glyphname = P; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 80; }, { glyphname = Q; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 81; }, { glyphname = R; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 82; }, { glyphname = S; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 83; }, { glyphname = T; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 84; }, { glyphname = U; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 85; }, { glyphname = V; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 86; }, { glyphname = W; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 87; }, { glyphname = X; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 88; }, { glyphname = Y; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 89; -}, +unicode = 89; +}, { glyphname = Z; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 90; }, { glyphname = a; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 97; }, { glyphname = b; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 98; }, { glyphname = c; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 99; }, { glyphname = d; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 100; }, { glyphname = e; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 101; }, { glyphname = f; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 102; }, { glyphname = g; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 103; }, { glyphname = h; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 104; }, { glyphname = i; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 105; }, { glyphname = j; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 106; }, { glyphname = k; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 107; }, { glyphname = l; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 108; }, { glyphname = m; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 109; }, { glyphname = n; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 110; }, { glyphname = o; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 111; }, { glyphname = p; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 112; }, { glyphname = q; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 113; }, { glyphname = r; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 114; }, { glyphname = s; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 115; }, { glyphname = t; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 116; }, { glyphname = u; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 117; }, { glyphname = v; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 118; }, { glyphname = w; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 119; }, { glyphname = x; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 120; }, { glyphname = y; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 121; }, { glyphname = z; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 122; }, { glyphname = ordfeminine; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 170; }, { glyphname = ordmasculine; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 186; }, { glyphname = Agrave; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 192; }, { glyphname = Aacute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 193; }, { glyphname = Acircumflex; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 194; }, { glyphname = Atilde; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 195; }, { glyphname = Adieresis; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 196; }, { glyphname = Aring; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 197; }, { glyphname = AE; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 198; }, { glyphname = Ccedilla; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 199; }, { glyphname = Egrave; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 200; }, { glyphname = Eacute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 201; }, { glyphname = Ecircumflex; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 202; }, { glyphname = Edieresis; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 203; }, { glyphname = Igrave; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 204; -}, +unicode = 204; +}, { glyphname = Iacute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 205; }, { glyphname = Icircumflex; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 206; }, { glyphname = Idieresis; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 207; }, { glyphname = Eth; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 208; }, { glyphname = Ntilde; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 209; }, { glyphname = Ograve; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 210; }, { glyphname = Oacute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 211; }, { glyphname = Ocircumflex; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 212; }, { glyphname = Otilde; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 213; }, { glyphname = Odieresis; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 214; }, { glyphname = Oslash; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 216; }, { glyphname = Ugrave; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 217; }, { glyphname = Uacute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 218; }, { glyphname = Ucircumflex; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 219; }, { glyphname = Udieresis; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 220; }, { glyphname = Yacute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 221; }, { glyphname = Thorn; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 222; }, { glyphname = germandbls; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 223; }, { glyphname = agrave; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 224; }, { glyphname = aacute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 225; }, { glyphname = acircumflex; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 226; }, { glyphname = atilde; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 227; }, { glyphname = adieresis; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 228; }, { glyphname = aring; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 229; }, { glyphname = ae; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 230; }, { glyphname = ccedilla; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 231; }, { glyphname = egrave; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 232; }, { glyphname = eacute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 233; }, { glyphname = ecircumflex; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 234; }, { glyphname = edieresis; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 235; }, { glyphname = igrave; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 236; }, { glyphname = iacute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 237; }, { glyphname = icircumflex; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 238; }, { glyphname = idieresis; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 239; }, { glyphname = eth; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 240; }, { glyphname = ntilde; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 241; }, { glyphname = ograve; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 242; }, { glyphname = oacute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 243; }, { glyphname = ocircumflex; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 244; }, { glyphname = otilde; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 245; }, { glyphname = odieresis; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 246; }, { glyphname = oslash; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 248; -}, +unicode = 248; +}, { glyphname = ugrave; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 249; }, { glyphname = uacute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 250; }, { glyphname = ucircumflex; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 251; }, { glyphname = udieresis; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 252; }, { glyphname = yacute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 253; }, { glyphname = thorn; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 254; }, { glyphname = ydieresis; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 255; }, { glyphname = Amacron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 256; }, { glyphname = amacron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 257; }, { glyphname = Abreve; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 258; }, { glyphname = abreve; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 259; }, { glyphname = Aogonek; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 260; }, { glyphname = aogonek; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 261; }, { glyphname = Cacute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 262; }, { glyphname = cacute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 263; }, { glyphname = Cdotaccent; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 266; }, { glyphname = cdotaccent; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 267; }, { glyphname = Ccaron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 268; }, { glyphname = ccaron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 269; }, { glyphname = Dcaron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 270; }, { glyphname = dcaron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 271; }, { glyphname = Dcroat; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 272; }, { glyphname = dcroat; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 273; }, { glyphname = Emacron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 274; }, { glyphname = emacron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 275; }, { glyphname = Edotaccent; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 278; }, { glyphname = edotaccent; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 279; }, { glyphname = Eogonek; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 280; }, { glyphname = eogonek; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 281; }, { glyphname = Ecaron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 282; }, { glyphname = ecaron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 283; }, { glyphname = Gbreve; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 286; }, { glyphname = gbreve; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 287; }, { glyphname = Gdotaccent; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 288; }, { glyphname = gdotaccent; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 289; }, { glyphname = Gcommaaccent; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 290; }, { glyphname = gcommaaccent; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 291; }, { glyphname = Hbar; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 294; }, { glyphname = hbar; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 295; }, { glyphname = Itilde; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 296; }, { glyphname = itilde; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 297; }, { glyphname = Imacron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 298; }, { glyphname = imacron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 299; }, { glyphname = Iogonek; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 302; }, { glyphname = iogonek; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 303; }, { glyphname = Idotaccent; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 304; }, { glyphname = idotless; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 305; }, { glyphname = Kcommaaccent; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 310; }, { glyphname = kcommaaccent; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 311; }, { glyphname = Lacute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 313; }, { glyphname = lacute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 314; }, { glyphname = Lcommaaccent; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 315; }, { glyphname = lcommaaccent; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 316; }, { glyphname = Lcaron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 317; }, { glyphname = lcaron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 318; }, { glyphname = Lslash; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 321; }, { glyphname = lslash; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 322; }, { glyphname = Nacute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 323; }, { glyphname = nacute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 324; }, { glyphname = Ncommaaccent; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 325; }, { glyphname = ncommaaccent; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 326; }, { glyphname = Ncaron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 327; }, { glyphname = ncaron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 328; }, { glyphname = Ohungarumlaut; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 336; }, { glyphname = ohungarumlaut; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 337; }, { glyphname = OE; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 338; }, { glyphname = oe; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 339; }, { glyphname = Racute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 340; }, { glyphname = racute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 341; }, { glyphname = Rcaron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 344; }, { glyphname = rcaron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 345; }, { glyphname = Sacute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 346; }, { glyphname = sacute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 347; }, { glyphname = Scedilla; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 350; }, { glyphname = scedilla; -layers = ( -{ -layerId = m01; -width = 600; -} -); -unicode = 351; -}, -{ -glyphname = Scaron; -layers = ( -{ -layerId = m01; -width = 600; -} -); +unicode = 351; +}, +{ +glyphname = Scaron; unicode = 352; }, { glyphname = scaron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 353; }, { glyphname = Tcaron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 356; }, { glyphname = tcaron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 357; }, { glyphname = Utilde; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 360; }, { glyphname = utilde; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 361; }, { glyphname = Umacron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 362; }, { glyphname = umacron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 363; }, { glyphname = Uring; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 366; }, { glyphname = uring; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 367; }, { glyphname = Uhungarumlaut; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 368; }, { glyphname = uhungarumlaut; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 369; }, { glyphname = Uogonek; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 370; }, { glyphname = uogonek; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 371; }, { glyphname = Wcircumflex; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 372; }, { glyphname = wcircumflex; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 373; }, { glyphname = Ycircumflex; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 374; }, { glyphname = ycircumflex; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 375; }, { glyphname = Ydieresis; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 376; }, { glyphname = Zacute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 377; }, { glyphname = zacute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 378; }, { glyphname = Zdotaccent; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 379; }, { glyphname = zdotaccent; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 380; }, { glyphname = Zcaron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 381; }, { glyphname = zcaron; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 382; }, { glyphname = Scommaaccent; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 536; }, { glyphname = scommaaccent; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 537; }, { glyphname = Tcommaaccent; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 538; }, { glyphname = tcommaaccent; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 539; }, { glyphname = jdotless; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 567; }, { glyphname = Wgrave; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 7808; }, { glyphname = wgrave; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 7809; }, { glyphname = Wacute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 7810; }, { glyphname = wacute; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 7811; }, { glyphname = Wdieresis; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 7812; }, { glyphname = wdieresis; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 7813; }, { glyphname = Germandbls; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 7838; }, { glyphname = Etilde; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 7868; }, { glyphname = etilde; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 7869; }, { glyphname = Ygrave; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 7922; }, { glyphname = ygrave; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 7923; }, { glyphname = Ytilde; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 7928; }, { glyphname = ytilde; -layers = ( -{ -layerId = m01; -width = 600; -} -); unicode = 7929; } ); diff --git a/GF_glyphsets/Latin/txt/nice-names/GF_Latin_Core.txt b/GF_glyphsets/Latin/txt/nice-names/GF_Latin_Core.txt index 715e9d33a9..619867569f 100644 --- a/GF_glyphsets/Latin/txt/nice-names/GF_Latin_Core.txt +++ b/GF_glyphsets/Latin/txt/nice-names/GF_Latin_Core.txt @@ -1,69 +1,19 @@ -dollar -percent -ampersand -plus -less -equal -greater -at -asciicircum -bar -asciitilde -cent -sterling -yen -section -copyright -registered -degree -paragraph -multiply -divide -euro -trademark -minus -.notdef space -nbspace -periodcentered.loclCAT -periodcentered.loclCAT.case exclam quotedbl numbersign +dollar +percent +ampersand quotesingle parenleft parenright asterisk +plus comma hyphen period slash -colon -semicolon -question -bracketleft -backslash -bracketright -underscore -braceleft -braceright -exclamdown -guillemetleft -periodcentered -guillemetright -questiondown -endash -emdash -quoteleft -quoteright -quotesinglbase -quotedblleft -quotedblright -quotedblbase -bullet -ellipsis -guilsinglleft -guilsinglright zero one two @@ -74,37 +24,13 @@ six seven eight nine -caroncomb.alt -grave -dieresis -macron -acute -cedilla -apostrophemod -circumflex -caron -breve -dotaccent -ring -ogonek -tilde -hungarumlaut -gravecomb -acutecomb -circumflexcomb -tildecomb -macroncomb -brevecomb -dotaccentcomb -dieresiscomb -ringcomb -hungarumlautcomb -caroncomb -commaturnedabovecomb -commaaccentcomb -cedillacomb -ogonekcomb -idotaccent +colon +semicolon +less +equal +greater +question +at A B C @@ -131,6 +57,12 @@ W X Y Z +bracketleft +backslash +bracketright +asciicircum +underscore +grave a b c @@ -157,8 +89,30 @@ w x y z +braceleft +bar +braceright +asciitilde +nbspace +exclamdown +cent +sterling +yen +section +dieresis +copyright ordfeminine +guillemetleft +registered +macron +degree +acute +paragraph +periodcentered +cedilla ordmasculine +guillemetright +questiondown Agrave Aacute Acircumflex @@ -182,6 +136,7 @@ Oacute Ocircumflex Otilde Odieresis +multiply Oslash Ugrave Uacute @@ -213,6 +168,7 @@ oacute ocircumflex otilde odieresis +divide oslash ugrave uacute @@ -319,6 +275,30 @@ scommaaccent Tcommaaccent tcommaaccent jdotless +apostrophemod +circumflex +caron +breve +dotaccent +ring +ogonek +tilde +hungarumlaut +gravecomb +acutecomb +circumflexcomb +tildecomb +macroncomb +brevecomb +dotaccentcomb +dieresiscomb +ringcomb +hungarumlautcomb +caroncomb +commaturnedabovecomb +commaaccentcomb +cedillacomb +ogonekcomb Wgrave wgrave Wacute @@ -331,4 +311,24 @@ etilde Ygrave ygrave Ytilde -ytilde \ No newline at end of file +ytilde +endash +emdash +quoteleft +quoteright +quotesinglbase +quotedblleft +quotedblright +quotedblbase +bullet +ellipsis +guilsinglleft +guilsinglright +euro +trademark +minus +.notdef +periodcentered.loclCAT +periodcentered.loclCAT.case +caroncomb.alt +idotaccent \ No newline at end of file diff --git a/GF_glyphsets/Latin/txt/prod-names/GF_Latin_Core.txt b/GF_glyphsets/Latin/txt/prod-names/GF_Latin_Core.txt index b2bb8e7d40..df94fd6822 100644 --- a/GF_glyphsets/Latin/txt/prod-names/GF_Latin_Core.txt +++ b/GF_glyphsets/Latin/txt/prod-names/GF_Latin_Core.txt @@ -1,69 +1,19 @@ -dollar -percent -ampersand -plus -less -equal -greater -at -asciicircum -bar -asciitilde -cent -sterling -yen -section -copyright -registered -degree -paragraph -multiply -divide -Euro -trademark -minus -.notdef space -uni00A0 -periodcentered.loclCAT -periodcentered.loclCAT.case exclam quotedbl numbersign +dollar +percent +ampersand quotesingle parenleft parenright asterisk +plus comma hyphen period slash -colon -semicolon -question -bracketleft -backslash -bracketright -underscore -braceleft -braceright -exclamdown -guillemotleft -periodcentered -guillemotright -questiondown -endash -emdash -quoteleft -quoteright -quotesinglbase -quotedblleft -quotedblright -quotedblbase -bullet -ellipsis -guilsinglleft -guilsinglright zero one two @@ -74,37 +24,13 @@ six seven eight nine -uni030C.alt -grave -dieresis -macron -acute -cedilla -uni02BC -circumflex -caron -breve -dotaccent -ring -ogonek -tilde -hungarumlaut -gravecomb -acutecomb -uni0302 -tildecomb -uni0304 -uni0306 -uni0307 -uni0308 -uni030A -uni030B -uni030C -uni0312 -uni0326 -uni0327 -uni0328 -i.loclTRK +colon +semicolon +less +equal +greater +question +at A B C @@ -131,6 +57,12 @@ W X Y Z +bracketleft +backslash +bracketright +asciicircum +underscore +grave a b c @@ -157,8 +89,30 @@ w x y z +braceleft +bar +braceright +asciitilde +uni00A0 +exclamdown +cent +sterling +yen +section +dieresis +copyright ordfeminine +guillemotleft +registered +macron +degree +acute +paragraph +periodcentered +cedilla ordmasculine +guillemotright +questiondown Agrave Aacute Acircumflex @@ -182,6 +136,7 @@ Oacute Ocircumflex Otilde Odieresis +multiply Oslash Ugrave Uacute @@ -213,6 +168,7 @@ oacute ocircumflex otilde odieresis +divide oslash ugrave uacute @@ -319,6 +275,30 @@ uni0219 uni021A uni021B uni0237 +uni02BC +circumflex +caron +breve +dotaccent +ring +ogonek +tilde +hungarumlaut +gravecomb +acutecomb +uni0302 +tildecomb +uni0304 +uni0306 +uni0307 +uni0308 +uni030A +uni030B +uni030C +uni0312 +uni0326 +uni0327 +uni0328 Wgrave wgrave Wacute @@ -331,4 +311,24 @@ uni1EBD Ygrave ygrave uni1EF8 -uni1EF9 \ No newline at end of file +uni1EF9 +endash +emdash +quoteleft +quoteright +quotesinglbase +quotedblleft +quotedblright +quotedblbase +bullet +ellipsis +guilsinglleft +guilsinglright +Euro +trademark +minus +.notdef +periodcentered.loclCAT +periodcentered.loclCAT.case +uni030C.alt +i.loclTRK \ No newline at end of file diff --git a/scripts/assemble_charactersets.py b/scripts/assemble_charactersets.py index 30b77ad3d9..48db22b6cf 100644 --- a/scripts/assemble_charactersets.py +++ b/scripts/assemble_charactersets.py @@ -110,21 +110,15 @@ def assemble_characterset(languages_yaml_path): unicode = f"{unicode:#0{6}X}".replace("0X", "") glyph_info = _lookup_attributes_by_unicode(unicode, GLYPHDATA) glyph = glyphsLib.GSGlyph(glyph_info["name"]) - # glyph.color = 1 glyph.unicode = unicode - # glyph.lastChange = "2023-10-19 09:12:40 +0000" font.glyphs.append(glyph) - layer = glyphsLib.GSLayer() - layer.layerId = "m01" - layer.associatedMasterId = font.masters[0].id - layer.width = 600 - glyph.layers.append(layer) # Sort font.glyphs = sorted(font.glyphs, key=functools.cmp_to_key(sort_by_category)) - glyph_names = [glyph.name for glyph in font.glyphs] + unicode_sorted_glyphs = sorted(font.glyphs, key=functools.cmp_to_key(sort_unicodes)) + glyph_names = [glyph.name for glyph in unicode_sorted_glyphs] production_glyph_names = [ - get_glyph(glyph.name).production_name for glyph in font.glyphs + get_glyph(glyph.name).production_name for glyph in unicode_sorted_glyphs ] # Save glyphs file From 1098fdf7c743032ce2e92e6c7c6b8de027fbb2ff Mon Sep 17 00:00:00 2001 From: Yanone Date: Thu, 19 Oct 2023 16:37:37 +0200 Subject: [PATCH 44/59] Update README.md --- README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 57217e8fd7..3cc3463755 100644 --- a/README.md +++ b/README.md @@ -9,12 +9,14 @@ This transition is currently complete for: How to assemble glyphs and characters using the new approach ------------------------------------------------------------ -* Have a `.yaml` file under `GF_Glyphsets/*/definitions/` with language codes for your character set -* Optional: Have a `.stub.nam` file under `GF_Glyphsets/*/definitions/` for your character set, containing _encoded_ characters that you want to see included that can't be inferred from the `gflanguages` definitions -* Optional: Have a `.stub.glyphs` file under `GF_Glyphsets/*/definitions/` for your character set, containing _unencoded_ glyphs that you want to see included -* Update all glyphsets using `sh GF_glyphsets/update-gs.sh` as usual, see below for details +* Have a `.yaml` file under `GF_Glyphsets/*/definitions/` with language codes for your character set. See `GF_Glyphsets/GF_Latin_Core/definitions/` for examples. +* Optional: Have a `.stub.nam` file under `GF_Glyphsets/*/definitions/` for your character set, containing _encoded_ characters that you want to see included that can't be inferred from the `gflanguages` definitions. +* Optional: Have a `.stub.glyphs` file under `GF_Glyphsets/*/definitions/` for your character set, containing _unencoded_ glyphs that you want to see included. +* Update all glyphsets using `sh GF_glyphsets/update-gs.sh` as usual, see below for details. -So, the final `.glyphs` files are the sum of `gflanguages` + `.stub.nam` + `.stub.glyphs`. +The final `.glyphs` files are the sum of `gflanguages` + `.stub.nam` + `.stub.glyphs`. + +_Bonus points:_ Sadly, in the creation of the `.glyphs` files, it's not possible to exactly recreate the glyph sorting that Glyphs.app uses by default, so the `.glyphs` files look a bit different from what's expected. If you care, please open every freshly adjusted `.glyphs` file in Glyphs.app, select all glyphs, and run "Update Glyph Info" from the "Glyphs" menu on them to sort them and save the file. But the files will work as-is in any case. What happens under the hood --------------------------- From 4c14af8c3915a18fdcd384098050b50f55b2f664 Mon Sep 17 00:00:00 2001 From: Yanone Date: Thu, 19 Oct 2023 17:00:56 +0200 Subject: [PATCH 45/59] Added gflanguages version warning --- scripts/assemble_charactersets.py | 36 +++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/scripts/assemble_charactersets.py b/scripts/assemble_charactersets.py index 48db22b6cf..b1dbb3b7a7 100644 --- a/scripts/assemble_charactersets.py +++ b/scripts/assemble_charactersets.py @@ -153,6 +153,42 @@ def assemble_characterset(languages_yaml_path): if __name__ == "__main__": + # Check for gflanguages version + installed = None + latest = None + for line in os.popen("pip index versions gflanguages").read().split("\n"): + if "INSTALLED" in line: + installed = line.split(" ")[-1].strip() + if "LATEST" in line: + latest = line.split(" ")[-1].strip() + + if not installed or not latest: + print( + """ +************************************************************* +* +* WARNING: gflanguages version could not be verified. +* +************************************************************* +""" + ) + + if installed != latest: + print( + f""" +************************************************************* +* +* WARNING: +* The installed gflanguages package version may be outdated. +* You have: {installed} +* Latest available: {latest} +* +* Please update with: pip install -U gflanguages +* +************************************************************* +""" + ) + path = os.path.join(os.path.dirname(__file__), "..", "GF_Glyphsets") for root, _dir, files in os.walk(os.path.abspath(path)): for file in files: From 89f84d1da91ce843b4ebf34119ff37325942755f Mon Sep 17 00:00:00 2001 From: Yanone Date: Thu, 19 Oct 2023 17:01:04 +0200 Subject: [PATCH 46/59] Ran with latest gflanguages --- GF_glyphsets/Latin/glyphs/CustomFilter_GF_Latin.plist | 1 - GF_glyphsets/Latin/glyphs/GF_Latin_Core.glyphs | 4 ---- GF_glyphsets/Latin/nam/GF_Latin_Core.nam | 1 - GF_glyphsets/Latin/txt/nice-names/GF_Latin_Core.txt | 1 - GF_glyphsets/Latin/txt/prod-names/GF_Latin_Core.txt | 1 - 5 files changed, 8 deletions(-) diff --git a/GF_glyphsets/Latin/glyphs/CustomFilter_GF_Latin.plist b/GF_glyphsets/Latin/glyphs/CustomFilter_GF_Latin.plist index c13fee252f..84856fe429 100644 --- a/GF_glyphsets/Latin/glyphs/CustomFilter_GF_Latin.plist +++ b/GF_glyphsets/Latin/glyphs/CustomFilter_GF_Latin.plist @@ -868,7 +868,6 @@ ringcomb hungarumlautcomb caroncomb - commaturnedabovecomb commaaccentcomb cedillacomb ogonekcomb diff --git a/GF_glyphsets/Latin/glyphs/GF_Latin_Core.glyphs b/GF_glyphsets/Latin/glyphs/GF_Latin_Core.glyphs index bbf03cc6be..9ac709498c 100644 --- a/GF_glyphsets/Latin/glyphs/GF_Latin_Core.glyphs +++ b/GF_glyphsets/Latin/glyphs/GF_Latin_Core.glyphs @@ -555,10 +555,6 @@ glyphname = caroncomb; unicode = 780; }, { -glyphname = commaturnedabovecomb; -unicode = 786; -}, -{ glyphname = commaaccentcomb; unicode = 806; }, diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam index 6f567715e0..f9de10def2 100644 --- a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam +++ b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam @@ -295,7 +295,6 @@ 0x030A COMBINING RING ABOVE 0x030B COMBINING DOUBLE ACUTE ACCENT 0x030C COMBINING CARON -0x0312 COMBINING TURNED COMMA ABOVE 0x0326 COMBINING COMMA BELOW 0x0327 COMBINING CEDILLA 0x0328 COMBINING OGONEK diff --git a/GF_glyphsets/Latin/txt/nice-names/GF_Latin_Core.txt b/GF_glyphsets/Latin/txt/nice-names/GF_Latin_Core.txt index 619867569f..179d90ecaa 100644 --- a/GF_glyphsets/Latin/txt/nice-names/GF_Latin_Core.txt +++ b/GF_glyphsets/Latin/txt/nice-names/GF_Latin_Core.txt @@ -295,7 +295,6 @@ dieresiscomb ringcomb hungarumlautcomb caroncomb -commaturnedabovecomb commaaccentcomb cedillacomb ogonekcomb diff --git a/GF_glyphsets/Latin/txt/prod-names/GF_Latin_Core.txt b/GF_glyphsets/Latin/txt/prod-names/GF_Latin_Core.txt index df94fd6822..297b2fc0f9 100644 --- a/GF_glyphsets/Latin/txt/prod-names/GF_Latin_Core.txt +++ b/GF_glyphsets/Latin/txt/prod-names/GF_Latin_Core.txt @@ -295,7 +295,6 @@ uni0308 uni030A uni030B uni030C -uni0312 uni0326 uni0327 uni0328 From 56b647fbd356c2b93f1d6d166dd285d52dab906b Mon Sep 17 00:00:00 2001 From: Yanone Date: Fri, 20 Oct 2023 16:11:00 +0200 Subject: [PATCH 47/59] Numbers, not bullet points --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 3cc3463755..fe82f1ad66 100644 --- a/README.md +++ b/README.md @@ -9,10 +9,10 @@ This transition is currently complete for: How to assemble glyphs and characters using the new approach ------------------------------------------------------------ -* Have a `.yaml` file under `GF_Glyphsets/*/definitions/` with language codes for your character set. See `GF_Glyphsets/GF_Latin_Core/definitions/` for examples. -* Optional: Have a `.stub.nam` file under `GF_Glyphsets/*/definitions/` for your character set, containing _encoded_ characters that you want to see included that can't be inferred from the `gflanguages` definitions. -* Optional: Have a `.stub.glyphs` file under `GF_Glyphsets/*/definitions/` for your character set, containing _unencoded_ glyphs that you want to see included. -* Update all glyphsets using `sh GF_glyphsets/update-gs.sh` as usual, see below for details. +1. Have a `.yaml` file under `GF_Glyphsets/*/definitions/` with language codes for your character set. See `GF_Glyphsets/GF_Latin_Core/definitions/` for examples. +2. Optional: Have a `.stub.nam` file under `GF_Glyphsets/*/definitions/` for your character set, containing _encoded_ characters that you want to see included that can't be inferred from the `gflanguages` definitions. +3. Optional: Have a `.stub.glyphs` file under `GF_Glyphsets/*/definitions/` for your character set, containing _unencoded_ glyphs that you want to see included. +4. Update all glyphsets using `sh GF_glyphsets/update-gs.sh` as usual, see below for details. The final `.glyphs` files are the sum of `gflanguages` + `.stub.nam` + `.stub.glyphs`. @@ -21,9 +21,9 @@ _Bonus points:_ Sadly, in the creation of the `.glyphs` files, it's not possible What happens under the hood --------------------------- -* `update-gs.sh` runs as previously, except that it won't deleted the entire folder structure as previously, thus preserving the vital new `definitions` folder. -* It continues to build all files under the old approach. -* Afterwards, it calls the new script (`scripts/assemble_charactersets.py`) which will write over existing nam/glyphs/txt files (for supported glyphsets, see list at top). +1. `update-gs.sh` runs as previously, except that it won't deleted the entire folder structure as previously, thus preserving the vital new `definitions` folder. +2. It continues to build all files under the old approach. +3. Afterwards, it calls the new script (`scripts/assemble_charactersets.py`) which will write over existing nam/glyphs/txt files (for supported glyphsets, see list at top). Glyphsets ========= From 7d91e0cf286f2dcb145506ed0607ef4bc3edee56 Mon Sep 17 00:00:00 2001 From: Yanone Date: Wed, 1 Nov 2023 12:00:46 +0100 Subject: [PATCH 48/59] Generalize version warning message --- scripts/assemble_charactersets.py | 53 ++++++++++++++++++++----------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/scripts/assemble_charactersets.py b/scripts/assemble_charactersets.py index b1dbb3b7a7..6a5d33bb66 100644 --- a/scripts/assemble_charactersets.py +++ b/scripts/assemble_charactersets.py @@ -162,32 +162,47 @@ def assemble_characterset(languages_yaml_path): if "LATEST" in line: latest = line.split(" ")[-1].strip() - if not installed or not latest: - print( - """ -************************************************************* -* -* WARNING: gflanguages version could not be verified. -* -************************************************************* -""" - ) - - if installed != latest: - print( - f""" + # if not installed or not latest: + # print( + # """ + # ************************************************************* + # * + # * WARNING: gflanguages version could not be verified. + # * + # ************************************************************* + # """ + # ) + + # if installed != latest: + # print( + # f""" + # ************************************************************* + # * + # * WARNING: + # * The installed gflanguages package version may be outdated. + # * You have: {installed} + # * Latest available: {latest} + # * + # * Please update with: pip install -U gflanguages + # * + # ************************************************************* + # """ + # ) + + print( + f""" ************************************************************* * * WARNING: -* The installed gflanguages package version may be outdated. +* Make sure you're using the correct version of gflanguages, +* otherwise the glyphsets will be incorrect. +* * You have: {installed} -* Latest available: {latest} +* Location: {gflanguages.__file__} * -* Please update with: pip install -U gflanguages -* ************************************************************* """ - ) + ) path = os.path.join(os.path.dirname(__file__), "..", "GF_Glyphsets") for root, _dir, files in os.walk(os.path.abspath(path)): From 928f93442798da7e4b0a7f46a477676263ce9374 Mon Sep 17 00:00:00 2001 From: Yanone Date: Wed, 29 Nov 2023 13:37:17 +0100 Subject: [PATCH 49/59] Moved language definitions to Python module --- Lib/glyphsets/definitions/__init__.py | 55 +++ .../definitions/nam/GF_Latin_Core.nam | 328 ++++++++++++++++++ README.md | 2 +- scripts/assemble_charactersets.py | 100 +++--- setup.py | 4 +- 5 files changed, 431 insertions(+), 58 deletions(-) create mode 100644 Lib/glyphsets/definitions/__init__.py create mode 100644 Lib/glyphsets/definitions/nam/GF_Latin_Core.nam diff --git a/Lib/glyphsets/definitions/__init__.py b/Lib/glyphsets/definitions/__init__.py new file mode 100644 index 0000000000..14fd2628a9 --- /dev/null +++ b/Lib/glyphsets/definitions/__init__.py @@ -0,0 +1,55 @@ +# Google Fonts glyphset definitions to be consumed by other tools. +# The "script" value needs to correspond to the folder name +# in /GF_Glyphsets of this repo in order to find the other definition files. + +import os + +glyphset_definitions = { + "GF_Latin_Core": { + "script": "Latin", + "language_codes": [ + "ca_Latn", # Catalan + "cs_Latn", # Czech + "cy_Latn", # Welsh + "da_Latn", # Danish + "de_Latn", # German + "en_Latn", # English + "es_Latn", # Spanish + "fi_Latn", # Finnish + "fr_Latn", # French + "gn_Latn", # Guarani + "hr_Latn", # Croatian + "hu_Latn", # Hungarian + "is_Latn", # Icelandic + "it_Latn", # Italian + "lt_Latn", # Lithuanian + "lv_Latn", # Latvian + "mt_Latn", # Maltese + "nb_Latn", # Norwegian Bokmål + "nl_Latn", # Dutch + "pl_Latn", # Polish + "pt_Latn", # Portuguese + "qu_Latn", # Quechua + "ro_Latn", # Romanian + "sk_Latn", # Slovak + "sq_Latn", # Albanian + "sr_Latn", # Serbian (Latin) + "sv_Latn", # Swedish + "tr_Latn", # Turkish + ], + } +} + + +def unicodes_per_glyphset(glyphset_name): + character_set = set() + # Read .nam file + nam_path = os.path.join(os.path.dirname(__file__), "nam", f"{glyphset_name}.nam") + if os.path.exists(nam_path): + with open(nam_path, "r") as f: + nam_stub_lines = f.readlines() + for line in nam_stub_lines: + unicode = line.split(" ")[0] + if unicode.startswith("0x"): + character_set.add(int(unicode[2:], 16)) + return list(sorted(character_set)) diff --git a/Lib/glyphsets/definitions/nam/GF_Latin_Core.nam b/Lib/glyphsets/definitions/nam/GF_Latin_Core.nam new file mode 100644 index 0000000000..f9de10def2 --- /dev/null +++ b/Lib/glyphsets/definitions/nam/GF_Latin_Core.nam @@ -0,0 +1,328 @@ +0x0020 SPACE +0x0021 EXCLAMATION MARK +0x0022 QUOTATION MARK +0x0023 NUMBER SIGN +0x0024 DOLLAR SIGN +0x0025 PERCENT SIGN +0x0026 AMPERSAND +0x0027 APOSTROPHE +0x0028 LEFT PARENTHESIS +0x0029 RIGHT PARENTHESIS +0x002A ASTERISK +0x002B PLUS SIGN +0x002C COMMA +0x002D HYPHEN-MINUS +0x002E FULL STOP +0x002F SOLIDUS +0x0030 DIGIT ZERO +0x0031 DIGIT ONE +0x0032 DIGIT TWO +0x0033 DIGIT THREE +0x0034 DIGIT FOUR +0x0035 DIGIT FIVE +0x0036 DIGIT SIX +0x0037 DIGIT SEVEN +0x0038 DIGIT EIGHT +0x0039 DIGIT NINE +0x003A COLON +0x003B SEMICOLON +0x003C LESS-THAN SIGN +0x003D EQUALS SIGN +0x003E GREATER-THAN SIGN +0x003F QUESTION MARK +0x0040 COMMERCIAL AT +0x0041 LATIN CAPITAL LETTER A +0x0042 LATIN CAPITAL LETTER B +0x0043 LATIN CAPITAL LETTER C +0x0044 LATIN CAPITAL LETTER D +0x0045 LATIN CAPITAL LETTER E +0x0046 LATIN CAPITAL LETTER F +0x0047 LATIN CAPITAL LETTER G +0x0048 LATIN CAPITAL LETTER H +0x0049 LATIN CAPITAL LETTER I +0x004A LATIN CAPITAL LETTER J +0x004B LATIN CAPITAL LETTER K +0x004C LATIN CAPITAL LETTER L +0x004D LATIN CAPITAL LETTER M +0x004E LATIN CAPITAL LETTER N +0x004F LATIN CAPITAL LETTER O +0x0050 LATIN CAPITAL LETTER P +0x0051 LATIN CAPITAL LETTER Q +0x0052 LATIN CAPITAL LETTER R +0x0053 LATIN CAPITAL LETTER S +0x0054 LATIN CAPITAL LETTER T +0x0055 LATIN CAPITAL LETTER U +0x0056 LATIN CAPITAL LETTER V +0x0057 LATIN CAPITAL LETTER W +0x0058 LATIN CAPITAL LETTER X +0x0059 LATIN CAPITAL LETTER Y +0x005A LATIN CAPITAL LETTER Z +0x005B LEFT SQUARE BRACKET +0x005C REVERSE SOLIDUS +0x005D RIGHT SQUARE BRACKET +0x005E CIRCUMFLEX ACCENT +0x005F LOW LINE +0x0060 GRAVE ACCENT +0x0061 LATIN SMALL LETTER A +0x0062 LATIN SMALL LETTER B +0x0063 LATIN SMALL LETTER C +0x0064 LATIN SMALL LETTER D +0x0065 LATIN SMALL LETTER E +0x0066 LATIN SMALL LETTER F +0x0067 LATIN SMALL LETTER G +0x0068 LATIN SMALL LETTER H +0x0069 LATIN SMALL LETTER I +0x006A LATIN SMALL LETTER J +0x006B LATIN SMALL LETTER K +0x006C LATIN SMALL LETTER L +0x006D LATIN SMALL LETTER M +0x006E LATIN SMALL LETTER N +0x006F LATIN SMALL LETTER O +0x0070 LATIN SMALL LETTER P +0x0071 LATIN SMALL LETTER Q +0x0072 LATIN SMALL LETTER R +0x0073 LATIN SMALL LETTER S +0x0074 LATIN SMALL LETTER T +0x0075 LATIN SMALL LETTER U +0x0076 LATIN SMALL LETTER V +0x0077 LATIN SMALL LETTER W +0x0078 LATIN SMALL LETTER X +0x0079 LATIN SMALL LETTER Y +0x007A LATIN SMALL LETTER Z +0x007B LEFT CURLY BRACKET +0x007C VERTICAL LINE +0x007D RIGHT CURLY BRACKET +0x007E TILDE +0x00A0 NO-BREAK SPACE +0x00A1 INVERTED EXCLAMATION MARK +0x00A2 CENT SIGN +0x00A3 POUND SIGN +0x00A5 YEN SIGN +0x00A7 SECTION SIGN +0x00A8 DIAERESIS +0x00A9 COPYRIGHT SIGN +0x00AA FEMININE ORDINAL INDICATOR +0x00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0x00AE REGISTERED SIGN +0x00AF MACRON +0x00B0 DEGREE SIGN +0x00B4 ACUTE ACCENT +0x00B6 PILCROW SIGN +0x00B7 MIDDLE DOT +0x00B8 CEDILLA +0x00BA MASCULINE ORDINAL INDICATOR +0x00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0x00BF INVERTED QUESTION MARK +0x00C0 LATIN CAPITAL LETTER A WITH GRAVE +0x00C1 LATIN CAPITAL LETTER A WITH ACUTE +0x00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0x00C3 LATIN CAPITAL LETTER A WITH TILDE +0x00C4 LATIN CAPITAL LETTER A WITH DIAERESIS +0x00C5 LATIN CAPITAL LETTER A WITH RING ABOVE +0x00C6 LATIN CAPITAL LETTER AE +0x00C7 LATIN CAPITAL LETTER C WITH CEDILLA +0x00C8 LATIN CAPITAL LETTER E WITH GRAVE +0x00C9 LATIN CAPITAL LETTER E WITH ACUTE +0x00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0x00CB LATIN CAPITAL LETTER E WITH DIAERESIS +0x00CC LATIN CAPITAL LETTER I WITH GRAVE +0x00CD LATIN CAPITAL LETTER I WITH ACUTE +0x00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0x00CF LATIN CAPITAL LETTER I WITH DIAERESIS +0x00D0 LATIN CAPITAL LETTER ETH +0x00D1 LATIN CAPITAL LETTER N WITH TILDE +0x00D2 LATIN CAPITAL LETTER O WITH GRAVE +0x00D3 LATIN CAPITAL LETTER O WITH ACUTE +0x00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0x00D5 LATIN CAPITAL LETTER O WITH TILDE +0x00D6 LATIN CAPITAL LETTER O WITH DIAERESIS +0x00D7 MULTIPLICATION SIGN +0x00D8 LATIN CAPITAL LETTER O WITH STROKE +0x00D9 LATIN CAPITAL LETTER U WITH GRAVE +0x00DA LATIN CAPITAL LETTER U WITH ACUTE +0x00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0x00DC LATIN CAPITAL LETTER U WITH DIAERESIS +0x00DD LATIN CAPITAL LETTER Y WITH ACUTE +0x00DE LATIN CAPITAL LETTER THORN +0x00DF LATIN SMALL LETTER SHARP S +0x00E0 LATIN SMALL LETTER A WITH GRAVE +0x00E1 LATIN SMALL LETTER A WITH ACUTE +0x00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX +0x00E3 LATIN SMALL LETTER A WITH TILDE +0x00E4 LATIN SMALL LETTER A WITH DIAERESIS +0x00E5 LATIN SMALL LETTER A WITH RING ABOVE +0x00E6 LATIN SMALL LETTER AE +0x00E7 LATIN SMALL LETTER C WITH CEDILLA +0x00E8 LATIN SMALL LETTER E WITH GRAVE +0x00E9 LATIN SMALL LETTER E WITH ACUTE +0x00EA LATIN SMALL LETTER E WITH CIRCUMFLEX +0x00EB LATIN SMALL LETTER E WITH DIAERESIS +0x00EC LATIN SMALL LETTER I WITH GRAVE +0x00ED LATIN SMALL LETTER I WITH ACUTE +0x00EE LATIN SMALL LETTER I WITH CIRCUMFLEX +0x00EF LATIN SMALL LETTER I WITH DIAERESIS +0x00F0 LATIN SMALL LETTER ETH +0x00F1 LATIN SMALL LETTER N WITH TILDE +0x00F2 LATIN SMALL LETTER O WITH GRAVE +0x00F3 LATIN SMALL LETTER O WITH ACUTE +0x00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX +0x00F5 LATIN SMALL LETTER O WITH TILDE +0x00F6 LATIN SMALL LETTER O WITH DIAERESIS +0x00F7 DIVISION SIGN +0x00F8 LATIN SMALL LETTER O WITH STROKE +0x00F9 LATIN SMALL LETTER U WITH GRAVE +0x00FA LATIN SMALL LETTER U WITH ACUTE +0x00FB LATIN SMALL LETTER U WITH CIRCUMFLEX +0x00FC LATIN SMALL LETTER U WITH DIAERESIS +0x00FD LATIN SMALL LETTER Y WITH ACUTE +0x00FE LATIN SMALL LETTER THORN +0x00FF LATIN SMALL LETTER Y WITH DIAERESIS +0x0100 LATIN CAPITAL LETTER A WITH MACRON +0x0101 LATIN SMALL LETTER A WITH MACRON +0x0102 LATIN CAPITAL LETTER A WITH BREVE +0x0103 LATIN SMALL LETTER A WITH BREVE +0x0104 LATIN CAPITAL LETTER A WITH OGONEK +0x0105 LATIN SMALL LETTER A WITH OGONEK +0x0106 LATIN CAPITAL LETTER C WITH ACUTE +0x0107 LATIN SMALL LETTER C WITH ACUTE +0x010A LATIN CAPITAL LETTER C WITH DOT ABOVE +0x010B LATIN SMALL LETTER C WITH DOT ABOVE +0x010C LATIN CAPITAL LETTER C WITH CARON +0x010D LATIN SMALL LETTER C WITH CARON +0x010E LATIN CAPITAL LETTER D WITH CARON +0x010F LATIN SMALL LETTER D WITH CARON +0x0110 LATIN CAPITAL LETTER D WITH STROKE +0x0111 LATIN SMALL LETTER D WITH STROKE +0x0112 LATIN CAPITAL LETTER E WITH MACRON +0x0113 LATIN SMALL LETTER E WITH MACRON +0x0116 LATIN CAPITAL LETTER E WITH DOT ABOVE +0x0117 LATIN SMALL LETTER E WITH DOT ABOVE +0x0118 LATIN CAPITAL LETTER E WITH OGONEK +0x0119 LATIN SMALL LETTER E WITH OGONEK +0x011A LATIN CAPITAL LETTER E WITH CARON +0x011B LATIN SMALL LETTER E WITH CARON +0x011E LATIN CAPITAL LETTER G WITH BREVE +0x011F LATIN SMALL LETTER G WITH BREVE +0x0120 LATIN CAPITAL LETTER G WITH DOT ABOVE +0x0121 LATIN SMALL LETTER G WITH DOT ABOVE +0x0122 LATIN CAPITAL LETTER G WITH CEDILLA +0x0123 LATIN SMALL LETTER G WITH CEDILLA +0x0126 LATIN CAPITAL LETTER H WITH STROKE +0x0127 LATIN SMALL LETTER H WITH STROKE +0x0128 LATIN CAPITAL LETTER I WITH TILDE +0x0129 LATIN SMALL LETTER I WITH TILDE +0x012A LATIN CAPITAL LETTER I WITH MACRON +0x012B LATIN SMALL LETTER I WITH MACRON +0x012E LATIN CAPITAL LETTER I WITH OGONEK +0x012F LATIN SMALL LETTER I WITH OGONEK +0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE +0x0131 LATIN SMALL LETTER DOTLESS I +0x0136 LATIN CAPITAL LETTER K WITH CEDILLA +0x0137 LATIN SMALL LETTER K WITH CEDILLA +0x0139 LATIN CAPITAL LETTER L WITH ACUTE +0x013A LATIN SMALL LETTER L WITH ACUTE +0x013B LATIN CAPITAL LETTER L WITH CEDILLA +0x013C LATIN SMALL LETTER L WITH CEDILLA +0x013D LATIN CAPITAL LETTER L WITH CARON +0x013E LATIN SMALL LETTER L WITH CARON +0x0141 LATIN CAPITAL LETTER L WITH STROKE +0x0142 LATIN SMALL LETTER L WITH STROKE +0x0143 LATIN CAPITAL LETTER N WITH ACUTE +0x0144 LATIN SMALL LETTER N WITH ACUTE +0x0145 LATIN CAPITAL LETTER N WITH CEDILLA +0x0146 LATIN SMALL LETTER N WITH CEDILLA +0x0147 LATIN CAPITAL LETTER N WITH CARON +0x0148 LATIN SMALL LETTER N WITH CARON +0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE +0x0152 LATIN CAPITAL LIGATURE OE +0x0153 LATIN SMALL LIGATURE OE +0x0154 LATIN CAPITAL LETTER R WITH ACUTE +0x0155 LATIN SMALL LETTER R WITH ACUTE +0x0158 LATIN CAPITAL LETTER R WITH CARON +0x0159 LATIN SMALL LETTER R WITH CARON +0x015A LATIN CAPITAL LETTER S WITH ACUTE +0x015B LATIN SMALL LETTER S WITH ACUTE +0x015E LATIN CAPITAL LETTER S WITH CEDILLA +0x015F LATIN SMALL LETTER S WITH CEDILLA +0x0160 LATIN CAPITAL LETTER S WITH CARON +0x0161 LATIN SMALL LETTER S WITH CARON +0x0164 LATIN CAPITAL LETTER T WITH CARON +0x0165 LATIN SMALL LETTER T WITH CARON +0x0168 LATIN CAPITAL LETTER U WITH TILDE +0x0169 LATIN SMALL LETTER U WITH TILDE +0x016A LATIN CAPITAL LETTER U WITH MACRON +0x016B LATIN SMALL LETTER U WITH MACRON +0x016E LATIN CAPITAL LETTER U WITH RING ABOVE +0x016F LATIN SMALL LETTER U WITH RING ABOVE +0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0x0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE +0x0172 LATIN CAPITAL LETTER U WITH OGONEK +0x0173 LATIN SMALL LETTER U WITH OGONEK +0x0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX +0x0175 LATIN SMALL LETTER W WITH CIRCUMFLEX +0x0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +0x0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX +0x0178 LATIN CAPITAL LETTER Y WITH DIAERESIS +0x0179 LATIN CAPITAL LETTER Z WITH ACUTE +0x017A LATIN SMALL LETTER Z WITH ACUTE +0x017B LATIN CAPITAL LETTER Z WITH DOT ABOVE +0x017C LATIN SMALL LETTER Z WITH DOT ABOVE +0x017D LATIN CAPITAL LETTER Z WITH CARON +0x017E LATIN SMALL LETTER Z WITH CARON +0x0218 LATIN CAPITAL LETTER S WITH COMMA BELOW +0x0219 LATIN SMALL LETTER S WITH COMMA BELOW +0x021A LATIN CAPITAL LETTER T WITH COMMA BELOW +0x021B LATIN SMALL LETTER T WITH COMMA BELOW +0x0237 LATIN SMALL LETTER DOTLESS J +0x02BC MODIFIER LETTER APOSTROPHE +0x02C6 MODIFIER LETTER CIRCUMFLEX ACCENT +0x02C7 CARON +0x02D8 BREVE +0x02D9 DOT ABOVE +0x02DA RING ABOVE +0x02DB OGONEK +0x02DC SMALL TILDE +0x02DD DOUBLE ACUTE ACCENT +0x0300 COMBINING GRAVE ACCENT +0x0301 COMBINING ACUTE ACCENT +0x0302 COMBINING CIRCUMFLEX ACCENT +0x0303 COMBINING TILDE +0x0304 COMBINING MACRON +0x0306 COMBINING BREVE +0x0307 COMBINING DOT ABOVE +0x0308 COMBINING DIAERESIS +0x030A COMBINING RING ABOVE +0x030B COMBINING DOUBLE ACUTE ACCENT +0x030C COMBINING CARON +0x0326 COMBINING COMMA BELOW +0x0327 COMBINING CEDILLA +0x0328 COMBINING OGONEK +0x1E80 LATIN CAPITAL LETTER W WITH GRAVE +0x1E81 LATIN SMALL LETTER W WITH GRAVE +0x1E82 LATIN CAPITAL LETTER W WITH ACUTE +0x1E83 LATIN SMALL LETTER W WITH ACUTE +0x1E84 LATIN CAPITAL LETTER W WITH DIAERESIS +0x1E85 LATIN SMALL LETTER W WITH DIAERESIS +0x1E9E LATIN CAPITAL LETTER SHARP S +0x1EBC LATIN CAPITAL LETTER E WITH TILDE +0x1EBD LATIN SMALL LETTER E WITH TILDE +0x1EF2 LATIN CAPITAL LETTER Y WITH GRAVE +0x1EF3 LATIN SMALL LETTER Y WITH GRAVE +0x1EF8 LATIN CAPITAL LETTER Y WITH TILDE +0x1EF9 LATIN SMALL LETTER Y WITH TILDE +0x2013 EN DASH +0x2014 EM DASH +0x2018 LEFT SINGLE QUOTATION MARK +0x2019 RIGHT SINGLE QUOTATION MARK +0x201A SINGLE LOW-9 QUOTATION MARK +0x201C LEFT DOUBLE QUOTATION MARK +0x201D RIGHT DOUBLE QUOTATION MARK +0x201E DOUBLE LOW-9 QUOTATION MARK +0x2022 BULLET +0x2026 HORIZONTAL ELLIPSIS +0x2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK +0x203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +0x20AC EURO SIGN +0x2122 TRADE MARK SIGN +0x2212 MINUS SIGN \ No newline at end of file diff --git a/README.md b/README.md index fe82f1ad66..2ac70c6b7e 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ This transition is currently complete for: How to assemble glyphs and characters using the new approach ------------------------------------------------------------ -1. Have a `.yaml` file under `GF_Glyphsets/*/definitions/` with language codes for your character set. See `GF_Glyphsets/GF_Latin_Core/definitions/` for examples. +1. Define the glyphset in the Python module in `Lib/glyphsets/definitions/__init__.py` with language codes for your character set. 2. Optional: Have a `.stub.nam` file under `GF_Glyphsets/*/definitions/` for your character set, containing _encoded_ characters that you want to see included that can't be inferred from the `gflanguages` definitions. 3. Optional: Have a `.stub.glyphs` file under `GF_Glyphsets/*/definitions/` for your character set, containing _unencoded_ glyphs that you want to see included. 4. Update all glyphsets using `sh GF_glyphsets/update-gs.sh` as usual, see below for details. diff --git a/scripts/assemble_charactersets.py b/scripts/assemble_charactersets.py index 6a5d33bb66..ff0f6fcda6 100644 --- a/scripts/assemble_charactersets.py +++ b/scripts/assemble_charactersets.py @@ -2,8 +2,9 @@ Assemble .nam files from .nam stub files and language definitions. """ -import yaml +import sys import os +import shutil import gflanguages import unicodedata import glyphsLib @@ -11,6 +12,12 @@ import plistlib from glyphsLib.glyphdata import get_glyph, _lookup_attributes_by_unicode +# Insert local module path at beginning of sys.path +# so that up-to-date version of glyphsets package is used +sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "Lib")) +from glyphsets.definitions import glyphset_definitions # noqa: E402 +from glyphsets.definitions import unicodes_per_glyphset # noqa: E402 + def sort_unicodes(a, b): if a.unicode and b.unicode: @@ -35,36 +42,44 @@ def sort_by_category(a, b): return value -def assemble_characterset(languages_yaml_path): - glyphset_name = os.path.basename(languages_yaml_path).replace(".yaml", "") - glyphset_category_name = "_".join(glyphset_name.split("_")[:2]) - nam_stub_path = languages_yaml_path.replace(".yaml", ".stub.nam") - nam_path = languages_yaml_path.replace(".yaml", ".nam").replace( - "definitions", "nam" +def assemble_characterset(root_folder, glyphset_name): + script = glyphset_definitions[glyphset_name]["script"] + language_codes = glyphset_definitions[glyphset_name]["language_codes"] + + nam_stub_path = os.path.join( + root_folder, script, "definitions", f"{glyphset_name}.stub.nam" + ) + nam_path = os.path.join(root_folder, script, "nam", f"{glyphset_name}.nam") + nam_in_package_path = os.path.abspath( + os.path.join( + root_folder, + "..", + "Lib", + "glyphsets", + "definitions", + "nam", + f"{glyphset_name}.nam", + ) ) - glyphs_stub_path = languages_yaml_path.replace(".yaml", ".stub.glyphs") - glyphs_path = languages_yaml_path.replace(".yaml", ".glyphs").replace( - "definitions", "glyphs" + glyphs_stub_path = os.path.join( + root_folder, script, "definitions", f"{glyphset_name}.stub.glyphs" ) - txt_nicenames_path = languages_yaml_path.replace(".yaml", ".txt").replace( - "definitions", "txt/nice-names" + glyphs_path = os.path.join(root_folder, script, "glyphs", f"{glyphset_name}.glyphs") + txt_nicenames_path = os.path.join( + root_folder, script, "txt", "nice-names", f"{glyphset_name}.txt" ) - txt_prodnames_path = languages_yaml_path.replace(".yaml", ".txt").replace( - "definitions", "txt/prod-names" + txt_prodnames_path = os.path.join( + root_folder, script, "txt", "prod-names", f"{glyphset_name}.txt" ) plist_path = os.path.join( - os.path.dirname(glyphs_path), f"CustomFilter_{glyphset_category_name}.plist" + root_folder, script, "glyphs", f"CustomFilter_GF_{script}.plist" ) character_set = set() - # Read language definitions - with open(languages_yaml_path, "r") as stream: - language_definitions = yaml.safe_load(stream) - # Assemble character sets from gflanguages languages = gflanguages.LoadLanguages() - for language_code in language_definitions["language_codes"]: + for language_code in language_codes: chars = languages[language_code].exemplar_chars # chars.base.upper() is important because many Latin languages don't # contain a complete set of uppercase letters in "index" @@ -135,6 +150,7 @@ def assemble_characterset(languages_yaml_path): f.write(f"{unicode_string} {unicodedata.name(chr(unicode))}") if i < len(character_set) - 1: f.write("\n") + shutil.copyfile(nam_path, nam_in_package_path) # Output txt files with open(txt_nicenames_path, "w") as f: @@ -162,33 +178,6 @@ def assemble_characterset(languages_yaml_path): if "LATEST" in line: latest = line.split(" ")[-1].strip() - # if not installed or not latest: - # print( - # """ - # ************************************************************* - # * - # * WARNING: gflanguages version could not be verified. - # * - # ************************************************************* - # """ - # ) - - # if installed != latest: - # print( - # f""" - # ************************************************************* - # * - # * WARNING: - # * The installed gflanguages package version may be outdated. - # * You have: {installed} - # * Latest available: {latest} - # * - # * Please update with: pip install -U gflanguages - # * - # ************************************************************* - # """ - # ) - print( f""" ************************************************************* @@ -204,13 +193,12 @@ def assemble_characterset(languages_yaml_path): """ ) - path = os.path.join(os.path.dirname(__file__), "..", "GF_Glyphsets") - for root, _dir, files in os.walk(os.path.abspath(path)): - for file in files: - if file.endswith(".yaml"): - # Find definition file - languages_yaml_path = os.path.abspath( - os.path.join(root, "..", "definitions", file) - ) + root_folder = os.path.abspath( + os.path.join(os.path.dirname(__file__), "..", "GF_Glyphsets") + ) - assemble_characterset(languages_yaml_path) + for glyphset_name in glyphset_definitions: + print(f"Assembling '{glyphset_name}'...") + assemble_characterset(root_folder, glyphset_name) + # Proof of work: + assert unicodes_per_glyphset(glyphset_name) != [] diff --git a/setup.py b/setup.py index 2c122a7230..bdd8f68067 100644 --- a/setup.py +++ b/setup.py @@ -35,13 +35,15 @@ 'Felipe Sanches, ' 'Lasse Fister, ' 'Marc Foley, ' + 'Yanone, ' 'Roderick Sheeter'), author_email='dave@lab6.com', package_dir={'': 'Lib'}, - packages=['glyphsets'], + packages=['glyphsets', 'glyphsets.definitions'], package_data={'glyphsets': [ "encodings/*.nam", "encodings/GF Glyph Sets/*.nam", + "definitions/nam/*.nam", "*.json", ] }, From d6212574f4c096b804a29d194a28c047978c985a Mon Sep 17 00:00:00 2001 From: Yanone Date: Wed, 29 Nov 2023 14:03:59 +0100 Subject: [PATCH 50/59] Delete GF_Latin_Core.yaml --- .../Latin/definitions/GF_Latin_Core.yaml | 29 ------------------- 1 file changed, 29 deletions(-) delete mode 100644 GF_glyphsets/Latin/definitions/GF_Latin_Core.yaml diff --git a/GF_glyphsets/Latin/definitions/GF_Latin_Core.yaml b/GF_glyphsets/Latin/definitions/GF_Latin_Core.yaml deleted file mode 100644 index fab050b336..0000000000 --- a/GF_glyphsets/Latin/definitions/GF_Latin_Core.yaml +++ /dev/null @@ -1,29 +0,0 @@ -language_codes: - - ca_Latn # Catalan - - cs_Latn # Czech - - cy_Latn # Welsh - - da_Latn # Danish - - de_Latn # German - - en_Latn # English - - es_Latn # Spanish - - fi_Latn # Finnish - - fr_Latn # French - - gn_Latn # Guarani - - hr_Latn # Croatian - - hu_Latn # Hungarian - - is_Latn # Icelandic - - it_Latn # Italian - - lt_Latn # Lithuanian - - lv_Latn # Latvian - - mt_Latn # Maltese - - nb_Latn # Norwegian Bokmål - - nl_Latn # Dutch - - pl_Latn # Polish - - pt_Latn # Portuguese - - qu_Latn # Quechua - - ro_Latn # Romanian - - sk_Latn # Slovak - - sq_Latn # Albanian - - sr_Latn # Serbian (Latin) - - sv_Latn # Swedish - - tr_Latn # Turkish From 04d1d97f9fb9131a95963809527037848177630e Mon Sep 17 00:00:00 2001 From: Yanone Date: Thu, 30 Nov 2023 15:59:57 +0100 Subject: [PATCH 51/59] Added flowchart & comments to auto-generated files --- GF_glyphsets/Latin/nam/GF_Latin_Core.nam | 1 + .../Latin/txt/nice-names/GF_Latin_Core.txt | 1 + .../Latin/txt/prod-names/GF_Latin_Core.txt | 1 + .../definitions/nam/GF_Latin_Core.nam | 1 + README.md | 36 +++++++++++++++++++ scripts/assemble_charactersets.py | 9 +++++ 6 files changed, 49 insertions(+) diff --git a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam index f9de10def2..6469ffad1c 100644 --- a/GF_glyphsets/Latin/nam/GF_Latin_Core.nam +++ b/GF_glyphsets/Latin/nam/GF_Latin_Core.nam @@ -1,3 +1,4 @@ +# This file is auto-generated; do not edit. See /README.md for instructions. 0x0020 SPACE 0x0021 EXCLAMATION MARK 0x0022 QUOTATION MARK diff --git a/GF_glyphsets/Latin/txt/nice-names/GF_Latin_Core.txt b/GF_glyphsets/Latin/txt/nice-names/GF_Latin_Core.txt index 179d90ecaa..8b5c695635 100644 --- a/GF_glyphsets/Latin/txt/nice-names/GF_Latin_Core.txt +++ b/GF_glyphsets/Latin/txt/nice-names/GF_Latin_Core.txt @@ -1,3 +1,4 @@ +# This file is auto-generated; do not edit. See /README.md for instructions. space exclam quotedbl diff --git a/GF_glyphsets/Latin/txt/prod-names/GF_Latin_Core.txt b/GF_glyphsets/Latin/txt/prod-names/GF_Latin_Core.txt index 297b2fc0f9..7e237a5c5c 100644 --- a/GF_glyphsets/Latin/txt/prod-names/GF_Latin_Core.txt +++ b/GF_glyphsets/Latin/txt/prod-names/GF_Latin_Core.txt @@ -1,3 +1,4 @@ +# This file is auto-generated; do not edit. See /README.md for instructions. space exclam quotedbl diff --git a/Lib/glyphsets/definitions/nam/GF_Latin_Core.nam b/Lib/glyphsets/definitions/nam/GF_Latin_Core.nam index f9de10def2..6469ffad1c 100644 --- a/Lib/glyphsets/definitions/nam/GF_Latin_Core.nam +++ b/Lib/glyphsets/definitions/nam/GF_Latin_Core.nam @@ -1,3 +1,4 @@ +# This file is auto-generated; do not edit. See /README.md for instructions. 0x0020 SPACE 0x0021 EXCLAMATION MARK 0x0022 QUOTATION MARK diff --git a/README.md b/README.md index a1b0827d53..1953bee827 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,42 @@ What happens under the hood 2. It continues to build all files under the old approach. 3. Afterwards, it calls the new script (`scripts/assemble_charactersets.py`) which will write over existing nam/glyphs/txt files (for supported glyphsets, see list at top). +Data flow visualization +----------------------- + +Visualizes in a simplified way how the various data sources are combined into a final glyphset, then rendered out to various format. +This process is repeated for every glyphset defined in `Lib/glyphsets/definitions/__init__.py`. + +Read this top to bottom. + +``` +┌──────────────────┐ +│ Language codes │ +│ "en_Latn" │ +│ "de_Latn" │ +│ ... │ +└──────────────────┘ + │ +┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ +│ gflanguages │ │ .stub.nam │ │ .stub.glyphs │ +│ (Python package) │ │ (optional) │ │ (optional) │ +└──────────────────┘ └──────────────────┘ └──────────────────┘ + │ │ │ + └──────────────────────┼──────────────────────┘ + │ + ╔═══════════════════════════════╗ + ║ complete glyphset ║ + ╚═══════════════════════════════╝ + │ + ┌──────────────────────┼──────────────────────┼──────────────────────┐ + │ │ │ │ +┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ +│ .txt │ │ .nam │ │ .glyphs │ │ .plist │ +│ (nice & prod) │ │ │ │ │ │ │ +└──────────────────┘ └──────────────────┘ └──────────────────┘ └──────────────────┘ +``` + + Glyphsets ========= diff --git a/scripts/assemble_charactersets.py b/scripts/assemble_charactersets.py index ff0f6fcda6..3f960e273f 100644 --- a/scripts/assemble_charactersets.py +++ b/scripts/assemble_charactersets.py @@ -145,6 +145,9 @@ def assemble_characterset(root_folder, glyphset_name): # Output sorted character set to .nam file with open(nam_path, "w") as f: + f.write( + "# This file is auto-generated; do not edit. See /README.md for instructions.\n" + ) for i, unicode in enumerate(sorted(list(character_set))): unicode_string = f"{unicode:#0{6}X}".replace("0X", "0x") f.write(f"{unicode_string} {unicodedata.name(chr(unicode))}") @@ -154,8 +157,14 @@ def assemble_characterset(root_folder, glyphset_name): # Output txt files with open(txt_nicenames_path, "w") as f: + f.write( + "# This file is auto-generated; do not edit. See /README.md for instructions.\n" + ) f.write("\n".join(glyph_names)) with open(txt_prodnames_path, "w") as f: + f.write( + "# This file is auto-generated; do not edit. See /README.md for instructions.\n" + ) f.write("\n".join(production_glyph_names)) # Adjust .plist From 0e91beb9ab80cea1fe6df5eb24f43b6d73c4e921 Mon Sep 17 00:00:00 2001 From: Yanone Date: Thu, 30 Nov 2023 16:05:10 +0100 Subject: [PATCH 52/59] Minor updates to boxes --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1953bee827..3c92dd4157 100644 --- a/README.md +++ b/README.md @@ -46,13 +46,13 @@ Read this top to bottom. │ (Python package) │ │ (optional) │ │ (optional) │ └──────────────────┘ └──────────────────┘ └──────────────────┘ │ │ │ - └──────────────────────┼──────────────────────┘ + ╰──────────────────────┼──────────────────────╯ │ ╔═══════════════════════════════╗ ║ complete glyphset ║ ╚═══════════════════════════════╝ │ - ┌──────────────────────┼──────────────────────┼──────────────────────┐ + ╭──────────────────────┼──────────────────────┬──────────────────────╮ │ │ │ │ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ .txt │ │ .nam │ │ .glyphs │ │ .plist │ From baa7c614c1385b6c1729928d0cff6cef0df126cd Mon Sep 17 00:00:00 2001 From: Yanone Date: Thu, 30 Nov 2023 16:08:37 +0100 Subject: [PATCH 53/59] Load local module --- tests/__init__.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/__init__.py b/tests/__init__.py index de282f2164..85535e2860 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,8 +1,11 @@ -from glyphsets import _GFGlyphData, _TestDocData +import sys from fontTools.ttLib import TTFont import os import pytest +sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "Lib")) +from glyphsets import _GFGlyphData, _TestDocData # noqa: E402 + DATA_FP = os.path.join(os.path.dirname(__file__), "data") glyphs_data = { From f2a67abdd40ec46ef6e03e090ba3537ee3998e0f Mon Sep 17 00:00:00 2001 From: Yanone Date: Thu, 30 Nov 2023 16:10:47 +0100 Subject: [PATCH 54/59] Update requirements.txt --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 9bef102b32..15baecb393 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ setuptools -FontTools[ufo] +fonttools glyphsLib defcon gflanguages From 2e5350c5ee4d9461d22ccab51d271531332e0c4b Mon Sep 17 00:00:00 2001 From: Yanone Date: Thu, 30 Nov 2023 16:12:18 +0100 Subject: [PATCH 55/59] Revert --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 15baecb393..9bef102b32 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ setuptools -fonttools +FontTools[ufo] glyphsLib defcon gflanguages From 24f107b6da5d6bf8dcc88677f757be98c4a0999e Mon Sep 17 00:00:00 2001 From: Yanone Date: Thu, 30 Nov 2023 16:46:58 +0100 Subject: [PATCH 56/59] Update README.md --- README.md | 28 +--------------------------- 1 file changed, 1 insertion(+), 27 deletions(-) diff --git a/README.md b/README.md index 3c92dd4157..4eef9712ca 100644 --- a/README.md +++ b/README.md @@ -33,33 +33,7 @@ This process is repeated for every glyphset defined in `Lib/glyphsets/definition Read this top to bottom. -``` -┌──────────────────┐ -│ Language codes │ -│ "en_Latn" │ -│ "de_Latn" │ -│ ... │ -└──────────────────┘ - │ -┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ -│ gflanguages │ │ .stub.nam │ │ .stub.glyphs │ -│ (Python package) │ │ (optional) │ │ (optional) │ -└──────────────────┘ └──────────────────┘ └──────────────────┘ - │ │ │ - ╰──────────────────────┼──────────────────────╯ - │ - ╔═══════════════════════════════╗ - ║ complete glyphset ║ - ╚═══════════════════════════════╝ - │ - ╭──────────────────────┼──────────────────────┬──────────────────────╮ - │ │ │ │ -┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ -│ .txt │ │ .nam │ │ .glyphs │ │ .plist │ -│ (nice & prod) │ │ │ │ │ │ │ -└──────────────────┘ └──────────────────┘ └──────────────────┘ └──────────────────┘ -``` - +(Graphic temorarily removed to test UnicodeDecode Error) Glyphsets ========= From d0995de2c0e42b7e848dc8c16b029d2a6053d1a8 Mon Sep 17 00:00:00 2001 From: Yanone Date: Thu, 30 Nov 2023 16:49:50 +0100 Subject: [PATCH 57/59] Tackle UnicodeDecode error --- README.md | 28 +++++++++++++++++++++++++++- setup.py | 2 +- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4eef9712ca..3c92dd4157 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,33 @@ This process is repeated for every glyphset defined in `Lib/glyphsets/definition Read this top to bottom. -(Graphic temorarily removed to test UnicodeDecode Error) +``` +┌──────────────────┐ +│ Language codes │ +│ "en_Latn" │ +│ "de_Latn" │ +│ ... │ +└──────────────────┘ + │ +┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ +│ gflanguages │ │ .stub.nam │ │ .stub.glyphs │ +│ (Python package) │ │ (optional) │ │ (optional) │ +└──────────────────┘ └──────────────────┘ └──────────────────┘ + │ │ │ + ╰──────────────────────┼──────────────────────╯ + │ + ╔═══════════════════════════════╗ + ║ complete glyphset ║ + ╚═══════════════════════════════╝ + │ + ╭──────────────────────┼──────────────────────┬──────────────────────╮ + │ │ │ │ +┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ +│ .txt │ │ .nam │ │ .glyphs │ │ .plist │ +│ (nice & prod) │ │ │ │ │ │ │ +└──────────────────┘ └──────────────────┘ └──────────────────┘ └──────────────────┘ +``` + Glyphsets ========= diff --git a/setup.py b/setup.py index 9f50ca31bb..15695faaf5 100644 --- a/setup.py +++ b/setup.py @@ -20,7 +20,7 @@ from setuptools import setup # Read the contents of the README file -with open('README.md') as f: +with open('README.md', encoding="utf-8") as f: long_description = f.read() setup( From 9fb08034a9bc733baa242d806ab208a1d9103211 Mon Sep 17 00:00:00 2001 From: Yanone Date: Thu, 30 Nov 2023 16:53:31 +0100 Subject: [PATCH 58/59] Add test to make sure that .nam files are included in the package --- tests/test_glyphsets.py | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 tests/test_glyphsets.py diff --git a/tests/test_glyphsets.py b/tests/test_glyphsets.py new file mode 100644 index 0000000000..af1c15f470 --- /dev/null +++ b/tests/test_glyphsets.py @@ -0,0 +1,5 @@ +from glyphsets.definitions import unicodes_per_glyphset + + +def test_definitions(): + assert len(unicodes_per_glyphset("GF_Latin_Core")) == 328 From 82098063c066d308df016a5ee1fd855b725a7a8b Mon Sep 17 00:00:00 2001 From: Yanone Date: Thu, 30 Nov 2023 17:04:36 +0100 Subject: [PATCH 59/59] Revert this --- tests/__init__.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/__init__.py b/tests/__init__.py index 85535e2860..5bbab891a9 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,10 +1,8 @@ -import sys +from glyphsets import _GFGlyphData, _TestDocData from fontTools.ttLib import TTFont import os import pytest -sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "Lib")) -from glyphsets import _GFGlyphData, _TestDocData # noqa: E402 DATA_FP = os.path.join(os.path.dirname(__file__), "data")