Indic IME cum Converter/解説

概略

 Unicodeのインド系文字をローマ字入力したり、翻字用ローマ字に変換したインド諸言語テキストをインド系文字に戻したりするためのJavaScriptユーティリティーです。ファイル作成はできません。必要に応じて出力されたものをコピーしてテキストエディタなどに貼り付けてください。パソコンにダウンロードして使うこともできます。必要なファイルは、roma.html(入出力インターフェイス), roma_key.html(キー定義表示用), roma.js(プログラム定義)の3つです。それぞれ単一のファイルとして保存して同じフォルダーに置いてください。「Webページ完全」で保存すると、ファイルが書き換えられます。

保存用リンク
roma.html
roma_key.html(単体では動きません)
roma.js

必要環境

 ブラウザでJavaScript[スクリプト]の実行を有効にしてください。お使いのパソコンに対応するフォントがない文字は表示されません。フォントがあってもOSにインド系文字フォント表示機能がないと、結合文字が正しく表示されません。WindowsXPでは、標準でデーヴァナーガリー、タミル、テルグ、カンナダ、グジャラーティー、グルムキの6種のフォントを搭載しています。マラヤーラムフォントは、WindowsXP sp2で追加されます。ベンガル文字のフォントは、http://www.travelphrases.info/gallery/Fonts_Bengali.htmlにいろいろあります。オリヤのフォントはWindowsXPの規格にあうものがまだないようです。

