ソフト事情 - Linux / オープンソースとアラビア語


 * ホームに戻る.

firefox などを含む、オープンソースのソフトの話題を扱います.

bidi
Bidi という言葉をよく目にします. これは双方向 (= bidirectional) の略です. 文字を右から左に書く事に対応した、などの意味です.

なぜ R2L (= right to left, 右から左) で済まないかというと、日本語の文章でアラビア語の文章を引用して、その中に英単語がある時など、二つ方向が入れ子になる場合があるからです.

一般的なこと: ユニコード対応
アラビア文字対応とは、実際にはユニコード対応である事が多いです. ところが一口でユニコード対応と言っても、これは大変なことです.

デーヴァナーガリなどのインド系の文字と、アラビア文字、縦書きのモンゴル文字、これらに全て対応しなければいけません. é は、e と「ちょん」とを別にコードしても良い事になっています. ちょっとずつ違う漢字. 繰り返される改訂...

ですからユニコード対応は、数少ない、メジャーなライブラリによる実現がほとんどです. ここがネックで、昔のフリーソフトは振り落されたものがかなりあります. ソフト単独での対応はまれです.

なお、ユニコード自身に欠陥がありますから、完璧な対応が取れたライブラリ、ソフトはありません.

ライブラリ、描字エンジン
ユニコードを内部的にどう処理するのかは知りません. それ以外のライブラリについて述べます. 最近は、大体のものが、及第点と思います. ただし、クルアーン記号などは、かならずしも正しく表示できません.

FriBidi
FriBidi が何を司るのか良く知りませんが、右から左に書く文字を表示するために必要なようです. 開発者以外は忘れて結構です.

pango には FriBidi のミニチュア版が含まれていますので、pango を使うソフトはこれを必要としません. (Fribidi を現在維持している人は、Pango の管理人です. ) kdegraphics や abiword、mlterm などのエディタ、テキストビューワ、幾つかのウィンドウマネージャなども Fribidi を使います.

以下、推測に過ぎませんが、もう少し解説します. (どなたか、確認して、書き直して下さい. )

FriBidi は、グラフィックスとして文字を表示するソフトではありません. その為の補助をします. コンピュータにおける文字の取り扱いは、表示においては左から右が基本のようです. (あくまでも表示だけで、Unicode では記憶自体は、文字を書く順番で行われます. ) 右から左への文字の表示は、「ひっくり返す」ことで実現されますが、それをするのが FriBidi のようです. 変形とか、単独では幅をとらない母音記号とかの扱いもするのかも知れません. 不明.

ICU
ICU (International Components for Unicode) は、IBM がスポンサーでオープンソースな、ユニコードその他を扱うためのライブラリです.

ICU の機能は、上記のホームページによれば、ユニコードと他の文字セットの変換、正規表現、言語に依存したコレーション (辞書順序づけ、とでも言うのでしょうか)、等々多岐にわたります. 上記の Fribidi のような機能もあるみたいです.

OpenOffice や C++ ライブラリの boost 、次世代 perl のコア技術の一つ parrot は ICU を使います.

Gtk+ / Pango
Gtk+ はウィンドウやボタンなど、グラフィックス関係のライブラリで、きわめて多く使われています. これは単独では動かず、関連しながらも独立に開発されている pango や atk 、また最近は cairo も必要とします.

実際に描字をするのは、その中の Pango です. Pango は描字専門で、画像などは扱いません.

現在の Pango は、大体問題なくアラビア語をサポートすると思います.

Gecko
firefox や thunderbird など、mozilla プロジェクトのソフトは、描字や描画などにおいて、独自のエンジン Gecko を使います. これらは Gtk+ を使いますが、描字に Pango を使っている訳ではありません.

Gecko のアラビア語サポートは、とても悪いです. バグなどは沢山報告されているはずですが、対処できる開発者が現れないようです.

基本的なアラビア文字は、子音の文字だけなら Gecko でも正しく表示されます. しかし、母音記号の扱いには色々問題があります.

まず、多くのフリーのフォントでは、母音記号のところで文字を切ってしまいます. その問題が無いのは mry_KacstQurn と DejaVu くらいのものだと思います.

