- zrotfdump.pl を入手
- zrotfdump.pl を使用して ipamjm.ttf からグリフ一覧を取得
$ perl zrotfdump.pl name ipamjm.ttf > ipamjm-name.txt
- この ipamjm.py を使って ZVP ファイルを作成
$ python3 ipamjm.py
- ZVP から VF/JFM を作成
$ jfmutil zvp2vf ipamjmm--h
$ jfmutil zvp2vf ipamjmm--v
$ perl zrotfdump.pl name ipamjm.ttf > ipamjm-name.txt
$ python3 ipamjm.py
$ jfmutil zvp2vf ipamjmm--h
$ jfmutil zvp2vf ipamjmm--v
#!/usr/bin/env python3 | |
import re | |
IPAmjMinchoVersion = '006.01' | |
mjn2gid = {} | |
with open('ipamjm-name.txt') as f: | |
for line in f: | |
m = re.match(r'^(\d+)\tmj(\d+)$', line) | |
if m: | |
gid = int(m.group(1)) | |
mjn = int(m.group(2)) | |
mjn2gid[mjn] = gid | |
for dir in ['h', 'v']: | |
with open(f'ipamjmm--{dir}.zvp', 'w') as f: | |
def outvp(s): | |
f.write(s) | |
f.write('\n') | |
charht = '0.88' | |
chardp = '0.12' | |
if dir == 'v': | |
charht = '0.5' | |
chardp = '0.5' | |
outvp( '(DIRECTION TATE)') | |
outvp(f'(VTITLE IPAmjMincho{IPAmjMinchoVersion})') | |
outvp( '(FAMILY IPAMJM KANJI)') | |
outvp( '(FACE F MRR)') | |
outvp( '(CODINGSCHEME TEX KANJI TEXT)') | |
outvp( '(DESIGNSIZE R 10.0)') | |
outvp( '(CHECKSUM O 0)') | |
outvp( '(FONTDIMEN') | |
outvp( ' (SLANT R 0.0)') | |
outvp( ' (SPACE R 0.0)') | |
outvp( ' (STRETCH R 0.1)') | |
outvp( ' (SHRINK R 0.0)') | |
outvp( ' (XHEIGHT R 1.0)') | |
outvp( ' (QUAD R 1.0)') | |
outvp( ' (EXTRASPACE R 0.25)') | |
outvp( ' (EXTRASTRETCH R 0.2)') | |
outvp( ' (EXTRASHRINK R 0.125)') | |
outvp( ' )') | |
outvp( '(MAPFONT D 0') | |
outvp(f' (FONTNAME ipamjm-mzm-{dir})') | |
outvp( ' (FONTCHECKSUM O 0)') | |
outvp( ' (FONTAT R 1.0)') | |
outvp( ' (FONTDSIZE R 10.0)') | |
outvp( ' )') | |
outvp( '(TYPE D 0') | |
outvp( ' (CHARWD R 1.0)') | |
outvp(f' (CHARHT R {charht})') | |
outvp(f' (CHARDP R {chardp})') | |
outvp( ' (MAP)') | |
outvp( ' )') | |
for mjn in sorted(mjn2gid.keys()): | |
gid = mjn2gid[mjn] | |
outvp(f'(CHARACTER H {mjn:X}') | |
outvp( ' (MAP') | |
outvp(f' (SETCHAR H {gid:X})') | |
outvp( ' )') | |
outvp( ' )') |