仕組み

 インド系文字では、同じ音価をもつ母音が、単独で音節を構成する場合には単一の字母で、子音に後続する場合には子音字母自体("a"の場合)または子音字母に付加される母音区別符号で、というように、異なる表現をもちます。Unicodeのインド系文字コードは字形ではなく音声単位で設計されていますが、この点ではインド系文字を踏襲していて、字母としての母音と記号としての("a"を除く)母音にそれぞれ別のコードが割り振られています。(子音のほうは、結合字体でも字母単体でも同じコードで符号化されていて、たとえば結合文字 k-ra は、k,母音無し,rの3つのコードの連続で表現され、フォントの側でこのコード連続に対して結合字グリフ(字形)を割り当てる、というようになっています。)一文字にひとつのキーを割り当てるタイプの入力法でも、母音が字母であるか記号であるかをシフトなどの入力によって区別しているのが普通です。
 これに対して、インド学の伝統的なローマ字転写法では、母音が字母であるか記号であるかの区別を捨象してしまいます。インドの伝統的な正書法では単語単位の分かち書きをせず、同じ語であっても文字列内の位置によって母音が文字で表わされたり記号で表わされたりするため、語や音の識別にとっては有意味でないと考えられる情報だからです。
 このため、ローマ字に翻字されたインド諸言語テキストをインド系文字に再翻字するためには、母音の位置が子音に後続しているかそうでないかを識別して、記号と文字に振り分ける手続きが必要になります。このような振り分け処理を含む文字の置き換えを、テキストボックス内に文字が入力されるごとに(およびオプションボタンがチェックされるごとに)実行することにして、IMEの機能をもたせたのがこのIME cum Converterスクリプトです。このため、IMEとはいっても長文になればなるほど動作が遅くなります。短文向けです。
 ローマ字入力には慣れたけれどもインド系文字のキー配置を覚えて習熟する余裕はない、という人向けになっています。インド系文字の翻字には、長母音や反り舌音・各種鼻音など単一のローマ字で表記できない文字の表記法がいろいろあることを考慮し、キー定義にはある程度幅を持たせました。キーボードから直接入力できない文字も変換キーに割り当てられていますが、これは既存の翻字テキストから変換する場合に有効になると考えたからです。

 プログラムでは、子音に割り当てられたキーが入力されると、母音記号入力待ちの状態になります。母音記号に対応したキーの入力(確定)が行われるか、母音記号に割り当てられていない文字の入力があると、母音記号入力待ち状態は解除になり、この状態での母音キー入力は母音字母、ということになります。
 結合子音の入力については、二つのオプションをつけました。ひとつは、母音記号入力待ち状態で母音記号でないものが入力されたとき(および、入力が終わったとき)、自動的に「母音無し」コードを付け加えるオプションです。この状態で子音キーを入力すると、フォントは結合文字表示となります。子音キーの連続は、結合字があれば自動的に結合し、タミル文字のように結合しない場合は母音無し記号が介在します。南インドの諸言語の正書法です。もうひとつは、「母音無し」コードのキー入力("x")がない限りは子音結合をしないオプションで、母音記号の付加されない単独の子音字母が"a"に終わる音節になる場合と母音を伴わない子音を表わす場合とがあるヒンディー語など北インドの正書法を考慮したものです。
 南インドの正書法では母音字母が子音字のすぐあとに来ることはないため、発音にしたがってローマ字入力していくだけです。しかし、現代ヒンディー語やベンガル語のように子音字母に母音字母が続くことがある場合や、南インドの文字でも母音字母の一覧表を作るようなときには問題が生じます。子音キーの後に"a"を入力しただけでは、"a"より長い"aa"や"ai"や"au"が長母音・二重母音キーとして指定してあるため、余分なキーを打たなければ母音字母入力可能な状態に戻れませんし、この後に短母音字母のa,i,uを入力することはできません。このため、aと同様に母音記号を追加せずに母音記号待ちから抜け、かつ他の母音とだぶらないキー入力として、"#","a#"を追加しました。次のように働きます。

 この組み合わせは子音字母のあとでのみ有効です。母音字母を連続して打つ場合には、短い母音にそれぞれ"a'","i'","u'"(,"e'","o'")の連続を使用してください。(なお、子音のローマ字転写に"'"を使っていなければ、上記の#の代わりにbr[0]を"'"と指定変更すれば子音・母音区別なく"a'"が使えます。  Unicodeのインド系文字では、先に述べたようにあるコードが連続すると自動的に結合する仕組みのフォントを使います。このため、母音記号を単独で出力したい場合や結合文字を結合させずにvirāmaを使う(タミル文字のような)連続で表示したい場合にはNon-joinerと呼ばれる特別なコードを間に挟んでやる必要があります。このコードも一応キーボードから入力できるようにしてあります。

カスタマイズ

 キー定義一覧表は、プログラムで定義したものを読み取って、自動的に生成されます。左から、母音字母、母音記号、子音記号、子音記号に終わる文字列のうち通常のキー連続以外の組み合わせの四種の表になります。プログラムファイルroma.jsでは、下部に、「母音字母」「母音記号」「子音記号」に分けて各文字ごとに、roma_xx.name = {"割り当てキー":"割り当て文字",・・・}の要領で記載されています。この部分の""内をWindowsXPのメモ帳などのUnicode対応のテキストエディタで修正したり、あるいは新たに"割り当てキー":"割り当て文字"をコンマで区切って加えることで、カスタマイズできます。キー割り当ては4文字以内で設定できます。最初の文字は英数字か既存の文字にしてください。子音で終わる文字列にショートカットを割り当てる場合は、「子音記号」roma_c.name{ }の中に追加します。"\uXXXX"の代わりに、""の中に直接インド系文字の文字列を入れてもかまいません。ただし、保存するときには必ずUTF-8形式で保存してください。

カスタマイズ用スクリプト(roma.js という名前で保存)

ほかの用途

 ブラウザとしてFirefoxをお使いの方にお勧めの拡張機能として、Padmaをご紹介します。Unicode以前の(字形ベースの)フォントを使ったインド諸言語のWeb PageをUnicodeに変換して表示ユーティリティーです。上記のInstallationからインストールできます。インドの新聞各社へのリンクもついています。文字化けする場合は、「表示」「文字エンコーディング」を「西欧」に直してください。選択範囲を手動で変換する機能も充実していて、フォント単位だけでなく、ISCIIコードで書かれたテキストファイルのビュアーとして使うこともできます。また、この拡張機能にはRTSと呼ばれる、テルグ関係のNewsgroupで開発されたテルグ文字ローマ字変換機能がついていて、メールを含めたNetscape系のソフトで入力に際して(範囲指定→変換の形で)使えます。eeを長母音iiに宛てているなど、このIMEとは一部両立不可能な仕様になっていますが、多くの字母に複数のキーを割り当てられる仕様になっている点では似ています。

 FireFoxにはIndic IME Tool Barという、入力文字列をUnicodeインド系文字にダイレクトに変換する拡張機能もありますが、今のところこちらで使えるローマ字入力は、歯音系列のtにw(=t),x(=th)を宛てる、ISCII時代のASCII転写(WX Notation)のみが対応で、また、aを入力するとどこでも字母になってしまうなど、あまり使い勝手がよくないと思います。(ただし、JavaScriptを改変することもできます。大文字のYやVで変換後のキーがUnicodeの順でトグルする、という面白い仕様です。)

 IME Tool Bar(imetoolbar.js,imetoolbarOverlay.xul)の改造用に、roma.jsを使用してInnerHTMLではなく置換元のテキストエリア内に置換文字列を逐次出力するIME専用のスクリプトを試作しました。FireFoxのみに対応しています。(この種のイベント操作はIEとFireFoxで著しく異なるスクリプトになります。IEへの対応予定はありません。)文字入力・カーソル移動で変換開始、カーソル移動や区切り文字の入力で置換用バッファーをクリアすることにより、置換文字列の長さを抑えていますが、テキストエリアの文字列全体の読み込み・書き換えを行なうため、長文でのパフォーマンスはあまり改善しませんでした。(Indic IME Toolbarでも同様。)各種インド系文字(と日本語)が混在して打てるというぐらいがメリットです。一部の(keypress用)キーコード未定義キーやマウス操作には破壊的な動作をするものがありますのでエディタとしてのご使用にはご注意ください。また、CTRLキーのエスケープやIME解除の切り替えには未対応です。(日本語IMEの半角英数モードは使用できます。つまり、日本語IMEの「直接入力」にのみ対応しています。)

保存用リンク
roma_ime.html(preprepreリリース)