ラーム・アリフにファトハを振ると、ラームとアリフは別々になります. なお、母音記号は関係ありませんが、ラーム・アリフを含む切り貼り (ドラッグ & ドロップ) はおかしな結果になります. 短剣アリフも駄目.

アラビア文字の行末揃え (justification) もできないと聞きました.

Qt
よく知りません. かなり良いようです. KDE などは Qt を使います. Qt3 でも結構良いようですが、Qt4 からは、更にユニコードに対応した描字の能力を上げる為の手立てがとられているようです.

Uniscribe
Uniscribe はウィンドウズの、ユニコード描字エンジンです. 一応挙げておきました.

fontconfig
フォントのページ参照.

正常なドラッグ & ドロップ
X Window System で動くソフトのいくつかは、ドラッグ &amp; ドロップが正しく使える為には、ロカールで文字コードを utf-8 に設定する必要があります. 文字化けするならば、ロカールを変えて下さい. これは、左ボタンでドラッグして、中ボタンでコピー貼り付けするドラッグ &amp; ドロップ、及び Windows で使うような Edit -&gt; Cut/Copy/Paste もしくは Ctrl + x/c/v で行なう、クリップボードによるカット &amp; ペースト、両方に当てはまります. なお、X11 ではこれら 2 つの方法は別個です. 片方で得たテキストを他方で貼りつけることはできません.

なお、シェルの場合は話が別で、bash では、

set convert-meta off set output-meta on

tcsh では

set dspmbyte=utf8

が必要だそうです. (出典: mlterm-2.9.2 附属の FAQ) 各シェルの説明書もお読み下さい.

ブラウザ
ブラウザは色々ありますが、描字・描画エンジンは mozilla や Konqueror と同じものが少なくありません. ライブラリ、描字エンジン の節も見て下さい.

mozilla / firefox
Gecko の節もお読み下さい.

Firefox-1.5 以降では、文字書きの方向を設定できるようになりました. 特に、頻繁にアラビア語を入力する方には必須です. その為には、以下のようにします:


 * URL の入力欄(ロケーションバー)に  と入れます.
 * filter 欄が現れるので、そこに bidi と入れると、次のようなリストが出ます:

bidi.browser.ui       default  boolean  false bidi.characterset     default  integer  1 bidi.controlstextmode default  integer  1 .....


 * 一番上の  の行を右クリックして、Toggle を選択します.
 * Firefox を再起動します.

これにより、ページ全体では、View -&gt; Switch Page Direction で、また、個々の入力欄では、右クリックで、Switch Text Direction を選ぶことにより、文字の方向を変えられます.

これ以外の項目の変更については、null.michikusa.jp 内の about: config か、英語ならば、mozillazine.org 内の about:config entries を見て下さい. 意図しない変更をしても、Resetを選べば初期値に戻るので、安心していじってみて下さい.

(firefox しか試していませんが、他でも同じならば、以下をブラウザの節に格上げして下さい. ) ウェブページを表示する為の言語として、アラビア語を最優先に設定して、検索をすると、検索結果がアラビア語で表示されます. あくまでも表示だけで、もちろん日本語のページもヒットします. Google しか試していません. 逆に、日本語を最優先にしておけば、たとえば google.co.uk でも日本語で結果が表示されます. これは普段は便利なのですが、ヘルプを他の言語で見たい時は面倒です.

firefox は、1.0 の時点でアラビア文字に対応していました. mozilla はよく覚えていませんが、2003 年頃はまだダメだったと思います.

Konqueror
知りません.

w3m, w3mmee
w3m は lynx のようなテキストブラウザです. w3mmee は w3m をもとにしたもので、フレームも見えますが、それ以外の違いは知りません. 両者とも、2005 年頃よりほとんど更新されていません.

emacs-w3m というパッケージがあり、これにより emacs の中で w3m を使うことができます. これはとても操作性が優れていて、 w3m (w3mmee) 単独よりもおすすめです.

mlterm
ターミナル mlterm で w3m を使うには、 mlterm のコーディングを utf-8 に設定して、w3m の出力も utf-8 にします:

$ w3m -O utf8 filename.htm

w3mmee では出力コードが指定できないらしく、駄目でした.

emacs
emacs の上では、mule-ucs を使えば、w3m, w3mmee どちらでも、utf-8 のページは見えます. ただし、emacs はまだアラビア文字は駄目です. emacs-bidi では、w3mmee でアラビア文字を含むページも大丈夫でした. 一方、w3m ではオプションをいじってみましたが、アラビア文字を正しく表示させる事ができませんでした.

