らんだむな記憶

blogというものを体験してみようか!的なー

源ノ角ゴシックいぢり

どーでもいーちゃどーでもいいけど、源ノ角ゴシックとかビルドしてみよっ - らんだむな記憶で源ノ角ゴシックをそのままビルドすると、Adobe-Identity-0で独自な並びなので、ちょっくらAdobe-Japan1-3に並び替えてみたい気分になった(激謎)
ということで、以下のような超絶出来の悪いマップファイル生成スクリプトを作ってみる。ちゃんとpython3でも動く!

[mk_map.py]

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import sys, os
from fontTools.ttLib import TTFont
from cmap_reader import readCMap

font = TTFont(sys.argv[1])
aj1_cmap = readCMap(sys.argv[2])
cmap = font["cmap"].getcmap(platformID=0, platEncID=3).cmap
geta_uni = 0x3013
geta_ai0_cid = int(cmap[geta_uni].replace("cid", ""))
std_last_cid = 9353

# 不足を考慮してゲタ埋めしておく。
aj1_cid2ai0_cid = {}
for cid in range(1, std_last_cid+1):
    aj1_cid2ai0_cid[cid] = geta_ai0_cid

# CMapを見ながら対応付け
for uni, name in cmap.items():
    if name == ".notdef":
        continue
    if not uni in aj1_cmap.keys():
        continue
    aj1_cid = aj1_cmap[uni]
    if aj1_cid > std_last_cid: # not Std
        continue

    ai0_cid = int(name.replace("cid", ""))
    aj1_cid2ai0_cid[aj1_cid] = ai0_cid

print("mergeFonts")
print("00000 00000")
for aj1_cid, ai0_cid in sorted(aj1_cid2ai0_cid.items(), key=lambda x:x[0]):
    print("%05d %05d" % (aj1_cid, ai0_cid))


んで、Makefileを作って、makeでドンッ。

SRC_FONT = SourceHanSansJP-Regular.otf

TARGET   = SourceHanSansJP-Regular_AJ1.otf
CID_FONT = SourceHanSansJP.cid
MAP_FILE = map.txt

##########################################################

.PHONY: all
all: $(TARGET)

$(TARGET): $(CID_FONT)
    makeotf -f $< -o $@ -ff features.JP -ch UniJIS-UTF32-H

$(CID_FONT): $(MAP_FILE)
    mergeFonts -cid cidfontinfo $@ $< $(SRC_FONT)

$(MAP_FILE): $(SRC_FONT)
    python -B mk_map.py $< UniJIS-UTF32-H > $@

.PHONY: clean
clean:
    rm -rf $(TARGET) $(CID_FONT) $(MAP_FILE) current.fpr

雑だけど一応並び替えはできた。