先日に、JIS第三水準以上の漢字をAndroidで表示する方法を提案した。その続きとなる。
先日の方法は、GoogleとAdobeの制作したNotoフォントの一部を抜き出し、Webフォントとして実用できる小さなファイルサイズにするものだった。ところでNotoフォントにはや行のえ「𛀁」とア行の工「𛀀」が無い。これを解決する必要があった。橫假名には「𛀁」があるからだ。
cf. Unicode舊字をAndroidで表示する為に、Notoフォントの部分フォントを作りWebフォントにする http://c4se.hatenablog.com/entry/2015/05/03/051133
や行のえ「𛀁」とア行の工「𛀀」
や行のえ「𛀁」とア行の工「𛀀」とはなんだらうか?
日本語の音韻は五十音図にまとめられてゐる。縱に「あいうえお」、横に「あかさたなはまやらわ」、と竝べ、最後に「ん」を附け足す。但しや行の「い」と「え」、わ行の「い」「う」「え」は缺けてゐる。そこで「やいゆえよ」「わいうえを」と書く。知られてゐるやうに昭和初期までわ行は「わゐうゑを」と書かれてゐた。また「を」は現代では助詞の「を」としてしか用ゐられてゐず、発音もあ行の「お」と同じ故に、実質としてはわ行は「お」も缺けて「わいうえお」に近づいてゐる。この「ゐ」と「ゑ」と同じやうに、や行にも「え」が有ったらしい。「江」をもとにした「𛀁」「エ」といふ假名で書かれてゐたらしい。
わ行の「う」、や行の「い」は、嘗て存在した痕跡がないらしい。「お」と「を」は中世はじめ、「い」と「ゐ」や「え」と「ゐ」は中世なかごろには混同され、多くの地域では音韻として区別されなくなった。「え」と「𛀁」は、中世のはじめごろだが、もっと早い時期に区別されなくなったやうだ。いろは唄には「ゐゑを」はあるが、「𛀁」はない。もっと古いあめつちの詞には
あめ つち ほし そら やま かは みね たに くも きり むろ こけ ひと いぬ うへ すゑ ゆわ さる おふせよ えの𛀁を なれゐて
「えの𛀁を」と、「𛀁」が区別されてある。
さて、ひらがなとカタカタの假名文字にはながく標準のかたちはなかった。漢字には隷書を基點とする正書法があり、この漢字の正書法を基準として、ひらがなやカタカナの書法は決められてゐた。日本語は中国の政治性からちょうどよい地理的な位置にあって、漢字を充分に學びながら、漢字に對抗する必要もなかったから、文字を學ぶ者は漢字の正書法さえ習得すれば、假名文字の書法はそこから自然に決められた。ひらがなに就いての書法のばらつきは現在では變體假名として教えられてゐる。明治になって西欧に對抗する必要から、假名文字の正書法は決められたといってよい。「國家」をつくる必要があったからだ。カタカナにもばらつきがあった。別の漢字をもとにしてゐることも、同じ漢字でも略し方や崩し方が違った。「レ」は「礼」から來てゐて、下からするどくはねる形をしてゐるが、はねずに「礼」の右側をそのまま書いた例もあったらしい。明治に假名の正書法を決める際に、このばらつきを無くす必要があった。ひらがなの多くはいろは唄に良く使はれた書法が採られたらしい。あ行のえには「え」、や行のえには「𛀁」が採られた。これは間違ってゐない。「え」は「衣」から來、「𛀁」は「江」から來る。(但しいろは唄の「けふこえて」は「今日越えて」であって「越ゆ」であるために本來は「けふこ𛀁て」である。「𛀁」が無くなってから作られた唄だから、「越𛀁て」とは書かれなかったのであらう。)しかしカタカナにはいろは唄のやうなよい基準がなかったからかもしれない。「エ」はヤ行のエであった。そしてこの間違ひはなかなか気附かれなかった。おそらくア行とヤ行は混同されて、「エ」がア行としても用ゐられることもたびたびあったのかもしれない。ア行のエには「𛀀」といふカタカナがあった。「𛀀」は「衣」から來、「エ」は「江」から來る。そこでヤ行のエからはカタカナが失はれ、ア行のエには「𛀀」「エ」の二つのカタカナができてしまった。
ちなみに多くのIMEで「ゐ」はwyi、「ゑ」はwyeと打つと入力できる。
「𛀁」「𛀀」をMigu 1Mフォントから取り込む
Notoフォントには「𛀁」「𛀀」が無い。しかしRictyフォントにはある。これはRictyフォントが素にしてゐるMigu 1Mフォントに「𛀁」「𛀀」があるからだ。そこでこのニ文字はMigu 1Mフォントから持ってくることにする。因みにWindowsとMacOS Xに含まれた游フォントにも「𛀁」「𛀀」は在る。
はじめMigu 1Mフォントを開き、「𛀁」「𛀀」をCopy()し、NotoフォントにPaste()しやうとする。これはできない。Copy()やPaste()はSelect()したグリフしか對象にできない。Migu 1Mフォントには「𛀁」「𛀀」のグリフがあるからこれらをSelect()してCopy()はできる。しかしNotoフォントには「𛀁」「𛀀」のグリフが無い。「空のグリフ」が在るのではなく、グリフが無い。Select()できない。エラーで落ちる。ではグリフを作らうとする。そんな函數は無い。自動でできない。手動でしかできない。なんだこれは。
一番簡単な方法としてフォントを合成することにした。MergeFonts()を使ふ。これはできる。MergeFonts()は存在するグリフを上書きしない。Notoフォントに無くMigu 1Mフォントに在るグリフだけを取り込める。
これをやったFontForgeスクリプトが以下のものだ。
#!/usr/bin/env fontforge Open('../../src/fonts/NotoSansCJKjp-Regular.otf') # CIDChangeSubFont('NotoSansCJKjp-Regular-Ideographs') CIDFlatten() Reencode('unicode') MergeFonts('../../src/fonts/migu-1m-regular.ttf') chars = [0u1b001,0u1b000,0ufa67,0ufa1e,0u92b3,0ufa17,0u6085,0ufa62,0u95b1,0u2f8fc,0u7de3,0u2f995,0ufa45,0ufa3e,0u69ea,0ufa36,0u6e34,0ufa60,0u2f822,0u9592,0ufa47,0ufa4e,0u65e3,0u2f862,0ufa38,0u9115,0ufa69,0u8173,0u865b,0ufa34,0ufa63,0ufa52,0ufa3d,0u9ec3,0u5bec,0ufa2c,0u85b0,0uf909,0u63ed,0u654e,0u64ca,0u9830,0u784f,0u6236,0u5433,0u5a1b,0u543f,0u9ed1,0ufa54,0u6b72,0u5de2,0u7abb,0uf970,0u7522,0ufa4d,0ufa61,0ufa2b,0u2f83f,0ufa5c,0u20b9f,0ufa4c,0ufa5b,0ufa48,0u5c19,0ufa1a,0u72c0,0u2f852,0u2f828,0u2f921,0ufa51,0ufa43,0ufa5a,0u7dd6,0ufa22,0ufa19,0u2f8b2,0u9751,0u6df8,0ufa12,0ufa1d,0u7a05,0ufa56,0u8aaa,0u7d55,0u6d89,0ufa50,0ufa31,0ufa3b,0u7626,0u589e,0ufa3f,0ufa65,0u537d,0ufa03,0u812b,0u2f91a,0ufa37,0ufa5f,0u5fb5,0ufa40,0ufa10,0u2f89a,0u2f90f,0u5861,0ufa26,0u2f81a,0u9b2d,0u5fb7,0ufa55,0u5167,0ufa68,0uf95f,0ufa44,0u525d,0ufa2a,0ufa59,0u665a,0ufa35,0ufa4b,0ufa64,0ufa6a,0ufa41,0ufa30,0ufa1b,0u5002,0ufa39,0u7501,0u8c93,0ufa33,0u6b65,0ufa3a,0u6bcf,0ufa32,0u2f9d0,0u2f9df,0u8cf4,0u7028,0u90de,0uf929,0uf928,0uf91d,0uf9dc,0uf983,0uf936,0u7da0,0u6dda,0uf9d0,0u623e,0u66c6,0u6b77,0uf99a,0uf9a2,0ufa57,0u934a,0u9304,0u6a6b,0u6eab,0u2f80f,0u2f833,0u5f65,0u6451,0ufa46,0ufa6a,0ufa16,0ufa4a,0u79b1,0uf91f,0u91ac,0ufa1c,0u985a,0u9dd7] charsOrig = ["𛀁","𛀀","逸","羽","銳","益","悅","謁","閱","沿","緣","芽","海","慨","槪","喝","渴","褐","割","閒","漢","祈","旣","姬","器","鄕","響","腳","虛","勤","謹","禍","悔","黃","寬","館","薰","契","揭","敎","擊","頰","硏","戶","吳","娛","吿","黑","穀","歲","巢","窻","殺","產","祉","視","飼","周","臭","𠮟","社","者","煮","尙","祥","狀","城","勺","爵","祝","暑","署","緖","諸","神","成","靑","淸","晴","精","稅","節","說","絕","涉","祖","僧","層","瘦","增","憎","贈","卽","糖","脫","炭","嘆","著","徵","懲","塚","彫","潮","塡","都","冬","鬭","德","突","內","難","寧","梅","剝","飯","繁","晚","卑","碑","賓","頻","敏","侮","福","倂","塀","甁","貓","勉","步","墨","每","免","諭","輸","賴","瀨","郞","朗","廊","欄","隆","旅","虜","綠","淚","類","戾","曆","歷","連","廉","練","鍊","錄","橫","溫","兔","卿","彥","摑","渚","頻","猪","琢","禱","蘭","醬","靖","顚","鷗"] i = 0 iz = SizeOf(chars) while (i < iz) if (InFont(chars[i])) Print(charsOrig[i]) SelectMoreSingletons(chars[i]) else Print("No " + charsOrig[i]) endif ++i endloop SelectInvert() Clear() SetFondName('UniSeiJi') Generate('../../lib/assets/uniseiji.ttf') Close()
できる。