MiguフォントのJIS2004対応

小文字エルを縦棒と区別したい。
2012-10-30バージョンのMigu 1Cは、MigMix 1Mの小文字エルの下半分を持ってきていた。
しかしこれはどうも目立ちすぎ。

私がよいなーと思ったのは、AdobeのSource Sansというフォントだ。それの小文字エルはいい。
そこで、SoucceSansを観察してみると、小文字エル下部の曲がり方は、小文字Jの曲がりを途中で止めたように処理してある。
f:id:itouhiro:20130422125546p:plain

なるほどと思い、小文字Jを元に、小文字エルを作るようにした。
f:id:itouhiro:20130422130234p:plain





MiguフォントをJIS2004対応させたい。

現在のM+フォントは、JIS2004字体を用意はしてあるが、デフォルトではJIS90字体が表示されるようになっている。


どうすれば、JIS2004字体をデフォルトにできるのか……
単純に、字体のsvgファイルをスクリプト動作中に置き換えてしまえばいいんだが、それだと問題があって、現在のM+に実装されているTrueTypeのGSUBテーブルのjp04タグがまともに動作しなくなってしまう。
jp04タグ
http://mplus-fonts.sourceforge.jp/cgi-bin/blosxom.cgi/mplus_fonts/mplus_fonts-120412-2.html


解決法だが、「字体のsvgファイルをスクリプト動作中に置き換える→'jp04'タグの代わりに'jp90'タグを使う」でよいようだ。

GSUBテーブル :jp04 featureタグの削除、jp90 featureタグの追加
JIS 0213:2004準拠なので、jp04 featureタグを削除し、jp90 featureタグの追加により90JIS字形置換機能を追加しました。


引用元: http://ossipedia.ipa.go.jp/ipafont/old/old/releasenote.html

単なる置き換えだと、以下で指摘される問題?

Adobe-Japan1フォントにおける'jp90'タグと'jp04'タグの非対称性
引用元: http://d.hatena.ne.jp/NAOI/20080219/1203409203


置き換えるときは、以下を注意しなければ。

筆押さえ系漢字(上図赤表示)の codemap ファイル内設定を「0x****uf」に変更しました。

引用元: http://mplus-fonts.sourceforge.jp/cgi-bin/blosxom.cgi/2012/11/index.html

jp04タグの出てくるのは

~% tar c --exclude-vcs --exclude='*ai' -f - mplus_outline_fonts | (cd tmp; tar xvf -)
~% mv tmp/mplus_outline_fonts m130418