KDE, Gnome の標準エディタ
知りません. Gnome は gedit でしょうか. 現時点では試す気はありません.

(2005 年 11 月) アラビア語の扱いでは、Gedit は Kate や Kwrite より良いと、小耳にはさみました. 自分で使った事はありません.

emacs
emacs の最新版は 21.4 ですが、もう何年も新しい版がリリースされていません. アラビア文字未対応です.

emacs 21.x では Unicode が扱えるように見えますが、実行してみると日本語を含む場合等は正しく扱ってくれません. utf-8 で日本語を使いたい時は、mule-ucs をインストールします. 起動は大分遅くなります.

なお、アラビア文字は白抜きの四角として表示されますが、これは単純に表示の問題です. ファイルから読んだり書いたりすることは、きちんとできます. たとえばメールでのやりとりも正常にできます.

emacs-bidi
emacs-bidi は emacs-21.3.50 を元にして、アラビア文字、ヘブライ文字等に対応させたものです. やはり、上述の mule-ucs が必要です. 既に開発は停止しています. この emacs-21.3.50 は 21.3 より後の開発版であり、安定版ではありません. また、現在最新の安定版 21.4 は、安全上の修正の他は本質的には 21.3 と同等です. 言い換えれば、emacs-21.4 は 21.3.50 より、実質的には古いです.

アラビア文字を含む文章では、動きがにぶく、操作性はいまいちです. ハイライト (色付け) は、特に bidi モードではあまりうまく動作しません. アラビア文字に関しては、X Window System でのドラッグ &amp; ドロップも正常にできません. ともあれ、開発された方々には感謝.

emacs-bidi でのアラビア文字の実現方法は、本家の emacs には統合されず、別法を使うそうです. 開発に興味がある方は、Emacs Wiki の CategoryBiDi をどうぞ.

(2006 年 11 月) emacs-bidi の作者 (の一人?) の高橋さんが、emacs-bidi 上でのアラビア語入力の独自配列 を公開なさいました. 大変心強い事です.

xemacs
xemacs は使った事がありませんが、開発版の 21.5 は、ユニコードをよくサポートし、アラビア語なども使えるようです. 安定版の最新版は 21.4.x です. たまたま現在の emacs とバージョン番号が近いですが、両者の番号づけは独立です.

Yudit
Yudit は初めからユニコードをサポートする目的で作られたエディタです. Gtk+ / Qt は使わず、独自路線です. ちょっと試したところでは、問題なさそうです. 2006 年秋の時点でも、開発が続いています. えらい.

Katoob
katoob は Mohammed Sameer 氏による、Gtk+2 を使った軽量エディタです.

(2006 年 2 月) 以前はアラビア文字を正しく扱えるエディタといったら katoob と決まっていましたが、pango のバージョンが 1.10.x になってからは、特に、他のソフトが劣る、ということもないようです. ただ、アラビア文字の入力のページに書いた、X Window System におけるラーム・アリフの分解という良い特性は、他のソフトは持っていないのではないかと推測します. (ユニコードの正規化、等価を理解していないので確信はありません)

様々なコーディングや、kinput2 等の input method も OK.

(2006 年 11 月) 2006 年 9 月に、(C++ で) 書き直された 0.5 が出版されました. 以前に、「0.3.8 以降は、番号付けられたバージョンはリリースされないそうです. 最新版は、先のリンク先の、"CVS Snapshot" から直に入手して下さい. 」と書いた事がありますが、またバージョン番号が付けられているようです. ただし、ホームページでは最新版の明記をさぼっているようです. ftp でダウンロード可能なものの中で、最新のものを選びましょう. 0.5 になってから、時々 Segmentation fault をします.

Gnome, KDE の標準ターミナル
知りません. 次の mlterm の項も少し参考になるかも.

