├── .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 | |  |  |
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
--------------------------------------------------------------------------------