~% find m130418/scripts -type f | xargs grep jp04
m130418/scripts/Codemap.pm:                 push @mapped, sprintf('jp04_uni%04X', hex($1));
m130418/scripts/build-ttf.py:        'jp04': 'jp04table',
m130418/scripts/build-ttf.py:        ("jp04", (("latn", ("dflt",)), ("grek", ("dflt",)),
m130418/scripts/build-ttf.py:    f.addLookupSubtable('jis2004', 'jp04table')
~%

~% find m130418/scripts -type f | xargs grep 2004
m130418/scripts/Codemap.pm:# Last Change: 25-May-2004.
m130418/scripts/UCSTable.pm:# Last Change: 20-Apr-2004.
m130418/scripts/build-ttf.py:    f.addLookup('jis2004', 'gsub_single', (), (
m130418/scripts/build-ttf.py:    f.addLookupSubtable('jis2004', 'jp04table')
~%

Codemap.pmとbuild-ttf.pyだ。
しかし、Codemap.pmは編集したくない。Perlの難しい書き方のやつだから。

build-ttf.pyの
kangxi_ucsってなんだろう。
kangxi=康煕。 康煕字典体?

JIS X 0213:2004は、JIS X 0213:2000の例示字形を変更している。変更があったのは右表の通りである。
全部で168字あり、おおむね、拡張新字体から、いわゆる康熙字典体型へ変更されている。

引用元: http://ja.wikipedia.org/wiki/JIS_X_0213

cjk_radicalsってなんだろう。

CJK部首補助, CJK Radicals Supplement, 2E80~2EFF, 辞書の索引などで使う部首です。CJK補助部首には部首の派生形や簡体字用の部首が、康煕部首には部首用の文字が含まれています。これらの文字の多くは、

これはJIS2004とは関係ないな。

svgを個々のglyphにsplitした直後に、jp04glyph→default、defalut→jp90glyphに置換することにした。

% diff -u ~/m121030/Makefile Makefile
--- /home/foo/m121030/Makefile  2012-01-19 22:17:06.000000000 +0900
+++ Makefile    2013-04-19 21:49:09.000000000 +0900
@@ -129,6 +129,8 @@

 split-svgs: dirs
        perl -I $(SCRIPTS) $(SCRIPTS)/split-svg.pl $(SPLIT_CONCURRENCY) ${SVGFILES}
+       python $(SCRIPTS)/jp04tojp90.py work.d/splitted/regular/kanji
+       python $(SCRIPTS)/jp04tojp90.py work.d/splitted/bold/kanji

 clean:
        @rm -rf work.d/ release/mplus-* *~


build-ttf.pyのjp04→jp90に書き換え。

% diff -u ~/m121030/mig.d/scripts/build-ttf.py mig.d/scripts/build-ttf.py
--- /home/foo/m121030/mig.d/scripts/build-ttf.py        2012-10-27 10:26:56.000000000 +0900
+++ mig.d/scripts/build-ttf.py  2013-04-19 20:22:48.000000000 +0900
@@ -336,10 +336,12 @@

 def set_alt_tables():
     tag_table = {
-        'jp04': 'jp04table',
+        'jp90': 'jp90table',
         'vert': 'j-vert'
     }
-    for tag in alt_glyphs:
+    for tag in tag_table:
+        if not tag in alt_glyphs:
+            continue
         for names in alt_glyphs[tag]:
             name, tagged_name = names
             c = get_glyph_by_name(name)
@@ -663,11 +665,11 @@

 # add lookups
 if kanji_flag:
-    f.addLookup('jis2004', 'gsub_single', (), (
-        ("jp04", (("latn", ("dflt",)), ("grek", ("dflt",)),
+    f.addLookup('jis1990', 'gsub_single', (), (
+        ("jp90", (("latn", ("dflt",)), ("grek", ("dflt",)),
                   ("cyrl", ("dflt",)), ("kana", ("dflt", "JAN ")),
                   ("hani", ("dflt",))),),))
-    f.addLookupSubtable('jis2004', 'jp04table')
+    f.addLookupSubtable('jis1990', 'jp90table')
     set_kanji_aliases()
     set_kanji_altuni()
 else:

この 'jis2004'はどこで使われてるのだろうか。

FontForgeでM+ TESTFLIGHT 055を見てみた。
グリフのプロパティには出てこない。
f:id:itouhiro:20130419232429p:plain

フォント情報のGSUBテーブル→Lookupに現れた。
f:id:itouhiro:20130419232439p:plain

OpenTypeレイアウトへの道(5)・・・GSUBテーブル
http://vanillasky-room.cocolog-nifty.com/blog/2008/08/opentype5gsub-2.html
で紹介されているT2FAnalyzer1.4.2を使ってみた。
f:id:itouhiro:20130419233007p:plain
featureTag 'jp04'のあとにカッコつきで。

'jis1990'でいいのかわからないが、動作した。
f:id:itouhiro:20130419232339p:plain

IPAexゴシック Ver.002.01を確認すると 'jp90'になっている。
f:id:itouhiro:20130419235040p:plain

IVS(異体字識別)はMiguでうまく動作してない。しかしIVSは使えるアプリケーションも限られ、専門的なので未対応でもかまわない気がする。
f:id:itouhiro:20130419232350p:plain


フォントのしくみ
http://www.iwatafont.co.jp/news/img/about_font.pdf
によるとIVSはcmap format14見ればよいらしい。

JIS2004とは?


JIS2004というのは2004年に制定された、日本の文字コード規格。



google:「捗る」のつくりは「歩」じゃないことが判明

※10 以下、VIPにかわりましてBIPがお送りします 2012年12月01日 20:31
ためになるスレどころか、日本語の漢字デザインの不統一な現状を露呈するだけのスレだろ


こんなもんに関心するなよ
むしろ、漢字制限政策の失敗に気付いた時点でちゃんと常用漢字と表外漢字と字形を統一しなかった無能な文科省の役人どもに憤りを覚えるべきだ


折角統一を試みた一部の出版社・新聞社や文字のコーディング表(スレ中で言及されてるXPもこれ)に対して難癖をつけてまで、不統一に戻させたのが文科省


ついこの前常用漢字表を更新したときなんて絶好のチャンスだったのに、文科省は古いデザインの部首を含む文字を新しいデザインの部首を含む文字がある常用漢字表にそのままぶち込むことを決定した
おかげでますますごちゃごちゃだよ




※9 以下、VIPにかわりましてBIPがお送りします 2012年12月01日 20:30
もともとはどっちも同じだからな。
漢字の奥深さと言うよりは、戦後の文字政策の失敗といったほうが正しい。


戦後、当用漢字表(今の常用漢字表の前身)に入った漢字だけ当世風の字体に変わり、それ以外は古い字体のまま放置した。このときの差が今もあちこちに残ってるってだけの話。


表を制定した当時は、「漢字なんて難しいもん使ってるから民衆の知力が伸び悩み、一部のエリートが知を独占して軍部の暴走を許した」的なことが本気でまかり通った時代だったから、徐々に使う漢字を減らして、最終的には日本語を100%かな表記ないしローマ字表記まで持ってく作戦だった。いきなり100%かなとかにしたら混乱するから、当分の間使用してもいい漢字のリストってことで制定されたのが「当用漢字表」。


実際には漢字制限は失敗して、同じ部首なのに字体が違ってしまった漢字のペアが無数に残るだけの結果に終わったけどな。捗や薇みたいな微妙なやつだけじゃなく、実はかなり沢山ある。権と灌とか、概と漑とか、経径と頸痙とか、変恋と攣欒とか、益と溢とか、増と噌とか、礼と祠祓とか、抜と跋祓とか、篭と寵とか… 2分の間に思いつくだけでもこれくらい。


引用元: http://bipblog.com/archives/4286555.html

125. 名無しカオス 2012年11月25日 14:04
手ヘンに歩くと覚えちゃダメってわけね
漢字って小学校で習う簡単な漢字を覚えて、
あとは合成で覚える感じだったけど、それじゃダメなのか
いちいち覚えないといけないって、ぜんぜん捗らねーじゃねーかw


128. 名無しカオス 2012年11月25日 14:11
>>125
だから中国のように全部簡体字にするか、
台湾のように略字を使わない繁体字にするかのほうが
よっぽど合理的なんだよ。
ほんとは戦後、漢字は撤廃する予定だったんだ。
一度に撤廃できないから、当用(当面使う、という意味)漢字を
作った。
でも、漢字を撤廃することはできなかったわけで。
むしろ漢字を使用する機会は増えてる。
漢検ブームなんてあったろ?


246. 名無しカオス 2012年11月27日 01:20
当用漢字は「これ以外の漢字は廃止(使用停止)にしよう」っていう思想で制定されたものだから、字体や部首の整合性とか完全無視したものになっているんだよ。




126. 名無しカオス 2012年11月25日 14:07
噌も辻も手書きで書く時はXPで表示されるように書くんだけど
間違いってこと?


131. 名無しカオス 2012年11月25日 14:18
>>126
手で書くときはしんにょうの点は1つで良い。
ここでの「正しさ」は活字字形としての正しさだ。
パソコンのフォントは活字の一種なんだから。
なお、手で書くときに活字のように書くことは、間違いとは言えない。
伝統的な書道教育が失われているので、仕方ないといえば仕方ない。
欧米でも、筆記体で文字を書く人は戦後、大きく減っているらしいから、これは世界的な潮流なんだろう。


引用元: http://chaos2ch.com/archives/3624107.html

(新)常用漢字に「捗」を加える際に、「渉」の影響を考えるのは当然のことだ。というか、「渉」と「捗」はかなり似ている字なので、あえて異なる部分字体を採用する理由がない。それに、常用漢字に「頻」を追加しておきながら、いまさら「捗」の部分字体を「步」にするなんて、あまりに非論理的だ。そのあたり、漢字小委員会は、どういうロジックを準備しているのだろう?

引用元: http://slashdot.jp/journal/459345/%E3%80%8C%E6%B8%89%E3%80%8D%E3%80%8C%E9%A0%BB%E3%80%8D%E3%80%8C%E6%AD%A9%E3%80%8D%E3%81%9D%E3%81%97%E3%81%A6%E3%80%8C%E6%8D%97%E3%80%8D


M+フォントの作者さんはJIS

これら字形の変更には不満があるのです。あくまでも私的で M+ FONTS のデザイン的な観点から見ると、せっかく現代的に整理された字形を(あえていえば)古い字形に戻すことに強い抵抗があるからです。今後、よほどの不都合が無い限り、制作済み漢字の JIS2004 字形変更よりも他の漢字の拡充を優先したいですし、それらの追加漢字も最初に旧規格の字形で制作するつもりです。

引用元: http://mplus-fonts.sourceforge.jp/cgi-bin/blosxom.cgi/mplus_fonts/mplus_fonts-091019.html

JIS X 0213:2004 字形(以下、新字形)の件ですが、基本的に M+ の設計思想(大袈裟ですね)スタイルに合わないと感じる変更が多いため、初期設定としては旧来の字形を採用することにしたいと思っています。ただし、JIS X 0208:1990 字形(以下、旧字形)だから採用するという事では無く、あくまでも「例示字形」としてとらえ、新字形の方が M+ のスタイルに合致すると判断した漢字についてはそちらを選択します。

引用元: http://mplus-fonts.sourceforge.jp/cgi-bin/blosxom.cgi/mplus_fonts/mplus_fonts-120412-2.html

JIS2004で変更された文字一覧を作った。

U+9022 逢
U+82A6 芦
U+98F4 飴
U+6EA2 溢
U+8328 茨
U+9C2F 鰯
U+6DEB 淫
U+8FC2 迂
U+53A9 厩
U+5642 噂
U+990C 餌
U+8956 襖
U+8FE6 迦
U+7259 牙
U+5EFB 廻
U+6062 恢
U+6666 晦
U+87F9 蟹
U+845B 葛
U+9784 鞄
U+91DC 釜
U+7FF0 翰
U+7FEB 翫
U+5FBD 徽
U+7947 祇
U+6C72 汲
U+7078 灸
U+7B08 笈
U+537F 卿
U+9957 饗
U+50C5 僅
U+55B0 喰
U+6ADB 櫛
U+5C51 屑
U+7C82 粂
U+7941 祁
U+9699 隙
U+5026 倦
U+6372 捲
U+727D 牽
U+9375 鍵
U+8AFA 諺
U+5DF7 巷
U+6897 梗
U+818F 膏
U+9D60 鵠
U+7511 甑
U+53C9 叉
U+698A 榊
U+85A9 薩
U+9BD6 鯖
U+9306 錆
U+9BAB 鮫
U+9910 餐
U+6753 杓
U+707C 灼
U+914B 酋
U+696F 楯
U+85AF 薯
U+85F7 藷
U+54E8 哨
U+9798 鞘
U+6756 杖
U+8755 蝕
U+8A0A 訊
U+9017 逗
U+647A 摺
U+64B0 撰
U+714E 煎
U+717D 煽
U+7A7F 穿
U+7BAD 箭
U+8A6E 詮
U+564C 噌
U+9061 遡
U+63C3 揃
U+905C 遜
U+817F 腿
U+86F8 蛸
U+8FBF 辿
U+6A3D 樽
U+6B4E 歎
U+8A3B 註
U+7026 瀦
U+6357 捗
U+69CC 槌
U+939A 鎚
U+8FBB 辻
U+633A 挺
U+912D 鄭
U+64E2 擢
U+6EBA 溺
U+514E 兎
U+5835 堵
U+5C60 屠
U+8CED 賭
U+701E 瀞
U+9041 遁
U+8B0E 謎
U+7058 灘
U+6962 楢
U+79B0 禰
U+724C 牌
U+9019 這
U+79E4 秤
U+99C1 駁
U+7BB8 箸
U+53DB 叛
U+633D 挽
U+8AB9 誹
U+6A0B 樋
U+7A17 稗
U+903C 逼
U+8B2C 謬
U+8C79 豹
U+5EDF 廟
U+7015 瀕
U+65A7 斧
U+853D 蔽
U+77A5 瞥
U+8511 蔑
U+7BC7 篇
U+5A29 娩
U+97AD 鞭
U+5E96 庖
U+84EC 蓬
U+9C52 鱒
U+8FC4 迄
U+5132 儲
U+9905 餅
U+7C7E 籾
U+723A 爺
U+9453 鑓
U+6108 愈
U+7337 猷
U+6F23 漣
U+7149 煉
U+7C3E 簾
U+6994 榔
U+5C62 屢
U+51A4 冤
U+53DF 叟
U+54AC 咬
U+5632 嘲
U+56C0 囀
U+5F98 徘
U+6241 扁
U+68D8 棘
U+6A59 橙
U+72E1 狡
U+7515 甕
U+7526 甦
U+75BC 疼
U+795F 祟
U+7AC8 竈
U+7B75 筵
U+7BDD 篝
U+8171 腱
U+8258 艘
U+8292 芒
U+8654 虔
U+8703 蜃
U+8805 蠅
U+8A1D 訝
U+9744 靄
U+9771 靱
U+9A19 騙
U+9D09 鴉
U+646F 摯
U+FA40 懲
U+FA20 蘒
U+8B7F 譿
U+609E 悞
U+7152 煒
U+9A4A 驊
U+5906 夆
U+66B5 暵
U+4FF1 俱
U+525D 剝
U+20B9F 𠮟
U+541E 吞
U+5653 噓
U+59F8 姸
U+5C5B 屛
U+5E77 幷
U+7626 瘦
U+7E6B 繫

作り方は、
JIS2004とJIS90との文字の形の対照表
http://www.adobe.com/jp/support/winvista/pdfs/JIS2004_Comparison.pdf
をtext editorにコピペして、以下。

# encoding:utf-8
# usage: ruby jis2004mod.rb jis2004src.txt > jis2004.txt
arr = []
while gets
  line = $_.force_encoding('utf-8')
  if line.match(/^\d/)
    w = line.split(' ')
    arr.push(w[2])
  elsif line.match(/^\s*$/) or line.match(/^#/)
    ; #do nothing
  else
    w = line.split('')
    for i in 0..(arr.size-1)
      if w[i] # avoid "undefined method `+' for nil:NilClass"
        print arr[i]+' '+w[i]+"\n"
      end
    end
    #print "#\n"
    arr = []
  end
end

しかし必要なかった。

% ls work.d/splitted/regular/kanji/l201/
./
../
.svg
fude_uni54AC.svg
jp04_uni53DF.svg
jp04_uni5632.svg
u51D6.svg
u52F9.svg
u5306.svg
u5308.svg
...

ファイル名見ればよかったじゃん。