mlterm
[http://mlterm.sourceforge.net/ mlterm: は多言語ターミナルで、アラビア語もサポートします. 詳しい事は、 外部サイトの mlterm の解説ページ を御覧下さい. (これは本サイトの旧版「linux でアラビア語」内のページです. ) ここでは簡単に書きます.

アラビア文字のフォントで、スケーラブルなものは、使えないものもあります. (特に最近の OpenType のもの ?) 確か、Arabeyes & Kacst あたりは大丈夫でした. 固定幅フォントは、同じところにある Arabeyes_mono か、emacs-bidi のものを使いましょう.

utf-8 でアラビア文字を読む方法です. mlterm の設定ファイルを収めるディレクトリは、 Gentoo Linux では  にあります. また、ユーザーのホームディレクトリの下に、 の名前で作ることもできます.

その中で、 ファイルに、次のような行を書きます:

ISO10646_UCS4_1=-arabeyes-fixed-medium-r-normal--20-200-75-75-c-100-iso10646-1; ISO10646_UCS4_1_BIWIDTH=-*-sazanami gothic-*-iso10646-1;

二行目は日本語フォントですが、これは好きなもので良いでしょう. 一行目はフォントのページで紹介した、 Arabeyes によるビットマップフォントです. サイズは 20 pt だけしかありません.

あるいは True Type フォントが良ければ、

ISO10646_UCS4_1=-misc-ae_albattar-medium-r-normal--*-iso10646-1;

などとしましょう.

起動する際は、等幅ビットマップフォントを使うならば、

$ mlterm -m -km=utf-8

と、True Type ならば可変長にして、

$ mlterm -V -m -km=utf-8

とします. Ture Type のアラビア文字で固定長にすると、形は正しいのですが、文字同士が切れ切れになります. それ以上の問題はありません.

mlterm の中では、 は、特に設定は不要です. は  とします.

等幅フォントの場合、サイズ毎に一つしかフォントを指定できないのが、やや不満です.

xterm
xterm -218 は、右から左に書かれる文字は未対応です.

Bicon
BiCon はアラビア語コンソールです. ちょっと試したところ、アラビア文字は無視されました. 私には使う必要がほとんどありませんので、原因の調査はしませんが、一般には結構使われているようで、問題も聞きません. なお、昔は acon、その次に akka というコンソールがあったそうです.

Input Method
日本語人には、kinput2 を始めとして、input method は馴染みがありますが、アラビア語人は、日常的には X から直に打つのが普通のようです. scim や uim が具体的にどうなのかは、知りません.

X Window System
最近のものならば大体大丈夫です. 正確なところは忘れましたが、Xorg-X11-R6.8.0 以降か、 XFree86-4.0.0 以降は、アラビア文字部分はそれ程変わっていないと思います. それ以前は知りません.

トラブルの原因として、X Window System は考えにくい、という意味です.

OpenOffice
OpenOffice のアラビア文字サポートは、良い方と言えます. 以下は、ワープロソフト oowriter についてです.

アラビア文字を使うために必須なのは、(英語版で) Tools -&gt; Options -&gt; Language Settings -&gt; Languages にある、 Enabled for complex text layout (CTL) のチェックボックスをオンにすることです. これで、行ごとに、左から右、もしくは右から左に書くと、指定することが可能になります. 右のアイコンを使うか、もしくはショートカットキーで、Shift+Control+D でアラビア文字方向、Shift+Control+A で日本語 / 英語方向と設定します.

それから、インストール時には、左キーを押すと「戻る」、右キーは「進む」になっています. 私は、アラビア文字の場合でも、右は右、左は左の方が好きです. これをセットする為には、 Language Settings -> Complex Text Layout の、 Cursor Control で、Visual を選択します.

OpenOffice Writer にも、色々変な所はあります. フォントを指定してからアラビア文字のタイプを始めると、勝手に別なものを選びます. Pdf に出力すると、上下の付加記号が、離れすぎます. 等々. 正しい PDF を得る方法 - あくまでも回避策ですが - は、以下を見て下さい.

PDF で正しい母音符号をつける回避策
(利用者:Oibane 以下は、聞いた話で、まだ試していません. )

Open Office を使って、母音記号の位置が完璧に正しい PDF を得る方法があります. ファイルへの出力で、Generic Printer を選び、T42 を可にするのがミソです. ttf フォントではこれが必要です. これで ps (postscript) ファイルが作られますので、ghostscript に付随する ps2pdf を使い、 ps を PDF に変換すれば、できあがりです. 少なくとも Debian 3.1 の (かなり古い) ghostscript 6.53 ではうまくいきます.

ghostscript にアラビア文字フォントをインストールする必要はありません. ps ファイルに埋め込まれている為です. ここで T42 を使ったのが生きてきます. そうでないと、ghostscript が埋めこみ ttf フォントを T3 に変えてしまい、それはそれは見るにたえなくなります. また、特に xpdf では全く表示されなくなる場合もあります.

PDF はプラットフォーム非依存が目的なので、 Windows で印刷する場合も考えます. PDF 文書がアラビア文字フォントを内蔵するとき、Acrobat Reader の 6 よりは 5、もしくは Foxit Reader が良いでしょう. (おいばね注: 7 なら OK?) 6 だと表示はできても、印刷するとダメです.

PDF で、アラビア文字部分は画像として用意されているものを見かけますが、上に述べたような事が理由かも知れません. ただし、結果は貧弱な事が多いです. サイズも大きくなります.

Arabeyes Quran
Quran はクルアーン表示と読み上げを行なうソフトです. Qt 版を試してみました. 使用可能な段階ですが、校訂もまだで、操作性の点でもまだ改良が必要. 将来的には、現代風のつづりでも、語根でも検索できるようにしたい、とのこと. Qt 版 (KDE は不要) と Gnome 版があります.

テキストデータのインストールでつまずくかも知れません. そのときはノートかどこかで質問して下さい.

トラブルメモ
(2006 年 2 月)アラビア文字がつながらずに、ばらばらになる場合がいくつかあるようです.
 * 1) KDE で、アラビア文字のファイル名を使うとき
 * 2) 色でハイライトをするエディタ: bluefish, kwrite, quanta, kate. 色をつけない kedit は OK とか.

