Mule: マルチリンガル文書処理システムの概要
錦見 美貴子
半田 剣一
戸村 哲
高橋 直人
電子技術総合研究所
(この文書は 本来 Tsukuba Software Symposium `96 のプロシーディング用に
作られたものです。ただしこのページにはいくつかリンクが付加されています。)
目次
- 1. はじめに
- 2. Muleが取り扱う文字集合とコード系
- 2.1. 文字集合とコード系
- 2.2 内部コード
-
3. マルチリンガルエディタ
- 3.1. 多バイト文字
- 3.2. コード系の変換
- 3.3. 文書の入力
- 3.4. 編集処理
- 3.5. 表示
-
4. おわりに
-
付録. Muleの入手方法,議論
1. はじめに
多くの言語を,それぞれの文字や綴りや文の規則に沿って処理するシステムを
マルチリンガルなシステムと呼ぶ。我々が構築しているマルチリンガル文書処
理システム Mule (MULtilingual Enhancement to GNU Emacs)は,複数の文字
集合を取り扱い,また個々の言語の言語環境が易に構築できるように GNU Emacsを拡張したもので
あり,以下の特徴を持っている。
- 異なる文字集合を同時に効率的に扱うことができ,複数の言語からなる文書の編集が可能である。
- 新しい文字集合を自由に追加できる。
- 新しいコード系を自由に追加できる。
- ASCIIキーボードからの各国語の入力方法を提供している。
- 個々の言語に応じた言語環境の構築が可能である。
図1に Mule での編集作業の様子を示す。
Mule では個々の文書を「バッファ」と呼ばれるオブジェクトに保持するが,
図に示したように1つのバッファ中に複数の文字集合に属す文字が含まれるこ
とができる。
現時点における最新バージョンは1995年7月24日公開の Ver.2.3 (末摘花)であ
り,これは GNU Emacs 19.28 をベースにしている。また現在 Mule と GNU
Emacs との統合を目指した作業が進行中である。
2. Muleが取り扱う文字集合とコード系
2.1. 文字集合とコード系
文字集合の多くは, ISO 2022 の技術要求に沿って定められている。これを満
たす文字集合には「日本語漢字」や「タイ文字」,「ラテン/キリルアルファ
ベット」など多くの地域あるいは言語文化に属す文字集合が含まれている。
Mule は ISO 2022 を満たす文字集合ならどのようなものでも扱うことができ
る。
文字集合のうち特に利用度が高いと思われるものは,Mule の 「標準文字集合」として提供している。これにはISO 646
USA (ASCII),JIS X 0201 片仮名,JIS0201 ローマ文字,ISO 8859-1 Latin
alphabet No.1 〜ISO 8859-9 Latin alphabet No.5,JIS X 0208 情報交換用
漢字符号などの日本語文字集合, KS C 5601 韓国語文字集合,GB 2312 中華
人民共和国簡体字文字集合, CNS 11643 Set 1 Chinese などの中国語繁体字
文字集合などが含まれている。これらの文字集合を使用する場合はユーザによ
る定義を必要としないが,これ以外の文字集合も,ユーザが自由に追加するこ
とができる。
文字集合をエンコードする方法(コード系)は一通りとは限らないため,各種
のコード系を取り扱い,それら相互の変換を行なうことはマルチリンガルエディ
タの重要な機能の一つである。Mule は ISO 2022 で定められている方法に沿っ
た主なコード系を容易にとり扱うことができる。また特に ISO 2022 に準拠し
たコード系のうち,日本語 EUC,韓国語 EUC,中国語 EUC,Compound Text,
日本および韓国それぞれにおけるネットワーク用コードについては標準で準備
している。ISO2022 準拠以外のコード系については,ユーザが定義するための
言語を提供している。
2.2. 内部コード
通常の文字集合中のコードポイントは,ある特定の文字集合が与えられたとき
にその中のどの文字かを示すだけであり,文字集合自身を特定する情報は含ん
でいない。たとえば ¥044¥042(¥で始まる3桁の数字は8進数とする。) とい
うコードは 日本語の文字集合JIS X 0208の中では日本語平仮名の「あ」を示
しているが,他の文字集合では異なる意味を持ちうる。つまり,¥044¥042
というコードだけでは文字を特定することはできない。
一方 Mule では異なる文字集合に属する複数の文字を同一のバッファに含むこ
とができる。このようなマルチリンガルなバッファを実現するためには,文字
コードだけでなく文字集合に関する情報を保持する必要がある。このため
Mule では,バッファ中に保持する文字に独自の内部表現を与えている。この
内部表現は,文字集合の種類を示す情報を各文字コードに付加し,先頭の1な
いし2文字のコードを調べるだけでそれがどの文字集合のどの文字かが判るよ
うにしたものである。
3. マルチリンガルエディタ
コード系や文字集合のマルチリンガル化以外に,実際のエディタを構成するた
めに Mule では多バイト文字,コード系の変換,文書の入力,編集処理,表示
の各点についてマルチリンガル対応をしている。
3.1. 多バイト文字
エディタは,文字の挿入や探索,削除などの処理を行なうシステムである。
そこで,文字と文字列の取り扱い,文字の挿入,領域の指定などを行なう関数
を多バイト文字に対応するように拡張ないし変更している。
また1バイト文字においては,文字とそれを表現するバイトとの間の関係は一
対一であり両者を同一視していても事実上問題はない。しかし多バイト文字の
取り扱いには,文字とその内部表現を構成するバイトとの間の変換や文字の内
部表現に関する情報の検索などが必要となる。Mule ではこのための関数も提供
している。
3.2. コード系の変換
エディタは,キーボードやファイルや他のプロセスからの入力を,適当な内部
表現でバッファ内に保持し,ディスプレイや他のプロセスやファイルへ出力す
る。これら入出力のコード系はそれぞれのプロセスやディスプレイ
などの都合で決まっており,エディタ側の都合で設定するわけにはいかないた
め,すべての入出力過程において,コードの変換を要する可能性がある。
このため Mule では,キーボード入力,ディスプレイへの表示,ファイルとの
入出力,プロセスへの入出力のそれぞれについて独立にコード系を設定するこ
とができるようにしている。また,入力時にはコード系の種類を自動判別させ
ることもできる。
3.3. 文書の入力
複数の文字集合の文字を用いる場合には,マルチリンガル化された入力システ
ムが必要となる。一般的なキーボードから各種の文字を入力する方式としては,
- システム自身で持つ変換テーブルを利用するもの
- 外部の変換サーバと通信するもの
があり,Mule Ver.2.3 ではこの両方を実現している。これらのシステムを用
いる場合の標準的な手続きは,たとえば ASCII キーボードからの複数のキー
入力によって文字の候補を指定し,さらにそれらのなかから実際に入力したい
文字を選択するという2段階のものとなる。ただし、アラビア文字などのよう
に語中の位置によって文字形状が変化する場合には,変換テーブル/サーバで
は正しい文字入力が行なえない。Mule Ver.2.3 ではアラビア語モードという
特定の言語に特化したルーチン を用いて処理している。
3.3.1. 変換テーブル型入力システム Quail
Quail はシステムが持つ変換テーブルを用いて ASCII キーボードから
の入力を翻訳する。キーボード入力の翻訳とは1個以上の連続したキー入力が
与えられた時に,特定の一つの文字が入力されたとみなして処理することであ
る。たとえば,かなをASCIIキーボードからローマ字入力する場合には,ロー
マ字表記を構成するキー入力からかな文字への翻訳が行なわれる。
キー入力の系列から翻訳結果への対応規則を翻訳ルールと呼ぶ。1つの翻訳ルー
ルはASCII 文字列とそれによって入力される文字列(あるいは文字列のリスト)
のペアからなる。たとえば翻訳ルール ku → く は
k と u という二つの ASCII 文字からなる系列が
く 一文字に翻訳されるということを意味する。
一定の文字の集まり(たとえば一つの言語で用いられる文字の集まり)ごとに,
それぞれ異なる入力方式が存在する。Mule では一定の文字の集まりごとに翻
訳ルールをまとめておき,必要に応じてそれら翻訳ルールのまとまりを切替え
て用いる。特定の一まとまりの文字(たとえばハングルすべて)を入力するた
めの翻訳ルールのまとまりを Quail パッケージと呼ぶ。
現在Muleでは,13種類の中国語文字用パッケージ,5種類の韓国語文字用パッ
ケージ,7種類のキリル文字用パッケージ,29種類のラテン文字用パッケー
ジ(各国の言語などに対応している),ベトナム語文字,日本語文字Tコード
入力,タイ文字,ギリシア文字,ヘブライ文字,エチオピア文字,国際音標文
字のパッケージを提供している。これらのパッケージ中のルールは変更可能で
あり,またユーザ自身によるパッケージの新設も自由に行なうことができる。
3.3.2. 変換サーバ型入力システム たまご・たかなバージョン
たまご たかなバージョンは,ネットワーク上の変換サーバとの通信を用いて
入力文字の変換を行なう。Mule Ver.2.3 では,日本語,韓国語および中国語
簡体字についてこの方法を用いることができる。ネットワーク上の変換サーバ
としては,Wnn(バージョン 4.108 以降)を使用する。日本語の場合には
jserver,中国語簡体字の場合には cserver,韓国語の場合には kserverをそ
れぞれ用いる。
たまご・たかなバージョンは入力文字変換表に基づいて,ASCII キー入力をか
な,ハングル,PinYinあるいは ZhuYinへと翻訳する。この部分を入力文字翻
訳系と呼んでいる。入力文字を翻訳するためのルールを適当な文字の集まりご
とにまとめたものを変換表と呼ぶ。ローマ字ひらがな変換表を選べば,入力文
字翻訳系は `tamago' を `たまご' へと翻訳する。
この翻訳を行なった結果得られる文字列を,さらに変換サーバに送って変換し
てもらうことによって,漢字,ハンジャあるいは中国語簡体字の入力を行なう
ことができる。たとえば jserver は `たまご' を`卵' に変換する。
このような入力システムをユーザの環境に合ったものにするためには,翻訳と
変換の両方がカスタマイズ可能でなくてはならない。Mule では,新しい変換
表の作成や既存の変換表に含まれるルールの変更,変換サーバ,使用辞書,変
換パラメータなどの設定を行なうことができる。
3.4. 編集処理
入力された文字を,文字列や語として処理する,すなわち編集するために,
Muleでは文字の分類,正規表現の取り扱い,語や行の取り扱いを拡張しマルチ
リンガル化している。また,日本語や中国語の文書のように禁則処理を必要と
する言語に対応した処理を行なっている。
3.5. 表示
Mule Ver.2.3 では,合成文字の表示と右から左へ書く言語の表示に対応して
いる。また,複数の文字集合を同時に表示するために,フォントの取り扱いを
容易にするための手法も提供している。
3.5.1. 合成文字
合成文字(composite character)とは,いくつかの文字を組み合わせて作ら
れる文字のことであり,複数のコードポイントに対応する複数の文字を同じコ
ラム内に重ねていくことで表示できる。しかし編集作業においては,合成文字
は単に同じ場所に重ね打ちされた複数の文字ではなく,一つの文字である。そ
こで Mule では合成文字に対して,画面への表示だけでなく内部コードの扱い
においても特別な取り扱いを行なっている。
3.5.2. 書字方向
世界の言語の中には英語のように左から右へ書くものだけでなく,右から左へ
書くものもある。またモンゴル語のように常に上から下へ書き,横書きを許さ
ない言語も,下から上へと書く言語もある。Mule Ver.2.3 では,左から右へ
書く言語と右から左に書く言語をサポートしている。縦方向へ記述する言語に
ついても将来的には対応したいと考えている。
3.5.3. フォントの選択
多くの文字集合に属す文字を表示するためには,各文字集合に応じた多くのフォ
ントが必要となる。しかしディスプレイのサイズなどにあわせてフォントを切
替える場合に,現在何種類のフォントを使用しているのかを一々覚えていなく
てはならないのでは負担が大きい。Muleでは,フォントをフォントセットと呼
ばれる適当なグループに分けており,グループを指定することによって複数の
フォントの同時指示,同時切替えが可能である。
4. おわりに
マルチリンガル文書処理系 Mule について述べた。Mule は,ユーザが必要に
応じて使用可能な言語を増やしていくことができる柔軟なマルチリンガルシス
テムとして設計されている。すなわち,標準では編集環境が与えられていない
言語についても,文字,コード系のレベルから,入力方法,編集コマンド等文
書作成を容易にする手段のレベルに至るまで,言語環境を簡単に拡張し構築す
るための道具立てが整っている。これは,マルチリンガル環境は単に多くの言
語を扱うだけではなく,新たな言語に対応可能でなければならないという我々
の主張に沿ったものである。
Mule は,計算機ネットワークを通じ,多くの人達の協力を得て開発されてき
た。テスト,改良のためのアイディアにとどまらず,実際のコーディングに至
るまで積極的に関わってくださった方々と,その基盤となるネットワークを実
現してくださった方々に深く感謝する。
Muleの入手方法,議論
Mule 最新バージョンは,以下などから anonymous ftp で入手できる。GNU
Emacs を持っていない場合にもここから入手可能であり,またフォントやライ
ブラリ等もここに置かれている。
Mule についての英語での議論は,メーリングリスト mule@etl.go.jp で,日
本語での議論はニュース (ニュースグループfj.editor.mule) で行なわれてい
る。