├── .gitignore ├── LICENSE ├── README.md ├── build.ini ├── fontforge_script.py ├── fonttools_script.py ├── make.ps1 ├── requirements.txt └── source_fonts ├── NotoSansJP ├── LICENSE ├── NotoSansJP-Black.ttf ├── NotoSansJP-Bold.ttf ├── NotoSansJP-ExtraBold.ttf ├── NotoSansJP-ExtraLight.ttf ├── NotoSansJP-Light.ttf ├── NotoSansJP-Medium.ttf ├── NotoSansJP-Regular.ttf ├── NotoSansJP-SemiBold.ttf └── NotoSansJP-Thin.ttf ├── NotoSansMono ├── LICENSE ├── NotoSansMono-Black.ttf ├── NotoSansMono-Bold.ttf ├── NotoSansMono-ExtraBold.ttf ├── NotoSansMono-ExtraLight.ttf ├── NotoSansMono-Light.ttf ├── NotoSansMono-Medium.ttf ├── NotoSansMono-Regular.ttf ├── NotoSansMono-SemiBold.ttf ├── NotoSansMono-Thin.ttf ├── NotoSansMono_ExtraCondensed-Black.ttf ├── NotoSansMono_ExtraCondensed-Bold.ttf ├── NotoSansMono_ExtraCondensed-ExtraBold.ttf ├── NotoSansMono_ExtraCondensed-ExtraLight.ttf ├── NotoSansMono_ExtraCondensed-Light.ttf ├── NotoSansMono_ExtraCondensed-Medium.ttf ├── NotoSansMono_ExtraCondensed-Regular.ttf ├── NotoSansMono_ExtraCondensed-SemiBold.ttf └── NotoSansMono_ExtraCondensed-Thin.ttf ├── ideographic_space.sfd └── nerd-fonts ├── LICENSE └── SymbolsNerdFont-Regular.ttf /.gitignore: -------------------------------------------------------------------------------- 1 | work/ 2 | build/ 3 | release_files/ 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2024 Yuko Otawara, 2 | with Reserved Font Name "NOTONOTO" 3 | 4 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 5 | This license is copied below, and is also available with a FAQ at: 6 | http://scripts.sil.org/OFL 7 | 8 | ----------------------------------------------------------- 9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 10 | ----------------------------------------------------------- 11 | 12 | PREAMBLE 13 | The goals of the Open Font License (OFL) are to stimulate worldwide 14 | development of collaborative font projects, to support the font creation 15 | efforts of academic and linguistic communities, and to provide a free and 16 | open framework in which fonts may be shared and improved in partnership 17 | with others. 18 | 19 | The OFL allows the licensed fonts to be used, studied, modified and 20 | redistributed freely as long as they are not sold by themselves. The 21 | fonts, including any derivative works, can be bundled, embedded, 22 | redistributed and/or sold with any software provided that any reserved 23 | names are not used by derivative works. The fonts and derivatives, 24 | however, cannot be released under any other type of license. The 25 | requirement for fonts to remain under this license does not apply 26 | to any document created using the fonts or their derivatives. 27 | 28 | DEFINITIONS 29 | "Font Software" refers to the set of files released by the Copyright 30 | Holder(s) under this license and clearly marked as such. This may 31 | include source files, build scripts and documentation. 32 | 33 | "Reserved Font Name" refers to any names specified as such after the 34 | copyright statement(s). 35 | 36 | "Original Version" refers to the collection of Font Software components as 37 | distributed by the Copyright Holder(s). 38 | 39 | "Modified Version" refers to any derivative made by adding to, deleting, 40 | or substituting -- in part or in whole -- any of the components of the 41 | Original Version, by changing formats or by porting the Font Software to a 42 | new environment. 43 | 44 | "Author" refers to any designer, engineer, programmer, technical 45 | writer or other person who contributed to the Font Software. 46 | 47 | PERMISSION & CONDITIONS 48 | Permission is hereby granted, free of charge, to any person obtaining 49 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 50 | redistribute, and sell modified and unmodified copies of the Font 51 | Software, subject to the following conditions: 52 | 53 | 1) Neither the Font Software nor any of its individual components, 54 | in Original or Modified Versions, may be sold by itself. 55 | 56 | 1) Original or Modified Versions of the Font Software may be bundled, 57 | redistributed and/or sold with any software, provided that each copy 58 | contains the above copyright notice and this license. These can be 59 | included either as stand-alone text files, human-readable headers or 60 | in the appropriate machine-readable metadata fields within text or 61 | binary files as long as those fields can be easily viewed by the user. 62 | 63 | 1) No Modified Version of the Font Software may use the Reserved Font 64 | Name(s) unless explicit written permission is granted by the corresponding 65 | Copyright Holder. This restriction only applies to the primary font name as 66 | presented to the users. 67 | 68 | 1) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 69 | Software shall not be used to promote, endorse or advertise any 70 | Modified Version, except to acknowledge the contribution(s) of the 71 | Copyright Holder(s) and the Author(s) or with their explicit written 72 | permission. 73 | 74 | 1) The Font Software, modified or unmodified, in part or in whole, 75 | must be distributed entirely under this license, and must not be 76 | distributed under any other license. The requirement for fonts to 77 | remain under this license does not apply to any document created 78 | using the Font Software. 79 | 80 | TERMINATION 81 | This license becomes null and void if any of the above conditions are 82 | not met. 83 | 84 | DISCLAIMER 85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 93 | OTHER DEALINGS IN THE FONT SOFTWARE. 94 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # NOTONOTO 2 | 3 | NOTONOTO は、 [Noto シリーズ](https://fonts.google.com/noto) である Noto Sans Mono と Noto Sans JP を合成した、プログラミング向けフォントです。 4 | 5 | 👉 ダウンロードは [NOTONOTO リリース](https://github.com/yuru7/NOTONOTO/releases/latest) より。 6 | ※「Assets」内の zip ファイルをダウンロードしてご利用ください。 7 | 8 | --- 9 | 10 | Noto シリーズは、その語源が "No more tofu (豆腐はいらない!)" [^1] から来ているように、表示できない文字を無くすことを目標に作られたフォントファミリーです。 11 | 12 | Noto シリーズは多様なデバイスや文書で No Tofu になることを目指していることから、万人に読みやすいようにプレーンでクセが無い字体になっているのが特徴です。いわば「特徴が無いことが特徴」とも言えるフォントで、様々な場面で馴染むことから多くのWebサイトデザインでも用いられています。 13 | 14 | NOTONOTO は、そんなプレーンであっさりとした Noto シリーズを、いつものコーディングシーンでも使いたい方のためのフォントです。 15 | 16 | > 💡 その他、公開中のプログラミングフォント 17 | > - 日本語文字に源柔ゴシック、英数字部分に Hack を使った [**白源 (はくげん/HackGen)**](https://github.com/yuru7/HackGen) 18 | > - 日本語文字に IBM Plex Sans JP、英数字部分に IBM Plex Mono を使った [**PlemolJP (プレモル ジェイピー)**](https://github.com/yuru7/PlemolJP) 19 | > - 日本語文字にBIZ UDゴシック、英数字部分に JetBrains Mono を使った [**UDEV Gothic**](https://github.com/yuru7/udev-gothic) 20 | 21 | ## 特徴 22 | 23 | 以下の特徴を備えています。 24 | 25 | - Noto シリーズの等幅英文フォント **Noto Sans Mono** 由来のラテン文字 26 | - Noto シリーズの日本語フォント **Noto Sans JP** 由来の日本語文字 27 | - 全9種類のウェイト 28 | - 半角・全角の幅比率が異なるバリエーションあり 29 | - Noto Sans Mono ExtraCondensed スタイルを用いた、幅比率 半角1:全角2 30 | - Noto Sans Mono 標準スタイルを用いた、幅比率 半角3:全角5 31 | - 全角スペースの可視化 32 | - 全角スペースを可視化したくない方向けの不可視版あり 33 | - 一部記号の判読性の向上 34 | - Noto Sans Mono ExtraCondensed スタイル (1:2 幅版利用) における `#` `*` の拡大 35 | - `_` が2つ連なったときに離れて見えるように調整 36 | - 収録される文字の違い等によって分かれた複数のバリエーションを用意 (下記参照) 37 | 38 | ### バリエーション 39 | 40 | | **フォント ファミリー** | **説明** | 41 | | :------------: | :--- | 42 | | **NOTONOTO** | ラテン文字に Noto Sans Mono ExtraCondensed スタイルを用いることで文字幅比率「半角1:全角2」にした通常版。その他の日本語文字や日本語文書に頻出する記号類に Noto Sans JP を使用。 | 43 | | **NOTONOTO Console** | Noto Sans Mono の字体を除外せずに全て適用したバリエーション。多くの記号が半角で表示されるため、コンソールでの利用や記号類は可能な限り半角で表示したい人にオススメ。 | 44 | | **NOTONOTO35** | ラテン文字に Noto Sans Mono 標準スタイルを用いることで文字幅比率「半角3:全角5」にしたバリエーション。英数字が通常版の NOTONOTO よりも広く余裕をもって表示される。 | 45 | | **NOTONOTO35 Console** | NOTONOTO Console の文字幅比率を 半角3:全角5 にしたバリエーション | 46 | 47 | ## 表示サンプル 48 | 49 | | 通常版 (幅比率 半角1:全角2) | 35版 (幅比率 半角3:全角5) | 50 | | :---: | :---: | 51 | | ![image](https://github.com/user-attachments/assets/d8b49dfe-6dbf-4a1d-97a2-40cb2540e217) | ![image](https://github.com/user-attachments/assets/8f581230-c059-4069-a672-51cc0e19b5c3) | 52 | 53 | ## ビルド 54 | 55 | 環境: 56 | 57 | - fontforge: `20230101` \[[Windows](https://fontforge.org/en-US/downloads/windows/)\] \[[Linux](https://fontforge.org/en-US/downloads/gnulinux/)\] 58 | - Python: `>=3.12` 59 | 60 | ### Windows (PowerShell Core) 61 | 62 | ```sh 63 | # 必要パッケージのインストール 64 | pip install -r requirements.txt 65 | # ビルド 66 | & "C:\Program Files (x86)\FontForgeBuilds\bin\ffpython.exe" .\fontforge_script.py && python3 .\fonttools_script.py 67 | ``` 68 | 69 | ### ビルドオプション 70 | 71 | `fontforge_script.py` 実行時、以下のオプションを指定できます。 72 | 73 | - `--35`: 半角3:全角5 の幅にする 74 | - `--console`: できるだけ East Asian Ambiguous Width 記号を半角で表示する 75 | - `--hidden-zenkaku-space`: 全角スペース可視化を無効化 76 | - `--debug`: Regular スタイルのみをビルドする 77 | 78 | ## ライセンス 79 | 80 | SIL OPEN FONT LICENSE Version 1.1 が適用され、商用・非商用問わず利用可能です。 81 | 82 | - 詳細は [LICENSE](https://raw.githubusercontent.com/yuru7/NOTONOTO/main/LICENSE) を参照 83 | - 各種ソースフォントのライセンスは、ソースフォント毎のディレクトリに同梱 84 | 85 | --- 86 | 87 | [^1]: 「豆腐」はフォントに含まれない文字が `□` 表示になる様を表すネットスラング 88 | -------------------------------------------------------------------------------- /build.ini: -------------------------------------------------------------------------------- 1 | [DEFAULT] 2 | VERSION = v0.0.3 3 | FONT_NAME = NOTONOTO 4 | JP_FONT = NotoSansJP/NotoSansJP- 5 | ENG_FONT = NotoSansMono/NotoSansMono_ExtraCondensed- 6 | ENG_FONT_35 = NotoSansMono/NotoSansMono- 7 | SOURCE_FONTS_DIR = source_fonts 8 | BUILD_FONTS_DIR = build 9 | VENDER_NAME = TWR 10 | FONTFORGE_PREFIX = fontforge_ 11 | FONTTOOLS_PREFIX = fonttools_ 12 | IDEOGRAPHIC_SPACE = ideographic_space.sfd 13 | W35_WIDTH_STR = 35 14 | CONSOLE_STR = Console 15 | NERD_FONTS_STR = NF 16 | HIDDEN_ZENKAKU_SPACE_STR = HS 17 | EM_ASCENT = 880 18 | EM_DESCENT = 120 19 | OS2_ASCENT = 900 20 | OS2_DESCENT = 250 21 | ; 1:2 なので全角幅は 1000 を想定 22 | HALF_WIDTH_12 = 500 23 | ; 3:5 なので半角幅は 600 を想定 24 | FULL_WIDTH_35 = 1000 25 | -------------------------------------------------------------------------------- /fontforge_script.py: -------------------------------------------------------------------------------- 1 | #!fontforge --lang=py -script 2 | 3 | # 2つのフォントを合成する 4 | 5 | import configparser 6 | import math 7 | import os 8 | import shutil 9 | import sys 10 | import uuid 11 | from decimal import ROUND_HALF_UP, Decimal 12 | 13 | import fontforge 14 | import psMat 15 | 16 | # iniファイルを読み込む 17 | settings = configparser.ConfigParser() 18 | settings.read("build.ini", encoding="utf-8") 19 | 20 | VERSION = settings.get("DEFAULT", "VERSION") 21 | FONT_NAME = settings.get("DEFAULT", "FONT_NAME") 22 | JP_FONT = settings.get("DEFAULT", "JP_FONT") 23 | ENG_FONT = settings.get("DEFAULT", "ENG_FONT") 24 | ENG_FONT_35 = settings.get("DEFAULT", "ENG_FONT_35") 25 | SOURCE_FONTS_DIR = settings.get("DEFAULT", "SOURCE_FONTS_DIR") 26 | BUILD_FONTS_DIR = settings.get("DEFAULT", "BUILD_FONTS_DIR") 27 | VENDER_NAME = settings.get("DEFAULT", "VENDER_NAME") 28 | FONTFORGE_PREFIX = settings.get("DEFAULT", "FONTFORGE_PREFIX") 29 | IDEOGRAPHIC_SPACE = settings.get("DEFAULT", "IDEOGRAPHIC_SPACE") 30 | W35_WIDTH_STR = settings.get("DEFAULT", "W35_WIDTH_STR") 31 | HIDDEN_ZENKAKU_SPACE_STR = settings.get("DEFAULT", "HIDDEN_ZENKAKU_SPACE_STR") 32 | CONSOLE_STR = settings.get("DEFAULT", "CONSOLE_STR") 33 | NERD_FONTS_STR = settings.get("DEFAULT", "NERD_FONTS_STR") 34 | EM_ASCENT = int(settings.get("DEFAULT", "EM_ASCENT")) 35 | EM_DESCENT = int(settings.get("DEFAULT", "EM_DESCENT")) 36 | OS2_ASCENT = int(settings.get("DEFAULT", "OS2_ASCENT")) 37 | OS2_DESCENT = int(settings.get("DEFAULT", "OS2_DESCENT")) 38 | HALF_WIDTH_12 = int(settings.get("DEFAULT", "HALF_WIDTH_12")) 39 | FULL_WIDTH_35 = int(settings.get("DEFAULT", "FULL_WIDTH_35")) 40 | 41 | COPYRIGHT = """[Noto] 42 | Copyright 2022 The Noto Project Authors https://github.com/notofonts/latin-greek-cyrillic 43 | 44 | [Nerd Fonts] 45 | Copyright (c) 2014, Ryan L McIntyre https://ryanlmcintyre.com 46 | 47 | [NOTONOTO] 48 | Copyright 2024 Yuko Otawara 49 | """ # noqa: E501 50 | 51 | options = {} 52 | nerd_font = None 53 | 54 | 55 | def main(): 56 | # オプション判定 57 | get_options() 58 | if options.get("unknown-option"): 59 | usage() 60 | return 61 | 62 | # buildディレクトリを作成する 63 | if os.path.exists(BUILD_FONTS_DIR) and not options.get("do-not-delete-build-dir"): 64 | shutil.rmtree(BUILD_FONTS_DIR) 65 | os.mkdir(BUILD_FONTS_DIR) 66 | if not os.path.exists(BUILD_FONTS_DIR): 67 | os.mkdir(BUILD_FONTS_DIR) 68 | 69 | # Regular スタイルを生成する 70 | generate_font( 71 | jp_style="Regular", 72 | eng_style="Regular", 73 | merged_style="Regular", 74 | ) 75 | 76 | if options.get("debug"): 77 | # デバッグモードの場合はここで終了 78 | return 79 | 80 | # 各スタイルを生成する 81 | for style in [ 82 | "Thin", 83 | "ExtraLight", 84 | "Light", 85 | "Medium", 86 | "SemiBold", 87 | "Bold", 88 | "ExtraBold", 89 | "Black", 90 | ]: 91 | # Thin スタイルを生成する 92 | generate_font( 93 | jp_style=style, 94 | eng_style=style, 95 | merged_style=style, 96 | ) 97 | 98 | 99 | def usage(): 100 | print( 101 | f"Usage: {sys.argv[0]} " 102 | "[--hidden-zenkaku-space] [--35] [--console] [--nerd-font]" 103 | ) 104 | 105 | 106 | def get_options(): 107 | """オプションを取得する""" 108 | 109 | global options 110 | 111 | # オプションなしの場合は何もしない 112 | if len(sys.argv) == 1: 113 | return 114 | 115 | for arg in sys.argv[1:]: 116 | # オプション判定 117 | if arg == "--do-not-delete-build-dir": 118 | options["do-not-delete-build-dir"] = True 119 | elif arg == "--hidden-zenkaku-space": 120 | options["hidden-zenkaku-space"] = True 121 | elif arg == "--35": 122 | options["35"] = True 123 | elif arg == "--console": 124 | options["console"] = True 125 | elif arg == "--nerd-font": 126 | options["nerd-font"] = True 127 | elif arg == "--debug": 128 | options["debug"] = True 129 | else: 130 | options["unknown-option"] = True 131 | return 132 | 133 | 134 | def generate_font(jp_style, eng_style, merged_style, italic=False): 135 | print(f"=== Generate {merged_style} ===") 136 | 137 | # 合成するフォントを開く 138 | jp_font, eng_font = open_fonts(jp_style, eng_style) 139 | 140 | # ※従来はEMをここで揃えるが、Noto Sans Mono と Noto Sans JP は既にEMが揃っているため不要 141 | 142 | if options.get("console"): 143 | # コンソール用フォントの場合はできるだけEAAW文字を半角幅にする 144 | # TODO ここの処理の要否はあとで検討 145 | # eaaw_width_to_half(jp_font) 146 | pass 147 | else: 148 | # 全角化する記号類を英語フォントから削除する 149 | delete_not_console_glyphs(jp_font, eng_font) 150 | 151 | # 重複するグリフを削除する 152 | delete_duplicate_glyphs(jp_font, eng_font) 153 | 154 | # いくつかのグリフ形状に調整を加える 155 | adjust_some_glyph(jp_font, eng_font) 156 | 157 | # jp_fontを等幅に変更する 158 | to_monospace(jp_font) 159 | 160 | # ひらがな等の全角文字が含まれる行でリガチャが解除される対策としてGSUBテーブルを削除 161 | # GPOSもおまけに削除 162 | remove_lookups(jp_font) 163 | 164 | # 全角スペースを可視化する 165 | if not options.get("hidden-zenkaku-space"): 166 | visualize_zenkaku_space(jp_font) 167 | 168 | # Nerd Fontのグリフを追加する 169 | if options.get("nerd-font"): 170 | add_nerd_font_glyphs(jp_font, eng_font) 171 | 172 | # オプション毎の修飾子を追加する 173 | variant = f"{CONSOLE_STR} " if options.get("console") else "" 174 | variant += HIDDEN_ZENKAKU_SPACE_STR if options.get("hidden-zenkaku-space") else "" 175 | variant += NERD_FONTS_STR if options.get("nerd-font") else "" 176 | variant = variant.strip() 177 | 178 | # macOSでのpostテーブルの使用性エラー対策 179 | # 重複するグリフ名を持つグリフをリネームする 180 | delete_glyphs_with_duplicate_glyph_names(eng_font) 181 | delete_glyphs_with_duplicate_glyph_names(jp_font) 182 | 183 | # メタデータを編集する 184 | cap_height = int( 185 | Decimal(str(eng_font[0x0048].boundingBox()[3])).quantize( 186 | Decimal("0"), ROUND_HALF_UP 187 | ) 188 | ) 189 | x_height = int( 190 | Decimal(str(eng_font[0x0078].boundingBox()[3])).quantize( 191 | Decimal("0"), ROUND_HALF_UP 192 | ) 193 | ) 194 | edit_meta_data(eng_font, merged_style, variant, cap_height, x_height) 195 | edit_meta_data(jp_font, merged_style, variant, cap_height, x_height) 196 | 197 | # ttfファイルに保存 198 | # なんらかフラグを立てるとGSUB, GPOSテーブルが削除されて後続の生成処理で影響が出るため注意 199 | w35_str = W35_WIDTH_STR if options.get("35") else "" 200 | eng_font.generate( 201 | f"{BUILD_FONTS_DIR}/{FONTFORGE_PREFIX}{FONT_NAME}{w35_str}{variant}-{merged_style}-eng.ttf".replace( 202 | " ", "" 203 | ), 204 | ) 205 | jp_font.generate( 206 | f"{BUILD_FONTS_DIR}/{FONTFORGE_PREFIX}{FONT_NAME}{w35_str}{variant}-{merged_style}-jp.ttf".replace( 207 | " ", "" 208 | ), 209 | ) 210 | 211 | # ttfを閉じる 212 | jp_font.close() 213 | eng_font.close() 214 | 215 | 216 | def open_fonts(jp_style: str, eng_style: str): 217 | """フォントを開く""" 218 | jp_font = fontforge.open(f"{SOURCE_FONTS_DIR}/{JP_FONT}{jp_style}.ttf") 219 | if options.get("35"): 220 | eng_font = fontforge.open(f"{SOURCE_FONTS_DIR}/{ENG_FONT_35}{eng_style}.ttf") 221 | else: 222 | eng_font = fontforge.open(f"{SOURCE_FONTS_DIR}/{ENG_FONT}{eng_style}.ttf") 223 | 224 | # フォント参照を解除する 225 | for glyph in jp_font.glyphs(): 226 | if glyph.isWorthOutputting(): 227 | jp_font.selection.select(("more", None), glyph) 228 | jp_font.unlinkReferences() 229 | for glyph in eng_font.glyphs(): 230 | if glyph.isWorthOutputting(): 231 | eng_font.selection.select(("more", None), glyph) 232 | eng_font.unlinkReferences() 233 | 234 | return jp_font, eng_font 235 | 236 | 237 | def add_nerd_font_glyphs(jp_font, eng_font): 238 | """Nerd Fontのグリフを追加する""" 239 | global nerd_font 240 | # Nerd Fontのグリフを追加する 241 | if nerd_font is None: 242 | nerd_font = fontforge.open( 243 | f"{SOURCE_FONTS_DIR}/nerd-fonts/SymbolsNerdFont-Regular.ttf" 244 | ) 245 | nerd_font.em = EM_ASCENT + EM_DESCENT 246 | glyph_names = set() 247 | for nerd_glyph in nerd_font.glyphs(): 248 | # Nerd Fontsのグリフ名をユニークにするため接尾辞を付ける 249 | nerd_glyph.glyphname = f"{nerd_glyph.glyphname}-nf" 250 | # postテーブルでのグリフ名重複対策 251 | # fonttools merge で合成した後、MacOSで `'post'テーブルの使用性` エラーが発生することへの対処 252 | if nerd_glyph.glyphname in glyph_names: 253 | nerd_glyph.glyphname = f"{nerd_glyph.glyphname}-{nerd_glyph.encoding}" 254 | glyph_names.add(nerd_glyph.glyphname) 255 | # 幅を調整する 256 | half_width = eng_font[0x0030].width 257 | # Powerline Symbols の調整 258 | if 0xE0B0 <= nerd_glyph.unicode <= 0xE0D4: 259 | # なぜかズレている右付きグリフの個別調整 (EM 1000 に変更した後を想定して調整) 260 | original_width = nerd_glyph.width 261 | if nerd_glyph.unicode == 0xE0B2: 262 | nerd_glyph.transform(psMat.translate(-353, 0)) 263 | elif nerd_glyph.unicode == 0xE0B6: 264 | nerd_glyph.transform(psMat.translate(-414, 0)) 265 | elif nerd_glyph.unicode == 0xE0C5: 266 | nerd_glyph.transform(psMat.translate(-137, 0)) 267 | elif nerd_glyph.unicode == 0xE0C7: 268 | nerd_glyph.transform(psMat.translate(-214, 0)) 269 | elif nerd_glyph.unicode == 0xE0D4: 270 | nerd_glyph.transform(psMat.translate(-314, 0)) 271 | nerd_glyph.width = original_width 272 | # 位置と幅合わせ 273 | if nerd_glyph.width < half_width: 274 | nerd_glyph.transform( 275 | psMat.translate((half_width - nerd_glyph.width) / 2, 0) 276 | ) 277 | elif nerd_glyph.width > half_width: 278 | nerd_glyph.transform(psMat.scale(half_width / nerd_glyph.width, 1)) 279 | # グリフの高さ・位置を調整する 280 | nerd_glyph.transform(psMat.scale(1, 1.14)) 281 | nerd_glyph.transform(psMat.translate(0, 21)) 282 | elif nerd_glyph.width < (EM_ASCENT + EM_DESCENT) * 0.6: 283 | # 幅が狭いグリフは中央寄せとみなして調整する 284 | nerd_glyph.transform( 285 | psMat.translate((half_width - nerd_glyph.width) / 2, 0) 286 | ) 287 | # 幅を設定 288 | nerd_glyph.width = half_width 289 | # 日本語フォントにマージするため、既に存在する場合は削除する 290 | for nerd_glyph in nerd_font.glyphs(): 291 | if nerd_glyph.unicode != -1: 292 | # 既に存在する場合は削除する 293 | try: 294 | for glyph in jp_font.selection.select( 295 | ("unicode", None), nerd_glyph.unicode 296 | ).byGlyphs: 297 | glyph.clear() 298 | except Exception: 299 | pass 300 | try: 301 | for glyph in eng_font.selection.select( 302 | ("unicode", None), nerd_glyph.unicode 303 | ).byGlyphs: 304 | glyph.clear() 305 | except Exception: 306 | pass 307 | 308 | jp_font.mergeFonts(nerd_font) 309 | 310 | jp_font.selection.none() 311 | eng_font.selection.none() 312 | 313 | 314 | def delete_glyphs_with_duplicate_glyph_names(font): 315 | """重複するグリフ名を持つグリフをリネームする""" 316 | glyph_name_set = set() 317 | for glyph in font.glyphs(): 318 | if glyph.glyphname in glyph_name_set: 319 | glyph.glyphname = f"{glyph.glyphname}_{glyph.encoding}" 320 | else: 321 | glyph_name_set.add(glyph.glyphname) 322 | 323 | 324 | def adjust_some_glyph(jp_font, eng_font): 325 | """いくつかのグリフ形状に調整を加える""" 326 | # 全角括弧の開きを広くする 327 | full_width = jp_font[0x3042].width 328 | for glyph_name in [0xFF08, 0xFF3B, 0xFF5B]: 329 | glyph = jp_font[glyph_name] 330 | glyph.transform(psMat.translate(-180, 0)) 331 | glyph.width = full_width 332 | for glyph_name in [0xFF09, 0xFF3D, 0xFF5D]: 333 | glyph = jp_font[glyph_name] 334 | glyph.transform(psMat.translate(180, 0)) 335 | glyph.width = full_width 336 | # LEFT SINGLE QUOTATION MARK (U+2018) ~ DOUBLE HIGH-REVERSED-9 QUOTATION MARK (U+201F) の幅を全角幅にする 337 | for uni in range(0x2018, 0x201F + 1): 338 | try: 339 | glyph = jp_font[uni] 340 | glyph.transform(psMat.translate((full_width - glyph.width) / 2, 0)) 341 | glyph.width = full_width 342 | except TypeError: 343 | # グリフが存在しない場合は継続する 344 | continue 345 | 346 | # 矢印記号の読みづらさ対策 347 | for uni in [0x2190, 0x2192, 0x2194, 0x21D0, 0x21D2, 0x21D4, 0x21DA, 0x21DB]: 348 | eng_font.selection.select(("unicode", None), uni) 349 | for glyph in eng_font.selection.byGlyphs: 350 | scale_glyph(glyph, 1, 1.3) 351 | for uni in [0x2191, 0x2193, 0x2195, 0x21D1, 0x21D3]: 352 | eng_font.selection.select(("unicode", None), uni) 353 | for glyph in eng_font.selection.byGlyphs: 354 | scale_glyph(glyph, 1.3, 1) 355 | # for uni in range(0x21D6, 0x21D9 + 1): 356 | # eng_font.selection.select(("unicode", None), uni) 357 | # for glyph in eng_font.selection.byGlyphs: 358 | # scale_glyph(glyph, 1.3, 1.3) 359 | 360 | # _ が2つ繋がっているときの表示を離す 361 | if options.get("35"): 362 | scale_glyph(eng_font[0x005F], 0.8666, 1) 363 | else: 364 | scale_glyph(eng_font[0x005F], 0.84, 1) 365 | 366 | # 1:2 の半角記号の見づらさを改善 367 | if not options.get("35"): 368 | # # の拡大 369 | scale_glyph(eng_font[0x0023], 1.15, 1) 370 | # * の拡大 371 | scale_glyph(eng_font[0x002A], 1.2, 1.2) 372 | 373 | # U+A788 が何故か600幅になってしまうので調整 374 | if not options.get("35"): 375 | eng_font[0xA788].width = 500 376 | 377 | jp_font.selection.none() 378 | eng_font.selection.none() 379 | 380 | 381 | def em_1000(font): 382 | """フォントのEMを1000に変換する""" 383 | font.em = EM_ASCENT + EM_DESCENT 384 | 385 | 386 | def delete_duplicate_glyphs(jp_font, eng_font): 387 | """jp_fontとeng_fontのグリフを比較し、重複するグリフを削除する""" 388 | 389 | eng_font.selection.none() 390 | jp_font.selection.none() 391 | 392 | for glyph in jp_font.glyphs("encoding"): 393 | try: 394 | if glyph.isWorthOutputting() and glyph.unicode > 0: 395 | eng_font.selection.select(("more", "unicode"), glyph.unicode) 396 | except ValueError: 397 | # Encoding is out of range のときは継続する 398 | continue 399 | 400 | # 削除箇所に altuni が設定されている場合は削除する前にコピーする 401 | for glyph in eng_font.selection.byGlyphs: 402 | jp_font.selection.select(("more", "unicode"), glyph.unicode) 403 | altuni_glyph_list = [] 404 | for glyph in jp_font.selection.byGlyphs: 405 | if glyph.altuni: 406 | altuni_glyph_list.append(glyph.unicode) 407 | materialize_altuni_glyphs(jp_font, altuni_glyph_list) 408 | jp_font.selection.none() 409 | 410 | # 重複するグリフを削除する 411 | for glyph in eng_font.selection.byGlyphs: 412 | jp_font.selection.select(("more", "unicode"), glyph.unicode) 413 | for glyph in jp_font.selection.byGlyphs: 414 | glyph.clear() 415 | 416 | jp_font.selection.none() 417 | eng_font.selection.none() 418 | 419 | 420 | def materialize_altuni_glyphs(font, entity_glyph_unicode_list): 421 | """altuni を指定している参照元のコードポイントにグリフをコピーし、 422 | 参照先 (実体) の altuni を削除する。異体字セレクタ分は考慮しない。 423 | """ 424 | 425 | for unicode in entity_glyph_unicode_list: 426 | entity_glyph = font[unicode] 427 | if not entity_glyph.altuni: 428 | continue 429 | 430 | # 以下形式のタプルで返ってくる 431 | # (unicode-value, variation-selector, reserved-field) 432 | # 第3フィールドは常に0なので無視 433 | altunis = entity_glyph.altuni 434 | 435 | # 参照先の altuni を削除 436 | # これをやらないと、グリフのコピー時に altuni が参照されてしまい、 437 | # 同じコードポイントに貼り付いてしまって意味がない 438 | entity_glyph.altuni = None 439 | 440 | processed = [] 441 | for altuni in altunis: 442 | if altuni[0] in processed: 443 | continue 444 | if altuni[1] != -1: 445 | # variation-selector が -1 以外の場合は異体字セレクタなのでスキップ 446 | continue 447 | processed.append(altuni[0]) 448 | # altuni 参照元に空グリフを作成 449 | copy_target_unicode = altuni[0] 450 | try: 451 | entity_glyph.glyphname = f"uni{entity_glyph.unicode:04X}" 452 | copied_glyph_name = f"uni{copy_target_unicode:04X}" 453 | if copied_glyph_name == entity_glyph.glyphname: 454 | copied_glyph_name += "copy" 455 | copy_target_glyph = font.createChar( 456 | copy_target_unicode, 457 | copied_glyph_name, 458 | ) 459 | except Exception: 460 | copy_target_glyph = font[copy_target_unicode] 461 | copy_target_glyph.width = entity_glyph.width 462 | # altuni 参照元へグリフをコピー 463 | font.selection.select(entity_glyph.glyphname) 464 | font.copy() 465 | font.selection.select(copy_target_glyph.glyphname) 466 | font.paste() 467 | 468 | 469 | def remove_lookups(font): 470 | """GSUB, GPOSテーブルを削除する""" 471 | for lookup in list(font.gsub_lookups) + list(font.gpos_lookups): 472 | font.removeLookup(lookup) 473 | 474 | 475 | def delete_not_console_glyphs(jp_font, eng_font): 476 | """日本語フォントを優先するために不要なグリフを削除する""" 477 | jp_font.selection.none() 478 | eng_font.selection.none() 479 | 480 | # delete_eng_glyph_when_jp_font_has_glyph() はメソッド内で選択範囲を変更するため、他の処理と分けて最初に実行する 481 | delete_eng_glyph_when_jp_font_has_glyph(jp_font, eng_font, 0x2190, 0x21FF) # Arrows 482 | delete_eng_glyph_when_jp_font_has_glyph( 483 | jp_font, eng_font, 0x2200, 0x22FF 484 | ) # Mathematical Operators 485 | delete_eng_glyph_when_jp_font_has_glyph( 486 | jp_font, eng_font, 0x2000, 0x206F 487 | ) # General Punctuation 488 | delete_eng_glyph_when_jp_font_has_glyph( 489 | jp_font, eng_font, 0x2100, 0x214F 490 | ) # Letterlike Symbols 491 | 492 | # 記号 493 | eng_font.selection.select(("more", "unicode"), 0x00D7) # × 494 | eng_font.selection.select(("more", "unicode"), 0x00F7) # ÷ 495 | # ─-╿ (Box Drawing) (U+2500-U+257F) 496 | eng_font.selection.select(("more", "ranges"), 0x2500, 0x257F) 497 | 498 | # 英語フォントを優先して適用するために削除範囲から除外する 499 | # 各エディタの可視化文字対策 500 | eng_font.selection.select(("less", "unicode"), 0x2022) 501 | eng_font.selection.select(("less", "unicode"), 0x00B7) 502 | eng_font.selection.select(("less", "unicode"), 0x2024) 503 | eng_font.selection.select(("less", "unicode"), 0x2219) 504 | eng_font.selection.select(("less", "unicode"), 0x25D8) 505 | eng_font.selection.select(("less", "unicode"), 0x25E6) 506 | # 結合文音記号は英語フォントを適用 507 | eng_font.selection.select(("less", "unicode", "ranges"), 0x0300, 0x0328) 508 | # « » 509 | eng_font.selection.select(("less", "unicode"), 0xAB) 510 | eng_font.selection.select(("less", "unicode"), 0xBB) 511 | # broken bar 512 | eng_font.selection.select(("less", "unicode"), 0x00A6) 513 | 514 | for glyph in eng_font.selection.byGlyphs: 515 | glyph.clear() 516 | 517 | jp_font.selection.none() 518 | eng_font.selection.none() 519 | 520 | 521 | def delete_eng_glyph_when_jp_font_has_glyph(jp_font, eng_font, start, end): 522 | """日本語フォントにグリフが存在する場合、英語フォントのグリフを削除する""" 523 | for uni in range(start, end + 1): 524 | try: 525 | jp_font.selection.select(("unicode", None), uni) 526 | eng_font.selection.select(("unicode", None), uni) 527 | for glyph in jp_font.selection.byGlyphs: 528 | if glyph.isWorthOutputting(): 529 | for glyph in eng_font.selection.byGlyphs: 530 | glyph.clear() 531 | except Exception: 532 | # グリフが存在しない場合は継続する 533 | continue 534 | jp_font.selection.none() 535 | eng_font.selection.none() 536 | 537 | 538 | def eaaw_width_to_half(jp_font): 539 | """East Asian Ambiguous Width 文字の半角化""" 540 | # ref: https://www.unicode.org/Public/15.1.0/ucd/EastAsianWidth.txt 541 | 542 | eaaw_unicode_list = ( 543 | 0x203B, # REFERENCE MARK 544 | 0x2103, 545 | 0x2109, 546 | 0x2121, 547 | 0x212B, 548 | *range(0x2160, 0x216B + 1), 549 | *range(0x2170, 0x217B + 1), 550 | 0x221F, 551 | 0x222E, 552 | *range(0x226A, 0x226B + 1), 553 | 0x22A5, 554 | 0x22BF, 555 | 0x2312, 556 | *range(0x2460, 0x2490 + 1), 557 | *range(0x249C, 0x24B5 + 1), 558 | *range(0x2605, 0x2606 + 1), 559 | 0x260E, 560 | 0x261C, 561 | 0x261E, 562 | 0x2640, 563 | 0x2642, 564 | *range(0x2660, 0x2665 + 1), 565 | 0x2667, 566 | 0x266A, 567 | 0x266D, 568 | 0x266F, 569 | 0x1F100, 570 | ) 571 | half_width = jp_font[0x3042].width // 2 572 | for glyph in jp_font.glyphs(): 573 | if glyph.unicode in eaaw_unicode_list and glyph.width > half_width: 574 | glyph.transform(psMat.translate((half_width - glyph.width) / 2, 0)) 575 | glyph.width = half_width 576 | scale_glyph(glyph, 0.67, 0.9) 577 | 578 | 579 | def to_monospace(jp_font): 580 | """半角幅か全角幅になるように変換する""" 581 | for glyph in jp_font.glyphs(): 582 | if 0 < glyph.width < 500 or (glyph.width == 500 and options.get("35")): 583 | # グリフ位置を調整してから幅を設定 584 | base_width = 600 if options.get("35") else 500 585 | glyph.transform(psMat.translate((base_width - glyph.width) / 2, 0)) 586 | glyph.width = base_width 587 | elif 500 < glyph.width < 1000: 588 | # グリフ位置を調整してから幅を設定 589 | glyph.transform(psMat.translate((1000 - glyph.width) / 2, 0)) 590 | glyph.width = 1000 591 | 592 | 593 | def scale_glyph(glyph, scale_x, scale_y): 594 | """中心位置を変えないようにグリフのスケールを調整する""" 595 | original_width = glyph.width 596 | # スケール前の中心位置を求める 597 | before_bb = glyph.boundingBox() 598 | before_center_x = (before_bb[0] + before_bb[2]) / 2 599 | before_center_y = (before_bb[1] + before_bb[3]) / 2 600 | # スケール変換 601 | glyph.transform(psMat.scale(scale_x, scale_y)) 602 | # スケール後の中心位置を求める 603 | after_bb = glyph.boundingBox() 604 | after_center_x = (after_bb[0] + after_bb[2]) / 2 605 | after_center_y = (after_bb[1] + after_bb[3]) / 2 606 | # 拡大で増えた分を考慮して中心位置を調整 607 | glyph.transform( 608 | psMat.translate( 609 | before_center_x - after_center_x, 610 | before_center_y - after_center_y, 611 | ) 612 | ) 613 | glyph.width = original_width 614 | 615 | 616 | def visualize_zenkaku_space(jp_font): 617 | """全角スペースを可視化する""" 618 | # 全角スペースを差し替え 619 | glyph = jp_font[0x3000] 620 | width_to = glyph.width 621 | glyph.clear() 622 | jp_font.mergeFonts(fontforge.open(f"{SOURCE_FONTS_DIR}/{IDEOGRAPHIC_SPACE}")) 623 | # 幅を設定し位置調整 624 | jp_font.selection.select("U+3000") 625 | for glyph in jp_font.selection.byGlyphs: 626 | width_from = glyph.width 627 | glyph.transform(psMat.translate((width_to - width_from) / 2, 0)) 628 | glyph.width = width_to 629 | jp_font.selection.none() 630 | 631 | 632 | def edit_meta_data(font, weight: str, variant: str, cap_height: int, x_height: int): 633 | """フォント内のメタデータを編集する""" 634 | font.ascent = EM_ASCENT 635 | font.descent = EM_DESCENT 636 | 637 | os2_ascent = OS2_ASCENT 638 | os2_descent = OS2_DESCENT 639 | 640 | font.os2_winascent = os2_ascent 641 | font.os2_windescent = os2_descent 642 | 643 | font.os2_typoascent = os2_ascent 644 | font.os2_typodescent = -os2_descent 645 | font.os2_typolinegap = 0 646 | 647 | font.hhea_ascent = os2_ascent 648 | font.hhea_descent = -os2_descent 649 | font.hhea_linegap = 0 650 | 651 | font.os2_xheight = x_height 652 | font.os2_capheight = cap_height 653 | 654 | match weight: 655 | case "Thin": 656 | font.weight = "Thin" 657 | font.os2_weight = 200 658 | case "ExtraLight": 659 | font.weight = "ExtraLight" 660 | font.os2_weight = 250 661 | case "Light": 662 | font.weight = "Light" 663 | font.os2_weight = 300 664 | case "Regular": 665 | font.weight = "Regular" 666 | font.os2_weight = 400 667 | case "Medium": 668 | font.weight = "Medium" 669 | font.os2_weight = 500 670 | case "SemiBold": 671 | font.weight = "SemiBold" 672 | font.os2_weight = 600 673 | case "Bold": 674 | font.weight = "Bold" 675 | font.os2_weight = 700 676 | case "ExtraBold": 677 | font.weight = "ExtraBold" 678 | font.os2_weight = 800 679 | case "Black": 680 | font.weight = "Black" 681 | font.os2_weight = 900 682 | case _: 683 | font.weight = "Regular" 684 | font.os2_weight = 400 685 | 686 | # VSCode のターミナル上のボトム位置の表示で g, j などが見切れる問題への対処 687 | # 水平ベーステーブルを削除 688 | font.horizontalBaseline = None 689 | 690 | font.sfnt_names = ( 691 | ( 692 | "English (US)", 693 | "License", 694 | """This Font Software is licensed under the SIL Open Font License, 695 | Version 1.1. This license is available with a FAQ 696 | at: http://scripts.sil.org/OFL""", 697 | ), 698 | ("English (US)", "License URL", "http://scripts.sil.org/OFL"), 699 | ("English (US)", "Version", VERSION), 700 | ) 701 | font.os2_vendor = VENDER_NAME 702 | font.copyright = COPYRIGHT 703 | 704 | # フォント名を設定する 705 | w35_str = W35_WIDTH_STR if options.get("35") else "" 706 | font_family = f"{FONT_NAME}{w35_str}" 707 | if variant != "": 708 | font_family += f" {variant}" 709 | font_family = font_family.strip() 710 | 711 | # 注意: 本来は Italic が来るケースを想定するが、Noto Sans には Italic がないため条件文で考慮していない 712 | if "Regular" == weight or "Bold" == weight: 713 | # Regular と Bold は素直に設定する 714 | font_weight = weight 715 | font.familyname = font_family 716 | font.fontname = f"{font_family}-{font_weight}".replace(" ", "") 717 | font.fullname = f"{font_family} {font_weight}" 718 | font.weight = font_weight.split(" ")[0] 719 | 720 | # スタイル (サブファミリー) 721 | font.appendSFNTName(0x409, 2, font_weight) 722 | else: 723 | # Regular と Bold 以外は、フォントファミリー名にフォントスタイルを含める 724 | font_weight = weight 725 | font_weight_1st = font_weight.split(" ")[0] 726 | font.familyname = f"{font_family} " + font_weight_1st 727 | font.fontname = f"{font_family}-{font_weight}".replace(" ", "") 728 | font.fullname = f"{font_family} {font_weight}" 729 | font.weight = font_weight_1st 730 | 731 | # スタイル (サブファミリー) 732 | if "Italic" in weight: 733 | font.appendSFNTName(0x409, 2, "Italic") 734 | else: 735 | font.appendSFNTName(0x409, 2, "Regular") 736 | # 優先フォントファミリー名 737 | font.appendSFNTName(0x409, 16, font_family) 738 | # 優先フォントスタイル 739 | font.appendSFNTName(0x409, 17, font_weight) 740 | 741 | 742 | if __name__ == "__main__": 743 | main() 744 | -------------------------------------------------------------------------------- /fonttools_script.py: -------------------------------------------------------------------------------- 1 | #!/bin/env python3 2 | 3 | import configparser 4 | import glob 5 | import os 6 | import sys 7 | import xml.etree.ElementTree as ET 8 | from pathlib import Path 9 | 10 | from fontTools import merge, ttLib, ttx 11 | from ttfautohint import options, ttfautohint 12 | 13 | # iniファイルを読み込む 14 | settings = configparser.ConfigParser() 15 | settings.read("build.ini", encoding="utf-8") 16 | 17 | FONT_NAME = settings.get("DEFAULT", "FONT_NAME") 18 | FONTFORGE_PREFIX = settings.get("DEFAULT", "FONTFORGE_PREFIX") 19 | FONTTOOLS_PREFIX = settings.get("DEFAULT", "FONTTOOLS_PREFIX") 20 | BUILD_FONTS_DIR = settings.get("DEFAULT", "BUILD_FONTS_DIR") 21 | W35_WIDTH_STR = settings.get("DEFAULT", "W35_WIDTH_STR") 22 | HALF_WIDTH_12 = int(settings.get("DEFAULT", "HALF_WIDTH_12")) 23 | FULL_WIDTH_35 = int(settings.get("DEFAULT", "FULL_WIDTH_35")) 24 | 25 | 26 | def main(): 27 | # 第一引数を取得 28 | # 特定のバリエーションのみを処理するための指定 29 | specific_variant = sys.argv[1] if len(sys.argv) > 1 else None 30 | 31 | edit_fonts(specific_variant) 32 | 33 | 34 | def edit_fonts(specific_variant: str): 35 | """フォントを編集する""" 36 | 37 | if specific_variant is None: 38 | specific_variant = "" 39 | 40 | # ファイルをパターンで指定 41 | file_pattern = f"{FONTFORGE_PREFIX}{FONT_NAME}{specific_variant}*-eng.ttf" 42 | filenames = glob.glob(f"{BUILD_FONTS_DIR}/{file_pattern}") 43 | # ファイルが見つからない場合はエラー 44 | if len(filenames) == 0: 45 | print(f"Error: {file_pattern} not found") 46 | return 47 | paths = [Path(f) for f in filenames] 48 | for path in paths: 49 | print(f"edit {str(path)}") 50 | style = path.stem.split("-")[1] 51 | variant = path.stem.split("-")[0].replace(f"{FONTFORGE_PREFIX}{FONT_NAME}", "") 52 | add_hinting(str(path), str(path).replace(".ttf", "-hinted.ttf")) 53 | merge_fonts(style, variant) 54 | fix_font_tables(style, variant) 55 | 56 | # 一時ファイルを削除 57 | # スタイル部分以降はワイルドカードで指定 58 | for filename in glob.glob( 59 | f"{BUILD_FONTS_DIR}/{FONTTOOLS_PREFIX}{FONT_NAME}{specific_variant}*" 60 | ): 61 | os.remove(filename) 62 | for filename in glob.glob( 63 | f"{BUILD_FONTS_DIR}/{FONTFORGE_PREFIX}{FONT_NAME}{specific_variant}*" 64 | ): 65 | os.remove(filename) 66 | 67 | 68 | def add_hinting(input_font_path, output_font_path): 69 | """フォントにヒンティングを付ける""" 70 | args = [ 71 | "-l", 72 | "6", 73 | "-r", 74 | "45", 75 | "-D", 76 | "latn", 77 | "-f", 78 | "none", 79 | "-S", 80 | "-W", 81 | "-X", 82 | "14-", 83 | "-x", 84 | "0", 85 | "-I", 86 | input_font_path, 87 | output_font_path, 88 | ] 89 | options_ = options.parse_args(args) 90 | print("exec hinting", options_) 91 | ttfautohint(**options_) 92 | 93 | 94 | def merge_fonts(style, variant): 95 | """フォントを結合する""" 96 | eng_font_path = f"{BUILD_FONTS_DIR}/{FONTFORGE_PREFIX}{FONT_NAME}{variant}-{style}-eng-hinted.ttf" 97 | jp_font_path = ( 98 | f"{BUILD_FONTS_DIR}/{FONTFORGE_PREFIX}{FONT_NAME}{variant}-{style}-jp.ttf" 99 | ) 100 | # vhea, vmtxテーブルを削除 101 | jp_font_object = ttLib.TTFont(jp_font_path) 102 | if "vhea" in jp_font_object: 103 | del jp_font_object["vhea"] 104 | if "vmtx" in jp_font_object: 105 | del jp_font_object["vmtx"] 106 | jp_font_object.save(jp_font_path) 107 | # フォントを結合 108 | merger = merge.Merger() 109 | merged_font = merger.merge([eng_font_path, jp_font_path]) 110 | merged_font.save( 111 | f"{BUILD_FONTS_DIR}/{FONTTOOLS_PREFIX}{FONT_NAME}{variant}-{style}_merged.ttf" 112 | ) 113 | 114 | 115 | def fix_font_tables(style, variant): 116 | """フォントテーブルを編集する""" 117 | 118 | input_font_name = f"{FONTTOOLS_PREFIX}{FONT_NAME}{variant}-{style}_merged.ttf" 119 | output_name_base = f"{FONTTOOLS_PREFIX}{FONT_NAME}{variant}-{style}" 120 | completed_name_base = f"{FONT_NAME}{variant}-{style}" 121 | 122 | # OS/2, post テーブルのみのttxファイルを出力 123 | xml = dump_ttx(input_font_name, output_name_base) 124 | # OS/2 テーブルを編集 125 | fix_os2_table(xml, style, flag_hw=W35_WIDTH_STR not in variant) 126 | # post テーブルを編集 127 | fix_post_table(xml, flag_hw=W35_WIDTH_STR not in variant) 128 | # cmap テーブルを編集 129 | fix_cmap_table(xml, style, variant) 130 | 131 | # ttxファイルを上書き保存 132 | xml.write( 133 | f"{BUILD_FONTS_DIR}/{output_name_base}.ttx", 134 | encoding="utf-8", 135 | xml_declaration=True, 136 | ) 137 | 138 | # ttxファイルをttfファイルに適用 139 | ttx.main( 140 | [ 141 | "-o", 142 | f"{BUILD_FONTS_DIR}/{output_name_base}_os2_post.ttf", 143 | "-m", 144 | f"{BUILD_FONTS_DIR}/{input_font_name}", 145 | f"{BUILD_FONTS_DIR}/{output_name_base}.ttx", 146 | ] 147 | ) 148 | 149 | # ファイル名を変更 150 | os.rename( 151 | f"{BUILD_FONTS_DIR}/{output_name_base}_os2_post.ttf", 152 | f"{BUILD_FONTS_DIR}/{completed_name_base}.ttf", 153 | ) 154 | 155 | 156 | def dump_ttx(input_name_base, output_name_base) -> ET: 157 | """OS/2, post テーブルのみのttxファイルを出力""" 158 | ttx.main( 159 | [ 160 | "-t", 161 | "OS/2", 162 | "-t", 163 | "post", 164 | "-t", 165 | "cmap", 166 | "-f", 167 | "-o", 168 | f"{BUILD_FONTS_DIR}/{output_name_base}.ttx", 169 | f"{BUILD_FONTS_DIR}/{input_name_base}", 170 | ] 171 | ) 172 | 173 | return ET.parse(f"{BUILD_FONTS_DIR}/{output_name_base}.ttx") 174 | 175 | 176 | def fix_os2_table(xml: ET, style: str, flag_hw: bool = False): 177 | """OS/2 テーブルを編集する""" 178 | # xAvgCharWidthを編集 179 | # タグ形式: 180 | if flag_hw: 181 | x_avg_char_width = HALF_WIDTH_12 182 | else: 183 | x_avg_char_width = FULL_WIDTH_35 184 | xml.find("OS_2/xAvgCharWidth").set("value", str(x_avg_char_width)) 185 | 186 | # fsSelectionを編集 187 | # タグ形式: 188 | # スタイルに応じたビットを立てる 189 | fs_selection = None 190 | if style == "Regular": 191 | fs_selection = "00000001 01000000" 192 | elif style == "Italic": 193 | fs_selection = "00000001 00000001" 194 | elif style == "Bold": 195 | fs_selection = "00000001 00100000" 196 | elif style == "BoldItalic": 197 | fs_selection = "00000001 00100001" 198 | 199 | if fs_selection is not None: 200 | xml.find("OS_2/fsSelection").set("value", fs_selection) 201 | 202 | # panoseを編集 203 | # タグ形式: 204 | # 205 | # 206 | # 207 | # 208 | # 209 | # 210 | # 211 | # 212 | # 213 | # 214 | # 215 | # 216 | if style == "Regular" or style == "Italic": 217 | bWeight = 5 218 | else: 219 | bWeight = 8 220 | if flag_hw: 221 | panose = { 222 | "bFamilyType": 2, 223 | "bSerifStyle": 11, 224 | "bWeight": bWeight, 225 | "bProportion": 9, 226 | "bContrast": 2, 227 | "bStrokeVariation": 2, 228 | "bArmStyle": 3, 229 | "bLetterForm": 2, 230 | "bMidline": 2, 231 | "bXHeight": 7, 232 | } 233 | else: 234 | panose = { 235 | "bFamilyType": 2, 236 | "bSerifStyle": 11, 237 | "bWeight": bWeight, 238 | "bProportion": 3, 239 | "bContrast": 2, 240 | "bStrokeVariation": 2, 241 | "bArmStyle": 3, 242 | "bLetterForm": 2, 243 | "bMidline": 2, 244 | "bXHeight": 7, 245 | } 246 | 247 | for key, value in panose.items(): 248 | xml.find(f"OS_2/panose/{key}").set("value", str(value)) 249 | 250 | 251 | def fix_post_table(xml: ET, flag_hw: bool = False): 252 | """post テーブルを編集する""" 253 | # isFixedPitchを編集 254 | # タグ形式: 255 | is_fixed_pitch = 1 if flag_hw else 0 256 | xml.find("post/isFixedPitch").set("value", str(is_fixed_pitch)) 257 | 258 | 259 | def fix_cmap_table(xml: ET, style: str, variant: str): 260 | """異体字シーケンスを搭載するために cmap テーブルを編集する。 261 | pyftmerge で結合すると異体字シーケンスを司るテーブル cmap_format_14 が 262 | 消えてしまうため、マージする前の編集済み日本語フォントから該当テーブル情報を取り出して適用する。""" 263 | # タグ形式: 264 | # 265 | # 266 | # 267 | # 268 | source_xml = dump_ttx( 269 | f"{FONTFORGE_PREFIX}{FONT_NAME}{variant}-{style}-jp.ttf", 270 | f"{FONTFORGE_PREFIX}{FONT_NAME}{variant}-{style}-jp", 271 | ) 272 | source_cmap_format_14 = source_xml.find("cmap/cmap_format_14") 273 | target_cmap = xml.find("cmap") 274 | target_cmap.append(source_cmap_format_14) 275 | 276 | 277 | if __name__ == "__main__": 278 | main() 279 | -------------------------------------------------------------------------------- /make.ps1: -------------------------------------------------------------------------------- 1 | # ini から VERSION を取得 2 | $ini = Get-Content .\build.ini 3 | $version = ($ini | Select-String -Pattern "VERSION").ToString().Split("=")[1].Trim() 4 | 5 | # スクリプトファイルがある場所に移動する 6 | Set-Location -Path $PSScriptRoot 7 | # 各ファイルを置くフォルダを作成 8 | New-Item -ItemType Directory -Force -Path ".\release_files\" 9 | # ビルドフォルダを削除 10 | if (Test-Path .\build) { 11 | Remove-Item -Path .\build -Recurse -Force 12 | } 13 | 14 | # 並列処理内で、処理が重いNerd Fontsのビルドを優先して処理する 15 | $option_and_output_folder = @( 16 | # @("--console --nerd-font", "ConsoleNF-"), # ビルド コンソール用 通常版 + Nerd Fonts 17 | # @("--console --35 --nerd-font", "35ConsoleNF-"), # ビルド コンソール用 3:5幅版 + Nerd Fonts 18 | @("", "-"), # ビルド 通常版 19 | @("--35", "35-") # ビルド 3:5幅版 20 | @("--console", "Console-"), # ビルド コンソール用 通常版 21 | @("--console --35", "35Console-") # ビルド コンソール用 1:2幅版 22 | @("--hidden-zenkaku-space ", "HS-"), # ビルド 通常版 全角スペース不可視 23 | @("--hidden-zenkaku-space --35", "35HS-"), # ビルド 3:5幅版 全角スペース不可視 24 | @("--hidden-zenkaku-space --console", "ConsoleHS-"), # ビルド コンソール用 通常版 全角スペース不可視 25 | @("--hidden-zenkaku-space --console --35", "35ConsoleHS-") # ビルド コンソール用 1:2幅版 全角スペース不可視 26 | ) 27 | 28 | $option_and_output_folder | Foreach-Object -ThrottleLimit 4 -Parallel { 29 | $fontforge_option = $_[0] 30 | $fonttools_option = $_[1] 31 | Write-Host "fontforge script start. option: `"${fontforge_option}`"" 32 | Invoke-Expression "& `"C:\Program Files (x86)\FontForgeBuilds\bin\ffpython.exe`" .\fontforge_script.py --do-not-delete-build-dir ${fontforge_option}" ` 33 | && Write-Host "fonttools script start. option: `"${fonttools_option}`"" ` 34 | && python fonttools_script.py ${fonttools_option} 35 | } 36 | 37 | $move_file_src_dest = @( 38 | # @("NOTONOTO*NF*-*.ttf", "NOTONOTO_NF_$version", "NF"), 39 | @("NOTONOTO*HS*-*.ttf", "NOTONOTO_HS_$version", "HS"), 40 | @("NOTONOTO*-*.ttf", "NOTONOTO_$version", "") 41 | ) 42 | 43 | $timestamp = Get-Date -Format "yyyyMMddHHmmss" 44 | $move_dir = ".\release_files\build_$timestamp" 45 | 46 | $move_file_src_dest | Foreach-Object { 47 | $folder_path = "$move_dir\$($_[1])" 48 | New-Item -ItemType Directory -Force -Path $folder_path 49 | $move_from = ".\build\$($_[0])" 50 | Move-Item -Path $move_from -Destination $folder_path -Force 51 | 52 | Write-Host $_ 53 | 54 | $variant = "" 55 | if ($_[2] -ne "") { 56 | $variant = "_$($_[2])" 57 | } 58 | @( 59 | @("*35Console*.ttf", "NOTONOTO35Console${variant}"), 60 | @("*Console*.ttf", "NOTONOTOConsole${variant}"), 61 | @("*35*.ttf", "NOTONOTO35${variant}"), 62 | @("*.ttf", "NOTONOTO${variant}") 63 | ) | Foreach-Object { 64 | $individual_folder_path = "$folder_path\$($_[1])" 65 | # ファイル件数が0件の場合はフォルダを作成しない 66 | if ((Get-ChildItem -Path $folder_path\$($_[0])).Count -eq 0) { 67 | return 68 | } 69 | New-Item -ItemType Directory -Force -Path $individual_folder_path 70 | Move-Item -Path $folder_path\$($_[0]) -Destination $individual_folder_path -Force 71 | } 72 | } 73 | 74 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | fonttools==4.40.0 2 | ttfautohint-py==0.5.1 3 | -------------------------------------------------------------------------------- /source_fonts/NotoSansJP/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source' 2 | 3 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 4 | This license is copied below, and is also available with a FAQ at: 5 | https://openfontlicense.org 6 | 7 | 8 | ----------------------------------------------------------- 9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 10 | ----------------------------------------------------------- 11 | 12 | PREAMBLE 13 | The goals of the Open Font License (OFL) are to stimulate worldwide 14 | development of collaborative font projects, to support the font creation 15 | efforts of academic and linguistic communities, and to provide a free and 16 | open framework in which fonts may be shared and improved in partnership 17 | with others. 18 | 19 | The OFL allows the licensed fonts to be used, studied, modified and 20 | redistributed freely as long as they are not sold by themselves. The 21 | fonts, including any derivative works, can be bundled, embedded, 22 | redistributed and/or sold with any software provided that any reserved 23 | names are not used by derivative works. The fonts and derivatives, 24 | however, cannot be released under any other type of license. The 25 | requirement for fonts to remain under this license does not apply 26 | to any document created using the fonts or their derivatives. 27 | 28 | DEFINITIONS 29 | "Font Software" refers to the set of files released by the Copyright 30 | Holder(s) under this license and clearly marked as such. This may 31 | include source files, build scripts and documentation. 32 | 33 | "Reserved Font Name" refers to any names specified as such after the 34 | copyright statement(s). 35 | 36 | "Original Version" refers to the collection of Font Software components as 37 | distributed by the Copyright Holder(s). 38 | 39 | "Modified Version" refers to any derivative made by adding to, deleting, 40 | or substituting -- in part or in whole -- any of the components of the 41 | Original Version, by changing formats or by porting the Font Software to a 42 | new environment. 43 | 44 | "Author" refers to any designer, engineer, programmer, technical 45 | writer or other person who contributed to the Font Software. 46 | 47 | PERMISSION & CONDITIONS 48 | Permission is hereby granted, free of charge, to any person obtaining 49 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 50 | redistribute, and sell modified and unmodified copies of the Font 51 | Software, subject to the following conditions: 52 | 53 | 1) Neither the Font Software nor any of its individual components, 54 | in Original or Modified Versions, may be sold by itself. 55 | 56 | 2) Original or Modified Versions of the Font Software may be bundled, 57 | redistributed and/or sold with any software, provided that each copy 58 | contains the above copyright notice and this license. These can be 59 | included either as stand-alone text files, human-readable headers or 60 | in the appropriate machine-readable metadata fields within text or 61 | binary files as long as those fields can be easily viewed by the user. 62 | 63 | 3) No Modified Version of the Font Software may use the Reserved Font 64 | Name(s) unless explicit written permission is granted by the corresponding 65 | Copyright Holder. This restriction only applies to the primary font name as 66 | presented to the users. 67 | 68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 69 | Software shall not be used to promote, endorse or advertise any 70 | Modified Version, except to acknowledge the contribution(s) of the 71 | Copyright Holder(s) and the Author(s) or with their explicit written 72 | permission. 73 | 74 | 5) The Font Software, modified or unmodified, in part or in whole, 75 | must be distributed entirely under this license, and must not be 76 | distributed under any other license. The requirement for fonts to 77 | remain under this license does not apply to any document created 78 | using the Font Software. 79 | 80 | TERMINATION 81 | This license becomes null and void if any of the above conditions are 82 | not met. 83 | 84 | DISCLAIMER 85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 93 | OTHER DEALINGS IN THE FONT SOFTWARE. 94 | -------------------------------------------------------------------------------- /source_fonts/NotoSansJP/NotoSansJP-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansJP/NotoSansJP-Black.ttf -------------------------------------------------------------------------------- /source_fonts/NotoSansJP/NotoSansJP-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansJP/NotoSansJP-Bold.ttf -------------------------------------------------------------------------------- /source_fonts/NotoSansJP/NotoSansJP-ExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansJP/NotoSansJP-ExtraBold.ttf -------------------------------------------------------------------------------- /source_fonts/NotoSansJP/NotoSansJP-ExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansJP/NotoSansJP-ExtraLight.ttf -------------------------------------------------------------------------------- /source_fonts/NotoSansJP/NotoSansJP-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansJP/NotoSansJP-Light.ttf -------------------------------------------------------------------------------- /source_fonts/NotoSansJP/NotoSansJP-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansJP/NotoSansJP-Medium.ttf -------------------------------------------------------------------------------- /source_fonts/NotoSansJP/NotoSansJP-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansJP/NotoSansJP-Regular.ttf -------------------------------------------------------------------------------- /source_fonts/NotoSansJP/NotoSansJP-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansJP/NotoSansJP-SemiBold.ttf -------------------------------------------------------------------------------- /source_fonts/NotoSansJP/NotoSansJP-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansJP/NotoSansJP-Thin.ttf -------------------------------------------------------------------------------- /source_fonts/NotoSansMono/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2022 The Noto Project Authors (https://github.com/notofonts/latin-greek-cyrillic) 2 | 3 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 4 | This license is copied below, and is also available with a FAQ at: 5 | https://openfontlicense.org 6 | 7 | 8 | ----------------------------------------------------------- 9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 10 | ----------------------------------------------------------- 11 | 12 | PREAMBLE 13 | The goals of the Open Font License (OFL) are to stimulate worldwide 14 | development of collaborative font projects, to support the font creation 15 | efforts of academic and linguistic communities, and to provide a free and 16 | open framework in which fonts may be shared and improved in partnership 17 | with others. 18 | 19 | The OFL allows the licensed fonts to be used, studied, modified and 20 | redistributed freely as long as they are not sold by themselves. The 21 | fonts, including any derivative works, can be bundled, embedded, 22 | redistributed and/or sold with any software provided that any reserved 23 | names are not used by derivative works. The fonts and derivatives, 24 | however, cannot be released under any other type of license. The 25 | requirement for fonts to remain under this license does not apply 26 | to any document created using the fonts or their derivatives. 27 | 28 | DEFINITIONS 29 | "Font Software" refers to the set of files released by the Copyright 30 | Holder(s) under this license and clearly marked as such. This may 31 | include source files, build scripts and documentation. 32 | 33 | "Reserved Font Name" refers to any names specified as such after the 34 | copyright statement(s). 35 | 36 | "Original Version" refers to the collection of Font Software components as 37 | distributed by the Copyright Holder(s). 38 | 39 | "Modified Version" refers to any derivative made by adding to, deleting, 40 | or substituting -- in part or in whole -- any of the components of the 41 | Original Version, by changing formats or by porting the Font Software to a 42 | new environment. 43 | 44 | "Author" refers to any designer, engineer, programmer, technical 45 | writer or other person who contributed to the Font Software. 46 | 47 | PERMISSION & CONDITIONS 48 | Permission is hereby granted, free of charge, to any person obtaining 49 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 50 | redistribute, and sell modified and unmodified copies of the Font 51 | Software, subject to the following conditions: 52 | 53 | 1) Neither the Font Software nor any of its individual components, 54 | in Original or Modified Versions, may be sold by itself. 55 | 56 | 2) Original or Modified Versions of the Font Software may be bundled, 57 | redistributed and/or sold with any software, provided that each copy 58 | contains the above copyright notice and this license. These can be 59 | included either as stand-alone text files, human-readable headers or 60 | in the appropriate machine-readable metadata fields within text or 61 | binary files as long as those fields can be easily viewed by the user. 62 | 63 | 3) No Modified Version of the Font Software may use the Reserved Font 64 | Name(s) unless explicit written permission is granted by the corresponding 65 | Copyright Holder. This restriction only applies to the primary font name as 66 | presented to the users. 67 | 68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 69 | Software shall not be used to promote, endorse or advertise any 70 | Modified Version, except to acknowledge the contribution(s) of the 71 | Copyright Holder(s) and the Author(s) or with their explicit written 72 | permission. 73 | 74 | 5) The Font Software, modified or unmodified, in part or in whole, 75 | must be distributed entirely under this license, and must not be 76 | distributed under any other license. The requirement for fonts to 77 | remain under this license does not apply to any document created 78 | using the Font Software. 79 | 80 | TERMINATION 81 | This license becomes null and void if any of the above conditions are 82 | not met. 83 | 84 | DISCLAIMER 85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 93 | OTHER DEALINGS IN THE FONT SOFTWARE. 94 | -------------------------------------------------------------------------------- /source_fonts/NotoSansMono/NotoSansMono-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansMono/NotoSansMono-Black.ttf -------------------------------------------------------------------------------- /source_fonts/NotoSansMono/NotoSansMono-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansMono/NotoSansMono-Bold.ttf -------------------------------------------------------------------------------- /source_fonts/NotoSansMono/NotoSansMono-ExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansMono/NotoSansMono-ExtraBold.ttf -------------------------------------------------------------------------------- /source_fonts/NotoSansMono/NotoSansMono-ExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansMono/NotoSansMono-ExtraLight.ttf -------------------------------------------------------------------------------- /source_fonts/NotoSansMono/NotoSansMono-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansMono/NotoSansMono-Light.ttf -------------------------------------------------------------------------------- /source_fonts/NotoSansMono/NotoSansMono-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansMono/NotoSansMono-Medium.ttf -------------------------------------------------------------------------------- /source_fonts/NotoSansMono/NotoSansMono-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansMono/NotoSansMono-Regular.ttf -------------------------------------------------------------------------------- /source_fonts/NotoSansMono/NotoSansMono-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansMono/NotoSansMono-SemiBold.ttf -------------------------------------------------------------------------------- /source_fonts/NotoSansMono/NotoSansMono-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansMono/NotoSansMono-Thin.ttf -------------------------------------------------------------------------------- /source_fonts/NotoSansMono/NotoSansMono_ExtraCondensed-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansMono/NotoSansMono_ExtraCondensed-Black.ttf -------------------------------------------------------------------------------- /source_fonts/NotoSansMono/NotoSansMono_ExtraCondensed-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansMono/NotoSansMono_ExtraCondensed-Bold.ttf -------------------------------------------------------------------------------- /source_fonts/NotoSansMono/NotoSansMono_ExtraCondensed-ExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansMono/NotoSansMono_ExtraCondensed-ExtraBold.ttf -------------------------------------------------------------------------------- /source_fonts/NotoSansMono/NotoSansMono_ExtraCondensed-ExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansMono/NotoSansMono_ExtraCondensed-ExtraLight.ttf -------------------------------------------------------------------------------- /source_fonts/NotoSansMono/NotoSansMono_ExtraCondensed-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansMono/NotoSansMono_ExtraCondensed-Light.ttf -------------------------------------------------------------------------------- /source_fonts/NotoSansMono/NotoSansMono_ExtraCondensed-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansMono/NotoSansMono_ExtraCondensed-Medium.ttf -------------------------------------------------------------------------------- /source_fonts/NotoSansMono/NotoSansMono_ExtraCondensed-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansMono/NotoSansMono_ExtraCondensed-Regular.ttf -------------------------------------------------------------------------------- /source_fonts/NotoSansMono/NotoSansMono_ExtraCondensed-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansMono/NotoSansMono_ExtraCondensed-SemiBold.ttf -------------------------------------------------------------------------------- /source_fonts/NotoSansMono/NotoSansMono_ExtraCondensed-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/NotoSansMono/NotoSansMono_ExtraCondensed-Thin.ttf -------------------------------------------------------------------------------- /source_fonts/ideographic_space.sfd: -------------------------------------------------------------------------------- 1 | SplineFontDB: 3.2 2 | FontName: UDEVGothic-Regular 3 | FullName: UDEV Gothic Regular 4 | FamilyName: UDEV Gothic 5 | Weight: Book 6 | Copyright: Copyright (c) 2022, Yuko OTAWARA 7 | Version: 0.0.1 ; ttfautohint (v1.8.3) -l 6 -r 45 -G 200 -x 14 -D latn -f none -a nnn -W -X "13-" 8 | ItalicAngle: 0 9 | UnderlinePosition: -59.082 10 | UnderlineWidth: 49.8047 11 | Ascent: 750 12 | Descent: 250 13 | InvalidEm: 0 14 | sfntRevision: 0x00010000 15 | LayerCount: 2 16 | Layer: 0 1 "+gMyXYgAA" 1 17 | Layer: 1 1 "+Uk2XYgAA" 0 18 | XUID: [1021 1004 1376950171 8412536] 19 | StyleMap: 0x0040 20 | FSType: 0 21 | OS2Version: 4 22 | OS2_WeightWidthSlopeOnly: 1 23 | OS2_UseTypoMetrics: 0 24 | CreationTime: 1648089091 25 | ModificationTime: 1687425302 26 | PfmFamily: 17 27 | TTFWeight: 400 28 | TTFWidth: 5 29 | LineGap: 0 30 | VLineGap: 0 31 | Panose: 2 11 5 9 2 2 3 2 2 7 32 | OS2TypoAscent: 880 33 | OS2TypoAOffset: 0 34 | OS2TypoDescent: -120 35 | OS2TypoDOffset: 0 36 | OS2TypoLinegap: 0 37 | OS2WinAscent: 880 38 | OS2WinAOffset: 0 39 | OS2WinDescent: 186 40 | OS2WinDOffset: 0 41 | HheadAscent: 880 42 | HheadAOffset: 0 43 | HheadDescent: -186 44 | HheadDOffset: 0 45 | OS2SubXSize: 650 46 | OS2SubYSize: 700 47 | OS2SubXOff: 0 48 | OS2SubYOff: 140 49 | OS2SupXSize: 650 50 | OS2SupYSize: 700 51 | OS2SupXOff: 0 52 | OS2SupYOff: 480 53 | OS2StrikeYSize: 50 54 | OS2StrikeYPos: 259 55 | OS2CapHeight: 730 56 | OS2XHeight: 550 57 | OS2FamilyClass: 2057 58 | OS2Vendor: 'twr ' 59 | OS2CodePages: 2002019f.dfd70000 60 | OS2UnicodeRanges: e00402ff.3ac7fdfb.0200003a.00000000 61 | Lookup: 1 0 0 "'aalt' Access All Alternates lookup 0" { "'aalt' Access All Alternates lookup 0 subtable" } ['aalt' ('DFLT' <'dflt' > 'cyrl' <'dflt' > 'grek' <'dflt' > 'hani' <'dflt' > 'kana' <'dflt' > 'latn' <'dflt' > ) ] 62 | Lookup: 3 0 0 "'aalt' Access All Alternates lookup 1" { "'aalt' Access All Alternates lookup 1 subtable" } ['aalt' ('DFLT' <'dflt' > 'cyrl' <'dflt' > 'grek' <'dflt' > 'hani' <'dflt' > 'kana' <'dflt' > 'latn' <'dflt' > ) ] 63 | Lookup: 4 0 0 "'ccmp' Glyph Composition/Decomposition lookup 2" { "'ccmp' Glyph Composition/Decomposition lookup 2 subtable" } ['ccmp' ('DFLT' <'dflt' > 'cyrl' <'dflt' > 'grek' <'dflt' > 'hani' <'dflt' > 'kana' <'dflt' > 'latn' <'dflt' > ) ] 64 | Lookup: 1 0 0 "'frac' Diagonal Fractions lookup 3" { "'frac' Diagonal Fractions lookup 3 subtable" } ['frac' ('DFLT' <'dflt' > 'cyrl' <'dflt' > 'grek' <'dflt' > 'hani' <'dflt' > 'kana' <'dflt' > 'latn' <'dflt' > ) ] 65 | Lookup: 1 0 0 "'numr' Numerators lookup 4" { "'numr' Numerators lookup 4 subtable" } ['numr' ('DFLT' <'dflt' > 'cyrl' <'dflt' > 'grek' <'dflt' > 'hani' <'dflt' > 'kana' <'dflt' > 'latn' <'dflt' > ) ] 66 | Lookup: 4 0 0 "'dlig' Discretionary Ligatures lookup 5" { "'dlig' Discretionary Ligatures lookup 5 subtable" } ['dlig' ('DFLT' <'dflt' > 'cyrl' <'dflt' > 'grek' <'dflt' > 'hani' <'dflt' > 'kana' <'dflt' > 'latn' <'dflt' > ) ] 67 | Lookup: 1 0 0 "'expt' Expert Forms lookup 6" { "'expt' Expert Forms lookup 6 subtable" } ['expt' ('DFLT' <'dflt' > 'cyrl' <'dflt' > 'grek' <'dflt' > 'hani' <'dflt' > 'kana' <'dflt' > 'latn' <'dflt' > ) ] 68 | Lookup: 1 0 0 "'fwid' Full Widths lookup 7" { "'fwid' Full Widths lookup 7 subtable" ("full") } ['fwid' ('DFLT' <'dflt' > 'cyrl' <'dflt' > 'grek' <'dflt' > 'hani' <'dflt' > 'kana' <'dflt' > 'latn' <'dflt' > ) ] 69 | Lookup: 1 0 0 "'hojo' Hojo (JIS X 0212-1990) Kanji Forms lookup 8" { "'hojo' Hojo (JIS X 0212-1990) Kanji Forms lookup 8 subtable" } ['hojo' ('DFLT' <'dflt' > 'cyrl' <'dflt' > 'grek' <'dflt' > 'hani' <'dflt' > 'kana' <'dflt' > 'latn' <'dflt' > ) ] 70 | Lookup: 1 0 0 "'hwid' Half Widths lookup 9" { "'hwid' Half Widths lookup 9 subtable" ("hw") } ['hwid' ('DFLT' <'dflt' > 'cyrl' <'dflt' > 'grek' <'dflt' > 'hani' <'dflt' > 'kana' <'dflt' > 'latn' <'dflt' > ) ] 71 | Lookup: 1 0 0 "'jp78' JIS78 Forms lookup 10" { "'jp78' JIS78 Forms lookup 10 subtable" } ['jp78' ('DFLT' <'dflt' > 'cyrl' <'dflt' > 'grek' <'dflt' > 'hani' <'dflt' > 'kana' <'dflt' > 'latn' <'dflt' > ) ] 72 | Lookup: 1 0 0 "'jp83' JIS83 Forms lookup 11" { "'jp83' JIS83 Forms lookup 11 subtable" } ['jp83' ('DFLT' <'dflt' > 'cyrl' <'dflt' > 'grek' <'dflt' > 'hani' <'dflt' > 'kana' <'dflt' > 'latn' <'dflt' > ) ] 73 | Lookup: 1 0 0 "'jp90' JIS90 Forms lookup 12" { "'jp90' JIS90 Forms lookup 12 subtable" } ['jp90' ('DFLT' <'dflt' > 'cyrl' <'dflt' > 'grek' <'dflt' > 'hani' <'dflt' > 'kana' <'dflt' > 'latn' <'dflt' > ) ] 74 | Lookup: 1 0 0 "'nalt' Alternate Annotation Forms lookup 13" { "'nalt' Alternate Annotation Forms lookup 13 subtable" } ['nalt' ('DFLT' <'dflt' > 'cyrl' <'dflt' > 'grek' <'dflt' > 'hani' <'dflt' > 'kana' <'dflt' > 'latn' <'dflt' > ) ] 75 | Lookup: 3 0 0 "'nalt' Alternate Annotation Forms lookup 14" { "'nalt' Alternate Annotation Forms lookup 14 subtable" } ['nalt' ('DFLT' <'dflt' > 'cyrl' <'dflt' > 'grek' <'dflt' > 'hani' <'dflt' > 'kana' <'dflt' > 'latn' <'dflt' > ) ] 76 | Lookup: 1 0 0 "'nlck' NLC Kanji Forms lookup 15" { "'nlck' NLC Kanji Forms lookup 15 subtable" } ['nlck' ('DFLT' <'dflt' > 'cyrl' <'dflt' > 'grek' <'dflt' > 'hani' <'dflt' > 'kana' <'dflt' > 'latn' <'dflt' > ) ] 77 | Lookup: 4 0 1 "'liga' Standard Ligatures lookup 16" { "'liga' Standard Ligatures lookup 16 subtable" } ['liga' ('DFLT' <'dflt' > 'cyrl' <'dflt' > 'grek' <'dflt' > 'hani' <'dflt' > 'kana' <'dflt' > 'latn' <'dflt' > ) ] 78 | Lookup: 1 0 0 "'ruby' Ruby Notational Forms lookup 17" { "'ruby' Ruby Notational Forms lookup 17 subtable" } ['ruby' ('DFLT' <'dflt' > 'cyrl' <'dflt' > 'grek' <'dflt' > 'hani' <'dflt' > 'kana' <'dflt' > 'latn' <'dflt' > ) ] 79 | Lookup: 1 0 0 "'sups' Superscript lookup 18" { "'sups' Superscript lookup 18 subtable" ("superior") } ['sups' ('DFLT' <'dflt' > 'cyrl' <'dflt' > 'grek' <'dflt' > 'hani' <'dflt' > 'kana' <'dflt' > 'latn' <'dflt' > ) ] 80 | Lookup: 1 0 0 "'trad' Traditional Forms lookup 19" { "'trad' Traditional Forms lookup 19 subtable" } ['trad' ('DFLT' <'dflt' > 'cyrl' <'dflt' > 'grek' <'dflt' > 'hani' <'dflt' > 'kana' <'dflt' > 'latn' <'dflt' > ) ] 81 | Lookup: 3 0 0 "'trad' Traditional Forms lookup 20" { "'trad' Traditional Forms lookup 20 subtable" } ['trad' ('DFLT' <'dflt' > 'cyrl' <'dflt' > 'grek' <'dflt' > 'hani' <'dflt' > 'kana' <'dflt' > 'latn' <'dflt' > ) ] 82 | Lookup: 1 0 0 "'zero' Slashed Zero lookup 21" { "'zero' Slashed Zero lookup 21 subtable" } ['zero' ('DFLT' <'dflt' > 'cyrl' <'dflt' > 'grek' <'dflt' > 'hani' <'dflt' > 'kana' <'dflt' > 'latn' <'dflt' > ) ] 83 | Lookup: 1 0 0 "'vert' Vertical Alternates lookup 22" { "'vert' Vertical Alternates lookup 22 subtable" } ['vert' ('DFLT' <'dflt' > 'cyrl' <'dflt' > 'grek' <'dflt' > 'hani' <'dflt' > 'kana' <'dflt' > 'latn' <'dflt' > ) ] 84 | Lookup: 1 0 0 "'vkna' Vertical Kana Alternates lookup 23" { "'vkna' Vertical Kana Alternates lookup 23 subtable" } ['vkna' ('DFLT' <'dflt' > 'cyrl' <'dflt' > 'grek' <'dflt' > 'hani' <'dflt' > 'kana' <'dflt' > 'latn' <'dflt' > ) ] 85 | Lookup: 1 0 0 "'vrt2' Vertical Rotation & Alternates lookup 24" { "'vrt2' Vertical Rotation & Alternates lookup 24 subtable" ("vert") } ['vrt2' ('DFLT' <'dflt' > 'cyrl' <'dflt' > 'grek' <'dflt' > 'hani' <'dflt' > 'kana' <'dflt' > 'latn' <'dflt' > ) ] 86 | Lookup: 1 0 0 "'locl' Localized Forms in Cyrillic lookup 25" { "'locl' Localized Forms in Cyrillic lookup 25 subtable" } ['locl' ('cyrl' <'dflt' > ) ] 87 | MarkAttachClasses: 1 88 | DEI: 91125 89 | TtTable: prep 90 | PUSHB_2 91 | 4 92 | 0 93 | WCVTP 94 | PUSHW_2 95 | 32767 96 | 13 97 | PUSHB_1 98 | 19 99 | CALL 100 | SVTCA[y-axis] 101 | MPPEM 102 | PUSHW_1 103 | 200 104 | GT 105 | IF 106 | PUSHB_2 107 | 1 108 | 1 109 | INSTCTRL 110 | EIF 111 | PUSHB_1 112 | 1 113 | PUSHW_2 114 | 2048 115 | 2048 116 | MUL 117 | WCVTF 118 | PUSHB_1 119 | 4 120 | RCVT 121 | NOT 122 | IF 123 | PUSHB_2 124 | 0 125 | 7 126 | WS 127 | PUSHB_8 128 | 0 129 | 0 130 | 90 131 | 0 132 | 58 133 | 38 134 | 6 135 | 0 136 | LOOPCALL 137 | PUSHB_2 138 | 0 139 | 7 140 | WS 141 | NPUSHB 142 | 14 143 | 109 144 | 4 145 | 97 146 | 4 147 | 77 148 | 8 149 | 65 150 | 4 151 | 45 152 | 8 153 | 27 154 | 7 155 | 6 156 | 10 157 | LOOPCALL 158 | PUSHB_2 159 | 0 160 | 7 161 | WS 162 | NPUSHB 163 | 14 164 | 115 165 | 2 166 | 103 167 | 2 168 | 87 169 | 6 170 | 71 171 | 2 172 | 55 173 | 6 174 | 36 175 | 5 176 | 6 177 | 10 178 | LOOPCALL 179 | EIF 180 | PUSHB_2 181 | 0 182 | 13 183 | WS 184 | PUSHW_8 185 | 7040 186 | 6272 187 | 4992 188 | 4224 189 | 2944 190 | 1792 191 | 6 192 | 11 193 | LOOPCALL 194 | PUSHB_2 195 | 0 196 | 19 197 | WS 198 | PUSHW_8 199 | 64 200 | 64 201 | 64 202 | 64 203 | 64 204 | 64 205 | 6 206 | 11 207 | LOOPCALL 208 | PUSHW_2 209 | 3 210 | -100 211 | WCVTP 212 | PUSHB_2 213 | 36 214 | 1 215 | GETINFO 216 | LTEQ 217 | IF 218 | PUSHB_1 219 | 64 220 | GETINFO 221 | IF 222 | PUSHW_2 223 | 3 224 | -100 225 | WCVTP 226 | PUSHB_2 227 | 40 228 | 1 229 | GETINFO 230 | LTEQ 231 | IF 232 | PUSHW_1 233 | 2048 234 | GETINFO 235 | IF 236 | PUSHW_2 237 | 3 238 | -100 239 | WCVTP 240 | EIF 241 | ELSE 242 | PUSHB_2 243 | 39 244 | 1 245 | GETINFO 246 | LTEQ 247 | IF 248 | PUSHW_3 249 | 2176 250 | 1 251 | 1088 252 | GETINFO 253 | MUL 254 | EQ 255 | IF 256 | PUSHW_2 257 | 3 258 | -100 259 | WCVTP 260 | EIF 261 | EIF 262 | EIF 263 | EIF 264 | EIF 265 | NPUSHB 266 | 14 267 | 111 268 | 4 269 | 99 270 | 4 271 | 79 272 | 8 273 | 67 274 | 4 275 | 47 276 | 8 277 | 29 278 | 7 279 | 6 280 | 14 281 | LOOPCALL 282 | PUSHW_1 283 | 511 284 | SCANCTRL 285 | PUSHB_1 286 | 4 287 | SCANTYPE 288 | PUSHB_2 289 | 2 290 | 0 291 | WCVTP 292 | PUSHB_4 293 | 5 294 | 100 295 | 6 296 | 0 297 | WCVTP 298 | WCVTP 299 | EndTTInstrs 300 | TtTable: fpgm 301 | PUSHB_1 302 | 0 303 | FDEF 304 | DUP 305 | PUSHB_1 306 | 0 307 | NEQ 308 | IF 309 | RCVT 310 | EIF 311 | DUP 312 | DUP 313 | MPPEM 314 | PUSHW_1 315 | 14 316 | LTEQ 317 | MPPEM 318 | PUSHB_1 319 | 6 320 | GTEQ 321 | AND 322 | IF 323 | PUSHB_1 324 | 52 325 | ELSE 326 | PUSHB_1 327 | 40 328 | EIF 329 | ADD 330 | FLOOR 331 | DUP 332 | ROLL 333 | NEQ 334 | IF 335 | PUSHB_1 336 | 2 337 | CINDEX 338 | SUB 339 | PUSHW_2 340 | 2048 341 | 2048 342 | MUL 343 | MUL 344 | SWAP 345 | DIV 346 | ELSE 347 | POP 348 | POP 349 | PUSHB_1 350 | 0 351 | EIF 352 | PUSHB_1 353 | 0 354 | RS 355 | SWAP 356 | WCVTP 357 | PUSHB_3 358 | 0 359 | 1 360 | 0 361 | RS 362 | ADD 363 | WS 364 | ENDF 365 | PUSHB_1 366 | 1 367 | FDEF 368 | PUSHB_1 369 | 32 370 | ADD 371 | FLOOR 372 | ENDF 373 | PUSHB_1 374 | 2 375 | FDEF 376 | SWAP 377 | POP 378 | SWAP 379 | POP 380 | ENDF 381 | PUSHB_1 382 | 3 383 | FDEF 384 | DUP 385 | ABS 386 | PUSHB_4 387 | 3 388 | 20 389 | 21 390 | 0 391 | WS 392 | RS 393 | PUSHB_1 394 | 19 395 | RS 396 | DUP 397 | ADD 398 | ADD 399 | WS 400 | PUSHB_2 401 | 2 402 | 20 403 | RS 404 | WS 405 | PUSHB_2 406 | 37 407 | 3 408 | RS 409 | PUSHB_1 410 | 2 411 | RS 412 | EQ 413 | JROT 414 | DUP 415 | PUSHB_1 416 | 12 417 | SWAP 418 | PUSHB_1 419 | 2 420 | RS 421 | RS 422 | SUB 423 | ABS 424 | PUSHB_1 425 | 4 426 | LT 427 | JROT 428 | PUSHB_3 429 | 2 430 | 2 431 | 2 432 | RS 433 | ADD 434 | WS 435 | PUSHB_1 436 | 33 437 | NEG 438 | JMPR 439 | POP 440 | PUSHB_1 441 | 2 442 | RS 443 | RS 444 | PUSHB_3 445 | 14 446 | 21 447 | 1 448 | WS 449 | JMPR 450 | DUP 451 | PUSHB_1 452 | 2 453 | RS 454 | SWAP 455 | WS 456 | PUSHB_3 457 | 19 458 | 1 459 | 19 460 | RS 461 | ADD 462 | WS 463 | SWAP 464 | PUSHB_1 465 | 0 466 | LT 467 | IF 468 | NEG 469 | EIF 470 | PUSHB_3 471 | 22 472 | 1 473 | 2 474 | RS 475 | ADD 476 | WS 477 | ENDF 478 | PUSHB_1 479 | 4 480 | FDEF 481 | PUSHB_1 482 | 3 483 | CALL 484 | PUSHB_1 485 | 21 486 | RS 487 | IF 488 | SWAP 489 | POP 490 | SWAP 491 | POP 492 | PUSHB_1 493 | 22 494 | RS 495 | RS 496 | SWAP 497 | PUSHB_1 498 | 0 499 | LT 500 | IF 501 | NEG 502 | EIF 503 | ELSE 504 | DUP 505 | ABS 506 | DUP 507 | PUSHB_1 508 | 192 509 | LT 510 | PUSHB_1 511 | 4 512 | MINDEX 513 | AND 514 | PUSHB_3 515 | 40 516 | 1 517 | 13 518 | RS 519 | RCVT 520 | MUL 521 | RCVT 522 | PUSHB_1 523 | 6 524 | RCVT 525 | IF 526 | POP 527 | PUSHB_1 528 | 3 529 | CINDEX 530 | EIF 531 | GT 532 | OR 533 | IF 534 | POP 535 | SWAP 536 | POP 537 | ELSE 538 | ROLL 539 | IF 540 | DUP 541 | PUSHB_1 542 | 80 543 | LT 544 | IF 545 | POP 546 | PUSHB_1 547 | 64 548 | EIF 549 | ELSE 550 | DUP 551 | PUSHB_1 552 | 56 553 | LT 554 | IF 555 | POP 556 | PUSHB_1 557 | 56 558 | EIF 559 | EIF 560 | DUP 561 | PUSHB_2 562 | 1 563 | 13 564 | RS 565 | RCVT 566 | MUL 567 | RCVT 568 | SUB 569 | ABS 570 | PUSHB_1 571 | 40 572 | LT 573 | IF 574 | POP 575 | PUSHB_2 576 | 1 577 | 13 578 | RS 579 | RCVT 580 | MUL 581 | RCVT 582 | DUP 583 | PUSHB_1 584 | 48 585 | LT 586 | IF 587 | POP 588 | PUSHB_1 589 | 48 590 | EIF 591 | ELSE 592 | DUP 593 | PUSHB_1 594 | 192 595 | LT 596 | IF 597 | DUP 598 | FLOOR 599 | DUP 600 | ROLL 601 | ROLL 602 | SUB 603 | DUP 604 | PUSHB_1 605 | 10 606 | LT 607 | IF 608 | ADD 609 | ELSE 610 | DUP 611 | PUSHB_1 612 | 32 613 | LT 614 | IF 615 | POP 616 | PUSHB_1 617 | 10 618 | ADD 619 | ELSE 620 | DUP 621 | PUSHB_1 622 | 54 623 | LT 624 | IF 625 | POP 626 | PUSHB_1 627 | 54 628 | ADD 629 | ELSE 630 | ADD 631 | EIF 632 | EIF 633 | EIF 634 | ELSE 635 | PUSHB_1 636 | 2 637 | CINDEX 638 | PUSHB_1 639 | 12 640 | RS 641 | MUL 642 | PUSHB_1 643 | 0 644 | GT 645 | IF 646 | PUSHB_1 647 | 0 648 | MPPEM 649 | PUSHB_1 650 | 10 651 | LT 652 | IF 653 | POP 654 | PUSHB_1 655 | 12 656 | RS 657 | ELSE 658 | MPPEM 659 | PUSHB_1 660 | 30 661 | LT 662 | IF 663 | POP 664 | PUSHB_1 665 | 30 666 | MPPEM 667 | SUB 668 | PUSHW_1 669 | 4096 670 | MUL 671 | PUSHB_1 672 | 12 673 | RS 674 | MUL 675 | PUSHW_1 676 | 1280 677 | DIV 678 | EIF 679 | EIF 680 | ABS 681 | SUB 682 | EIF 683 | PUSHB_1 684 | 1 685 | CALL 686 | EIF 687 | EIF 688 | SWAP 689 | PUSHB_1 690 | 0 691 | LT 692 | IF 693 | NEG 694 | EIF 695 | EIF 696 | DUP 697 | ABS 698 | PUSHB_1 699 | 22 700 | RS 701 | SWAP 702 | WS 703 | EIF 704 | ENDF 705 | PUSHB_1 706 | 5 707 | FDEF 708 | DUP 709 | RCVT 710 | DUP 711 | PUSHB_1 712 | 4 713 | CINDEX 714 | SUB 715 | ABS 716 | DUP 717 | PUSHB_1 718 | 7 719 | RS 720 | LT 721 | IF 722 | PUSHB_1 723 | 7 724 | SWAP 725 | WS 726 | PUSHB_1 727 | 8 728 | SWAP 729 | WS 730 | ELSE 731 | POP 732 | POP 733 | EIF 734 | PUSHB_1 735 | 1 736 | ADD 737 | ENDF 738 | PUSHB_1 739 | 6 740 | FDEF 741 | SWAP 742 | POP 743 | SWAP 744 | POP 745 | PUSHB_1 746 | 3 747 | CALL 748 | DUP 749 | ABS 750 | PUSHB_2 751 | 7 752 | 98 753 | WS 754 | DUP 755 | PUSHB_1 756 | 8 757 | SWAP 758 | WS 759 | PUSHB_1 760 | 6 761 | RCVT 762 | IF 763 | ELSE 764 | PUSHB_2 765 | 1 766 | 13 767 | RS 768 | RCVT 769 | MUL 770 | PUSHB_2 771 | 1 772 | 13 773 | RS 774 | PUSHB_1 775 | 6 776 | ADD 777 | RCVT 778 | MUL 779 | PUSHB_1 780 | 5 781 | LOOPCALL 782 | POP 783 | DUP 784 | PUSHB_1 785 | 8 786 | RS 787 | DUP 788 | ROLL 789 | DUP 790 | ROLL 791 | PUSHB_1 792 | 1 793 | CALL 794 | PUSHB_2 795 | 48 796 | 5 797 | CINDEX 798 | PUSHB_1 799 | 4 800 | MINDEX 801 | LTEQ 802 | IF 803 | ADD 804 | LT 805 | ELSE 806 | SUB 807 | GT 808 | EIF 809 | IF 810 | SWAP 811 | EIF 812 | POP 813 | EIF 814 | DUP 815 | PUSHB_1 816 | 64 817 | GTEQ 818 | IF 819 | PUSHB_1 820 | 1 821 | CALL 822 | ELSE 823 | POP 824 | PUSHB_1 825 | 64 826 | EIF 827 | SWAP 828 | PUSHB_1 829 | 0 830 | LT 831 | IF 832 | NEG 833 | EIF 834 | ENDF 835 | PUSHB_1 836 | 7 837 | FDEF 838 | PUSHB_1 839 | 9 840 | RS 841 | CALL 842 | PUSHB_3 843 | 0 844 | 2 845 | 0 846 | RS 847 | ADD 848 | WS 849 | ENDF 850 | PUSHB_1 851 | 8 852 | FDEF 853 | PUSHB_1 854 | 9 855 | SWAP 856 | WS 857 | SWAP 858 | DUP 859 | PUSHB_1 860 | 0 861 | SWAP 862 | WS 863 | SUB 864 | PUSHB_1 865 | 2 866 | DIV 867 | FLOOR 868 | PUSHB_1 869 | 1 870 | MUL 871 | PUSHB_1 872 | 1 873 | ADD 874 | PUSHB_1 875 | 7 876 | LOOPCALL 877 | ENDF 878 | PUSHB_1 879 | 9 880 | FDEF 881 | DUP 882 | DUP 883 | RCVT 884 | DUP 885 | PUSHB_1 886 | 14 887 | RS 888 | MUL 889 | PUSHW_1 890 | 1024 891 | DIV 892 | DUP 893 | PUSHB_1 894 | 0 895 | LT 896 | IF 897 | PUSHB_1 898 | 64 899 | ADD 900 | EIF 901 | FLOOR 902 | PUSHB_1 903 | 1 904 | MUL 905 | ADD 906 | WCVTP 907 | PUSHB_1 908 | 1 909 | ADD 910 | ENDF 911 | PUSHB_1 912 | 10 913 | FDEF 914 | PUSHB_3 915 | 9 916 | 14 917 | 0 918 | RS 919 | RCVT 920 | WS 921 | LOOPCALL 922 | POP 923 | PUSHB_3 924 | 0 925 | 1 926 | 0 927 | RS 928 | ADD 929 | WS 930 | ENDF 931 | PUSHB_1 932 | 11 933 | FDEF 934 | PUSHB_1 935 | 0 936 | RS 937 | SWAP 938 | WCVTP 939 | PUSHB_3 940 | 0 941 | 1 942 | 0 943 | RS 944 | ADD 945 | WS 946 | ENDF 947 | PUSHB_1 948 | 12 949 | FDEF 950 | DUP 951 | DUP 952 | RCVT 953 | DUP 954 | PUSHB_1 955 | 1 956 | CALL 957 | SWAP 958 | PUSHB_1 959 | 0 960 | RS 961 | PUSHB_1 962 | 4 963 | CINDEX 964 | ADD 965 | DUP 966 | RCVT 967 | ROLL 968 | SWAP 969 | SUB 970 | DUP 971 | ABS 972 | DUP 973 | PUSHB_1 974 | 32 975 | LT 976 | IF 977 | POP 978 | PUSHB_1 979 | 0 980 | ELSE 981 | PUSHB_1 982 | 48 983 | LT 984 | IF 985 | PUSHB_1 986 | 32 987 | ELSE 988 | PUSHB_1 989 | 64 990 | EIF 991 | EIF 992 | SWAP 993 | PUSHB_1 994 | 0 995 | LT 996 | IF 997 | NEG 998 | EIF 999 | PUSHB_1 1000 | 3 1001 | CINDEX 1002 | SWAP 1003 | SUB 1004 | WCVTP 1005 | WCVTP 1006 | PUSHB_1 1007 | 1 1008 | ADD 1009 | ENDF 1010 | PUSHB_1 1011 | 13 1012 | FDEF 1013 | DUP 1014 | DUP 1015 | RCVT 1016 | DUP 1017 | PUSHB_1 1018 | 1 1019 | CALL 1020 | SWAP 1021 | PUSHB_1 1022 | 0 1023 | RS 1024 | PUSHB_1 1025 | 4 1026 | CINDEX 1027 | ADD 1028 | DUP 1029 | RCVT 1030 | ROLL 1031 | SWAP 1032 | SUB 1033 | DUP 1034 | ABS 1035 | PUSHB_1 1036 | 36 1037 | LT 1038 | IF 1039 | PUSHB_1 1040 | 0 1041 | ELSE 1042 | PUSHB_1 1043 | 64 1044 | EIF 1045 | SWAP 1046 | PUSHB_1 1047 | 0 1048 | LT 1049 | IF 1050 | NEG 1051 | EIF 1052 | PUSHB_1 1053 | 3 1054 | CINDEX 1055 | SWAP 1056 | SUB 1057 | WCVTP 1058 | WCVTP 1059 | PUSHB_1 1060 | 1 1061 | ADD 1062 | ENDF 1063 | PUSHB_1 1064 | 14 1065 | FDEF 1066 | DUP 1067 | PUSHB_1 1068 | 0 1069 | SWAP 1070 | WS 1071 | PUSHB_4 1072 | 13 1073 | 12 1074 | 0 1075 | 3 1076 | RCVT 1077 | LT 1078 | IF 1079 | POP 1080 | ELSE 1081 | SWAP 1082 | POP 1083 | EIF 1084 | LOOPCALL 1085 | POP 1086 | ENDF 1087 | PUSHB_1 1088 | 15 1089 | FDEF 1090 | PUSHB_2 1091 | 2 1092 | 2 1093 | RCVT 1094 | PUSHB_1 1095 | 100 1096 | SUB 1097 | WCVTP 1098 | ENDF 1099 | PUSHB_1 1100 | 16 1101 | FDEF 1102 | PUSHB_1 1103 | 1 1104 | ADD 1105 | DUP 1106 | DUP 1107 | PUSHB_1 1108 | 15 1109 | RS 1110 | MD[orig] 1111 | PUSHB_1 1112 | 0 1113 | LT 1114 | IF 1115 | DUP 1116 | PUSHB_1 1117 | 15 1118 | SWAP 1119 | WS 1120 | EIF 1121 | PUSHB_1 1122 | 16 1123 | RS 1124 | MD[orig] 1125 | PUSHB_1 1126 | 0 1127 | GT 1128 | IF 1129 | DUP 1130 | PUSHB_1 1131 | 16 1132 | SWAP 1133 | WS 1134 | EIF 1135 | ENDF 1136 | PUSHB_1 1137 | 17 1138 | FDEF 1139 | DUP 1140 | PUSHB_1 1141 | 16 1142 | DIV 1143 | FLOOR 1144 | PUSHB_1 1145 | 1 1146 | MUL 1147 | DUP 1148 | PUSHW_1 1149 | 1024 1150 | MUL 1151 | ROLL 1152 | SWAP 1153 | SUB 1154 | PUSHB_1 1155 | 17 1156 | RS 1157 | ADD 1158 | DUP 1159 | ROLL 1160 | ADD 1161 | DUP 1162 | PUSHB_1 1163 | 17 1164 | SWAP 1165 | WS 1166 | SWAP 1167 | ENDF 1168 | PUSHB_1 1169 | 18 1170 | FDEF 1171 | MPPEM 1172 | EQ 1173 | IF 1174 | PUSHB_2 1175 | 4 1176 | 100 1177 | WCVTP 1178 | EIF 1179 | DEPTH 1180 | PUSHB_1 1181 | 13 1182 | NEG 1183 | SWAP 1184 | JROT 1185 | ENDF 1186 | PUSHB_1 1187 | 19 1188 | FDEF 1189 | MPPEM 1190 | LTEQ 1191 | IF 1192 | MPPEM 1193 | GTEQ 1194 | IF 1195 | PUSHB_2 1196 | 4 1197 | 100 1198 | WCVTP 1199 | EIF 1200 | ELSE 1201 | POP 1202 | EIF 1203 | DEPTH 1204 | PUSHB_1 1205 | 19 1206 | NEG 1207 | SWAP 1208 | JROT 1209 | ENDF 1210 | PUSHB_1 1211 | 20 1212 | FDEF 1213 | PUSHB_2 1214 | 0 1215 | 18 1216 | RS 1217 | NEQ 1218 | IF 1219 | PUSHB_2 1220 | 18 1221 | 18 1222 | RS 1223 | PUSHB_1 1224 | 1 1225 | SUB 1226 | WS 1227 | PUSHB_1 1228 | 17 1229 | CALL 1230 | EIF 1231 | PUSHB_1 1232 | 0 1233 | RS 1234 | PUSHB_1 1235 | 2 1236 | CINDEX 1237 | WS 1238 | PUSHB_2 1239 | 15 1240 | 2 1241 | CINDEX 1242 | WS 1243 | PUSHB_2 1244 | 16 1245 | 2 1246 | CINDEX 1247 | WS 1248 | PUSHB_1 1249 | 1 1250 | SZPS 1251 | SWAP 1252 | DUP 1253 | PUSHB_1 1254 | 3 1255 | CINDEX 1256 | LT 1257 | IF 1258 | PUSHB_2 1259 | 1 1260 | 0 1261 | RS 1262 | ADD 1263 | PUSHB_1 1264 | 4 1265 | CINDEX 1266 | WS 1267 | ROLL 1268 | ROLL 1269 | DUP 1270 | ROLL 1271 | SWAP 1272 | SUB 1273 | PUSHB_1 1274 | 16 1275 | LOOPCALL 1276 | POP 1277 | SWAP 1278 | PUSHB_1 1279 | 1 1280 | SUB 1281 | DUP 1282 | ROLL 1283 | SWAP 1284 | SUB 1285 | PUSHB_1 1286 | 16 1287 | LOOPCALL 1288 | POP 1289 | ELSE 1290 | PUSHB_2 1291 | 1 1292 | 0 1293 | RS 1294 | ADD 1295 | PUSHB_1 1296 | 2 1297 | CINDEX 1298 | WS 1299 | PUSHB_1 1300 | 2 1301 | CINDEX 1302 | SUB 1303 | PUSHB_1 1304 | 16 1305 | LOOPCALL 1306 | POP 1307 | EIF 1308 | PUSHB_1 1309 | 15 1310 | RS 1311 | GC[orig] 1312 | PUSHB_1 1313 | 16 1314 | RS 1315 | GC[orig] 1316 | ADD 1317 | PUSHB_1 1318 | 2 1319 | DIV 1320 | DUP 1321 | PUSHB_1 1322 | 0 1323 | LT 1324 | IF 1325 | PUSHB_1 1326 | 64 1327 | ADD 1328 | EIF 1329 | FLOOR 1330 | PUSHB_1 1331 | 1 1332 | MUL 1333 | DUP 1334 | PUSHB_1 1335 | 14 1336 | RS 1337 | MUL 1338 | PUSHW_1 1339 | 1024 1340 | DIV 1341 | DUP 1342 | PUSHB_1 1343 | 0 1344 | LT 1345 | IF 1346 | PUSHB_1 1347 | 64 1348 | ADD 1349 | EIF 1350 | FLOOR 1351 | PUSHB_1 1352 | 1 1353 | MUL 1354 | ADD 1355 | PUSHB_2 1356 | 0 1357 | 0 1358 | SZP0 1359 | SWAP 1360 | WCVTP 1361 | PUSHB_1 1362 | 1 1363 | RS 1364 | PUSHB_1 1365 | 0 1366 | MIAP[no-rnd] 1367 | PUSHB_3 1368 | 1 1369 | 1 1370 | 1 1371 | RS 1372 | ADD 1373 | WS 1374 | ENDF 1375 | PUSHB_1 1376 | 21 1377 | FDEF 1378 | SVTCA[y-axis] 1379 | PUSHB_2 1380 | 0 1381 | 2 1382 | RCVT 1383 | EQ 1384 | IF 1385 | PUSHB_1 1386 | 18 1387 | SWAP 1388 | WS 1389 | DUP 1390 | RCVT 1391 | PUSHB_1 1392 | 14 1393 | SWAP 1394 | WS 1395 | PUSHB_1 1396 | 13 1397 | SWAP 1398 | PUSHB_1 1399 | 6 1400 | ADD 1401 | WS 1402 | DUP 1403 | ADD 1404 | PUSHB_8 1405 | 24 1406 | 24 1407 | 1 1408 | 0 1409 | 17 1410 | 0 1411 | 19 1412 | 0 1413 | WS 1414 | WS 1415 | WS 1416 | ROLL 1417 | ADD 1418 | DUP 1419 | PUSHB_1 1420 | 20 1421 | SWAP 1422 | WS 1423 | PUSHB_1 1424 | 1 1425 | SUB 1426 | PUSHB_2 1427 | 20 1428 | 8 1429 | CALL 1430 | PUSHB_1 1431 | 139 1432 | CALL 1433 | ELSE 1434 | CLEAR 1435 | EIF 1436 | ENDF 1437 | PUSHB_1 1438 | 22 1439 | FDEF 1440 | PUSHB_2 1441 | 0 1442 | 21 1443 | CALL 1444 | ENDF 1445 | PUSHB_1 1446 | 23 1447 | FDEF 1448 | PUSHB_2 1449 | 1 1450 | 21 1451 | CALL 1452 | ENDF 1453 | PUSHB_1 1454 | 24 1455 | FDEF 1456 | PUSHB_2 1457 | 2 1458 | 21 1459 | CALL 1460 | ENDF 1461 | PUSHB_1 1462 | 25 1463 | FDEF 1464 | PUSHB_2 1465 | 3 1466 | 21 1467 | CALL 1468 | ENDF 1469 | PUSHB_1 1470 | 26 1471 | FDEF 1472 | PUSHB_2 1473 | 4 1474 | 21 1475 | CALL 1476 | ENDF 1477 | PUSHB_1 1478 | 27 1479 | FDEF 1480 | PUSHB_2 1481 | 5 1482 | 21 1483 | CALL 1484 | ENDF 1485 | PUSHB_1 1486 | 28 1487 | FDEF 1488 | PUSHB_2 1489 | 6 1490 | 21 1491 | CALL 1492 | ENDF 1493 | PUSHB_1 1494 | 29 1495 | FDEF 1496 | PUSHB_2 1497 | 7 1498 | 21 1499 | CALL 1500 | ENDF 1501 | PUSHB_1 1502 | 30 1503 | FDEF 1504 | PUSHB_2 1505 | 8 1506 | 21 1507 | CALL 1508 | ENDF 1509 | PUSHB_1 1510 | 31 1511 | FDEF 1512 | PUSHB_2 1513 | 9 1514 | 21 1515 | CALL 1516 | ENDF 1517 | PUSHB_1 1518 | 43 1519 | FDEF 1520 | SWAP 1521 | DUP 1522 | PUSHB_1 1523 | 16 1524 | DIV 1525 | FLOOR 1526 | PUSHB_1 1527 | 1 1528 | MUL 1529 | PUSHB_1 1530 | 6 1531 | ADD 1532 | MPPEM 1533 | EQ 1534 | IF 1535 | SWAP 1536 | DUP 1537 | MDAP[no-rnd] 1538 | PUSHB_1 1539 | 1 1540 | DELTAP1 1541 | ELSE 1542 | POP 1543 | POP 1544 | EIF 1545 | ENDF 1546 | PUSHB_1 1547 | 44 1548 | FDEF 1549 | SWAP 1550 | DUP 1551 | PUSHB_1 1552 | 16 1553 | DIV 1554 | FLOOR 1555 | PUSHB_1 1556 | 1 1557 | MUL 1558 | PUSHB_1 1559 | 22 1560 | ADD 1561 | MPPEM 1562 | EQ 1563 | IF 1564 | SWAP 1565 | DUP 1566 | MDAP[no-rnd] 1567 | PUSHB_1 1568 | 1 1569 | DELTAP2 1570 | ELSE 1571 | POP 1572 | POP 1573 | EIF 1574 | ENDF 1575 | PUSHB_1 1576 | 45 1577 | FDEF 1578 | SWAP 1579 | DUP 1580 | PUSHB_1 1581 | 16 1582 | DIV 1583 | FLOOR 1584 | PUSHB_1 1585 | 1 1586 | MUL 1587 | PUSHB_1 1588 | 38 1589 | ADD 1590 | MPPEM 1591 | EQ 1592 | IF 1593 | SWAP 1594 | DUP 1595 | MDAP[no-rnd] 1596 | PUSHB_1 1597 | 1 1598 | DELTAP3 1599 | ELSE 1600 | POP 1601 | POP 1602 | EIF 1603 | ENDF 1604 | PUSHB_1 1605 | 32 1606 | FDEF 1607 | SVTCA[y-axis] 1608 | PUSHB_1 1609 | 15 1610 | CALL 1611 | PUSHB_2 1612 | 0 1613 | 2 1614 | RCVT 1615 | EQ 1616 | IF 1617 | PUSHB_1 1618 | 18 1619 | SWAP 1620 | WS 1621 | DUP 1622 | RCVT 1623 | PUSHB_1 1624 | 14 1625 | SWAP 1626 | WS 1627 | PUSHB_1 1628 | 13 1629 | SWAP 1630 | PUSHB_1 1631 | 6 1632 | ADD 1633 | WS 1634 | DUP 1635 | ADD 1636 | PUSHB_1 1637 | 1 1638 | SUB 1639 | PUSHB_6 1640 | 24 1641 | 24 1642 | 1 1643 | 0 1644 | 17 1645 | 0 1646 | WS 1647 | WS 1648 | ROLL 1649 | ADD 1650 | PUSHB_2 1651 | 20 1652 | 8 1653 | CALL 1654 | PUSHB_1 1655 | 139 1656 | CALL 1657 | ELSE 1658 | CLEAR 1659 | EIF 1660 | ENDF 1661 | PUSHB_1 1662 | 33 1663 | FDEF 1664 | PUSHB_2 1665 | 0 1666 | 32 1667 | CALL 1668 | ENDF 1669 | PUSHB_1 1670 | 34 1671 | FDEF 1672 | PUSHB_2 1673 | 1 1674 | 32 1675 | CALL 1676 | ENDF 1677 | PUSHB_1 1678 | 35 1679 | FDEF 1680 | PUSHB_2 1681 | 2 1682 | 32 1683 | CALL 1684 | ENDF 1685 | PUSHB_1 1686 | 36 1687 | FDEF 1688 | PUSHB_2 1689 | 3 1690 | 32 1691 | CALL 1692 | ENDF 1693 | PUSHB_1 1694 | 37 1695 | FDEF 1696 | PUSHB_2 1697 | 4 1698 | 32 1699 | CALL 1700 | ENDF 1701 | PUSHB_1 1702 | 38 1703 | FDEF 1704 | PUSHB_2 1705 | 5 1706 | 32 1707 | CALL 1708 | ENDF 1709 | PUSHB_1 1710 | 39 1711 | FDEF 1712 | PUSHB_2 1713 | 6 1714 | 32 1715 | CALL 1716 | ENDF 1717 | PUSHB_1 1718 | 40 1719 | FDEF 1720 | PUSHB_2 1721 | 7 1722 | 32 1723 | CALL 1724 | ENDF 1725 | PUSHB_1 1726 | 41 1727 | FDEF 1728 | PUSHB_2 1729 | 8 1730 | 32 1731 | CALL 1732 | ENDF 1733 | PUSHB_1 1734 | 42 1735 | FDEF 1736 | PUSHB_2 1737 | 9 1738 | 32 1739 | CALL 1740 | ENDF 1741 | PUSHB_1 1742 | 46 1743 | FDEF 1744 | DUP 1745 | ALIGNRP 1746 | PUSHB_1 1747 | 1 1748 | ADD 1749 | ENDF 1750 | PUSHB_1 1751 | 47 1752 | FDEF 1753 | DUP 1754 | ADD 1755 | PUSHB_1 1756 | 24 1757 | ADD 1758 | DUP 1759 | RS 1760 | SWAP 1761 | PUSHB_1 1762 | 1 1763 | ADD 1764 | RS 1765 | PUSHB_1 1766 | 2 1767 | CINDEX 1768 | SUB 1769 | PUSHB_1 1770 | 1 1771 | ADD 1772 | PUSHB_1 1773 | 46 1774 | LOOPCALL 1775 | POP 1776 | ENDF 1777 | PUSHB_1 1778 | 48 1779 | FDEF 1780 | PUSHB_1 1781 | 47 1782 | CALL 1783 | PUSHB_1 1784 | 47 1785 | LOOPCALL 1786 | ENDF 1787 | PUSHB_1 1788 | 49 1789 | FDEF 1790 | DUP 1791 | DUP 1792 | GC[orig] 1793 | DUP 1794 | DUP 1795 | PUSHB_1 1796 | 14 1797 | RS 1798 | MUL 1799 | PUSHW_1 1800 | 1024 1801 | DIV 1802 | DUP 1803 | PUSHB_1 1804 | 0 1805 | LT 1806 | IF 1807 | PUSHB_1 1808 | 64 1809 | ADD 1810 | EIF 1811 | FLOOR 1812 | PUSHB_1 1813 | 1 1814 | MUL 1815 | ADD 1816 | SWAP 1817 | SUB 1818 | SHPIX 1819 | SWAP 1820 | DUP 1821 | ROLL 1822 | NEQ 1823 | IF 1824 | DUP 1825 | GC[orig] 1826 | DUP 1827 | DUP 1828 | PUSHB_1 1829 | 14 1830 | RS 1831 | MUL 1832 | PUSHW_1 1833 | 1024 1834 | DIV 1835 | DUP 1836 | PUSHB_1 1837 | 0 1838 | LT 1839 | IF 1840 | PUSHB_1 1841 | 64 1842 | ADD 1843 | EIF 1844 | FLOOR 1845 | PUSHB_1 1846 | 1 1847 | MUL 1848 | ADD 1849 | SWAP 1850 | SUB 1851 | SHPIX 1852 | ELSE 1853 | POP 1854 | EIF 1855 | ENDF 1856 | PUSHB_1 1857 | 50 1858 | FDEF 1859 | SVTCA[y-axis] 1860 | PUSHB_2 1861 | 0 1862 | 2 1863 | RCVT 1864 | EQ 1865 | IF 1866 | PUSHB_2 1867 | 14 1868 | 6 1869 | RCVT 1870 | WS 1871 | PUSHB_1 1872 | 1 1873 | SZPS 1874 | PUSHB_1 1875 | 49 1876 | LOOPCALL 1877 | PUSHB_2 1878 | 5 1879 | 1 1880 | SZP2 1881 | RCVT 1882 | IF 1883 | IUP[y] 1884 | EIF 1885 | ELSE 1886 | CLEAR 1887 | EIF 1888 | ENDF 1889 | PUSHB_1 1890 | 51 1891 | FDEF 1892 | SVTCA[y-axis] 1893 | PUSHB_1 1894 | 15 1895 | CALL 1896 | PUSHB_2 1897 | 0 1898 | 2 1899 | RCVT 1900 | EQ 1901 | IF 1902 | PUSHB_2 1903 | 14 1904 | 6 1905 | RCVT 1906 | WS 1907 | PUSHB_1 1908 | 1 1909 | SZPS 1910 | PUSHB_1 1911 | 49 1912 | LOOPCALL 1913 | PUSHB_2 1914 | 5 1915 | 1 1916 | SZP2 1917 | RCVT 1918 | IF 1919 | IUP[y] 1920 | EIF 1921 | ELSE 1922 | CLEAR 1923 | EIF 1924 | ENDF 1925 | PUSHB_1 1926 | 52 1927 | FDEF 1928 | DUP 1929 | SHC[rp1] 1930 | PUSHB_1 1931 | 1 1932 | ADD 1933 | ENDF 1934 | PUSHB_1 1935 | 53 1936 | FDEF 1937 | SVTCA[y-axis] 1938 | PUSHB_2 1939 | 14 1940 | 6 1941 | RCVT 1942 | WS 1943 | PUSHB_1 1944 | 1 1945 | RCVT 1946 | MUL 1947 | PUSHW_1 1948 | 1024 1949 | DIV 1950 | DUP 1951 | PUSHB_1 1952 | 0 1953 | LT 1954 | IF 1955 | PUSHB_1 1956 | 64 1957 | ADD 1958 | EIF 1959 | FLOOR 1960 | PUSHB_1 1961 | 1 1962 | MUL 1963 | PUSHB_1 1964 | 1 1965 | CALL 1966 | PUSHB_1 1967 | 14 1968 | RS 1969 | MUL 1970 | PUSHW_1 1971 | 1024 1972 | DIV 1973 | DUP 1974 | PUSHB_1 1975 | 0 1976 | LT 1977 | IF 1978 | PUSHB_1 1979 | 64 1980 | ADD 1981 | EIF 1982 | FLOOR 1983 | PUSHB_1 1984 | 1 1985 | MUL 1986 | PUSHB_1 1987 | 1 1988 | CALL 1989 | PUSHB_1 1990 | 0 1991 | SZPS 1992 | PUSHB_5 1993 | 0 1994 | 0 1995 | 0 1996 | 0 1997 | 0 1998 | WCVTP 1999 | MIAP[no-rnd] 2000 | SWAP 2001 | SHPIX 2002 | PUSHB_2 2003 | 52 2004 | 1 2005 | SZP2 2006 | LOOPCALL 2007 | POP 2008 | ENDF 2009 | PUSHB_1 2010 | 54 2011 | FDEF 2012 | DUP 2013 | ALIGNRP 2014 | DUP 2015 | GC[orig] 2016 | DUP 2017 | PUSHB_1 2018 | 14 2019 | RS 2020 | MUL 2021 | PUSHW_1 2022 | 1024 2023 | DIV 2024 | DUP 2025 | PUSHB_1 2026 | 0 2027 | LT 2028 | IF 2029 | PUSHB_1 2030 | 64 2031 | ADD 2032 | EIF 2033 | FLOOR 2034 | PUSHB_1 2035 | 1 2036 | MUL 2037 | ADD 2038 | PUSHB_1 2039 | 0 2040 | RS 2041 | SUB 2042 | SHPIX 2043 | ENDF 2044 | PUSHB_1 2045 | 55 2046 | FDEF 2047 | MDAP[no-rnd] 2048 | SLOOP 2049 | ALIGNRP 2050 | ENDF 2051 | PUSHB_1 2052 | 56 2053 | FDEF 2054 | DUP 2055 | ALIGNRP 2056 | DUP 2057 | GC[orig] 2058 | DUP 2059 | PUSHB_1 2060 | 14 2061 | RS 2062 | MUL 2063 | PUSHW_1 2064 | 1024 2065 | DIV 2066 | DUP 2067 | PUSHB_1 2068 | 0 2069 | LT 2070 | IF 2071 | PUSHB_1 2072 | 64 2073 | ADD 2074 | EIF 2075 | FLOOR 2076 | PUSHB_1 2077 | 1 2078 | MUL 2079 | ADD 2080 | PUSHB_1 2081 | 0 2082 | RS 2083 | SUB 2084 | PUSHB_1 2085 | 1 2086 | RS 2087 | MUL 2088 | SHPIX 2089 | ENDF 2090 | PUSHB_1 2091 | 57 2092 | FDEF 2093 | PUSHB_2 2094 | 2 2095 | 0 2096 | SZPS 2097 | CINDEX 2098 | DUP 2099 | MDAP[no-rnd] 2100 | DUP 2101 | GC[orig] 2102 | PUSHB_1 2103 | 0 2104 | SWAP 2105 | WS 2106 | PUSHB_1 2107 | 2 2108 | CINDEX 2109 | MD[grid] 2110 | ROLL 2111 | ROLL 2112 | GC[orig] 2113 | SWAP 2114 | GC[orig] 2115 | SWAP 2116 | SUB 2117 | DUP 2118 | IF 2119 | DIV 2120 | ELSE 2121 | POP 2122 | EIF 2123 | PUSHB_1 2124 | 1 2125 | SWAP 2126 | WS 2127 | PUSHB_3 2128 | 56 2129 | 1 2130 | 1 2131 | SZP2 2132 | SZP1 2133 | LOOPCALL 2134 | ENDF 2135 | PUSHB_1 2136 | 58 2137 | FDEF 2138 | PUSHB_1 2139 | 0 2140 | SZPS 2141 | PUSHB_1 2142 | 23 2143 | SWAP 2144 | WS 2145 | PUSHB_1 2146 | 4 2147 | CINDEX 2148 | PUSHB_1 2149 | 4 2150 | CINDEX 2151 | GC[orig] 2152 | SWAP 2153 | GC[orig] 2154 | SWAP 2155 | SUB 2156 | PUSHB_2 2157 | 12 2158 | 0 2159 | WS 2160 | PUSHB_1 2161 | 11 2162 | RS 2163 | CALL 2164 | NEG 2165 | ROLL 2166 | MDAP[no-rnd] 2167 | SWAP 2168 | DUP 2169 | DUP 2170 | ALIGNRP 2171 | ROLL 2172 | SHPIX 2173 | ENDF 2174 | PUSHB_1 2175 | 59 2176 | FDEF 2177 | PUSHB_1 2178 | 0 2179 | SZPS 2180 | PUSHB_1 2181 | 23 2182 | SWAP 2183 | WS 2184 | PUSHB_1 2185 | 4 2186 | CINDEX 2187 | PUSHB_1 2188 | 4 2189 | CINDEX 2190 | DUP 2191 | MDAP[no-rnd] 2192 | GC[orig] 2193 | SWAP 2194 | GC[orig] 2195 | SWAP 2196 | SUB 2197 | DUP 2198 | PUSHB_1 2199 | 6 2200 | SWAP 2201 | WS 2202 | PUSHB_2 2203 | 12 2204 | 0 2205 | WS 2206 | PUSHB_1 2207 | 11 2208 | RS 2209 | CALL 2210 | DUP 2211 | PUSHB_1 2212 | 96 2213 | LT 2214 | IF 2215 | DUP 2216 | PUSHB_1 2217 | 64 2218 | LTEQ 2219 | IF 2220 | PUSHB_4 2221 | 4 2222 | 32 2223 | 5 2224 | 32 2225 | ELSE 2226 | PUSHB_4 2227 | 4 2228 | 38 2229 | 5 2230 | 26 2231 | EIF 2232 | WS 2233 | WS 2234 | SWAP 2235 | DUP 2236 | PUSHB_1 2237 | 10 2238 | RS 2239 | DUP 2240 | ROLL 2241 | SWAP 2242 | GC[orig] 2243 | SWAP 2244 | GC[orig] 2245 | SWAP 2246 | SUB 2247 | SWAP 2248 | GC[cur] 2249 | ADD 2250 | PUSHB_1 2251 | 6 2252 | RS 2253 | PUSHB_1 2254 | 2 2255 | DIV 2256 | DUP 2257 | PUSHB_1 2258 | 0 2259 | LT 2260 | IF 2261 | PUSHB_1 2262 | 64 2263 | ADD 2264 | EIF 2265 | FLOOR 2266 | PUSHB_1 2267 | 1 2268 | MUL 2269 | ADD 2270 | DUP 2271 | PUSHB_1 2272 | 1 2273 | CALL 2274 | DUP 2275 | ROLL 2276 | ROLL 2277 | SUB 2278 | DUP 2279 | PUSHB_1 2280 | 4 2281 | RS 2282 | ADD 2283 | ABS 2284 | SWAP 2285 | PUSHB_1 2286 | 5 2287 | RS 2288 | SUB 2289 | ABS 2290 | LT 2291 | IF 2292 | PUSHB_1 2293 | 4 2294 | RS 2295 | SUB 2296 | ELSE 2297 | PUSHB_1 2298 | 5 2299 | RS 2300 | ADD 2301 | EIF 2302 | PUSHB_1 2303 | 3 2304 | CINDEX 2305 | PUSHB_1 2306 | 2 2307 | DIV 2308 | DUP 2309 | PUSHB_1 2310 | 0 2311 | LT 2312 | IF 2313 | PUSHB_1 2314 | 64 2315 | ADD 2316 | EIF 2317 | FLOOR 2318 | PUSHB_1 2319 | 1 2320 | MUL 2321 | SUB 2322 | SWAP 2323 | DUP 2324 | DUP 2325 | PUSHB_1 2326 | 4 2327 | MINDEX 2328 | SWAP 2329 | GC[cur] 2330 | SUB 2331 | SHPIX 2332 | ELSE 2333 | SWAP 2334 | PUSHB_1 2335 | 10 2336 | RS 2337 | GC[cur] 2338 | PUSHB_1 2339 | 2 2340 | CINDEX 2341 | PUSHB_1 2342 | 10 2343 | RS 2344 | GC[orig] 2345 | SWAP 2346 | GC[orig] 2347 | SWAP 2348 | SUB 2349 | ADD 2350 | DUP 2351 | PUSHB_1 2352 | 6 2353 | RS 2354 | PUSHB_1 2355 | 2 2356 | DIV 2357 | DUP 2358 | PUSHB_1 2359 | 0 2360 | LT 2361 | IF 2362 | PUSHB_1 2363 | 64 2364 | ADD 2365 | EIF 2366 | FLOOR 2367 | PUSHB_1 2368 | 1 2369 | MUL 2370 | ADD 2371 | SWAP 2372 | DUP 2373 | PUSHB_1 2374 | 1 2375 | CALL 2376 | SWAP 2377 | PUSHB_1 2378 | 6 2379 | RS 2380 | ADD 2381 | PUSHB_1 2382 | 1 2383 | CALL 2384 | PUSHB_1 2385 | 5 2386 | CINDEX 2387 | SUB 2388 | PUSHB_1 2389 | 5 2390 | CINDEX 2391 | PUSHB_1 2392 | 2 2393 | DIV 2394 | DUP 2395 | PUSHB_1 2396 | 0 2397 | LT 2398 | IF 2399 | PUSHB_1 2400 | 64 2401 | ADD 2402 | EIF 2403 | FLOOR 2404 | PUSHB_1 2405 | 1 2406 | MUL 2407 | PUSHB_1 2408 | 4 2409 | MINDEX 2410 | SUB 2411 | DUP 2412 | PUSHB_1 2413 | 4 2414 | CINDEX 2415 | ADD 2416 | ABS 2417 | SWAP 2418 | PUSHB_1 2419 | 3 2420 | CINDEX 2421 | ADD 2422 | ABS 2423 | LT 2424 | IF 2425 | POP 2426 | ELSE 2427 | SWAP 2428 | POP 2429 | EIF 2430 | SWAP 2431 | DUP 2432 | DUP 2433 | PUSHB_1 2434 | 4 2435 | MINDEX 2436 | SWAP 2437 | GC[cur] 2438 | SUB 2439 | SHPIX 2440 | EIF 2441 | ENDF 2442 | PUSHB_1 2443 | 60 2444 | FDEF 2445 | PUSHB_1 2446 | 0 2447 | SZPS 2448 | PUSHB_1 2449 | 23 2450 | SWAP 2451 | WS 2452 | DUP 2453 | DUP 2454 | DUP 2455 | PUSHB_1 2456 | 5 2457 | MINDEX 2458 | DUP 2459 | MDAP[no-rnd] 2460 | GC[orig] 2461 | SWAP 2462 | GC[orig] 2463 | SWAP 2464 | SUB 2465 | SWAP 2466 | ALIGNRP 2467 | SHPIX 2468 | ENDF 2469 | PUSHB_1 2470 | 61 2471 | FDEF 2472 | PUSHB_1 2473 | 0 2474 | SZPS 2475 | PUSHB_1 2476 | 23 2477 | SWAP 2478 | WS 2479 | DUP 2480 | PUSHB_1 2481 | 10 2482 | SWAP 2483 | WS 2484 | DUP 2485 | DUP 2486 | DUP 2487 | GC[cur] 2488 | SWAP 2489 | GC[orig] 2490 | PUSHB_1 2491 | 1 2492 | CALL 2493 | SWAP 2494 | SUB 2495 | SHPIX 2496 | ENDF 2497 | PUSHB_1 2498 | 62 2499 | FDEF 2500 | PUSHB_1 2501 | 0 2502 | SZPS 2503 | PUSHB_1 2504 | 23 2505 | SWAP 2506 | WS 2507 | PUSHB_1 2508 | 3 2509 | CINDEX 2510 | PUSHB_1 2511 | 2 2512 | CINDEX 2513 | GC[orig] 2514 | SWAP 2515 | GC[orig] 2516 | SWAP 2517 | SUB 2518 | PUSHB_1 2519 | 0 2520 | EQ 2521 | IF 2522 | MDAP[no-rnd] 2523 | DUP 2524 | ALIGNRP 2525 | SWAP 2526 | POP 2527 | ELSE 2528 | PUSHB_1 2529 | 2 2530 | CINDEX 2531 | PUSHB_1 2532 | 2 2533 | CINDEX 2534 | GC[orig] 2535 | SWAP 2536 | GC[orig] 2537 | SWAP 2538 | SUB 2539 | DUP 2540 | PUSHB_1 2541 | 5 2542 | CINDEX 2543 | PUSHB_1 2544 | 4 2545 | CINDEX 2546 | GC[orig] 2547 | SWAP 2548 | GC[orig] 2549 | SWAP 2550 | SUB 2551 | PUSHB_1 2552 | 6 2553 | CINDEX 2554 | PUSHB_1 2555 | 5 2556 | CINDEX 2557 | MD[grid] 2558 | PUSHB_1 2559 | 2 2560 | CINDEX 2561 | SUB 2562 | PUSHW_2 2563 | 2048 2564 | 2048 2565 | MUL 2566 | MUL 2567 | SWAP 2568 | DUP 2569 | IF 2570 | DIV 2571 | ELSE 2572 | POP 2573 | EIF 2574 | MUL 2575 | PUSHW_1 2576 | 1024 2577 | DIV 2578 | DUP 2579 | PUSHB_1 2580 | 0 2581 | LT 2582 | IF 2583 | PUSHB_1 2584 | 64 2585 | ADD 2586 | EIF 2587 | FLOOR 2588 | PUSHB_1 2589 | 1 2590 | MUL 2591 | ADD 2592 | SWAP 2593 | MDAP[no-rnd] 2594 | SWAP 2595 | DUP 2596 | DUP 2597 | ALIGNRP 2598 | ROLL 2599 | SHPIX 2600 | SWAP 2601 | POP 2602 | EIF 2603 | ENDF 2604 | PUSHB_1 2605 | 63 2606 | FDEF 2607 | PUSHB_1 2608 | 0 2609 | SZPS 2610 | PUSHB_1 2611 | 23 2612 | SWAP 2613 | WS 2614 | DUP 2615 | PUSHB_1 2616 | 10 2617 | RS 2618 | DUP 2619 | MDAP[no-rnd] 2620 | GC[orig] 2621 | SWAP 2622 | GC[orig] 2623 | SWAP 2624 | SUB 2625 | DUP 2626 | ADD 2627 | PUSHB_1 2628 | 32 2629 | ADD 2630 | FLOOR 2631 | PUSHB_1 2632 | 2 2633 | DIV 2634 | DUP 2635 | PUSHB_1 2636 | 0 2637 | LT 2638 | IF 2639 | PUSHB_1 2640 | 64 2641 | ADD 2642 | EIF 2643 | FLOOR 2644 | PUSHB_1 2645 | 1 2646 | MUL 2647 | SWAP 2648 | DUP 2649 | DUP 2650 | ALIGNRP 2651 | ROLL 2652 | SHPIX 2653 | ENDF 2654 | PUSHB_1 2655 | 64 2656 | FDEF 2657 | SWAP 2658 | DUP 2659 | MDAP[no-rnd] 2660 | GC[cur] 2661 | PUSHB_1 2662 | 2 2663 | CINDEX 2664 | GC[cur] 2665 | PUSHB_1 2666 | 23 2667 | RS 2668 | IF 2669 | LT 2670 | ELSE 2671 | GT 2672 | EIF 2673 | IF 2674 | DUP 2675 | ALIGNRP 2676 | EIF 2677 | MDAP[no-rnd] 2678 | PUSHB_2 2679 | 48 2680 | 1 2681 | SZP1 2682 | CALL 2683 | ENDF 2684 | PUSHB_1 2685 | 65 2686 | FDEF 2687 | SWAP 2688 | DUP 2689 | MDAP[no-rnd] 2690 | GC[cur] 2691 | PUSHB_1 2692 | 2 2693 | CINDEX 2694 | GC[cur] 2695 | PUSHB_1 2696 | 23 2697 | RS 2698 | IF 2699 | GT 2700 | ELSE 2701 | LT 2702 | EIF 2703 | IF 2704 | DUP 2705 | ALIGNRP 2706 | EIF 2707 | MDAP[no-rnd] 2708 | PUSHB_2 2709 | 48 2710 | 1 2711 | SZP1 2712 | CALL 2713 | ENDF 2714 | PUSHB_1 2715 | 66 2716 | FDEF 2717 | SWAP 2718 | DUP 2719 | MDAP[no-rnd] 2720 | GC[cur] 2721 | PUSHB_1 2722 | 2 2723 | CINDEX 2724 | GC[cur] 2725 | PUSHB_1 2726 | 23 2727 | RS 2728 | IF 2729 | LT 2730 | ELSE 2731 | GT 2732 | EIF 2733 | IF 2734 | DUP 2735 | ALIGNRP 2736 | EIF 2737 | SWAP 2738 | DUP 2739 | MDAP[no-rnd] 2740 | GC[cur] 2741 | PUSHB_1 2742 | 2 2743 | CINDEX 2744 | GC[cur] 2745 | PUSHB_1 2746 | 23 2747 | RS 2748 | IF 2749 | GT 2750 | ELSE 2751 | LT 2752 | EIF 2753 | IF 2754 | DUP 2755 | ALIGNRP 2756 | EIF 2757 | MDAP[no-rnd] 2758 | PUSHB_2 2759 | 48 2760 | 1 2761 | SZP1 2762 | CALL 2763 | ENDF 2764 | PUSHB_1 2765 | 67 2766 | FDEF 2767 | PUSHB_1 2768 | 58 2769 | CALL 2770 | SWAP 2771 | DUP 2772 | MDAP[no-rnd] 2773 | GC[cur] 2774 | PUSHB_1 2775 | 2 2776 | CINDEX 2777 | GC[cur] 2778 | PUSHB_1 2779 | 23 2780 | RS 2781 | IF 2782 | LT 2783 | ELSE 2784 | GT 2785 | EIF 2786 | IF 2787 | DUP 2788 | ALIGNRP 2789 | EIF 2790 | MDAP[no-rnd] 2791 | PUSHB_2 2792 | 48 2793 | 1 2794 | SZP1 2795 | CALL 2796 | ENDF 2797 | PUSHB_1 2798 | 68 2799 | FDEF 2800 | PUSHB_1 2801 | 59 2802 | CALL 2803 | ROLL 2804 | DUP 2805 | DUP 2806 | ALIGNRP 2807 | PUSHB_1 2808 | 6 2809 | SWAP 2810 | WS 2811 | ROLL 2812 | SHPIX 2813 | SWAP 2814 | DUP 2815 | MDAP[no-rnd] 2816 | GC[cur] 2817 | PUSHB_1 2818 | 2 2819 | CINDEX 2820 | GC[cur] 2821 | PUSHB_1 2822 | 23 2823 | RS 2824 | IF 2825 | LT 2826 | ELSE 2827 | GT 2828 | EIF 2829 | IF 2830 | DUP 2831 | ALIGNRP 2832 | EIF 2833 | MDAP[no-rnd] 2834 | PUSHB_2 2835 | 48 2836 | 1 2837 | SZP1 2838 | CALL 2839 | PUSHB_1 2840 | 6 2841 | RS 2842 | MDAP[no-rnd] 2843 | PUSHB_1 2844 | 48 2845 | CALL 2846 | ENDF 2847 | PUSHB_1 2848 | 69 2849 | FDEF 2850 | PUSHB_1 2851 | 0 2852 | SZPS 2853 | PUSHB_1 2854 | 4 2855 | CINDEX 2856 | PUSHB_1 2857 | 4 2858 | MINDEX 2859 | DUP 2860 | DUP 2861 | DUP 2862 | GC[cur] 2863 | SWAP 2864 | GC[orig] 2865 | SUB 2866 | PUSHB_1 2867 | 12 2868 | SWAP 2869 | WS 2870 | MDAP[no-rnd] 2871 | GC[orig] 2872 | SWAP 2873 | GC[orig] 2874 | SWAP 2875 | SUB 2876 | PUSHB_1 2877 | 11 2878 | RS 2879 | CALL 2880 | SWAP 2881 | DUP 2882 | ALIGNRP 2883 | DUP 2884 | MDAP[no-rnd] 2885 | SWAP 2886 | SHPIX 2887 | PUSHB_2 2888 | 48 2889 | 1 2890 | SZP1 2891 | CALL 2892 | ENDF 2893 | PUSHB_1 2894 | 70 2895 | FDEF 2896 | PUSHB_2 2897 | 10 2898 | 4 2899 | CINDEX 2900 | WS 2901 | PUSHB_1 2902 | 0 2903 | SZPS 2904 | PUSHB_1 2905 | 4 2906 | CINDEX 2907 | PUSHB_1 2908 | 4 2909 | CINDEX 2910 | DUP 2911 | MDAP[no-rnd] 2912 | GC[orig] 2913 | SWAP 2914 | GC[orig] 2915 | SWAP 2916 | SUB 2917 | DUP 2918 | PUSHB_1 2919 | 6 2920 | SWAP 2921 | WS 2922 | PUSHB_2 2923 | 12 2924 | 0 2925 | WS 2926 | PUSHB_1 2927 | 11 2928 | RS 2929 | CALL 2930 | DUP 2931 | PUSHB_1 2932 | 96 2933 | LT 2934 | IF 2935 | DUP 2936 | PUSHB_1 2937 | 64 2938 | LTEQ 2939 | IF 2940 | PUSHB_4 2941 | 4 2942 | 32 2943 | 5 2944 | 32 2945 | ELSE 2946 | PUSHB_4 2947 | 4 2948 | 38 2949 | 5 2950 | 26 2951 | EIF 2952 | WS 2953 | WS 2954 | SWAP 2955 | DUP 2956 | GC[orig] 2957 | PUSHB_1 2958 | 6 2959 | RS 2960 | PUSHB_1 2961 | 2 2962 | DIV 2963 | DUP 2964 | PUSHB_1 2965 | 0 2966 | LT 2967 | IF 2968 | PUSHB_1 2969 | 64 2970 | ADD 2971 | EIF 2972 | FLOOR 2973 | PUSHB_1 2974 | 1 2975 | MUL 2976 | ADD 2977 | DUP 2978 | PUSHB_1 2979 | 1 2980 | CALL 2981 | DUP 2982 | ROLL 2983 | ROLL 2984 | SUB 2985 | DUP 2986 | PUSHB_1 2987 | 4 2988 | RS 2989 | ADD 2990 | ABS 2991 | SWAP 2992 | PUSHB_1 2993 | 5 2994 | RS 2995 | SUB 2996 | ABS 2997 | LT 2998 | IF 2999 | PUSHB_1 3000 | 4 3001 | RS 3002 | SUB 3003 | ELSE 3004 | PUSHB_1 3005 | 5 3006 | RS 3007 | ADD 3008 | EIF 3009 | PUSHB_1 3010 | 3 3011 | CINDEX 3012 | PUSHB_1 3013 | 2 3014 | DIV 3015 | DUP 3016 | PUSHB_1 3017 | 0 3018 | LT 3019 | IF 3020 | PUSHB_1 3021 | 64 3022 | ADD 3023 | EIF 3024 | FLOOR 3025 | PUSHB_1 3026 | 1 3027 | MUL 3028 | SUB 3029 | PUSHB_1 3030 | 2 3031 | CINDEX 3032 | GC[cur] 3033 | SUB 3034 | SHPIX 3035 | SWAP 3036 | DUP 3037 | ALIGNRP 3038 | SWAP 3039 | SHPIX 3040 | ELSE 3041 | POP 3042 | DUP 3043 | DUP 3044 | GC[cur] 3045 | SWAP 3046 | GC[orig] 3047 | PUSHB_1 3048 | 1 3049 | CALL 3050 | SWAP 3051 | SUB 3052 | SHPIX 3053 | POP 3054 | EIF 3055 | PUSHB_2 3056 | 48 3057 | 1 3058 | SZP1 3059 | CALL 3060 | ENDF 3061 | PUSHB_1 3062 | 71 3063 | FDEF 3064 | PUSHB_2 3065 | 0 3066 | 58 3067 | CALL 3068 | MDAP[no-rnd] 3069 | PUSHB_2 3070 | 48 3071 | 1 3072 | SZP1 3073 | CALL 3074 | ENDF 3075 | PUSHB_1 3076 | 72 3077 | FDEF 3078 | PUSHB_2 3079 | 0 3080 | 59 3081 | CALL 3082 | POP 3083 | SWAP 3084 | DUP 3085 | DUP 3086 | ALIGNRP 3087 | PUSHB_1 3088 | 6 3089 | SWAP 3090 | WS 3091 | SWAP 3092 | SHPIX 3093 | PUSHB_2 3094 | 48 3095 | 1 3096 | SZP1 3097 | CALL 3098 | PUSHB_1 3099 | 6 3100 | RS 3101 | MDAP[no-rnd] 3102 | PUSHB_1 3103 | 48 3104 | CALL 3105 | ENDF 3106 | PUSHB_1 3107 | 73 3108 | FDEF 3109 | PUSHB_1 3110 | 0 3111 | SZP2 3112 | DUP 3113 | GC[orig] 3114 | PUSHB_1 3115 | 0 3116 | SWAP 3117 | WS 3118 | PUSHB_3 3119 | 0 3120 | 1 3121 | 1 3122 | SZP2 3123 | SZP1 3124 | SZP0 3125 | MDAP[no-rnd] 3126 | PUSHB_1 3127 | 54 3128 | LOOPCALL 3129 | ENDF 3130 | PUSHB_1 3131 | 74 3132 | FDEF 3133 | PUSHB_1 3134 | 0 3135 | SZP2 3136 | DUP 3137 | GC[orig] 3138 | PUSHB_1 3139 | 0 3140 | SWAP 3141 | WS 3142 | PUSHB_3 3143 | 0 3144 | 1 3145 | 1 3146 | SZP2 3147 | SZP1 3148 | SZP0 3149 | MDAP[no-rnd] 3150 | PUSHB_1 3151 | 54 3152 | LOOPCALL 3153 | ENDF 3154 | PUSHB_1 3155 | 75 3156 | FDEF 3157 | PUSHB_2 3158 | 0 3159 | 1 3160 | SZP1 3161 | SZP0 3162 | PUSHB_1 3163 | 55 3164 | LOOPCALL 3165 | ENDF 3166 | PUSHB_1 3167 | 76 3168 | FDEF 3169 | PUSHB_1 3170 | 57 3171 | LOOPCALL 3172 | ENDF 3173 | PUSHB_1 3174 | 77 3175 | FDEF 3176 | PUSHB_1 3177 | 0 3178 | SZPS 3179 | RCVT 3180 | SWAP 3181 | DUP 3182 | MDAP[no-rnd] 3183 | DUP 3184 | GC[cur] 3185 | ROLL 3186 | SWAP 3187 | SUB 3188 | SHPIX 3189 | PUSHB_2 3190 | 48 3191 | 1 3192 | SZP1 3193 | CALL 3194 | ENDF 3195 | PUSHB_1 3196 | 78 3197 | FDEF 3198 | PUSHB_1 3199 | 10 3200 | SWAP 3201 | WS 3202 | PUSHB_1 3203 | 77 3204 | CALL 3205 | ENDF 3206 | PUSHB_1 3207 | 79 3208 | FDEF 3209 | PUSHB_3 3210 | 0 3211 | 0 3212 | 70 3213 | CALL 3214 | ENDF 3215 | PUSHB_1 3216 | 80 3217 | FDEF 3218 | PUSHB_3 3219 | 0 3220 | 1 3221 | 70 3222 | CALL 3223 | ENDF 3224 | PUSHB_1 3225 | 81 3226 | FDEF 3227 | PUSHB_3 3228 | 1 3229 | 0 3230 | 70 3231 | CALL 3232 | ENDF 3233 | PUSHB_1 3234 | 82 3235 | FDEF 3236 | PUSHB_3 3237 | 1 3238 | 1 3239 | 70 3240 | CALL 3241 | ENDF 3242 | PUSHB_1 3243 | 83 3244 | FDEF 3245 | PUSHB_3 3246 | 0 3247 | 0 3248 | 71 3249 | CALL 3250 | ENDF 3251 | PUSHB_1 3252 | 84 3253 | FDEF 3254 | PUSHB_3 3255 | 0 3256 | 1 3257 | 71 3258 | CALL 3259 | ENDF 3260 | PUSHB_1 3261 | 85 3262 | FDEF 3263 | PUSHB_3 3264 | 1 3265 | 0 3266 | 71 3267 | CALL 3268 | ENDF 3269 | PUSHB_1 3270 | 86 3271 | FDEF 3272 | PUSHB_3 3273 | 1 3274 | 1 3275 | 71 3276 | CALL 3277 | ENDF 3278 | PUSHB_1 3279 | 87 3280 | FDEF 3281 | PUSHB_4 3282 | 0 3283 | 0 3284 | 0 3285 | 67 3286 | CALL 3287 | ENDF 3288 | PUSHB_1 3289 | 88 3290 | FDEF 3291 | PUSHB_4 3292 | 0 3293 | 1 3294 | 0 3295 | 67 3296 | CALL 3297 | ENDF 3298 | PUSHB_1 3299 | 89 3300 | FDEF 3301 | PUSHB_4 3302 | 1 3303 | 0 3304 | 0 3305 | 67 3306 | CALL 3307 | ENDF 3308 | PUSHB_1 3309 | 90 3310 | FDEF 3311 | PUSHB_4 3312 | 1 3313 | 1 3314 | 0 3315 | 67 3316 | CALL 3317 | ENDF 3318 | PUSHB_1 3319 | 91 3320 | FDEF 3321 | PUSHB_4 3322 | 0 3323 | 0 3324 | 1 3325 | 67 3326 | CALL 3327 | ENDF 3328 | PUSHB_1 3329 | 92 3330 | FDEF 3331 | PUSHB_4 3332 | 0 3333 | 1 3334 | 1 3335 | 67 3336 | CALL 3337 | ENDF 3338 | PUSHB_1 3339 | 93 3340 | FDEF 3341 | PUSHB_4 3342 | 1 3343 | 0 3344 | 1 3345 | 67 3346 | CALL 3347 | ENDF 3348 | PUSHB_1 3349 | 94 3350 | FDEF 3351 | PUSHB_4 3352 | 1 3353 | 1 3354 | 1 3355 | 67 3356 | CALL 3357 | ENDF 3358 | PUSHB_1 3359 | 95 3360 | FDEF 3361 | PUSHB_3 3362 | 0 3363 | 0 3364 | 69 3365 | CALL 3366 | ENDF 3367 | PUSHB_1 3368 | 96 3369 | FDEF 3370 | PUSHB_3 3371 | 0 3372 | 1 3373 | 69 3374 | CALL 3375 | ENDF 3376 | PUSHB_1 3377 | 97 3378 | FDEF 3379 | PUSHB_3 3380 | 1 3381 | 0 3382 | 69 3383 | CALL 3384 | ENDF 3385 | PUSHB_1 3386 | 98 3387 | FDEF 3388 | PUSHB_3 3389 | 1 3390 | 1 3391 | 69 3392 | CALL 3393 | ENDF 3394 | PUSHB_1 3395 | 99 3396 | FDEF 3397 | PUSHB_3 3398 | 0 3399 | 0 3400 | 72 3401 | CALL 3402 | ENDF 3403 | PUSHB_1 3404 | 100 3405 | FDEF 3406 | PUSHB_3 3407 | 0 3408 | 1 3409 | 72 3410 | CALL 3411 | ENDF 3412 | PUSHB_1 3413 | 101 3414 | FDEF 3415 | PUSHB_3 3416 | 1 3417 | 0 3418 | 72 3419 | CALL 3420 | ENDF 3421 | PUSHB_1 3422 | 102 3423 | FDEF 3424 | PUSHB_3 3425 | 1 3426 | 1 3427 | 72 3428 | CALL 3429 | ENDF 3430 | PUSHB_1 3431 | 103 3432 | FDEF 3433 | PUSHB_4 3434 | 0 3435 | 0 3436 | 0 3437 | 68 3438 | CALL 3439 | ENDF 3440 | PUSHB_1 3441 | 104 3442 | FDEF 3443 | PUSHB_4 3444 | 0 3445 | 1 3446 | 0 3447 | 68 3448 | CALL 3449 | ENDF 3450 | PUSHB_1 3451 | 105 3452 | FDEF 3453 | PUSHB_4 3454 | 1 3455 | 0 3456 | 0 3457 | 68 3458 | CALL 3459 | ENDF 3460 | PUSHB_1 3461 | 106 3462 | FDEF 3463 | PUSHB_4 3464 | 1 3465 | 1 3466 | 0 3467 | 68 3468 | CALL 3469 | ENDF 3470 | PUSHB_1 3471 | 107 3472 | FDEF 3473 | PUSHB_4 3474 | 0 3475 | 0 3476 | 1 3477 | 68 3478 | CALL 3479 | ENDF 3480 | PUSHB_1 3481 | 108 3482 | FDEF 3483 | PUSHB_4 3484 | 0 3485 | 1 3486 | 1 3487 | 68 3488 | CALL 3489 | ENDF 3490 | PUSHB_1 3491 | 109 3492 | FDEF 3493 | PUSHB_4 3494 | 1 3495 | 0 3496 | 1 3497 | 68 3498 | CALL 3499 | ENDF 3500 | PUSHB_1 3501 | 110 3502 | FDEF 3503 | PUSHB_4 3504 | 1 3505 | 1 3506 | 1 3507 | 68 3508 | CALL 3509 | ENDF 3510 | PUSHB_1 3511 | 111 3512 | FDEF 3513 | PUSHB_2 3514 | 0 3515 | 60 3516 | CALL 3517 | MDAP[no-rnd] 3518 | PUSHB_2 3519 | 48 3520 | 1 3521 | SZP1 3522 | CALL 3523 | ENDF 3524 | PUSHB_1 3525 | 112 3526 | FDEF 3527 | PUSHB_2 3528 | 0 3529 | 60 3530 | CALL 3531 | PUSHB_1 3532 | 64 3533 | CALL 3534 | ENDF 3535 | PUSHB_1 3536 | 113 3537 | FDEF 3538 | PUSHB_2 3539 | 0 3540 | 60 3541 | CALL 3542 | PUSHB_1 3543 | 65 3544 | CALL 3545 | ENDF 3546 | PUSHB_1 3547 | 114 3548 | FDEF 3549 | PUSHB_1 3550 | 0 3551 | SZPS 3552 | PUSHB_2 3553 | 0 3554 | 60 3555 | CALL 3556 | PUSHB_1 3557 | 66 3558 | CALL 3559 | ENDF 3560 | PUSHB_1 3561 | 115 3562 | FDEF 3563 | PUSHB_2 3564 | 1 3565 | 60 3566 | CALL 3567 | PUSHB_1 3568 | 64 3569 | CALL 3570 | ENDF 3571 | PUSHB_1 3572 | 116 3573 | FDEF 3574 | PUSHB_2 3575 | 1 3576 | 60 3577 | CALL 3578 | PUSHB_1 3579 | 65 3580 | CALL 3581 | ENDF 3582 | PUSHB_1 3583 | 117 3584 | FDEF 3585 | PUSHB_1 3586 | 0 3587 | SZPS 3588 | PUSHB_2 3589 | 1 3590 | 60 3591 | CALL 3592 | PUSHB_1 3593 | 66 3594 | CALL 3595 | ENDF 3596 | PUSHB_1 3597 | 118 3598 | FDEF 3599 | PUSHB_2 3600 | 0 3601 | 61 3602 | CALL 3603 | MDAP[no-rnd] 3604 | PUSHB_2 3605 | 48 3606 | 1 3607 | SZP1 3608 | CALL 3609 | ENDF 3610 | PUSHB_1 3611 | 119 3612 | FDEF 3613 | PUSHB_2 3614 | 0 3615 | 61 3616 | CALL 3617 | PUSHB_1 3618 | 64 3619 | CALL 3620 | ENDF 3621 | PUSHB_1 3622 | 120 3623 | FDEF 3624 | PUSHB_2 3625 | 0 3626 | 61 3627 | CALL 3628 | PUSHB_1 3629 | 65 3630 | CALL 3631 | ENDF 3632 | PUSHB_1 3633 | 121 3634 | FDEF 3635 | PUSHB_2 3636 | 0 3637 | 61 3638 | CALL 3639 | PUSHB_1 3640 | 66 3641 | CALL 3642 | ENDF 3643 | PUSHB_1 3644 | 122 3645 | FDEF 3646 | PUSHB_2 3647 | 1 3648 | 61 3649 | CALL 3650 | PUSHB_1 3651 | 64 3652 | CALL 3653 | ENDF 3654 | PUSHB_1 3655 | 123 3656 | FDEF 3657 | PUSHB_2 3658 | 1 3659 | 61 3660 | CALL 3661 | PUSHB_1 3662 | 65 3663 | CALL 3664 | ENDF 3665 | PUSHB_1 3666 | 124 3667 | FDEF 3668 | PUSHB_2 3669 | 1 3670 | 61 3671 | CALL 3672 | PUSHB_1 3673 | 66 3674 | CALL 3675 | ENDF 3676 | PUSHB_1 3677 | 125 3678 | FDEF 3679 | PUSHB_2 3680 | 0 3681 | 62 3682 | CALL 3683 | MDAP[no-rnd] 3684 | PUSHB_2 3685 | 48 3686 | 1 3687 | SZP1 3688 | CALL 3689 | ENDF 3690 | PUSHB_1 3691 | 126 3692 | FDEF 3693 | PUSHB_2 3694 | 0 3695 | 62 3696 | CALL 3697 | PUSHB_1 3698 | 64 3699 | CALL 3700 | ENDF 3701 | PUSHB_1 3702 | 127 3703 | FDEF 3704 | PUSHB_2 3705 | 0 3706 | 62 3707 | CALL 3708 | PUSHB_1 3709 | 65 3710 | CALL 3711 | ENDF 3712 | PUSHB_1 3713 | 128 3714 | FDEF 3715 | PUSHB_2 3716 | 0 3717 | 62 3718 | CALL 3719 | PUSHB_1 3720 | 66 3721 | CALL 3722 | ENDF 3723 | PUSHB_1 3724 | 129 3725 | FDEF 3726 | PUSHB_2 3727 | 1 3728 | 62 3729 | CALL 3730 | PUSHB_1 3731 | 64 3732 | CALL 3733 | ENDF 3734 | PUSHB_1 3735 | 130 3736 | FDEF 3737 | PUSHB_2 3738 | 1 3739 | 62 3740 | CALL 3741 | PUSHB_1 3742 | 65 3743 | CALL 3744 | ENDF 3745 | PUSHB_1 3746 | 131 3747 | FDEF 3748 | PUSHB_2 3749 | 1 3750 | 62 3751 | CALL 3752 | PUSHB_1 3753 | 66 3754 | CALL 3755 | ENDF 3756 | PUSHB_1 3757 | 132 3758 | FDEF 3759 | PUSHB_2 3760 | 0 3761 | 63 3762 | CALL 3763 | MDAP[no-rnd] 3764 | PUSHB_2 3765 | 48 3766 | 1 3767 | SZP1 3768 | CALL 3769 | ENDF 3770 | PUSHB_1 3771 | 133 3772 | FDEF 3773 | PUSHB_2 3774 | 0 3775 | 63 3776 | CALL 3777 | PUSHB_1 3778 | 64 3779 | CALL 3780 | ENDF 3781 | PUSHB_1 3782 | 134 3783 | FDEF 3784 | PUSHB_2 3785 | 0 3786 | 63 3787 | CALL 3788 | PUSHB_1 3789 | 65 3790 | CALL 3791 | ENDF 3792 | PUSHB_1 3793 | 135 3794 | FDEF 3795 | PUSHB_2 3796 | 0 3797 | 63 3798 | CALL 3799 | PUSHB_1 3800 | 66 3801 | CALL 3802 | ENDF 3803 | PUSHB_1 3804 | 136 3805 | FDEF 3806 | PUSHB_2 3807 | 1 3808 | 63 3809 | CALL 3810 | PUSHB_1 3811 | 64 3812 | CALL 3813 | ENDF 3814 | PUSHB_1 3815 | 137 3816 | FDEF 3817 | PUSHB_2 3818 | 1 3819 | 63 3820 | CALL 3821 | PUSHB_1 3822 | 65 3823 | CALL 3824 | ENDF 3825 | PUSHB_1 3826 | 138 3827 | FDEF 3828 | PUSHB_2 3829 | 1 3830 | 63 3831 | CALL 3832 | PUSHB_1 3833 | 66 3834 | CALL 3835 | ENDF 3836 | PUSHB_1 3837 | 139 3838 | FDEF 3839 | PUSHB_3 3840 | 11 3841 | 0 3842 | 3 3843 | RCVT 3844 | LT 3845 | IF 3846 | PUSHB_1 3847 | 6 3848 | ELSE 3849 | PUSHB_3 3850 | 4 3851 | 2 3852 | 3 3853 | RCVT 3854 | IF 3855 | SWAP 3856 | POP 3857 | ELSE 3858 | POP 3859 | EIF 3860 | EIF 3861 | WS 3862 | CALL 3863 | PUSHB_1 3864 | 8 3865 | NEG 3866 | PUSHB_1 3867 | 3 3868 | DEPTH 3869 | LT 3870 | JROT 3871 | PUSHB_2 3872 | 5 3873 | 1 3874 | SZP2 3875 | RCVT 3876 | IF 3877 | IUP[y] 3878 | EIF 3879 | ENDF 3880 | EndTTInstrs 3881 | ShortTable: cvt 119 3882 | 0 3883 | 0 3884 | 0 3885 | 0 3886 | 0 3887 | 0 3888 | 0 3889 | 0 3890 | 0 3891 | 0 3892 | 0 3893 | 0 3894 | 0 3895 | 0 3896 | 0 3897 | 0 3898 | 0 3899 | 0 3900 | 0 3901 | 0 3902 | 0 3903 | 0 3904 | 0 3905 | 0 3906 | 0 3907 | 162 3908 | 162 3909 | 163 3910 | 163 3911 | 1495 3912 | 0 3913 | 1126 3914 | 0 3915 | -369 3916 | 1802 3917 | -380 3918 | 1516 3919 | -20 3920 | 1147 3921 | -16 3922 | -369 3923 | 1802 3924 | -380 3925 | 162 3926 | 162 3927 | 163 3928 | 163 3929 | 1495 3930 | 0 3931 | 1495 3932 | 1126 3933 | 0 3934 | -369 3935 | 1802 3936 | -380 3937 | 1516 3938 | -20 3939 | 1516 3940 | 1143 3941 | -16 3942 | -369 3943 | 1802 3944 | -380 3945 | 50 3946 | 50 3947 | 50 3948 | 50 3949 | 1372 3950 | 102 3951 | 1802 3952 | -380 3953 | 1372 3954 | 102 3955 | 1802 3956 | -380 3957 | 162 3958 | 162 3959 | 163 3960 | 163 3961 | 1495 3962 | 0 3963 | 1495 3964 | 1126 3965 | 0 3966 | -369 3967 | 1802 3968 | -380 3969 | 1516 3970 | -20 3971 | 1591 3972 | 1147 3973 | -16 3974 | -369 3975 | 1802 3976 | -380 3977 | 126 3978 | 126 3979 | 129 3980 | 129 3981 | 645 3982 | -226 3983 | 1802 3984 | -380 3985 | 665 3986 | -246 3987 | 1802 3988 | -380 3989 | 126 3990 | 126 3991 | 129 3992 | 129 3993 | 1700 3994 | 829 3995 | 1802 3996 | -380 3997 | 1720 3998 | 809 3999 | 1802 4000 | -380 4001 | EndShort 4002 | ShortTable: maxp 16 4003 | 1 4004 | 0 4005 | 15042 4006 | 440 4007 | 110 4008 | 91 4009 | 5 4010 | 2 4011 | 660 4012 | 1014 4013 | 141 4014 | 0 4015 | 1368 4016 | 3648 4017 | 3 4018 | 1 4019 | EndShort 4020 | LangName: 1033 "" "" "" "FontForge 2.0 : UDEV Gothic Regular : 24-03-2022" "" "Version 0.0.1 ; ttfautohint (v1.8.3) -l 6 -r 45 -G 200 -x 14 -D latn -f none -a nnn -W -X +ACIA-13-+ACIA" 4021 | GaspTable: 1 65535 15 1 4022 | Encoding: UnicodeFull 4023 | UnicodeInterp: none 4024 | NameList: AGL For New Fonts 4025 | DisplaySize: -48 4026 | AntiAlias: 1 4027 | FitToEm: 0 4028 | WinInfo: 12272 13 9 4029 | BeginPrivate: 0 4030 | EndPrivate 4031 | BeginChars: 1116914 1 4032 | 4033 | StartChar: uni3000 4034 | Encoding: 12288 12288 0 4035 | Width: 1000 4036 | GlyphClass: 2 4037 | Flags: W 4038 | LayerCount: 2 4039 | Fore 4040 | SplineSet 4041 | 266 719 m 1,0,-1 4042 | 266 664 l 1,1,-1 4043 | 253 664 l 2,2,3 4044 | 237 664 237 664 227 653 c 128,-1,5 4045 | 217 642 217 642 217 627 c 2,6,-1 4046 | 217 615 l 1,7,-1 4047 | 162 615 l 1,8,-1 4048 | 162 627 l 2,9,10 4049 | 162 665 162 665 188 691 c 0,11,12 4050 | 213 716 213 716 253 719 c 1,13,-1 4051 | 253 719 l 1,14,-1 4052 | 266 719 l 1,0,-1 4053 | 561 719 m 1,15,-1 4054 | 561 664 l 1,16,-1 4055 | 439 664 l 1,17,-1 4056 | 439 719 l 1,18,-1 4057 | 561 719 l 1,15,-1 4058 | 734 719 m 1,19,-1 4059 | 747 719 l 2,20,21 4060 | 787 719 787 719 812 691 c 0,22,23 4061 | 837 664 837 664 838 627 c 2,24,-1 4062 | 838 615 l 1,25,-1 4063 | 783 615 l 1,26,-1 4064 | 783 627 l 2,27,28 4065 | 783 641 783 641 773 653 c 0,29,30 4066 | 762 664 762 664 747 664 c 2,31,-1 4067 | 734 664 l 1,32,-1 4068 | 734 719 l 1,19,-1 4069 | 266 41 m 1,33,-1 4070 | 253 41 l 2,34,35 4071 | 213 41 213 41 188 69 c 0,36,37 4072 | 163 96 163 96 162 133 c 2,38,-1 4073 | 162 145 l 1,39,-1 4074 | 217 145 l 1,40,-1 4075 | 217 133 l 2,41,42 4076 | 217 119 217 119 227 107 c 0,43,44 4077 | 238 96 238 96 253 96 c 2,45,-1 4078 | 266 96 l 1,46,-1 4079 | 266 41 l 1,33,-1 4080 | 561 41 m 1,47,-1 4081 | 439 41 l 1,48,-1 4082 | 439 96 l 1,49,-1 4083 | 561 96 l 1,50,-1 4084 | 561 41 l 1,47,-1 4085 | 734 41 m 1,51,-1 4086 | 734 96 l 1,52,-1 4087 | 747 96 l 2,53,54 4088 | 762 96 762 96 773 107 c 0,55,56 4089 | 784 119 784 119 783 133 c 2,57,-1 4090 | 783 145 l 1,58,-1 4091 | 838 145 l 1,59,-1 4092 | 838 133 l 2,60,61 4093 | 838 93 838 93 812 69 c 0,62,63 4094 | 787 44 787 44 747 41 c 1,64,-1 4095 | 747 41 l 1,65,-1 4096 | 734 41 l 1,51,-1 4097 | 162 441 m 1,66,-1 4098 | 217 441 l 1,67,-1 4099 | 217 320 l 1,68,-1 4100 | 162 320 l 1,69,-1 4101 | 162 441 l 1,66,-1 4102 | 838 441 m 1,70,-1 4103 | 838 320 l 1,71,-1 4104 | 783 320 l 1,72,-1 4105 | 783 441 l 1,73,-1 4106 | 838 441 l 1,70,-1 4107 | EndSplineSet 4108 | AlternateSubs2: "'aalt' Access All Alternates lookup 1 subtable" uni00A0#1 glyph12883#1 glyph12915#1 glyph12962#1 glyph13236#1 4109 | Substitution2: "'hwid' Half Widths lookup 9 subtable" uni00A0#1 4110 | EndChar 4111 | EndChars 4112 | EndSplineFont 4113 | -------------------------------------------------------------------------------- /source_fonts/nerd-fonts/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Ryan L McIntyre 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /source_fonts/nerd-fonts/SymbolsNerdFont-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuru7/NOTONOTO/fdfba8f2c6a6155d36928701793856c06758ee5d/source_fonts/nerd-fonts/SymbolsNerdFont-Regular.ttf --------------------------------------------------------------------------------