文字コードの変換
正確には符号化法の変換ですが...

Linux では、glibc についてくるコマンド  を使います. 次の例では、cp1256 のコードを utf-8 に変換します: $ iconv -f WINDOWS-1256 -t UTF-8 -o foo-out.txt foo.txt $ # 又は $ cat foo.txt | iconv -f WINDOWS-1256 -t UTF-8 - > foo-out.txt

emacs では、C-x RET c でコードを設定し、続いて、C-x C-f を押すと、指定されたエンコーディングでファイルを読みます. 同様に、C-x C-s で保存時のコードを変更できます.

作り方
アラビア語ロカールの作り方を述べますが、普通は不要でしょう. 特に必要がなければ、無視して結構です.

ロカールのサポートは Linux なら glibc の仕事です. 以下で使うコマンドも、glibc に附属します.

それでは、既にコンパイルされた (= システムにある) ロカールを調べます. xterm 等のターミナルで、以下のようにすると、判明します.

$ locale -a ... ja_JP ja_JP.eucjp ja_JP.sjis ja_JP.ujis ja_JP.utf8 ...

皆さんは多分、日本語のロカールが、上のように表示されたでしょう. もし、 という行があれば、良いのですが、無ければ、作ります. 以下を実行して下さい.

$ localedef -f utf-8     -i ar_EG ar_EG.utf8 $ localedef -f iso-8859-6 -i ar_EG ar_EG.iso88596 $ localedef -f cp1256    -i ar_EG ar_EG.cp1256

読み易くするために列を揃えました. は言語でアラビア語、 は国名でエジプトです. は文字コードで、 が文字コードを除いたロカール、最後が、作りたいロカールの名前です. 名前には何でも指定できてしまいますので、タイプミスをすると後悔します. 気をつけて下さい. 作ったロカールを消す事はできません.

作り方は以上です. 可能な選択肢については、Gentoo linux ならば、 以下を見て下さい. ロカールを一つ作ると、ハードディスクを数十から数百キロバイト消費し、 あたりに保存されます.

英語としては「ロカール」が正しいのですが、コンピュータ用語としては、日本では「ロケール」で定着しているようですので、断っておきます.

設定の仕方
Gnome や KDE では容易に設定できるのでしょうが、ここでは手動の場合です. 私は bash しか知りません.

ロカールを設定して、プロセス、たとえば firefox を起動するには、こうします:

$ LC_ALL=ja_JP.utf-8 firefox &

簡単ですね. また、全てに対して、デフォルトのロカールを設定するには、 などに、

export LC_ALL=ja_JP.utf-8

とします.


 * ホームに戻る.