ぼんやりとCMapを比較しようと思って以下のコードを書いた:
※簡単のため、CMapはcmap-tool.pl -e
で展開済みとしている。
#! /usr/bin/env python # -*- coding: utf-8 -*- import os, sys, re def parse_cmap(cmap_f): code2cid = {} with open(cmap_f) as f: for line in f.readlines(): line = line.rstrip() m = re.search(r"^\s*<([0-9a-f]+)>\s+(\d+)\s*$", line) if m: code = int(m.group(1), 16) cid = int(m.group(2)) code2cid[code] = cid return code2cid def main(): cmap1_f = sys.argv[1] cmap2_f = sys.argv[2] cmap1_basename, _ = os.path.splitext(os.path.basename(cmap1_f)) cmap2_basename, _ = os.path.splitext(os.path.basename(cmap2_f)) cmap1 = parse_cmap(cmap1_f) cmap2 = parse_cmap(cmap2_f) cmap1_cid_set = set(cmap1.values()) cmap2_cid_set = set(cmap2.values()) print "cmap1:{}, cmap2:{}".format(cmap1_basename, cmap2_basename) print "-"*50 print "* cmap1 - cmap2:", sorted(cmap1_cid_set - cmap2_cid_set) print "-"*30 print "* cmap2 - cmap1:", sorted(cmap2_cid_set - cmap1_cid_set) if __name__ == "__main__": main()
折角なので83pv-RKSJ-H
とUniJIS2004-UTF32-H
を比較してみる。
結果は結構な差が出ますね〜といったところだ。
Adobe-Japan1-6
でのCID124, AJ16-J15
でいうところの「ellipsis」にはMacJapaneseのコード0x00ff
しか与えられておらず、unicode値が見当たらない。似たようなグリフである三点リーダ
、つまりU+2026にはCID668が割り当てられている。
リーダー (記号) - Wikipediaによると、
本来、英語における類似の記号は、省略を意味する場合には ellipsis と呼び、leader は目次の項目とページ数を結ぶ際に用いられるような視線を誘導する記号を指す。
ということで、三点リーダはellipsis
とは少し異なるようだ。実際には三点リーダは心情的なellipsisとして用いられていることが多いように感じるが…。
逆に合字「fi」はCID112であるが、これにはunicode値U+FB01のみが与えられておりMacJapaneseのコードは割り当てられていない。
そういったわけで、片方のCMapが他方のCMapのサポートしているグリフを完全に包含しているわけではない。