-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfont_generator.sh
executable file
·5474 lines (4963 loc) · 198 KB
/
font_generator.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
#!/bin/bash
# Custom font generator for Ubroit
#
# Copyright (c) 2024 omonomo
#
# [Original Script]
# Ricty Generator (ricty_generator.sh)
#
# Copyright (c) 2011-2017 Yasunori Yusa
# All rights reserved.
# ログをファイル出力させる場合は有効にする (<< "#LOG" をコメントアウトさせる)
<< "#LOG"
LOG_OUT=/tmp/font_generator.log
LOG_ERR=/tmp/font_generator_err.log
exec 1> >(tee -a $LOG_OUT)
exec 2> >(tee -a $LOG_ERR)
#LOG
font_familyname="Ubroit"
font_familyname_suffix=""
font_version="0.1.0"
vendor_id="PfEd"
tmpdir_name="font_generator_tmpdir" # 一時保管フォルダ名
# グリフ保管アドレス
num_mod_glyphs="4" # -t オプションで改変するグリフ数
address_store_start="64336" # 0ufb50 保管したグリフの最初のアドレス
address_store_g=${address_store_start} # 保管したgアドレス
address_store_b_diagram=$((address_store_g + 1)) # 保管した▲▼■アドレス
address_store_underline=$((address_store_b_diagram + 3)) # 保管した下線アドレス
address_store_mod=$((address_store_underline + 3)) # 保管したDQVZアドレス
address_store_braille=$((address_store_mod + num_mod_glyphs * 6)) # 保管した点字アドレス
address_store_zero=$((address_store_braille + 256)) # 保管したスラッシュ無し0アドレス
address_store_visi_latin=$((address_store_zero + 6)) # latinフォントの保管した識別性向上アドレス ⁄|
address_store_visi_kana=$((address_store_visi_latin + 2)) # 仮名フォントの保管した識別性向上アドレス ゠ - ➓
address_store_visi_kanzi=$((address_store_visi_kana + 26)) # 漢字フォントの保管した識別性向上アドレス 〇 - 口
address_store_line=$((address_store_visi_kanzi + 9)) # 保管した罫線アドレス
address_store_arrow=$((address_store_line + 32)) # 保管した矢印アドレス
address_store_vert=$((address_store_arrow + 4)) # 保管した縦書きアドレス(縦書きの縦線無し( - 縦書きの縦線無し⁉)
address_store_zenhan=$((address_store_vert + 109)) # 保管した全角半角アドレス(!゠⁉)
address_store_d_hyphen=$((address_store_zenhan + 172)) # 保管した縦書き゠アドレス
address_store_end=${address_store_d_hyphen} # 保管したグリフの最終アドレス
address_vert_start="1114181" # 合成後のvert置換の先頭アドレス
address_vert_bracket=${address_vert_start} # vert置換アドレス (
address_vert_X=$((address_vert_bracket + 109)) # vert置換アドレス ✂
address_vert_dh=$((address_vert_X + 3)) # vert置換アドレス ゠
address_vert_mm=$((address_vert_dh + 27)) # vert置換アドレス ㍉
address_vert_kabu=$((address_vert_mm + 333)) # vert置換アドレス ㍿
address_vert_end=$((address_vert_kabu + 7 - 1)) # vert置換の最終アドレス ㋿
address_calt_start=$((address_vert_end + 1)) # calt置換の先頭アドレス
address_calt_AL=${address_calt_start} # calt置換アドレス(左に移動した A)
address_calt_AR=$((address_calt_AL + 239)) # calt置換アドレス(右に移動した A)
address_calt_figure=$((address_calt_AR + 239)) # calt置換アドレス(桁区切り付きの数字)
address_calt_barD=$((address_calt_figure + 40)) # calt置換アドレス(下に移動した |)
address_calt_hyphenL=$((address_calt_barD + 7)) # calt置換アドレス(左に移動した *)
address_calt_hyphenR=$((address_calt_hyphenL + 28)) # calt置換アドレス(右に移動した *)
address_calt_end=$((address_calt_hyphenR + 28 - 1)) # calt置換の最終アドレス (右上に移動した :)
address_calt_barDLR="24" # calt置換アドレス(左右に移動した * から、左右下に移動した | までの増分)
address_ss_start=$((address_calt_end + 1)) # ss置換の先頭アドレス
address_ss_space=${address_ss_start} # ss置換アドレス(全角スペース)
address_ss_figure=$((address_ss_space + 3)) # ss置換アドレス(桁区切り付きの数字)
address_ss_vert=$((address_ss_figure + 50)) # ss置換の縦書き全角アドレス(縦書きの()
address_ss_zenhan=$((address_ss_vert + 109)) # ss置換の横書き全角半角アドレス(!)
address_ss_braille=$((address_ss_zenhan + 172)) # ss置換の点字アドレス
address_ss_visibility=$((address_ss_braille + 256)) # ss置換の識別性向上アドレス(/)
address_ss_mod=$((address_ss_visibility + 43)) # ss置換のDQVZアドレス
address_ss_line=$((address_ss_mod + num_mod_glyphs * 6)) # ss置換の罫線アドレス
address_ss_arrow=$((address_ss_line + 32)) # ss置換の矢印アドレス
address_ss_zero=$((address_ss_arrow + 4)) # ss置換のスラッシュ無し0アドレス
address_ss_end=$((address_ss_zero + 10 - 1)) # ss置換の最終アドレス (╋)
num_ss_glyphs_former=$((address_ss_braille - address_ss_start)) # ss置換のグリフ数(点字の前まで)
num_ss_glyphs_latter=$((address_ss_end + 1 - address_ss_braille)) # ss置換のグリフ数(点字から後)
num_ss_glyphs=$((address_ss_end + 1 - address_ss_start)) # ss置換の総グリフ数
lookupIndex_calt="18" # caltテーブルのlookupナンバー (lookupの種類を増やした場合変更)
num_calt_lookups="20" # caltのルックアップ数 (calt_table_makerでlookupを変更した場合、それに合わせる。table_modificatorも変更すること)
lookupIndex_replace=$((lookupIndex_calt + num_calt_lookups)) # 単純置換のlookupナンバー
num_replace_lookups="10" # 単純置換のルックアップ数 (lookupの数を変えた場合はcalt_table_makerも変更すること)
lookupIndex_ss=$((lookupIndex_replace + num_replace_lookups)) # ssテーブルのlookupナンバー
num_ss_lookups="10" # ssのルックアップ数 (lookupの数を変えた場合はtable_modificatorも変更すること)
# 著作権
copyright="Copyright (c) 2024 omonomo\n\n"
copyright="${copyright}\" + \"[Ubuntu Mono]\nCopyright 2011 Canonical Ltd. Licensed under the Ubuntu Font Licence 1.0\n\n"
copyright="${copyright}\" + \"[Inconsolata]\nCopyright 2006 The Inconsolata Project Authors (https://github.com/cyrealtype/Inconsolata)\n\n"
copyright="${copyright}\" + \"[Circle M+]\nCopyright(c) 2020 M+ FONTS PROJECT, itouhiro\n\n"
copyright="${copyright}\" + \"[BIZ UDGothic]\nCopyright 2022 The BIZ UDGothic Project Authors (https://github.com/googlefonts/morisawa-biz-ud-gothic)\n\n"
copyright="${copyright}\" + \"[NINJAL Hentaigana]\nCopyright(c) National Institute for Japanese Language and Linguistics (NINJAL), 2018.\n\n"
copyright_nerd_fonts="[Symbols Nerd Font]\nCopyright (c) 2016, Ryan McIntyre\n\n"
copyright_license="SIL Open Font License Version 1.1 (http://scripts.sil.org/ofl)"
em_ascent1024="827" # em値1024用 ※ win_ascent - (設定したい typo_linegap) / 2 が適正っぽい
em_descent1024="197" # win_descent - (設定したい typo_linegap) / 2 が適正っぽい
typo_ascent1024="${em_ascent1024}" # typo_ascent + typo_descent = em値にしないと縦書きで文字間隔が崩れる
typo_descent1024="${em_descent1024}" # 縦書きに対応させない場合、linegap = 0で typo、win、hhea 全てを同じにするのが無難
#typo_linegap1024="224" # 本来設定したい値 (win_ascent + win_descent = typo_ascent + typo_descent + typo_linegap)
typo_linegap1024="150" # 数値が大きすぎると Excel (Windows版、Mac版については不明) で文字コード 80h 以上 (おそらく) の文字がずれる
win_ascent1024="939"
win_descent1024="309"
hhea_ascent1024="${win_ascent1024}"
hhea_descent1024="${win_descent1024}"
hhea_linegap1024="0"
# em値変更でのY座標のズレ修正用
move_y_em_revise="-10" # Y座標移動量
# NerdFonts 用
move_y_nerd="30" # 全体Y座標移動量
scale_height_pl="120.7" # PowerlineY座標拡大率
scale_height_pl2="121.9" # PowerlineY座標拡大率 2
scale_height_block="89" # ボックス要素Y座標拡大率
scale_height_pl_revise="100" # 画面表示のずれを修正するための拡大率
center_height_pl=$((277 + move_y_nerd + move_y_em_revise)) # PowerlineリサイズY座標中心
move_y_pl="18" # PowerlineY座標移動量 (上端から ascent までと 下端から descent までの距離が同じになる移動量)
move_y_pl_revise="-10" # 画面表示のずれを修正するための移動量
scale_pomicons="91" # Pomicons の拡大率
scale_nerd="89" # Pomicons Powerline 以外の拡大率
# 半角から全角に変換する場合の拡大率
scale_hankaku2zenkaku="125"
# 上付き、下付き用
scale_width_super_sub="64" # 基本から作成する上付き・下付き文字のX座標拡大率
scale_height_super_sub="54" # 基本から作成する上付き・下付き文字のY座標拡大率
weight_super_sub="0" # ウェイト調整量
move_y_super="282" # 基本から作成した上付き文字のY座標移動量 (すでにある上付き文字のベースラインのY座標)
center_height_super_sub="180" # 上付き、下付き文字のY座標拡大中心
scale_super_sub2="134" # 上付き、下付き文字の拡大率
move_y_super2="0" # 上付き文字のY座標移動量
move_y_sub="0" # 下付き文字のY座標移動量
move_y_super_base="-53" # ベースフォントの上付き文字Y座標移動量 (Latin フォントとベースラインを合わせる)
move_y_sub_base="0" # ベースフォントの下付き文字Y座標移動量 (Latin フォントとベースラインを合わせる)
# 縦書き全角ラテン小文字移動量
move_y_vert_1="-10"
move_y_vert_2="10"
move_y_vert_3="30"
move_y_vert_4="80"
move_y_vert_5="120"
move_y_vert_6="140"
move_y_vert_7="160"
# オブリーク体 (Transform()) 用
tan_oblique="16" # 傾きの係数 (tanθ * 100)
move_x_oblique="-48" # 移動量 (後の処理で * 100 にする)
# 演算子移動量
move_y_math="0" # 通常
move_y_s_math="0" # 上付き、下付き
# 括弧移動量
move_y_bracket="40"
# calt用
move_y_calt_separate3="-510" # 3桁区切り表示のY座標
move_y_calt_separate4="452" # 4桁区切り表示のY座標
scale_calt_decimal="93" # 小数の拡大率
# 通常版・Loose版共通
center_height_hankaku="373" # 半角文字Y座標中心
move_x_calt_separate="-512" # 桁区切り表示のX座標移動量 (下書きモードとその他で位置が変わるので注意)
width_zenkaku="1024" # 全角文字幅
width_latin="512" # Latin フォントの em 値を1024に変換したときの文字幅
# 通常版用
scale_width_latin="100" # Latin フォントの半角英数文字の横拡大率
scale_height_latin="103" # Latin フォントの半角英数文字の縦拡大率
move_x_hankaku_latin="0" # Latin フォント全体のX座標移動量
scale_width_hankaku="100" # 半角英数文字の横拡大率
scale_height_hankaku="100" # 半角英数文字の縦拡大率
scale_width_block="100" # 半角罫線素片・ブロック要素の横拡大率
width_hankaku="512" # 半角文字幅
move_x_calt_latin="16" # ラテン文字のカーニングX座標移動量
move_x_calt_symbol="32" # 記号のカーニングX座標移動量
move_x_hankaku="0" # 半角文字移動量
# Loose 版用
scale_width_latin_loose="107" # Latin フォントの半角英数文字の横拡大率 (Loose 版)
scale_height_latin_loose="107" # Latin フォントの半角英数文字の縦拡大率 (Loose 版)
move_x_hankaku_latin_loose="33" # Latin フォント全体のX座標移動量 (Loose 版)
scale_width_hankaku_loose="100" # 半角英数文字の横拡大率 (Loose 版)
scale_height_hankaku_loose="100" # 半角英数文字の縦拡大率 (Loose 版)
scale_width_block_loose="113" # 半角罫線素片・ブロック要素の横拡大率 (Loose 版)
width_hankaku_loose="576" # 半角文字幅 (Loose 版)
move_x_calt_latin_loose="18" # ラテン文字のカーニングX座標移動量 (Loose 版)
move_x_calt_symbol_loose="36" # 記号のカーニングX座標移動量 (Loose 版)
move_x_hankaku_loose=$(((width_hankaku_loose - ${width_hankaku}) / 2)) # 半角文字移動量 (Loose 版)
# デバッグ用
# NerdFonts
#scale_pomicons="150" # Pomicons の拡大率
#scale_nerd="150" # その他の拡大率
# 通常版用
#scale_width_latin="150" # 半角 Latin フォント英数文字の横拡大率
#scale_height_latin="50" # 半角 Latin フォント英数文字の縦拡大率
# デバッグ用ここまで
# Set path to command
fontforge_command="fontforge"
ttx_command="ttx"
# Set redirection of stderr
redirection_stderr="/dev/null"
# Set fonts directories used in auto flag
fonts_directories=". ${HOME}/.fonts /usr/local/share/fonts /usr/share/fonts \
${HOME}/Library/Fonts /Library/Fonts \
/c/Windows/Fonts /cygdrive/c/Windows/Fonts"
# Set flags
mode="" # 生成モード
leaving_tmp_flag="false" # 一時ファイル残す
loose_flag="false" # Loose 版にする
visible_zenkaku_space_flag="true" # 全角スペース可視化
visible_hankaku_space_flag="true" # 半角スペース可視化
improve_visibility_flag="true" # ダッシュ破線化
underline_flag="true" # 全角半角に下線
mod_flag="true" # DVQZ改変
calt_flag="true" # calt対応
ss_flag="false" # ss対応
nerd_flag="true" # Nerd fonts 追加
separator_flag="true" # 桁区切りあり
slashed_zero_flag="true" # 0にスラッシュあり
oblique_flag="true" # オブリーク作成
emoji_flag="true" # 絵文字を減らさない
draft_flag="false" # 下書きモード
patch_flag="true" # パッチを当てる
patch_only_flag="false" # パッチモード
# Set filenames
origin_latin_regular="UbuntuMono-R.ttf"
origin_latin_bold="UbuntuMono-B.ttf"
origin_base_regular="Cyroit-Regular.nopatch.ttf"
origin_base_bold="Cyroit-Bold.nopatch.ttf"
origin_base_regular_loose="CyroitLoose-Regular.nopatch.ttf"
origin_base_bold_loose="CyroitLoose-Bold.nopatch.ttf"
origin_nerd="SymbolsNerdFontMono-Regular.ttf"
modified_latin_generator="modified_latin_generator.pe"
modified_latin_regular="modified-latin-Regular.sfd"
modified_latin_bold="modified-latin-Bold.sfd"
custom_font_generator="custom_font_generator.pe"
parameter_modificator="parameter_modificator.pe"
oblique_converter="oblique_converter.pe"
modified_nerd_generator="modified_nerd_generator.pe"
modified_nerd="modified-nerd.ttf"
merged_nerd_generator="merged_nerd_generator.pe"
font_patcher="font_patcher.pe"
################################################################################
# Pre-process
################################################################################
# 設定読み込み
settings="settings" # 設定ファイル名
settings_txt=$(find . -maxdepth 1 -name "${settings}.txt" | head -n 1)
if [ -n "${settings_txt}" ]; then
S=$(grep -m 1 "^FONT_VERSION=" "${settings_txt}") # フォントバージョン
if [ -n "${S}" ]; then font_version="${S#FONT_VERSION=}"; fi
S=$(grep -m 1 "^FONT_FAMILYNAME=" "${settings_txt}") # フォントファミリー名
if [ -n "${S}" ]; then font_familyname="${S#FONT_FAMILYNAME=}"; fi
S=$(grep -m 1 "^FONT_FAMILYNAME_SUFFIX=" "${settings_txt}") # フォントファミリー名接尾語
if [ -n "${S}" ]; then font_familyname_suffix="${S#FONT_FAMILYNAME_SUFFIX=}"; fi
S=$(grep -m 1 "^VENDOR_ID=" "${settings_txt}") # ベンダー ID
if [ -n "${S}" ]; then vendor_id="${S#VENDOR_ID=}"; fi
S=$(grep "^COPYRIGHT=" "${settings_txt}") # 著作権
if [ -n "${S}" ]; then
copyright="${S//COPYRIGHT=/}";
copyright="${copyright//
/\\n\\n\" + \"}\n\n";
fi
S=$(grep -m 1 "^COPYRIGHT_NERD_FONTS=" "${settings_txt}") # 著作権 (Nerd fonts)
if [ -n "${S}" ]; then copyright_nerd_fonts="${S#COPYRIGHT_NERD_FONTS=}\n\n"; fi
S=$(grep -m 1 "^COPYRIGHT_LICENSE=" "${settings_txt}") # ライセンス
if [ -n "${S}" ]; then copyright_license="${S#COPYRIGHT_LICENSE=}"; fi
S=$(grep -m 1 "^SCALE_WIDTH_HANKAKU=" "${settings_txt}") # 通常版の半角文字 横幅拡大率
if [ -n "${S}" ]; then scale_width_hankaku="${S#SCALE_WIDTH_HANKAKU=}"; fi
S=$(grep -m 1 "^SCALE_HEIGHT_HANKAKU=" "${settings_txt}") # 通常版の半角文字 高さ拡大率
if [ -n "${S}" ]; then scale_height_hankaku="${S#SCALE_HEIGHT_HANKAKU=}"; fi
S=$(grep -m 1 "^SCALE_WIDTH_HANKAKU_LOOSE=" "${settings_txt}") # Loose 版の半角文字 横幅拡大率
if [ -n "${S}" ]; then scale_width_hankaku_loose="${S#SCALE_WIDTH_HANKAKU_LOOSE=}"; fi
S=$(grep -m 1 "^SCALE_HEIGHT_HANKAKU_LOOSE=" "${settings_txt}") # Loose 版の半角文字 高さ拡大率
if [ -n "${S}" ]; then scale_height_hankaku_loose="${S#SCALE_HEIGHT_HANKAKU_LOOSE=}"; fi
S=$(grep -m 1 "^MOVE_X_KERN_LATIN=" "${settings_txt}") # 通常版のラテン文字 カーニング横移動量
if [ -n "${S}" ]; then move_x_calt_latin="${S#MOVE_X_KERN_LATIN=}"; fi
S=$(grep -m 1 "^MOVE_X_KERN_SYMBOL=" "${settings_txt}") # 通常版の記号 カーニング横移動量
if [ -n "${S}" ]; then move_x_calt_symbol="${S#MOVE_X_KERN_SYMBOL=}"; fi
S=$(grep -m 1 "^MOVE_X_KERN_LATIN_LOOSE=" "${settings_txt}") # Loose 版のラテン文字 カーニング横移動量
if [ -n "${S}" ]; then move_x_calt_latin_loose="${S#MOVE_X_KERN_LATIN_LOOSE=}"; fi
S=$(grep -m 1 "^MOVE_X_KERN_SYMBOL_LOOSE=" "${settings_txt}") # Loose 版の記号 カーニング横移動量
if [ -n "${S}" ]; then move_x_calt_symbol_loose="${S#MOVE_X_KERN_SYMBOL_LOOSE=}"; fi
S=$(grep -m 1 "^TAN_OBLIQUE=" "${settings_txt}") # オブリーク体の傾き
if [ -n "${S}" ]; then tan_oblique="${S#TAN_OBLIQUE=}"; fi
S=$(grep -m 1 "^MOVE_X_OBLIQUE=" "${settings_txt}") # オブリーク体横移動量
if [ -n "${S}" ]; then move_x_oblique="${S#MOVE_X_OBLIQUE=}"; fi
S=$(grep -m 1 "^SCALE_HEIGHT_POWERLINE=" "${settings_txt}") # Powerline 高さ拡大率
if [ -n "${S}" ]; then scale_height_pl_revise="${S#SCALE_HEIGHT_POWERLINE=}"; fi
S=$(grep -m 1 "^MOVE_Y_POWERLINE=" "${settings_txt}") # Powerline 縦移動量
if [ -n "${S}" ]; then move_y_pl_revise="${S#MOVE_Y_POWERLINE=}"; fi
S=$(grep -m 1 "^SCALE_DECIMAL=" "${settings_txt}") # 小数拡大率
if [ -n "${S}" ]; then scale_calt_decimal="${S#SCALE_DECIMAL=}"; fi
S=$(grep -m 1 "^MOVE_Y_MATH=" "${settings_txt}") # 通常の演算子縦移動量
if [ -n "${S}" ]; then move_y_math="${S#MOVE_Y_MATH=}"; fi
S=$(grep -m 1 "^MOVE_Y_S_MATH=" "${settings_txt}") # 上付き、下付きの演算子縦移動量
if [ -n "${S}" ]; then move_y_s_math="${S#MOVE_Y_S_MATH=}"; fi
S=$(grep -m 1 "^MOVE_Y_BRACKET=" "${settings_txt}") # 括弧の縦移動量
if [ -n "${S}" ]; then move_y_bracket="${S#MOVE_Y_BRACKET=}"; fi
fi
# Powerline の Y座標移動量
move_y_pl=$((move_y_pl + move_y_pl_revise)) # 実際の移動量
move_y_pl2=$((move_y_pl + 3)) # 実際の移動量 2
# Powerline、ボックス要素の Y座標拡大率
scale_height_pl=$(bc <<< "scale=1; ${scale_height_pl} * ${scale_height_pl_revise} / 100") # PowerlineY座標拡大率
scale_height_pl2=$(bc <<< "scale=1; ${scale_height_pl2} * ${scale_height_pl_revise} / 100") # PowerlineY座標拡大率 2
scale_height_block=$(bc <<< "scale=1; ${scale_height_block} * ${scale_height_pl_revise} / 100") # ボックス要素Y座標拡大率
# オブリーク体用
move_x_oblique=$((move_x_oblique * 100)) # Transform()用 (移動量 * 100)
# Print information message
cat << _EOT_
----------------------------
Custom font generator
Font version: ${font_version}
----------------------------
_EOT_
option_check() {
if [ -n "${mode}" ]; then # -Pp のうち2個以上含まれていたら終了
echo "Illegal option"
exit 1
fi
}
# Define displaying help function
font_generator_help()
{
echo "Usage: font_generator.sh [options] auto"
echo " font_generator.sh [options] [font1]-{Regular,Bold}.ttf [font2]-{regular,bold}.ttf ..."
echo ""
echo "Options:"
echo " -h Display this information"
echo " -V Display version number"
echo " -x Cleaning temporary files" # 一時作成ファイルの消去のみ
echo " -f /path/to/fontforge Set path to fontforge command"
echo " -v Enable verbose mode (display fontforge's warning)"
echo " -l Leave (do NOT remove) temporary files"
echo " -N string Set fontfamily (\"string\")"
echo " -n string Set fontfamily suffix (\"string\")"
echo " -w Set the ratio of hankaku to zenkaku characters to 9:16"
echo " -Z Disable visible zenkaku space"
echo " -z Disable visible hankaku space"
echo " -u Disable zenkaku hankaku underline"
echo " -b Disable glyphs with improved visibility"
echo " -t Disable modified D,Q,V and Z"
echo " -O Disable slashed zero"
echo " -s Disable thousands separator"
echo " -c Disable calt feature"
echo " -e Disable add Nerd fonts"
echo " -o Disable generate oblique style fonts"
echo " -j Reduce the number of emoji glyphs"
echo " -S Enable ss feature"
echo " -d Enable draft mode (skip time-consuming processes)"
echo " -P End just before patching"
echo " -p Run font patch only"
}
# Get options
while getopts hVxf:vlN:n:wZzubtOsceojSdPp OPT
do
case "${OPT}" in
"h" )
font_generator_help
exit 0
;;
"V" )
exit 0
;;
"x" )
echo "Option: Cleaning temporary files"
echo "Remove temporary files"
rm -rf ${tmpdir_name}.*
exit 0
;;
"f" )
echo "Option: Set path to fontforge command: ${OPTARG}"
fontforge_command="${OPTARG}"
;;
"v" )
echo "Option: Enable verbose mode"
redirection_stderr="/dev/stderr"
;;
"l" )
echo "Option: Leave (do NOT remove) temporary files"
leaving_tmp_flag="true"
;;
"N" )
echo "Option: Set fontfamily: ${OPTARG}"
font_familyname=${OPTARG// /}
;;
"n" )
echo "Option: Set fontfamily suffix: ${OPTARG}"
font_familyname_suffix=${OPTARG// /}
;;
"w" )
echo "Option: Set the ratio of hankaku to zenkaku characters to 9:16"
loose_flag="true"
origin_base_regular="${origin_base_regular_loose}"
origin_base_bold="${origin_base_bold_loose}"
scale_width_latin=${scale_width_latin_loose} # Latin フォントの半角英数文字の横拡大率
scale_height_latin=${scale_height_latin_loose} # Latin フォントの半角英数文字の縦拡大率
move_x_hankaku_latin=${move_x_hankaku_latin_loose} # Latin フォント全体のX座標移動量
scale_width_hankaku=${scale_width_hankaku_loose} # 半角英数文字の横拡大率
scale_height_hankaku=${scale_height_hankaku_loose} # 半角英数文字の縦拡大率
scale_width_block=${scale_width_block_loose} # 半角罫線素片・ブロック要素の横拡大率
width_hankaku=${width_hankaku_loose} # 半角文字幅
move_x_hankaku=${move_x_hankaku_loose} # 半角文字移動量
move_x_calt_latin=${move_x_calt_latin_loose} # ラテン文字のX座標移動量
move_x_calt_symbol=${move_x_calt_symbol_loose} # 記号のX座標移動量
;;
"Z" )
echo "Option: Disable visible zenkaku space"
visible_zenkaku_space_flag="false"
;;
"z" )
echo "Option: Disable visible hankaku space"
visible_hankaku_space_flag="false"
;;
"u" )
echo "Option: Disable zenkaku hankaku underline"
if [ "${ss_flag}" = "true" ]; then
echo "Can't be disabled"
else
underline_flag="false"
fi
;;
"b" )
echo "Option: Disable glyphs with improved visibility"
if [ "${ss_flag}" = "true" ]; then
echo "Can't be disabled"
else
improve_visibility_flag="false"
fi
;;
"t" )
echo "Option: Disable modified D,Q,V and Z"
mod_flag="false"
;;
"O" )
echo "Option: Disable slashed zero"
slashed_zero_flag="false"
;;
"s" )
echo "Option: Disable thousands separator"
separator_flag="false"
;;
"c" )
echo "Option: Disable calt feature"
if [ "${ss_flag}" = "true" ]; then
echo "Can't be disabled"
else
calt_flag="false"
fi
;;
"e" )
echo "Option: Disable add Nerd fonts"
nerd_flag="false"
;;
"o" )
echo "Option: Disable generate oblique style fonts"
oblique_flag="false"
;;
"j" )
echo "Option: Reduce the number of emoji glyphs"
emoji_flag="false"
;;
"S" )
echo "Option: Enable ss feature"
visible_zenkaku_space_flag="false"
visible_hankaku_space_flag="false"
underline_flag="true"
improve_visibility_flag="true"
# underline_flag="false" # デフォルトで下線無しにする場合
mod_flag="false"
slashed_zero_flag="true"
calt_flag="true"
separator_flag="false"
ss_flag="true"
;;
"d" )
echo "Option: Enable draft mode (skip time-consuming processes)"
draft_flag="true"
oblique_flag="false"
;;
"P" )
echo "Option: End just before patching"
option_check
mode="-P"
patch_flag="false"
patch_only_flag="false"
;;
"p" )
echo "Option: Run font patch only"
option_check
mode="-p"
patch_flag="true"
patch_only_flag="true"
;;
* )
font_generator_help
exit 1
;;
esac
done
echo
shift $(($OPTIND - 1))
# Get input fonts
if [ "${patch_only_flag}" = "false" ]; then
if [ $# -eq 1 -a "$1" = "auto" ]; then
# Check existance of directories
tmp=""
for i in $fonts_directories
do
[ -d "${i}" ] && tmp="${tmp} ${i}"
done
fonts_directories=$tmp
# Search latin fonts
input_latin_regular=$(find $fonts_directories -follow -name "${origin_latin_regular}" | head -n 1)
input_latin_bold=$(find $fonts_directories -follow -name "${origin_latin_bold}" | head -n 1)
if [ -z "${input_latin_regular}" -o -z "${input_latin_bold}" ]; then
echo "Error: ${origin_latin_regular} and/or ${origin_latin_bold} not found" >&2
exit 1
fi
# Search base fonts
input_base_regular=$(find $fonts_directories -follow -iname "${origin_base_regular}" | head -n 1)
input_base_bold=$(find $fonts_directories -follow -iname "${origin_base_bold}" | head -n 1)
if [ -z "${input_base_regular}" -o -z "${input_base_bold}" ]; then
echo "Error: ${origin_base_regular} and/or ${origin_base_bold} not found" >&2
exit 1
fi
if [ ${nerd_flag} = "true" ]; then
# Search nerd fonts
input_nerd=$(find $fonts_directories -follow -iname "${origin_nerd}" | head -n 1)
if [ -z "${input_nerd}" ]; then
echo "Error: ${origin_nerd} not found" >&2
exit 1
fi
fi
elif ( [ ${nerd_flag} = "false" ] && [ $# -eq 4 ] ) || ( [ ${nerd_flag} = "true" ] && [ $# -eq 5 ] ); then
# Get arguments
input_latin_regular=$1
input_latin_bold=$2
input_base_regular=$3
input_base_bold=$4
if [ ${nerd_flag} = "true" ]; then
input_nerd=$5
fi
# Check existance of files
if [ ! -r "${input_latin_regular}" ]; then
echo "Error: ${input_latin_regular} not found" >&2
exit 1
elif [ ! -r "${input_latin_bold}" ]; then
echo "Error: ${input_latin_bold} not found" >&2
exit 1
elif [ ! -r "${input_base_regular}" ]; then
echo "Error: ${input_base_regular} not found" >&2
exit 1
elif [ ! -r "${input_base_bold}" ]; then
echo "Error: ${input_base_bold} not found" >&2
exit 1
elif [ ${nerd_flag} = "true" ] && [ ! -r "${input_nerd}" ]; then
echo "Error: ${input_nerd} not found" >&2
exit 1
fi
# Check filename
[ "$(basename $input_latin_regular)" != "${origin_latin_regular}" ] &&
echo "Warning: ${input_latin_regular} does not seem to be ${origin_latin_regular}" >&2
[ "$(basename $input_latin_bold)" != "${origin_latin_bold}" ] &&
echo "Warning: ${input_latin_bold} does not seem to be ${origin_latin_bold}" >&2
[ "$(basename $input_base_regular)" != "${origin_base_regular}" ] &&
echo "Warning: ${input_base_regular} does not seem to be ${origin_base_regular}" >&2
[ "$(basename $input_base_bold)" != "${origin_base_bold}" ] &&
echo "Warning: ${input_base_bold} does not seem to be ${origin_base_bold}" >&2
[ ${nerd_flag} = "true" ] && [ "$(basename $input_nerd)" != "${origin_nerd}" ] &&
echo "Warning: ${input_nerd} does not seem to be ${origin_nerd}" >&2
else
echo "Error: missing arguments"
echo
font_generator_help
fi
fi
# Check fontforge existance
if ! which $fontforge_command > /dev/null 2>&1
then
echo "Error: ${fontforge_command} command not found" >&2
exit 1
fi
fontforge_v=$(${fontforge_command} -version)
fontforge_version=$(echo ${fontforge_v} | cut -d ' ' -f2)
# Check ttx existance
if ! which $ttx_command > /dev/null 2>&1
then
echo "Error: ${ttx_command} command not found" >&2
exit 1
fi
ttx_version=$(${ttx_command} --version)
# Make temporary directory
if [ -w "/tmp" -a "${leaving_tmp_flag}" = "false" ]; then
tmpdir=$(mktemp -d /tmp/"${tmpdir_name}".XXXXXX) || exit 2
else
tmpdir=$(mktemp -d ./"${tmpdir_name}".XXXXXX) || exit 2
fi
# Remove temporary directory by trapping
if [ "${leaving_tmp_flag}" = "false" ]; then
trap "if [ -d \"$tmpdir\" ]; then echo 'Remove temporary files'; rm -rf $tmpdir; echo 'Abnormally terminated'; fi; exit 3" HUP INT QUIT
trap "if [ -d \"$tmpdir\" ]; then echo 'Remove temporary files'; rm -rf $tmpdir; echo 'Abnormally terminated'; fi" EXIT
else
trap "echo 'Abnormally terminated'; exit 3" HUP INT QUIT
fi
echo
# calt用
move_y_calt_colon=$((move_y_math + 30)) # : のY座標移動量
move_y_calt_colon=$(bc <<< "scale=0; ${move_y_calt_colon} * ${scale_height_latin} / 100") # : のY座標移動量
move_y_calt_colon=$(bc <<< "scale=0; ${move_y_calt_colon} * ${scale_height_hankaku} / 100") # : のY座標移動量
move_y_calt_bar=$((move_y_math - 13)) # | のY座標移動量
move_y_calt_bar=$(bc <<< "scale=0; ${move_y_calt_bar} * ${scale_height_latin} / 100") # | のY座標移動量
move_y_calt_bar=$(bc <<< "scale=0; ${move_y_calt_bar} * ${scale_height_hankaku} / 100") # | のY座標移動量
move_y_calt_tilde=$((move_y_math - 8)) # ~ のY座標移動量
move_y_calt_tilde=$(bc <<< "scale=0; ${move_y_calt_tilde} * ${scale_height_latin} / 100") # ~ のY座標移動量
move_y_calt_tilde=$(bc <<< "scale=0; ${move_y_calt_tilde} * ${scale_height_hankaku} / 100") # ~ のY座標移動量
move_y_calt_math=$((- move_y_math + move_y_bracket + 13)) # +-= のY座標移動量
move_y_calt_math=$(bc <<< "scale=0; ${move_y_calt_math} * ${scale_height_latin} / 100") # *+-= のY座標移動量
move_y_calt_math=$(bc <<< "scale=0; ${move_y_calt_math} * ${scale_height_hankaku} / 100") # *+-= のY座標移動量
# フォントバージョンにビルドNo追加
buildNo=$(date "+%s")
buildNo=$((buildNo % 315360000 / 60))
buildNo=$(bc <<< "obase=16; ibase=10; ${buildNo}")
font_version="${font_version} (${buildNo})"
################################################################################
# Generate script for modified latin fonts
################################################################################
cat > ${tmpdir}/${modified_latin_generator} << _EOT_
#!$fontforge_command -script
Print("- Generate modified latin fonts -")
# Set parameters
input_list = ["${input_latin_regular}", "${input_latin_bold}"]
output_list = ["${modified_latin_regular}", "${modified_latin_bold}"]
# Begin loop of regular and bold
i = 0
while (i < SizeOf(input_list))
# Open latin font
Print("Open " + input_list[i])
Open(input_list[i])
SelectWorthOutputting()
UnlinkReference()
ScaleToEm(${em_ascent1024}, ${em_descent1024})
SetOS2Value("WinAscent", ${win_ascent1024}) # WindowsGDI用(この範囲外は描画されない)
SetOS2Value("WinDescent", ${win_descent1024})
SetOS2Value("TypoAscent", ${typo_ascent1024}) # 組版・DirectWrite用(em値と合わせる)
SetOS2Value("TypoDescent", -${typo_descent1024})
SetOS2Value("TypoLineGap", ${typo_linegap1024})
SetOS2Value("HHeadAscent", ${hhea_ascent1024}) # Mac用
SetOS2Value("HHeadDescent", -${hhea_descent1024})
SetOS2Value("HHeadLineGap", ${hhea_linegap1024})
# --------------------------------------------------
# 使用しないグリフクリア
Print("Remove not used glyphs")
Select(0, 31); Clear(); DetachAndRemoveGlyphs()
Select(65536, 65610); Clear(); DetachAndRemoveGlyphs()
# Clear kerns, position, substitutions
Print("Clear kerns, position, substitutions")
RemoveAllKerns()
lookups = GetLookups("GSUB"); numlookups = SizeOf(lookups); j = 0
while (j < numlookups)
Print("Remove GSUB_" + lookups[j])
RemoveLookup(lookups[j])
j += 1
endloop
lookups = GetLookups("GPOS"); numlookups = SizeOf(lookups); j = 0
while (j < numlookups)
Print("Remove GPOS_" + lookups[j])
RemoveLookup(lookups[j]); j++
endloop
# Clear instructions, hints
Print("Clear instructions, hints")
SelectWorthOutputting()
ClearInstrs()
ClearHints()
# Proccess before editing
if ("${draft_flag}" == "false")
Print("Process before editing")
SelectWorthOutputting()
RemoveOverlap()
CorrectDirection()
endif
# --------------------------------------------------
# 罫線、ブロックを少し移動
# Print("Move box drawing and block")
# Select(0u2500, 0u259f)
# Move(0, ${move_y_em_revise})
# スペースの width 変更
Print("Modified space width")
Select(0u2000); SetWidth(${width_hankaku}) # en quad
Select(0u2001); SetWidth(${width_zenkaku}) # em quad
Select(0u2002); SetWidth(${width_hankaku}) # en space
Select(0u2003); SetWidth(${width_zenkaku}) # em space
Select(0u2004, 0u200a); SetWidth(${width_hankaku}) # three-per-em space..hair space
Select(0u200b); SetWidth(0) # zero width space
Select(0u202f); SetWidth(${width_hankaku}) # narrow no-break space
Select(0u205f); SetWidth(${width_hankaku}) # medium mathematical space
Select(0u2060); SetWidth(0) # word joiner
Select(0ufeff); SetWidth(0) # zero width no-break space
Print("Edit alphabets")
# B (右に移動)
# ラテン文字
Select(0u0042) # B
SelectMore(0u0182) # Ƃ
SelectMore(0u0243) # Ƀ
# SelectMore(0u0181) # Ɓ
# SelectMore(0u1e02) # Ḃ
# SelectMore(0u1e04) # Ḅ
# SelectMore(0u1e06) # Ḇ
# SelectMore(0ua796) # Ꞗ
# ギリシア文字
SelectMore(0u0392) # Β
# キリル文字
SelectMore(0u0411) # Б
SelectMore(0u0412) # В
Move(10, 0)
SetWidth(${width_hankaku})
# D (右に移動)
# ラテン文字
Select(0u0044) # D
SelectMore(0u010e) # Ď
SelectMore(0u0110) # Đ
# SelectMore(0u018a) # Ɗ
# SelectMore(0u018b) # Ƌ
# SelectMore(0u01c5) # Dž
# SelectMore(0u01f2) # Dz
# SelectMore(0u1e0a) # Ḋ
# SelectMore(0u1e0c) # Ḍ
# SelectMore(0u1e0e) # Ḏ
# SelectMore(0u1e10) # Ḑ
# SelectMore(0u1e12) # Ḓ
Move(10, 0)
SetWidth(${width_hankaku})
# D (ss 用、クロスバーを付加することで少しくどい感じに)
Select(0u0044); Copy() # D
Select(${address_store_mod}); Paste() # 保管所
Select(${address_store_mod} + ${num_mod_glyphs}); Paste()
Select(${address_store_mod} + ${num_mod_glyphs} * 2); Paste()
Select(${address_store_mod} + ${num_mod_glyphs} * 3); Paste()
Select(${address_store_mod} + ${num_mod_glyphs} * 4); Paste()
Select(${address_store_mod} + ${num_mod_glyphs} * 5); Paste()
Select(0u00af); Copy() # macron
Select(65552); Paste() # Temporary glyph
Scale(75, 105); Copy()
Select(0u0044) # D
if (input_list[i] == "${input_latin_regular}")
PasteWithOffset(-159 + 10, -288)
else
PasteWithOffset(-140 + 10, -294)
endif
SetWidth(${width_hankaku})
RemoveOverlap()
Select(65552); Clear() # Temporary glyph
# G (右下端を折り曲げる)
Select(0u00af); Copy() # macron
Select(65552); Paste() # Temporary glyph
Scale(50, 110); Copy()
Select(0u0047) # G
SelectMore(0u011c) # Ĝ
SelectMore(0u011e) # Ğ
SelectMore(0u0120) # Ġ
SelectMore(0u0122) # Ģ
SelectMore(0u0193) # Ɠ
# SelectMore(0u01e4) # Ǥ
SelectMore(0u01e6) # Ǧ
SelectMore(0u01f4) # Ǵ
# SelectMore(0u1e20) # Ḡ
# SelectMore(0ua7a0) # Ꞡ
if (input_list[i] == "${input_latin_regular}")
PasteWithOffset(145, -341 + 18)
PasteWithOffset(115, -341 + 18)
else
PasteWithOffset(140, -336)
PasteWithOffset(85, -336)
endif
SetWidth(${width_hankaku})
RemoveOverlap()
Select(65552); Clear() # Temporary glyph
# P (右に移動)
# ラテン文字
Select(0u0050) # P
# SelectMore(0u01a4) # Ƥ
# SelectMore(0u1e54) # Ṕ
# SelectMore(0u1e56) # Ṗ
# SelectMore(0u2c63) # Ᵽ
# SelectMore(0ua750) # Ꝑ
# SelectMore(0ua752) # Ꝓ
# SelectMore(0ua754) # Ꝕ
# ギリシア文字
SelectMore(0u03a1) # Ρ
SelectMore(0u1fec) # Ῥ
# キリル文字
SelectMore(0u0420) # Р
SelectMore(0u048e) # Ҏ
Move(10, 0)
SetWidth(${width_hankaku})
# Q (ss用、突き抜けた尻尾でOと区別しやすく)
Select(0u0051); Copy() # Q
Select(${address_store_mod} + 1); Paste() # 保管所
Select(${address_store_mod} + ${num_mod_glyphs} + 1); Paste()
Select(${address_store_mod} + ${num_mod_glyphs} * 2 + 1); Paste()
Select(${address_store_mod} + ${num_mod_glyphs} * 3 + 1); Paste()
Select(${address_store_mod} + ${num_mod_glyphs} * 4 + 1); Paste()
Select(${address_store_mod} + ${num_mod_glyphs} * 5 + 1); Paste()
Select(0u002d); Copy() # Hyphen-minus
Select(65552); Paste() # Temporary glyph
if (input_list[i] == "${input_latin_regular}")
Scale(35, 250)
Copy()
Select(0u0051); PasteWithOffset(0, -170) # Q
else
Scale(35, 180)
Copy()
Select(0u0051); PasteWithOffset(0, -150) # Q
endif
SetWidth(${width_hankaku})
RemoveOverlap()
Select(65552); Clear() # Temporary glyph
# R (右に移動)
Select(0u0052) # R
SelectMore(0u0154) # Ŕ
SelectMore(0u0156) # Ŗ
SelectMore(0u0158) # Ř
SelectMore(0u0210) # Ȑ
SelectMore(0u0212) # Ȓ
SelectMore(0u024c) # Ɍ
# SelectMore(0u1e58) # Ṙ
# SelectMore(0u1e5a) # Ṛ
# SelectMore(0u1e5c) # Ṝ
# SelectMore(0u1e5e) # Ṟ
# SelectMore(0u2c64) # Ɽ
# SelectMore(0ua75a) # Ꝛ
# SelectMore(0ua7a6) # Ꞧ
Move(10, 0)
SetWidth(${width_hankaku})
# V (ss用、左上にセリフを追加してYやレと区別しやすく)
Select(0u0056); Copy() # V
Select(${address_store_mod} + 2); Paste() # 保管所
Select(${address_store_mod} + ${num_mod_glyphs} + 2); Paste()
Select(${address_store_mod} + ${num_mod_glyphs} * 2 + 2); Paste()
Select(${address_store_mod} + ${num_mod_glyphs} * 3 + 2); Paste()
Select(${address_store_mod} + ${num_mod_glyphs} * 4 + 2); Paste()
Select(${address_store_mod} + ${num_mod_glyphs} * 5 + 2); Paste()
# セリフ追加
Select(0u00af); Copy() # macron
Select(65552); Paste() # Temporary glyph
if (input_list[i] == "${input_latin_regular}")
Scale(75, 105); Copy()
Select(0u0056); # V
PasteWithOffset(-187, -18) # V
else
Scale(80, 105); Copy()
Select(0u0056); # V
PasteWithOffset(-167, -31) # V
endif
SetWidth(${width_hankaku})
RemoveOverlap()
Select(65552); Clear() # Temporary glyph
# Z (ss用、クロスバーを付加してゼェーットな感じに)
Select(0u005a); Copy() # Z
Select(${address_store_mod} + 3); Paste() # 保管所
Select(${address_store_mod} + ${num_mod_glyphs} + 3); Paste()
Select(${address_store_mod} + ${num_mod_glyphs} * 2 + 3); Paste()
Select(${address_store_mod} + ${num_mod_glyphs} * 3 + 3); Paste()
Select(${address_store_mod} + ${num_mod_glyphs} * 4 + 3); Paste()
Select(${address_store_mod} + ${num_mod_glyphs} * 5 + 3); Paste()
Select(0u00af); Copy() # macron
Select(65552); Paste() # Temporary glyph
Scale(100, 105); Rotate(-2)
Copy()
Select(0u005a) # Z
if (input_list[i] == "${input_latin_regular}")
PasteWithOffset(-8, -300)
else
PasteWithOffset(-12, -301)
endif
SetWidth(${width_hankaku})
RemoveOverlap()
Select(65552); Clear() # Temporary glyph
# i (右に移動)
# ラテン文字
Select(0u0069) # i
SelectMore(0u00ec) # ì
SelectMore(0u00ed) # í
SelectMore(0u00ee) # î
SelectMore(0u00ef) # ï
SelectMore(0u0129) # ĩ
SelectMore(0u012b) # ī
SelectMore(0u012d) # ĭ
SelectMore(0u012f) # į
SelectMore(0u0131) # ı
SelectMore(0u01d0) # ǐ
SelectMore(0u0209) # ȉ
SelectMore(0u020b) # ȋ
# SelectMore(0u0268) # ɨ
# SelectMore(0u1e2d) # ḭ
# SelectMore(0u1ecb) # ị
# SelectMore(0u1d96) # ᶖ
# SelectMore(0u1e2f) # ḯ
# SelectMore(0u1ec9) # ỉ
# ギリシア文字 (iota)
SelectMore(0u03b9) # ι
SelectMore(0u03ca) # ϊ
SelectMore(0u1f30, 0u1f37) # ἰ-ἷ
SelectMore(0u1f76, 0u1f77) # ὶί
SelectMore(0u1fd0, 0u1fd3) # ῐ-ΐ
SelectMore(0u1fd6, 0u1fd7) # ῖ-ῗ
# キリル文字
SelectMore(0u0456) # і
SelectMore(0u0457) # ї
Move(10, 0)
SetWidth(${width_hankaku})
# j (左に移動)
# ラテン文字
Select(0u006a) # j
SelectMore(0u0135) # ĵ
SelectMore(0u01f0) # ǰ
SelectMore(0u0249) # ɉ
# SelectMore(0u029d) # ʝ