/* Copyright (C) 2003, 2004, 2005 National Institute of Advanced Industrial Science and Technology (AIST) Registration Number H15PRO112 See the end for copying conditions. */ /* sections for example found in English vesion omitted */ /***ja @page mdbIM インプットメソッド @section im-description 説明 m17n ライブラリは、m17n データベースから動的にロードできる入力メソッド ドライバを提供している。(@ref m17nInputMethod 参照。 @latexonly (P.\pageref{group__m17nInputMethod}) @endlatexonly). ここでは入力メソッド定義のデータフォーマットを説明する。 @section im-format 文法と意味 以下のデータフォーマットによって入力メソッドが定義される。ドライバはファ イルやストリームから定義をロードし、プロパティリストの形式に変換する。 @verbatim INPUT-METHOD ::= IM-DECLARATION ? DESCRIPTION ? TITLE ? VARIABLE-LIST ? COMMAND-LIST ? MODULE-LIST ? MACRO-LIST ? MAP-LIST ? STATE-LIST ? IM-DECLARATION ::= '(' 'input-method' LANGUAGE NAME EXTRA-ID ? VERSION ? ')' VERSION ::= '(' 'version' VERSION-NUMBER ')' DESCRIPTION ::= '(' 'description' [ MTEXT-OR-GETTEXT | nil] ')' VARIABLE-LIST ::= '(' 'variable' VARIABLE-DECLARATION * ')' COMMAND-LIST ::= '(' 'command' COMMAND-DECLARATION * ')' TITLE ::= '(' 'title' TITLE-TEXT ')' VARIABLE-DECLARATION ::= '(' VAR-NAME [ MTEXT-OR-GETTEXT | nil ] VALUE VALUE-CANDIDATE * ')' COMMAND-DECLARATION ::= '(' CMD-NAME [ MTEXT-OR-GETTEXT | nil ] KEYSEQ * ')' MTEXT-OR-GETTEXT ::= [ MTEXT | '(' '_' MTEXT ')'] LANGUAGE ::= SYMBOL NAME ::= SYMBOL EXTRA-ID ::= SYMBOL VERSION ::= MTEXT IM-DESCRIPTION ::= MTEXT VAR-NAME ::= SYMBOL VAR-DESCRIPTION ::= MTEXT VALUE ::= MTEXT | SYMBOL | INTEGER VALUE-CANDIDATE ::= VALUE | '(' RANGE-FROM RANGE-TO ')' RANGE-FROM ::= INTEGER RANGE-TO ::= INTEGER CMD-NAME ::= SYMBOL CMD-DESCRIPTION ::= MTEXT TITLE-TEXT ::= MTEXT @endverbatim @c IM-DECLARATION はこの入力メソッドの言語と名前を指定する。 @c LANGUAGE が @c t の場合、この入力メソッドは複数の言語で利用される。 @c NAME が @c nil の場合、この入力メソッドは単独で用いられるものではな く、他の入力メソッドから利用することを想定している。この場合、入力メ ソッドを特定するために @c EXTRA-ID が必要である。 @c VERSION はこの入力メソッドが必要とする m17n ライブラリの最小バージョ ンを指定する。フォーマットは "XX.YY.ZZ" であり、XX はメジャーバージョ ン、 YY はマイナーバージョン、ZZ はパッチレベルを表す。 @c DESCRIPTION はこの入力メソッドの説明を @c MTEXT-OR-GETTEXT で指定す る。もしこれが2番目の形式を取っていれば、 @c MTEXT は現在のロケールに 従って "gettext" によって翻訳される(翻訳文が提供されている場合)。 @c TITLE-TEXT はこの入力メソッドが有効な時、スクリーン上に表示されるテ キストである。 "global.mim" という特別なファイルがあり、共通する変数やコマンドが定義さ れている。入力メソッドドライバは毎回このファイルをロードし、他の入力メ ソッドはここで定義された変数やコマンドを継承できる。 @c VARIABLE-DECLARATION はこの入力メソッドで使用される変数を宣言する。 変数をデフォルト値に初期化したり、ユーザがカスタマイズしたりする場合に は、ここで宣言されなくてはならない。この宣言は二通りに利用される。一つ めは新しい変数を導入するためであり、この場合 @c VALUE は省略できない。 もう一つは "global.mim" で宣言された変数を継承し、違ったデフォルト値を 指定したり、この入力メソッド用にカスタマイズ可能にしたりするためである。 この場合には @c VALUE は省略できる。 @c COMMAND-DECLARATION はこの入力メソッドで使用されるコマンドを宣言する。 コマンドをデフォルトキーシーケンスに割り当てたり、ユーザがカスタマイズ したりする場合には、ここで宣言されなくてはならない。@c VARIABLE-DECLARATION 同様、この宣言は二通りに利用される。一つめは新しい コマンドを導入するためであり、この場合 @c KEYSEQ は省略できない。もう一 つは "global.mim" で宣言されたコマンドを継承し、違ったキーバインディン グを指定したり、この入力メソッド用にカスタマイズ可能にしたりするためで ある。この場合には @c KEYSEQ は省略できる。 @verbatim MODULE-LIST ::= '(' 'module' MODULE * ')' MODULE ::= '(' MODULE-NAME FUNCTION * ')' MODULE-NAME ::= SYMBOL FUNCTION ::= SYMBOL @endverbatim 各 @c MODULE は外部モジュール (動的ライブラリ) の名前とそのモジュールが 公開している関数名を宣言する。@c FUNCTION が "init" という名前であれば、 この入力メソッド用の入力コンテクストが生成される際に、デフォルトの引数 (@c CALL の節参照) のみとともに呼ばれる。 @c FUNCTION が "fini" という 名前を持てば, 入力コンテクストが破壊される際に、デフォルトの引数のみと ともに呼ばれる。 @verbatim MACRO-LIST ::= MACRO-INCLUSION ? '(' 'macro' MACRO * ')' MACRO-INCLUSION ? MACRO ::= '(' MACRO-NAME MACRO-ACTION * ')' MACRO-NAME ::= SYMBOL MACRO-ACTION ::= ACTION TAGS ::= `(` LANGUAGE NAME EXTRA-ID ? `)` MACRO-INCLUSION ::= '(' 'include' TAGS 'macro' MACRO-NAME ? ')' @endverbatim @c MACRO-INCLUSION は、@c TAGS で指定される他の入力メソッドからマクロを 読み込む。@c MACRO-NAME が与えられていなければ、全てのマクロを読む。 @verbatim MAP-LIST ::= MAP-INCLUSION ? '(' 'map' MAP * ')' MAP-INCLUSION ? MAP ::= '(' MAP-NAME RULE * ')' MAP-NAME ::= SYMBOL RULE ::= '(' KEYSEQ MAP-ACTION * ')' KEYSEQ ::= MTEXT | '(' [ SYMBOL | INTEGER ] * ')' MAP-INCLUSION ::= '(' 'include' TAGS 'map' MAP-NAME ? ')' @endverbatim 入力メソッドがそれ単体で利用されることがなく常に他の入力メソッドに読 み込まれて用いられる場合には、@c MAP-LIST は省略できる。 @c MAP-NAME 定義中の @c SYMBOL は、 @c t あるいは @c nil であってはな らない。 @c KEYSEQ 定義中の @c MTEXT は、キーボードから生成できる文字で構成され る。すなわち @c MTEXT は通常 ASCII 文字のみを含む。しかし、入力メソッド がたとえば西ヨーロッパ用キーボードを使うことを想定したものであれば、@c MTEXT は Latin-1 文字を含んでもよい。 @c KEYSEQ 定義中の @c SYMBOL は、関数 minput_event_to_key () の戻り値で なくてはならない。X ウィンドウシステムの元では、 @c xev コマンドを用い て値を簡単にチェックできる。たとえば、 リターンキー、バックスペースキー、 キーパッドの0のキーなどは、それぞれ@c (Return) , @c (BackSpace) , @c (KP_0) としてあらわされる。シフト、コントロール、メタ、アルト、スーパー、 ハイパーも押されている場合には、それぞれS- , C- , M- , A- , s- , H- が 前にこの順に置かれる。したがって "リターンキーをシフトしてメタしてハイ パーしたもの" は@c (S-M-H-Return) である。"a をシフト" から "z をシフト " までは、単に A から Z として表されることに注意。したがって、 "a をシ フトしてメタしてハイパーしたもの" は @c (M-H-A) となる。 @c KEYSEQ 定義中の @c INTEGER は、有効な文字コードでなくてはならない。 @c MAP-INCLUSION は、@c TAGS で指定される他の入力メソッドからマップを読 み込む。@c MAP-NAME が与えられていなければ、全てのマップを読む。 @verbatim MAP-ACTION ::= ACTION ACTION ::= INSERT | DELETE | SELECT | MOVE | MARK | SHOW | HIDE | PUSHBACK | POP | UNDO | COMMIT | UNHANDLE | SHIFT | CALL | SET | IF | COND | '(' MACRO-NAME ')' PREDEFINED-SYMBOL ::= '@0' | '@1' | '@2' | '@3' | '@4' | '@5' | '@6' | '@7' | '@8' | '@9' | '@<' | '@=' | '@>' | '@-' | '@+' | '@[' | '@]' | '@@' | '@-0' | '@-N' | '@+N' @endverbatim @verbatim STATE-LIST ::= STATE-INCUSION ? '(' 'state' STATE * ')' STATE-INCUSION ? STATE ::= '(' STATE-NAME [ STATE-TITLE-TEXT ] BRANCH * ')' STATE-NAME ::= SYMBOL STATE-TITLE-TEXT ::= MTEXT BRANCH ::= '(' MAP-NAME BRANCH-ACTION * ')' | '(' nil BRANCH-ACTION * ')' | '(' t BRANCH-ACTION * ')' STATE-INCLUSION ::= '(' 'include' TAGS 'state' STATE-NAME ? ')' @endverbatim 入力メソッドがそれ単体で利用されることがなく常に他の入力メソッドに読 み込まれて用いられる場合には、@c STATE-LIST は省略できる。 @c STATE-INCLUSION は、@c TAGS で指定される他の入力メソッドからステート を読み込む。@c STATE--NAME が与えられていなければ、すべてのステートを読 む。 @c STATE-TITLE-TEXT は、もし指定されていれば、入力メソッドがこの 状態にある時スクリーン上に表示されるテキストである。省略された場合には @c TITLE-TEXT が用いられる。 @c BRANCH の第一の形式では、@c MAP-NAME は @c MAP に現われるものでなく てはならない。この場合、@c MAP-NAME の @c KEYSEQ の一つに合致するキー列 がタイプされれば、 @c BRANCH-ACTION が実行される。 @c BRANCH の第二の形式では、その時点の状態のいずれの @c BRANCH にも合致 しないキー列がタイプされれば、@c BRANCH-ACTIONが実行される。 @c nil で始まる @c BRANCH がなく、入力されたキー列がその時点でのいずれの @c BRANCH にも合致しない場合には、入力メソッドは初期状態に遷移する。 @c BRANCH の第三の形式では、その状態に移動した時点で @c BRANCH-ACTION が実行される。もし初期状態であれば、入力メソッドの入力コンテクストを生 成した時点で @c BRANCH-ACTION を実行する。 @verbatim BRANCH-ACTION ::= ACTION @endverbatim 入力メソッドはシンボルのリストを二つ持つ。 各 @c PREDEFINED-SYMBOL はマーカとして用いられた場合特別な意味を持つ。 @c PREDEFINED-SYMBOL のいくつかは、 @c SELECT アクション中で候補のイン デックスとして用いられた際特別な意味を持つ。 また、これも特別な意味を持つ。 以下はサラウンドテキスト処理に用いられる。