/* 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
入力メソッドはシンボルのリストを二つ持つ。
- マーカリスト
マーカは preediting テキスト中での文字位置を示すシンボルである。@c
MARK アクションはマーカを特定の位置に設定する。@c MOVE と @c DELETE ア
クションはマーカの位置を参照する。
- 変数リスト
変数は整数の値を持つシンボルである。値は@c SET アクションによって設定さ
れ、@c SET, @c INSERT, @c IF に参照される。すべての変数の初期値は(暗黙
に) 0 である。
各 @c PREDEFINED-SYMBOL はマーカとして用いられた場合特別な意味を持つ。
- @c @@0, @c @@1, @c @@2, @c @@3, @c @@4, @c @@5, @c @@6, @c @@7, @c @@8, @c @@9
それぞれ 0 番目から 9 番目の位置
- @c @@<, @c @@=, @c @@>
最初の、今の、最後の位置
- @c @@-, @c @@+
前の、次の位置
- @c @@[, @c @@]
候補リストが変化する際の前と次の位置
@c PREDEFINED-SYMBOL のいくつかは、 @c SELECT アクション中で候補のイン
デックスとして用いられた際特別な意味を持つ。
- @c @@<, @c @@=, @c @@>
現在の候補グループ中での最初の、今の、最後の候補
- @c @@-
前候補。今の候補が今の候補グループ中での最初のものであれば、前の候補グ
ループの最後の候補。
- @c @@+
次候補。今の候補が今の候補グループ中での最後のものであれば、次の候補グ
ループの最初の候補。
- @c @@[, @c @@]
それぞれ前と後の候補グループ中で、今の候補と同じ候補インデックスを持つ
もの。
また、これも特別な意味を持つ。
以下はサラウンドテキスト処理に用いられる。
- @c @@-0
サラウンドテキストがサポートされていれば -1 、そうでなければ -2 。
- @c @@-N
ここで @c N は正の整数である。この変数の値は、プリエデット中の現在の位
置から @c N 文字前の文字である。もしプリエディット中で先行する文字がM
(M @c @@+N
ここで @c N は正の整数である。この変数の値は、プリエデット中の現在の位
置から @c N 文字後の文字である。もしプリエディット中で後続する文字がM
(M
各アクションの引数と振舞いは以下の通り。
@verbatim
INSERT ::= '(' 'insert' MTEXT ')'
| MTEXT
| INTEGER
| '(' 'insert' SYMBOL ')'
| '(' 'insert' '(' CANDIDATES * ')' ')'
| '(' CANDIDATES * ')'
CANDIDATES ::= MTEXT | '(' MTEXT * ')'
@endverbatim
第一、第二の形式は @c MTEXT を現在の位置の前に挿入する。
第三の形式は、文字 @c INTEGER を現在の位置の前に挿入する。
第四の形式は、@c SYMBOL を変数として扱い、その値が正しい文字コードであ
れば現在の位置の前に挿入する。
第五、第六の形式では、@c CANDIDATES は候補グループを表し、@c
CANDIDATES の各要素が候補を表す。つまり@c CANDIDATES が M-text であれば、
候補はそのM-text 中の文字であり、@c CANDIDATES が M-text のリストであれ
ば、候補はそれらの M-text である。
これらの形式は現在の位置の直前に最初の候補を挿入する。挿入された文字列
には、候補のリストと現在選択されている候補を指す情報が付加されている。
挿入によってマーカの位置は自動的に変更される。
@verbatim
DELETE ::= '(' 'delete' SYMBOL ')'
| '(' 'delete' INTEGER ')'
@endverbatim
第一の形式は @c SYMBOL をマーカとして、マーカと現在の位置の間の文字を
削除する。
第二の形式は @c INTEGER を文字位置として、その文字位置と現在の位置の間
の文字を削除する。
削除によってマーカの位置は自動的に変更される。
@verbatim
SELECT ::= '(' 'select' PREDEFINED-SYMBOL ')'
| '(' 'select' INTEGER ')'
@endverbatim
このアクションはまず、現在の位置の直前の文字が、候補リストが付加されて
いる文字列に属すかどうかを調べる。そうであれば、その文字列を引数によっ
て指定された候補に入れ換える。
第一の形式では @c PREDEFINED-SYMBOL を前述の候補インデックスとして扱い、
それによって候補リスト中の新しい候補が指定される。
第二の形式では @c INTEGER は候補インデックスであり、候補リスト中の新し
い候補を指定する。
@verbatim
SHOW ::= '(show)'
@endverbatim
このアクションは、入力メソッドドライバに現在の位置の前にある文字列に付
加されている候補リストを示すように指示する。
@verbatim
HIDE ::= '(hide)'
@endverbatim
このアクションは、入力メソッドドライバに現在示されている候補リストを隠
すように指示する。
@verbatim
MOVE ::= '(' 'move' SYMBOL ')'
| '(' 'move' INTEGER ')'
@endverbatim
第一の形式は @c SYMBOL をマーカとして、それを新しい現在の位置とする。
第二の形式は @c INTEGER を文字位置として、その位置を新しい現在の位置と
する。
@verbatim
MARK ::= '(' 'mark' SYMBOL ')'
@endverbatim
このアクションは @c SYMBOL をマーカとして、それを現在の位置に設定する。
@c SYMBOL は @c PREDEFINED-SYMBOL であってはならない。
@verbatim
PUSHBACK :: = '(' 'pushback' INTEGER ')'
| '(' 'pushback' KEYSEQ ')'
@endverbatim
第一の形式は、@c INTEGER の値が正ならば最新の @c INTEGER 個のキーイベン
トをイベントキューに差し戻す。0 ならばすべてのキーイベントを差し戻す。
第二の形式は、@c KEYSEQ 中のキーをイベントキューに差し戻す。
@verbatim
POP ::= '(' 'pop' ')'
@endverbatim
このアクションはまだ処理されていない最初のイベントをイベントキューから
取り出し破棄する。
@verbatim
UNDO :: = '(' 'undo' [ INTEGER | SYMBOL ] ')'
@endverbatim
引数が無い場合、このアクションは最新の二つのキーイベント、すなわちこの
コマンドによって引き起こされたものとその直前のもの、をキャンセルする。
整数値の引数 NUM がある場合、それは正か負であり 0 であってはならない。
正ならば最新のものから数えて NUM 個目のイベントをキャンセルする。負なら
ば最新の(- NUM) 個のイベントをキャンセルする。
シンボルの引数がある場合、それは整数に帰着されなくてはならず、その値が
上記の正数値引数の場合と同様に取り扱われる。
@verbatim
UNHANDLE :: = '(unhandle)'
@endverbatim
このアクションは現在の preediting テキストをコミットし、最新のキーを未
処理として返す。
@verbatim
SHIFT :: = '(' 'shift' STATE-NAME ')'
@endverbatim
このアクションは現在の状態を @c STATE-NAME に移動させる。 @c
STATE-NAME は @c STATE-LIST に現われるものでなくてはならない。
@verbatim
CALL ::= '(' 'call' MODULE-NAME FUNCTION ARG * ')'
ARG ::= INTEGER | SYMBOL | MTEXT | PLIST
@endverbatim
このアクションは外部モジュール @c MODULE-NAME の関数 @c FUNCTION を呼
ぶ。@c MODULE-NAME と @c FUNCTION は @c MODULE-LIST に現われるものでな
くてはならない。
関数は (#MPlist *) 型の引数とともに呼ばれる。最初の要素のキーは #Mt で
あり、その値は#MInputContext 型のオブジェクトへのポインタである。第二
の要素のキーは#Msymbol であり、値は現在の状態名である。 @c ARGs は三つ
目以降の要素の値として用いられる。それらの要素のキーは自動的に決定され
る。@c ARG が整数値ならば対応するキーは #Minteger であり、@c ARG がシ
ンボルならば、対応するキーは #Msymbol、などのように。
関数は NULL を返すか、または行うべきアクションのリストを表す (#MPlist
*) 型の値を返さなくてはならない。
@verbatim
SET ::= '(' CMD SYMBOL1 EXPRESSION ')'
CMD ::= 'set' | 'add' | 'sub' | 'mul' | 'div'
EXPRESSION ::= INTEGER | SYMBOL2 | '(' OPERAND EXPRESSION * ')'
OPERAND ::= '+' | '-' | '*' | '/' | '|' | '&' | '!'
| '=' | '<' | '>' | '<=' | '>='
@endverbatim
このアクションは @c SYMBOL1 と @c SYMBOL2 を変数として、@c SYMBOL1 の
値を以下のように設定する。
@c CMD が 'set' ならば、@c SYMBOL1 の値を @c EXPRESSION の値に設定する。
@c CMD が 'add' ならば、@c SYMBOL1 の値を @c EXPRESSION の値だけ増やす。
@c CMD が 'sub' ならば、@c SYMBOL1 の値を @c EXPRESSION の値だけ減らす。
@c CMD が 'mul' ならば、@c SYMBOL1 の値を @c EXPRESSION の値を掛けたも
のにする。
@c CMD が 'div' ならば、@c SYMBOL1 の値を @c EXPRESSION の値で割ったも
のにする。
@verbatim
IF ::= '(' CONDITION ACTION-LIST1 ACTION-LIST2 ')'
CONDITION ::= [ '=' | '<' | '>' | '<=' | '>=' ] EXPRESSION1 EXPRESSION2
ACTION-LIST1 ::= '(' ACTION * ')'
ACTION-LIST2 ::= '(' ACTION * ')'
@endverbatim
このアクションは、 @c CONDITION が真であれば @c ACTION-LIST1 を実行し、
そうでなければ @c ACTION-LIST2 を (もしあれば) 実行する。
@c SYMBOL1 と @c SYMBOL2 は変数として扱われる。
@verbatim
COND ::= '(' 'cond' [ '(' EXPRESSION ACTION * ') ] * ')'
@endverbatim
このアクションは対応する @c EXPRESSION が 0 でない値をとる最初のアクショ
ン @c ACTION を実行する。
@ifnot FOR-MAN
@section im-seealso SEE ALSO
@ref mim-list "Input Methods provided by the m17n database",
@ref mdbGeneral "mdbGeneral(5)"
*/
/*
Copyright (C) 2003, 2004, 2005
National Institute of Advanced Industrial Science and Technology (AIST)
Registration Number H15PRO112
This file is part of the m17n database; a sub-part of the m17n
library.
The m17n library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation; either version 2.1 of
the License, or (at your option) any later version.
The m17n library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the m17n library; if not, write to the Free
Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
/* Local Variables: */
/* coding: euc-jp */
/* End: */