2007年12月20日

[openoffice:10821] Re: OOo2.3.1 on Linuxで江戸勘定流フォントが未認識

はとちゃん@小江戸らぐさん

おこんばんわ。おはようございます。

とりあえず、フォントファイル側の言語を表すコードについては、
以下のようなコマンドで、修正するような実験ができました。

perl -pe 'BEGIN{$/=undef;binmode(ARGV)} \

s/(\x00\x03)(\x00\x02)(\x04\x11)(\x00.)/$1\x00\x01$3$4/g; \
s/(\x00\x01)(\x00\x00)(\x04\x11)(\x00.)/\x00\x03\x00\x02$3$4/g' \
EDOKAN.TTC > jikken.ttc

以下の name テーブルの数値について、上記のコマンドで以下のように修正

0003 0002 0411 ... (Microsoft, SJIS, 日本語) という誤った数値を
0003 0001 0411 ... (Microsoft, ユニコード, 日本語) へ修正

0001 0000 0411 ... (Macintosh, Roman, そんな値ない) という誤った数値を
0003 0002 0411 ... (Microsoft, ShiftJIS, 日本語) へ修正

>> 'name' テーブル
>> http://www.microsoft.com/typography/otspec/name.htm
>>
>> 0000 0010 00c6
>> 0001 0000 0411 0000 003a 0000
>> 0001 0000 0411 0001 000a 003a
>> 0001 0000 0411 0002 0007 0044
>> 0001 0000 0411 0003 000a 004b
>> 0001 0000 0411 0004 000a 0055
>> 0001 0000 0411 0005 0004 005f
>> 0001 0000 0411 0006 000c 0063
>> 0001 0000 0411 0007 003c 006f
>> 0003 0002 0411 0000 0074 00ab
>> 0003 0002 0411 0001 000a 011f
>> 0003 0002 0411 0002 000e 0129
>> 0003 0002 0411 0003 000a 0137
>> 0003 0002 0411 0004 000a 0141
>> 0003 0002 0411 0005 0008 014b
>> 0003 0002 0411 0006 0018 0153
>> 0003 0002 0411 0007 0062 016b

上記の修正実験で生成された jikken.ttc は、OpenOffice.org の spadmin で
認識されるようになりました。

とっ、ところが、OpenOffice.org に spadmin でそのフォントを登録すると、
ツールバー上のフォント名のプルダウンメニューには「江戸勘亭流」が表示
されるようになりましたが、プルダウンメニューを押して表示されるプレビュー
表示の部分は文字が表示されません。

さらに、本文中で、「江戸勘亭流」を設定しても、英語の半角文字については
江戸勘亭流の様になった文字で表示されますが、日本語などの全角文字については、
文字が蒸発して消えてしまいます。

EDOKAN.TTC の 'cmap' Character To Glyph Index Mapping Table の部分を
調べてみると、文字コードが ShiftJIS になっています。
http://www.microsoft.com/typography/otspec/cmap.htm

OpenOffice.org 2.3 のソースコードを調べてみると、cmap の文字コードが
ユニコードの時は受け付けるけど、Shift JIS などのユニコード以外の時は
受け付けないようになっています。

もう少し詳しく言うと、ShiftJISや中国の文字コードなども認識し、内部で
文字コード変換するためのコードまでも書いてあります。が、そのコードが
実行される前に return 文がわざと入れてあります。開発作業途中なのか、
それとも、何かしらの不具合に遭遇してしまい、速攻対処のために、return
文つっこんで、ユニコード以外は動作しないようにしておいてあるのか、
というような雰囲気です。

このファイルです。
http://gsl.openoffice.org/source/browse/gsl/vcl/source/glyphs/gcach_ftyp.cxx

最近、いじっていますね。まさに、↓ここらへんです。
http://gsl.openoffice.org/source/browse/gsl/vcl/source/glyphs/gcach_ftyp.cxx?r1=1.146&r2=1.147

で、そこらへんをちょこっと編集して ShiftJIS も受け付けるようにしてみたところ、
「挿入」「記号と特殊文字」には、正しく、持っている文字(漢字)などが
表示されるようになりました。しかしながら、その文字のグリフは、代替されて
しまって Kochi Mincho が使われてしまわれました。

「江戸勘亭流」を持っていて、ずばりそのフォント名を指定しているのに、
内部では、そのフォント名もしくは、そのフォント名に対応するファイル内に
文字のグリフを発見できないのか、などの何かしらの理由によって、代替の
Kochi Mincho が使われてしまっています。

気になるのは、EDOKAN.TTC には 'cmap' テーブルが2つあって、1つは、
文字コードが英語の256文字用、そして、二つ目がShiftJISの256掛ける256文字用
となっているので、もしかしたら、OpenOffice.orgが英語の256文字用のほうを
先に見てしまって、結果的に、半角文字は「江戸勘亭流」で表示されるけど、
全角文字は、消失してしまう。ということになるのかもしれません。

そこらへんについては、時間ができたら、調べてみようと思います。

まあ、どこまで古いフォントファイルや誤った設定がなされているフォントファイルを
OpenOffice.org でサポートしてあげればいいのかなぁ。ってところです。
今時のフォントファイルは、'cmap' テーブルの文字コードはユニコードって
のが多いようです。

Windows 日本語版が、文字コード部分が誤っていても、無視し、たぶん ShiftJISか
ユニコードか、と内部で文字コードの自動判別などおせっかいなことを自動的に
やって、とにかく文字化けさせずに正しく表示させる。
というような振る舞い。一長一短がありますよね。

例えば Windows 98se の頃では使えていたフォントファイルが Windows なんたらでは、
厳格にチェックするようになったので、使えなくなりました。というような
ことにもしもなっていたとしたら、Windows なんたらへ移行しにくくなりますから。

まあ、それが裏目に出てしまって、ベンダーさんが修正を怠っている。っていう
ことにもなるわけでして。。。

Linux関連では、標準的な仕様がある場合は、その仕様に厳格に準拠するソフトが
多いような感じがします。それはそれで正しいことだと思います。
でも、その厳格さが裏目にでてしまって、Windows から Linux へ移行するときの
障壁の1つにも成りかねないとも言えるのかもしれません。

てなところで。。。

Tora


【MLコミュホームページ http://www.freeml.com/openoffice

--[PR]------------------------------------------------------------------
__________ 忘年会・クリスマスお酒のお供にのんどこ小町
\  二日酔い  / ………………………………………………………………
/ さようなら! \ ▼アルコール分解!のんどこ小町で二日酔い知らず!
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ▼お試し4回分1,050円初回の方送料無料!
http://ad.freeml.com/cgi-bin/sa.cgi?id=aTYRW
------------------------------------------------------------------[PR]--
■GMO INTERNET GROUP■ GMO INTERNET www.gmo.jp

投稿者 xml-rpc : 2007年12月20日 01:01
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/67797
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。