2012年3月11日日曜日

IPAフォントが、何か変。 ( その3 )

やっぱり何か変。

仕様書通りの解釈だと、glyphIdArrayへのオフセットは、ghostscriptのソースにあるように、

READ_SFNTS(pfont, pcmap->idDelta + segment2, 2, ttdata);
delta = U16(ttdata);
READ_SFNTS(pfont, pcmap->idRangeOffset + segment2, 2, ttdata);
roff = U16(ttdata);
if (roff) {
ulong gidoff = pcmap->idRangeOffset + segment2 + roff +
(chr - start) * 2;

となるのだけれど、chr=#x57a8の場合は、これは、直前のidRangeOffsetを指していて、

READ_SFNTS(pfont, gidoff, 2, ttdata);
value = U16(ttdata);
で得られる値は、#x0723 になるはず。

実際には、この値にさらに、idDeltaの値が加わるわけだけれど、こんなに tricky なコーディングをするはずがない。

[追記:2012-03-13]
少し、判った。正しく表示できるソフトウェアは、たぶん、cmap を見るのに、(platformID 3) (encodingID 1) (format 4)の方ではなくて、(platformID 3) (encodingID 10) (format 12) の方を参照しているのだろう。
(format 4)の方は、「過去との互換性」のために残されているだけで、こちらを参照してしまうと、グリフが見つからない結果になる。
(format 12)の方は
(Group (#x754) (startChar #x57A8) (endChar #x57A8) (startGlyphID #x28A8)
といったデータが書きこまれていて、たぶんこれが本当のグリフの場所。

ということは、エンコーディングを UTF16(UCS2)でなく、UCS4を指定すればいいのかな?

あるいは、format 12 の方を優先して検索するべきところを、format 4を優先している(?)という ghostscriptのバグの可能性もあるなぁ。

2012年3月8日木曜日

IPAフォントが、何か変。 ( その2 )

フォントファイルを dump してみると、問題の文字のあたりは、


(Segment (921)
(startCount #x57A2) (endCount #x57A4)
(idDelta 0) (idRangeOffset #x0723))
(Segment (922)
(startCount #x57A8) (endCount #x57A8)
(idDelta -12032) (idRangeOffset #xFFFF))
(Segment (923)

のようになっていて、idDeltaが負、idRangeOffset が #xFFFF になっている。
たぶん、これを見て、「グリフがない」と判断しているのだろう。
57A8は表示できないが、57A4 は表示できていることあたりとも辻褄があう。

で、そうであるにも拘わらず、この文字が表示できるソフトウェアはどこを見ているのだろう? ソフトウェアのバグでないとしたら、データ形式の冗長性(過去との互換性のためのデータとか)を利用して目指すグリフにたどりついているのだろうとは思うが...

[追記:2012-03-08] idRangeOffsetの#xFFFFはこれで正しいのかも。
まあ、どのみち、仕様書を読まないとだめだね。

2012年3月7日水曜日

IPAフォントが、何か変。

LibreOffice で、IPAフォントを指定して、「垨」の字は、表示できるし、これを PDFに文字埋め込みでイクスポートしてもちゃんと埋め込まれるのに、同じ事を ps2pdf で PDFに埋め込もうとすると、グリフがない、といってうまくいかない。( もちろん、他の普通の漢字では問題ない )

たぶん、ps2pdf ( というか、ghostscript ) のバグなんだろうけれど、フォントファイルの map 関連のデータが壊れている可能性も、捨てきれない。

フォントファイルのダンプが取れれば、うまくいかない理由もわかりそうなものだが、あまりいいツールが見つからない。検索してみると、fontforgeを使ってみるのがよいようなことが書いてあるのだけれど、ちょっと大げさだな。 Windows用の fontforge ってあるのだっけ?

2012年2月29日水曜日

灯油が高い

発電所の事故で石油の需要が増えているせいかと思っていたけれど、どうも、アメリカの戦略に乗って、イラン原油の輸入を15~20%も削減しているせいもあるみたいね。
クリントンは大喜び。馬鹿政府は、それが国益だとでも思っているんだろうな。

2012年2月26日日曜日

日本語ドメインとSEO

ローマ字.jp に比べると、日本語.jp は、値段も安くて、それはすなわち人気の無さの現われなのだけれども、SEO的にはどうなんだろう。
というのは、普通同じ単語に対応するドメインだと、ローマ字.jp の方は先に使われてしまっていて、日本語.jp の方は、「仕方なく」取得するということが多いのだけれど、最近、逆のパターンに出くわしたのだ。
『検索でヒットしたい文字をそのままドメイン名に使う』というのは、単純かつ効果的な方法なので、検索したい文字が漢字で入力されることが普通なら、ドメイン名も漢字の方がいいのだろうか? 最近のgoogleは漢字で検索しても、対応するローマ字も一緒に検索しているようなのであまり変らないように思っていたのだけれど。

2012年1月14日土曜日

絆-バンドル-束-ファッショ

一致団結して..というのは、時にファシズムと相通じるものがあるなぁ。
一番の特徴は、それ以外の価値観を認めなくなることなんだけれど、
復興のためには増税が必須なんて、その最たる特徴だな。

2012年1月12日木曜日

だから GMOは...

外国のレジストラだと、期限切れのドメイン名を、勝手に広告サイトに転送してしまうということもよく聞くけれど、日本の某大手業者が同じことをやっているなんてなぁ...

恥ずかしくないのかな。

[追記:2012-02-28]
DNS情報を勝手に変えた上に、「XXXは○月○日に廃止されます」のスパムを大量に送りつけておいて、いざ期限がきたら、『廃止されたドメインのWHOIS情報』で元のオーナーの個人情報を晒すなんて、最低のレジストラだね。
最初にこのブログを書いたときは、「だから XXXは...」という伏字のタイトルだったけれど、実名に直すことにした。

普通、期限が過ぎて、なおかつ廃止期限も過ぎたドメインのWHOIS情報なんて、「NOT FOUND」で返すべきものだろ? 「廃止する」とあれだけさんざんスパムを送りつけてきたんだから、きっちり廃止しろよ。
ま、GMOが嫌われている理由がわかった気がする。