browsersを整理していたら、fribidiを使用した面白そうな文献を見つけましたので、試してみました。
iso-logicalのヘブライ語で書かれたhtml文書を、fribidiを使用したmlterm上で双方向アルゴリズムに従ったレンダリングするw3m-m17nの紹介です。
表示例
図はutf8ですが、iso-8859-8-iでも表示できます。二行にわたる場合のテストは、まだしていませんが、気になるところです。
図の韓国語が表示できていないのは、僕の設定のせいだと思います。
Reading specs from /usr/lib/gcc-lib/i586-pc-linux/2.95.3/specs gcc version 2.95.3 20010315 (release)
fribidi-0.10.1.tar.bz2
特に問題なし。
mlterm-2.4.0.tar.gzが既に出ているので、そっちを使用すれば、書き換えず無くって良いでしょう。
mlterm-2.3.1.tar.gz
./configureを実行すると、--enable-imlibと--enable-anti-aliasの後のmakeでerrorがでました。
./configure --enable-imlib --enable-anti-alias --enable-fribidiでmakeすると、fribidiが有効にならないみたい。
そのときは、fribidiを呼び出しているml_bidi.cに適当にcommentを入れるなど、影響のない編集をして(単にsaveするだけでもいいかも)、再compileすると、いい感じ。
ただ、このままだと、ヘブライ語・英語混在の文章が、意図どおりに表示されないので、以下のように手を加えます。とはいえ、少なくとも3/21にCVS リポジトリから取得した、mltermの最新ソースでは、FRIBIDI_TYPE_ONになっているので、意図どおりに表示されるはずです。
diff src/ml_bidi.c src_mod/ml_bidi.c 101c101 < fri_type = FRIBIDI_TYPE_LTR ; --- > fri_type = FRIBIDI_TYPE_ON ;
w3m-0.3-m17n-20020311.tar.gz
configure時にutf8を選んで、makeしました。
上にも書きましたが、少なくとも2002/03/21にCVS リポジトリから取得した、mltermのソースでは、FRIBIDI_TYPE_ONになっているので、意図どおりに表示されるはずですので、以下の文章の範囲には注意が必要です。
まず、utf-8で書かれたヘブライ語・英語混在のhtml文書の表示例を示します。右上から時計回りにMozilla5、Konqueror、w3m-m17n(FRIBIDI_TYPE_ON)、w3m-m17n(FRIBIDI_TYPE_LTR)です。
mlterm -E utf8のように、utf8を有効にしてます。
FRIBIDI_TYPE_ONでは、意図どおりに表示されています。このときは、defaultでbidiは有効になります。
次に、上記からタグを除いたテキストの表示例を示します。右がbidiを無効にしたmlterm、左下がFRIBIDI_TYPE_ON、左上がFRIBIDI_TYPE_LTRです。右はfribidiを通していて、それ以外はcatで表示しています。画面にa.txtとありあますが、biditext.txtと一緒です。
単純にfribidiを通した場合とfribidiでrtlに埋め込んだ場合は、左下(FRIBIDI_TYPE_ON)と同一になります。fribidiでltrに埋め込んだ場合は左上(FRIBIDI_TYPE_ON)と同一になります。
上記utf-8で書かれたヘブライ語・英語混在のhtml文書には、元となったiso-8859-8-i (iso-logical)で書かれた文書があります。それをiso-8859-8 (iso-visual)になおした文書についてです。
表示例をご覧下さい。一番左がmlterm -E utf8 -D falseで立ち上げた場合、真ん中がmlterm -E utf8で立ち上げた場合、一番左がmozillaで立ち上げた場合です。
真ん中だけ、意図どおりになっていません。既にvisualになっている文書なので、二重にbidiがかかっています。
とりあえず、w3m-m17nの外部ブラウザとして、mlterm -E uft8 -D false -e w3m-m17nを定義し、それを立ち上げることで対処しています。
mltermはbidiをfalseにして立ち上げた上、w3m-m17nでmeta要素とdir属性を解釈して、RTLかLTRかを判断してfribidiを通して頂くのが良いとは思うのですが、需要が少なさそう・・・ 自分でpatch作って貢献できたらいいんですが、実力が無くって申し訳ありません。