Hatena::Grouprekken

murawaki の雑記

2010-10-22

Traditional Mongolian support in Windows 7

縦書きモンゴル文字の入力について少し調べてみた。完全な現実逃避

歴史を遡ると、Unicodeモンゴル文字が追加されたのが version 3.0。なんと1999年。しかし長らく誰もサポートせずに放置されてきた。理由の一つは実装が難しいこと。縦書きで左から右に改行 (日本語と反対)。アラビア文字のように文脈によって字形が変化する。もう一つは Unicode の仕様がひどいこと。文字の割り当てがやっつけ仕事っぽい。おまけに仕様が不明。入力したいモンゴル語の単語があったとき、どのコードポイントの文字の連続で表現するのが正しいのかよくわからない。

Windows Vistaモンゴル文字をサポートしたという話は聞いていたが、以前 Firefox で試しに表示すると全然駄目だった。(今表示したらうまくいった。XP と勘違いしたのかも。) 何が駄目かというと字形の選択。同じコードポイントでも前後の文字に応じてグリフを変えないといけないのに、それが出来ていない。誰が犯人かは特定していない。Windows 版の Firefox は内部で Uniscribe を呼び出してレンダリングしている。こいつが悪いのか、あるいはフォントに文脈依存のグリフが登録されていないのか。

最近 Windows 7 で試してみた。どうやらちゃんと表示される様子。おまけに入力メソッドが標準で入っている。登録方法は以下の通り。コントロールパネル -> 地域と言語 -> キーボードと言語 とたどる。「キーボードの変更」ボタンから「モンゴル語 (伝統的なモンゴル文字中国)」をリストに追加。

キーの配置は「キーボード レイアウトプレビュー」で一応表示される。しかし問題が多い。そもそも文字が小さすぎて判別できない。表示されているのは通常のキーだけで、Shift キーを伴なう場合がわからない。特殊な制御文字 MVS, FVS1, FVS2, FVS3 が表示されない。*1そもそもモンゴル文字が曖昧なので、グリフを見せられても対応するコードポイントの判別ができないものがある。ドキュメントを探してみたが見当たらない。そこでまずキー配置について気付いたことを挙げる。

  • 全体としてラテン文字の転写に近い。例えば m のキーで (m と転写される) が入力される。キリル文字キーボード準拠の配置ではない。
  • まず気になるのが四つの円唇母音。w が o。v が u。u が ü。o が ö に対応。これはわかりにくい。
  • W が v。E が外来語用の ê。Unicode は両者に別のコードポイントを割り当てる。一般的には v を母音表記に転用したという解釈をとると思う。でも確かに語頭の字形は違う。語頭で ê は冠 (titim) をとるけど、v はとらない。
  • q が č。c が ts。
  • N が ng。g が ɣ/g。h が q/k。
  • H が h。k が g̣。K が ḳ。
  • L が lh。R が ř。x が š。z が ž。
  • - が NNBS (Narrow No-break Space)。接尾辞分離用。
  • 日本語キーボードで、MVS が =、FVS1 が :、FVS2 が *、FVS3 が半角/全角。

これで解決したかというとそうではない。例えば、キリル文字сайн と綴る単語をどう表現したらいいのかわからない。この単語のモンゴル文字綴りに対する一般的な転写は sayin。ayi で二重母音を表す。yi と転写するけど、字形は長い牙 (silbi) が2本連続したもの。これを ai と転写する流儀もある。i は a に後続するとき長い牙2本という形を取るという解釈。つまり yi と見るのは一つの解釈に過ぎない。モンゴル文字の表記は同じでも、sayin と解釈する人もいれば sain と写す人もいる。では Unicode はどういう立場なのかというとはっきりしない。Unicode 的には文字と言語は別なのだろうが、モンゴル文字のように両者の結びつきが強いと、そうも言ってられない。

実際に入力してレンダリングを確かめてみる。ᠰᠠᠢᠨ (s a i n) とすると、silbi が1本。ᠰᠠᠶᠢᠨ (s a y i n) とすると、silbi が2本。表示としては後者が正しい。しかし Google で検索すると 77 対 8 で前者の方が多い。前者の検索結果の中に正しく表示されているものがあった。どうしているのかと思ったら、ᠰᠠᠢ᠌ᠨ (s a i FVS2 n) と FVS2 を使っていた。どうやら Google は制御文字を飛ばしてインデキシングしているようだ。しかし、こんな規則的な綴りに対して本当に Free Variation Selector が必要なのだろうか。ちなみに ᠰᠠᠢᠢᠨ (s a i i n) とすると 85 件ヒット。これが一番多い。

別の例。キリル文字Ордос と綴る地名。この地名のモンゴル文字綴りの転写には流儀が二つある。ordus と ordos。そもそもモンゴル文字の o と u が同一字形。というよりも、一つの文字を文脈によって o か u と解釈しているというのが実態。Unicode は両者に別のコードポイントを割り当てている。表示が同じでも、実際の発音に応じて使い分けろということ。そこで問題となるのが第二音節以降の o と u の区別。第一音節では o と u は区別されるが、第二音節以降の短母音は弱化して区別がなくなる。ではどうするかというと流儀が二つあって、一つは機械的に u で転写するというもの。もうひとつは条件によっては o と写すもの。

やはり実際に入力してみる。前者が ᠣᠷᠳᠤᠰ (o r d u s)。後者が ᠣᠷᠳᠣᠰ (o r d o s)。レンダリングはどちらも問題ない。Google 検索では後者が圧倒的に多いが、Wikipedia で使われていて拡散しているというバイアスがかかっているから判断を保留。

昔のモンゴル文字の character set は glyph set であった。印刷する分には問題ないが、せっかく電子化しているのに sort もできず不便ということで、符号とグリフを分離したのが Unicode の Mongolian。それなのに、モンゴル文字表記に対する解釈が一定せず、てんでバラバラな符号化が行われている。これでは意味がない。

2011年1月14日 追記: このブログによると、Linux の pango でも、パッチをあてれば一応表示できるらしい。Windows の Baiti フォントを使うとのことだけど、ライセンスは大丈夫なのだろうか。github にあるソースを見たところ、語頭、語中、語末の識別しかやってない。明らかに不完全。スクリーンショットを見ると、MVS や FVS に対応していないのは明らか。でも ligature は表示できているように見える。なぜ? フォントのことが分かってなさすぎる。

2011年1月22日 追記: pango の話は記事にした。

*1:Shift と MVS に関しては、ネット上で拾った画像が不完全だが参考になる。