/* 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 ? VARIABLE-LIST ? COMMAND-LIST ? TITLE MAP-LIST MACRO-LIST ? MODULE-LIST ? STATE-LIST IM-DECLARATION ::= '(' 'input-method' LANGUAGE NAME [ '(version' VERSION ')'] ')' 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 VERSION ::= 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 VERSION はこの入力メソッドが必要とする m17n ライブラリの最小バージョ ンを指定する。フォーマットは "XX.YY.ZZ" であり、XX はメジャーバージョ ン、 YY はマイナーバージョン、ZZ はパッチレベルを表す。 @c DESCRIPTION はこの入力メソッドの説明を @c MTEXT-OR-GETTEXT で指定す る。もしこれが2番目の形式を取っていれば、 @c MTEXT は現在のロケールに 従って "gettext" によって翻訳される(翻訳文が提供されている場合)。 @c VARIABLE-DECLARATION はこの入力メソッドで使用される変数を宣言する。 変数をデフォルト値に初期化したり、ユーザがカスタマイズしたりする場合に は、ここで宣言されなくてはならない。 @c COMMAND-DECLARATION はこの入力メソッドで使用されるコマンドを宣言する。 コマンドをデフォルトキーシーケンスに割り当てたり、ユーザがカスタマイズ したりする場合には、ここで宣言されなくてはならない。 @c TITLE-TEXT はこの入力メソッドが有効な時、スクリーン上に表示されるテ キストである。 @verbatim MAP-LIST ::= '(' 'map' MAP * ')' MAP ::= '(' MAP-NAME RULE * ')' MAP-NAME ::= SYMBOL RULE ::= '(' KEYSEQ MAP-ACTION * ')' KEYSEQ ::= MTEXT | '(' [ SYMBOL | INTEGER ] * ')' @endverbatim @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 は、有効な文字コードでなくてはならない。 @verbatim MAP-ACTION ::= ACTION ACTION ::= INSERT | DELETE | SELECT | MOVE | MARK | SHOW | HIDE | PUSHBACK | POP | UNDO | 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 MACRO-LIST ::= '(' 'macro' MACRO * ')' MACRO ::= '(' MACRO-NAME MACRO-ACTION * ')' MACRO-NAME ::= SYMBOL MACRO-ACTION ::= ACTION @endverbatim @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 STATE-LIST ::= '(' 'state' STATE * ')' 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 * ')' @endverbatim @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 BRANCH の第三の形式では、その状態に移動した時点で @c BRANCH-ACTION が実行される。もし初期状態であれば、入力メソッドの入力コンテクストを生 成した時点で @c BRANCH-ACTION を実行する。 @verbatim BRANCH-ACTION ::= ACTION @endverbatim 入力メソッドはシンボルのリストを二つ持つ。 各 @c PREDEFINED-SYMBOL はマーカとして用いられた場合特別な意味を持つ。 @c PREDEFINED-SYMBOL のいくつかは、 @c SELECT アクション中で候補のイン デックスとして用いられた際特別な意味を持つ。 また、これも特別な意味を持つ。 以下はサラウンドテキスト処理に用いられる。