From: nisikimi Date: Mon, 30 Nov 2009 05:58:42 +0000 (+0000) Subject: *** empty log message *** X-Git-Tag: XML-BEFORE-XEX~3 X-Git-Url: http://git.chise.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=28fdc5b7553ac8596e7298ce7e5312da9853fec2;p=m17n%2Fm17n-db.git *** empty log message *** --- diff --git a/FORMATS/EXPR.txt b/FORMATS/EXPR.txt new file mode 100644 index 0000000..edd6e2d --- /dev/null +++ b/FORMATS/EXPR.txt @@ -0,0 +1,724 @@ +/* Copyright (C) 2003, 2004, 2005, 2009 + National Institute of Advanced Industrial Science and Technology (AIST) + Registration Number H15PRO112 + See the end for copying conditions. */ + +/***en + +@page pageexpr Expressions used in the m17n database +@section expr Expressions used in the m17n database + +Both Input Methods and Font Layout Tables have common ways to +represent basic terms and expressions built up with the terms. + +The following defines a schema for the terms and expressions, written +in RelaxNG. (This schema file can be found at +m17n-db-xml/MIM/expr.rng and a schema file for Input Method or Font +Layout Table should include it.) + +@verbatim + + + + + + + + + + + + + + + + + +@endverbatim + +Expressions in the m17n database are terms, defuns that define +functions, defmacros that define macros and defvars that define +variables. + +@verbatim + + + + + + + + + + + + + + + + + \?. + [0#]x[0-9A-F]{1,6} + + + + + + + + + + + + + + + + + + + + + + + + +@endverbatim + +Basic terms in the m17n database are integers, strings, symbols, +lists, variable references and function calls. The schema file for +Input Method or Font Layout Table may define other kind of terms. + +Decimal character codes, hexadecimal character codes, and characters +represented with special syntax (a question mark followed by the +character) are also integers. + +@verbatim + + + + + +@endverbatim + +A <varref> element refers to the variable whose name is +specified with the "vname" attribute. + +#if EXAMPLE_CODE + +#endif + +This code referes to the variable "handled-keys". + +@verbatim + + + + + + + + + +@endverbatim + +A <defun> element defines a function whose name is specified +with the "fname" attribute. + +@verbatim + + + + + + + + + + + + + + + + + + + +@endverbatim + +A <args> element appears as a child element of a <defun> +or a <defmacro>, and defines its fixed, optional and rest +arguments. + +@verbatim + + + + + + + + + +@endverbatim + +A <defmacro> element defines a macro whose name is specified +with the "fname" attribute. Unlike <defmacro>, <args> +must be already evaluated when the macro is called. + +@verbatim + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@endverbatim + +Each <defvar> declares one variable. A variable, declared here +or not, is referred with the attribute "vname". Two variables with +the same "vname" attribute value cannot be declared. + +A <defvar> may have a <integer> a <string> or a +<symbol> element that specifies its value. All variables are +implicitly initialized to the integer value zero. + +When a <defvar> specifies a value, it may have the +<possible-value> element that lists the possible values of the +variable. The type (one of integer, symbol, string) of the possible +values must be same with that of the specifeid value. + +When the type of the specified value is integer, +<possible-value> may have one or more <range> elements. A +<range> element specifies a range of integers that the variable +can have as its value, and can be used mixed with <integer> +elements. A <range> element has two <integer>s; the first +one defines the minimum integer value that a variable can take, and +the second the maximum. + +@verbatim + + + + + + + + +@endverbatim + +A <description> element specifies the description text of its +parent. The content of the element <gettext> is translated +according to the current locale by "gettext" (if the translation is +provided). + + + + + + + + + + + + + +A <funcall> element calls a function or a macro specified by the +"fname" attribute, defined with a <defun> or a <defmacro>. +The m17n database has some predefined functions, too. + +In function definitions, arguments are often restricted to a certain +type. For example, arithmetic operations would require integers, not +strings. The following four elements are defined to represent such +restrictions. + +@verbatim + + + + + + + +@endverbatim + +A <intterm> is a term whose value is an integer. That is, if a +<varref> appears as a <intterm>, its value must be an +integer and if a <funcall> appears as a <intterm>, it must +return an integer. The schema file for Input Method or Font Layout +Table may define other kind of intterms. + +@verbatim + + + + + + + + + + + + + + + + + + + + + + + +@endverbatim + +A <strterm>, <symterm> or <listterm> is a term whose +value is a string, a symbol or a list respecivelly. That is, if a +<varref> appears as a <strterm>, its value must be an +string and if a <funcall> appears as a <symterm>, it must +return a symbol. + +@verbatim + + +@endverbatim + +The m17n database has the following predefined functions. + +@verbatim + +@endverbatim + +This element sets the value of the variable "vname" to the given term. +The value of this funcall is the value of the term. + +#if EXAMPLE_CODE +4 +#endif + +This code sets @c MAX-COUNT to 4. + +@verbatim + +@endverbatim + +This element evaluates the given terms one by one until one is +evaluated to 0. If none is evaluated to 0, the value of this funcall +is <integer>1</integer>. Otherwise, +<integer>0</integer>. + +@verbatim + +@endverbatim + +This element evaluates the given terms one by one until one is +evaluated not to 0. If none is evaluated not to 0, the value of this +funcall is <integer>0</integer>. Otherwise, +<integer>1</integer>. + +@verbatim + +@endverbatim + +If the given term is <integer>0</integer>, the value of +this funcall is <integer>1</integer>. Otherwise, +<integer>0</integer>. + +@verbatim + +@endverbatim + +If the given terms have the same object, the value of this funcall is +<integer>1</integer>. Otherwise, +<integer>0</integer>. + +@verbatim + +@endverbatim + +If the given terms have the same object, the value of this funcall is +<integer>0</integer>. Otherwise, +<integer>1</integer>. + +@verbatim + +@endverbatim + +If the first term equals to the second term, the value of this funcall +is <integer>1</integer>. Otherwise, +<integer>0</integer>. The equality of terms is defind as +below: An integer equals to another integer iff they contain the same +integer value. A string equals to another string iff they contain +strings of the same characters. A symbol equals to another symbol iff +they contain the same symbol. A list equals to another list iff they +are of the same length, and the Nth element of the first list equals +to the Nth element of the second list. + +@verbatim + +@endverbatim + +If the first term matches with second term, the value of this funcall +is <integer>1</integer>. Otherwise, +<integer>0</integer>. The match of two terms is defined +as below: An integer matches with another integer iff they contain the +same integer value. A string matches with another string iff the +first string is a valid regular expression matching with the second +string. A symbol matches with another symbol iff they contain the +same symbol. A list matches with another list iff the first list is +no longer than the second, and the Nth element of the first list +equals to the Nth element of the second list. An error matches with +another error iif the first eroor's error type is or is the +same as the second error's error type. + +@endverbatim + + + + +@endverbatim + +These elements take two integer terms and compare them. The value of +this funcall is <integer>1</integer> when when first +integer is less than, less than or equal to, equal to, greater than or +equal to, greater than, and not equal to the second value, +respectivelly. Otherwise, <integer>0</integer>. + +@verbatim + + + + + + + + + + + + +@endverbatim + +When the attribute "vname" is given, these element adds, subtracts, +multiplies or divides the value of the variable "vname" by the given +integer term(s), and the result becomes the value of the variable and +the funcall. When the attribute is not given, these element adds, +subtracts, multiplies or divides the first integer term by the rest. + +#if EXAMPLE_CODE +1 +#endif + +This code increments @c C-AFTER-V by 1. + +@verbatim + + + + +@endverbatim + +When the attribute "vname" is given, this element calculates the +remaindar when the value of the variable "vname" is divided by the +given integer term, and the result becomes the value of the funcall. +When the attribute is not given, this element calculates the remaindar +when the first integer term is divided by the second integer term. + +@verbatim + + + + + + + + + +@endverbatim + +When the attribute "vname" is given, these elements perform "logical +and", "logcal inclusive or", or "logical exclusive or" of the value of +the variable "vname" and the given integer term(s). The result +becomes the value of the funcall. When the attribute is not given, +these elements perform "logical and", "logcal inclusive or", or +"logical exclusive or" of the given integer term(s). + +@verbatim + + + + +@endverbatim + +When the attribute "vname" is given, this element shifts the bit in +the value of the variable "vname" to the left by the count specified +with the given integer term. The result becomes the value of the +funcall. When not, this element shifts the bit in the first integer +term to the left by the count specified with the second integer term. + +@verbatim + + + + +@endverbatim + +When the attribute "vname" is given, its value must be a list and that +list is modified destructively by concatinating all the elements of +the given terms if it is a list, or the element itself if not, in the +specified order. When no attribute is given, a list is made by +concatinating all the given terms in the same manner. The resulting +list becomes the value of the funcall. + +@verbatim + + + + +@endverbatim + +When the attribute "vname" is given, its value must be a string and +that string is modified destructively by concatinating all the given +term(s). If a term is a string term, the string is to be +concatinated. If a term is a integer term, a string of a character +whose code is its integer value is to be concatinated. If If a term +is a list term, its elements must be interger terms and a string +containing characters whose codes are their integer values is to be +concatinated. + +When no attribute is given, a string is made by concatinating all the +given term(s) in the same manner. The resulting list becomes the +value of the funcall. + +@endverbatim + +@endverbatim + +This element counts the length of the given string or list term. + +@verbatim + + + +@endverbatim + +This element selects the N-th element of the given string or list +term. N is given as the integer term. + +@verbatim + +@endverbatim + +This element makes a copy of the given string or list term. + +@verbatim + + + +@endverbatim + +This element inserts the given string or list term to the value of the +variable "vname". The position to insert is given as the integer +term. + +@verbatim + + + +@endverbatim + +This element deletes elements at the position between two integer +terms from the value of the variable "vname". + +Elements below are for control structures. + +@verbatim + +@endverbatim + +This element evaluates each of the given terms in sequence and returns +the value of the last term. + +@verbatim + +@endverbatim + +If the first term is evaluated to be true, this element evaluates the +second term. If not and if the third term exists, the third term is +evaluated. + +#if EXAMPLE_CODE + + 0 + state-init + +#endif +This code performs the <shift> action if the variable @c C is negative. + +@verbatim + +@endverbatim + +If the first term is evaluated to be true, this element evaluates the rest. + +@verbatim + +@endverbatim + +This <cond> evaluates the first element of the given lists, one +by one, and and when it finds the first list whose first element is +evaluated to be true, other elements in the list are evaluated. + +#if EXAMPLE_CODE + + + 0 + 1 + + + 1 + + + +#endif + +This code sets the varialbe "ret" to the integer value 1 when the +variable "level" has value 0, otherwise, calls "macro-cp12". + +@verbatim + +@endverbatim + +This element repeatedly executes the given terms. + +@verbatim + +@endverbatim + +This element evaluate the first term and if true, evaluate the rest. +This processs repeats until the first term becomes not true. + +@verbatim + + + + +@endverbatim + +This element repeatedly evaluate terms for each element of the string +or list term. The attribute "vname" specifies the varialve that the +current element is assigned to, on each loop. + +@verbatim + +@endverbatim + +This element exits iterators and returns the term if it is given. + +@verbatim + +@endverbatim + +This element exits executions and returns the term if it is given. + +@verbatim + + + + + +@endverbatim + +Thie element evalustes the given terms one by one, until a term +matching with the specified symbol or error is thrown by +>throw/<. If such an item is thrown, the value of this element +is >integer<1>/integer<, otherwise +>integer<0>/integer<. If the attribute "vname" is given, +its value is set to the last evaluated term. It is the value of +>throw/< if thrown. + + +@verbatim + + + + + + +@endverbatim + +This element throws to the catch for the specified symbol or eroor. +The value of this element is the term (if any) or the symbol, or the +error. + +@verbatim + +@endverbatim + +This element quotes the given term. + +@verbatim + +@endverbatim + +This element evaluates the given term. + +@verbatim + + + + +@endverbatim +This element shows the type of the given term. The type is +one of the followings: integer, string, +symbol, list, error. + + + diff --git a/FORMATS/IM.ja.txt b/FORMATS/IM.ja.txt index 925e265..85326d7 100644 --- a/FORMATS/IM.ja.txt +++ b/FORMATS/IM.ja.txt @@ -18,8 +18,8 @@ m17n ライブラリは、m17n データベースから動的にロードでき @section im-format 文法と意味 以下に RelaxNG で書かれた入力メソッド定義用スキーマを示す。(このスキー -マファイルは m17n-db-xml/MIM/mim.rng にある。) ドライバはファイルやス -トリームから定義をロードし、プロパティリストの形式に変換する。 +マファイルは m17n-db-xml/MIMNEW/mimnew.rng にあり、 +基本的な表現や項を定義する m17n-db-xml/MIMNEW/mimnew.rng も利用する。) @verbatim @@ -31,24 +31,19 @@ m17n ライブラリは、m17n データベースから動的にロードでき xmlns="http://relaxng.org/ns/structure/1.0" ns="http://www.m17n.org/MIM"> + + - - - - - - - - - + + @@ -58,11 +53,7 @@ m17n ライブラリは、m17n データベースから動的にロードでき 入力メソッドのトップレベルノードは <input-method> というタグを持つ。 -<description> エレメントは、<input-method>, -<variable>, <command> 中に現れることができ、その内容は親要 -素を説明するテキストである。<get-text> エレメントの内容は、現在の -ロケールに従って "gettext" によって翻訳される(翻訳文が提供されている場 -合)。 +<description> の詳細については @ref expr を参照。 <title> エレメントの内容は、この入力メソッドが有効な時スクリーン 上に表示されるテキストである。 @@ -80,10 +71,12 @@ Version 2.0 <http://www.thdl.org/collections/langling/ewts/ewts.php>. @@ -165,10 +158,10 @@ Version 2.0 <http://www.thdl.org/collections/langling/ewts/ewts.php>. #endif -<m17n-version> エレメント(任意)は、この入力メソッドが必要とする -m17n ライブラリの最小バージョンを指定する。フォーマットは "X.Y.Z" であ -り、X はメジャーバージョン、 Y はマイナーバージョン、Z はパッチレベルを -表す。 +省略可能なエレメント <m17n-version> は、この入力メソッドが必要と +するm17n ライブラリの最小バージョンを指定する。フォーマットは "X.Y.Z" +であり、X はメジャーバージョン、 Y はマイナーバージョン、Z はパッチレベ +ルを表す。 @subsection im-setups 入力メソッドの設定 @@ -176,115 +169,42 @@ m17n ライブラリの最小バージョンを指定する。フォーマット - - - - - - - - - - - - - - - - string - - - - symbol - - - - integer - - - - - - - - - - - - - - string - - - - symbol - - - - integer - - - - - - - - - - - - + + + @endverbatim <variable-list> はこの入力メソッドで使用される変数を宣言する。 +<defvar> エレメントの詳細については @ref expr を参照。 -変数をデフォルト値に初期化したり、ユーザがカスタマイズしたりする場合に -は、ここで宣言されなくてはならない。言い替えれば、デフォルト値が必要で -あったり、可能な値が限定されていたりしない変数は、どこにでも宣言なく現 -れることができる。 +変数をデフォルト値に初期化したり、"global.mix" から継承した変数をユーザ +がカスタマイズしたりする場合には、ここで宣言しなくてはならない。言い替 +えれば、デフォルト値が必要であったり、可能な値が限定されていたりしない +変数は、どこにでも宣言なく現れることができる。 この宣言は二通りに利用される。一つめは新しい変数を導入するためであり、 -この場合 <variable> 中の <value> エレメントは省略できない。 -もう一つは "global.mimx" で宣言された変数を継承し、違ったデフォルト値を -指定したり、この入力メソッド用にカスタマイズ可能にしたりするためである。 -この場合には <value> は省略できる。 - -各 <variable> は一つの変数を宣言する。変数は、宣言されていないも -のも含め属性 "id" によって参照される。すべての変数は暗黙のうちに整数値 -0に初期化されている。 - -M-text である <value> は、<insert> が参照する。シンボルであ -る <value> は直接参照されず、ライブラリが暗黙的に使用する。 -(e.g. candidates-charset). 整数値である <value> は、 -<set>, <add>, <sub>, <mul>, <div> によっ -て設定、変更、参照され、<insert>, <select>, <undo>, -<if>, <cond> に参照される。 - -<variable-value-candidate> は変数が取り得る値のリストである。 -<c-value> は可能な値の一つを表しており、M-text かシンボルか整数値 -である。 - -<c-range> は変数が取り得る整数値の範囲を示すものであり、 -<c-value> と併用できる。属性 "from" は変数のとる最小値を、"to" が -最大値を示す。 +この場合 <defvar> 中で値を指定しなければならない。もう一つは +"global.mimx" で宣言された変数を継承し、違ったデフォルト値を指定したり、 +この入力メソッド用にカスタマイズ可能にしたりするためである。この場合に +は値は省略できる。 #if EXAMPLE_CODE - + Flag to tell whether or not to generate precomposed characters. If 1, generate precomposed characters if available (e.g. "ྲྀ"(U+0F76). If 0, generate only decomposed characters (e.g. "ྲྀ" (U+0FB2 U+0F80). - 0 - - 0 - 1 - - + 0 + + 0 + 1 + + #endif @@ -293,304 +213,344 @@ M-text である <value> は、<insert> が参照する。シンボ @verbatim - - predefined - - - handled-keys - predefined-surround-text-flag - @.+ - - - - -@endverbatim - -Predefined-variable は属性 "type" の値が "predefiend" である変数である。 -属性 "id" の値が "handled-keys" であるとき、変数の値はその時点で処理さ -れているキーの数である。属性 "id" の値が -"predefined-surround-text-flag" であるとき、変数の値は -1 か -2 であり、 -それぞれサラウンドテキストがサポートしていること、そうでないことを示す。 - -#if EXAMPLE_CODE - -#endif - -このコードはその時点で処理されているキーの数を参照する。 -@verbatim - - - - + + + command-.* - - - + - + + + + + + + + + + + @endverbatim <command-list> は、この入力メソッドで使用されるコマンドを宣言する。 コマンドをデフォルトキーシーケンスに割り当てたり、ユーザがカスタマイズ したりする場合には、ここで宣言されなくてはならない。 +各 <defcmd> はコマンドを一つ宣言する。コマンドは属性 +"cname" で参照され、その値は "command-" で始まらなくてはならない。 +<keyseq> は1個以上の listerm か stringterm を含む。 + <variable-list> 同様、この宣言は二通りに利用される。一つめは新し -いコマンドを導入するためであり、この場合 <command> 中の +いコマンドを導入するためであり、この場合 <defcmd> 中の <keyseq> エレメントは省略できない。もう一つは "global.mimx" で宣 言されたコマンドを継承し、違ったキーバインディングを指定したり、この入 力メソッド用にカスタマイズ可能にしたりするためである。この場合には <keyseq> は省略可能である。 -各 <command> は一つのコマンドを宣言し、コマンドは属性 "id" によっ -て参照される。 - #if EXAMPLE_CODE - - + + Commit - Commit the preedit text +Commit the preedit text - Return - Linefeed - - + Return + Linefeed + + #endif @verbatim - - + - - module-.* - - - - - - function-.* + + + + + .*-function-.* + - + - + - -@endverbatim +@endbatim 各 <module> エレメントは一つの外部モジュール (動的ライブラリ)を宣 言し、属性 "id" は外部モジュールの名前を表す。 -<function> エレメントはモジュールによってエクスポートされている関 -数名を示す。 - -属性 "id" の値が "function-init" であれば、その関数はこの入力メソッド用 -の入力コンテクストが生成される際に、デフォルトの引数 (<call> の節 -参照) のみとともに呼ばれる。 "function-fini" であれば、 入力コンテクス -トが破壊される際に、デフォルトの引数のみとともに呼ばれる。 +<defun> エレメントはモジュールによってエクスポートされている関数 +名を示す。属性 "fname" の値は、モジュール名, "-function-", 関数名を繋げ +たものである。属性 "fname" の値が "-init" で終れば、その関数はこの入力 +メソッド用の入力コンテクストが生成される際に、デフォルトの引数 参照) の +みとともに呼ばれる。 "-fini" で終れば、 入力コンテクストが破壊される際 +に、デフォルトの引数のみとともに呼ばれる。 #if EXAMPLE_CODE - - - - - - - + + + + + + + #endif -このコードは外部モジュール "module-libmimx-anthy" を宣言する。この外部 -モジュール は6つの関数をエクスポートしている。 +このコードは外部モジュール "libmimx-anthy" を宣言する。この外部モジュー +ル は6つの関数をエクスポートしている。 -@verbatim +外部モジュールの関数は、<funcall> で呼ぶことができる。関数は、 +NULL かあるいは実行するべき <funcall> を示すリストを返す。 + +#if EXAMPLE_CODE + + t + +#endif + +このコードはモジュール 'libmimx-anthy' の関数 'resize' を引数 +"t" で呼ぶ。 +@verbatim - - - - - macro-.* - - - - + + + + - -@endverbatim +@endbatim <macro-list> はこの入力メソッドで使用されるマクロを宣言する。 -<macro> エレメントは複数の <action> をまとめてそれに名前を付ける。 -属性 "id" が <macro> の名前であり、この属性によってマクロを参照する。 +<defun> エレメントの詳細については @ref expr を参照。 + #if EXAMPLE_CODE - - - - - - : : ;; more s - + + + + + @-10x200C + @-10x200D + + @-1 + + + + + #endif -このコードはマクロ "macro-forward" を宣言する。 +このコードはマクロ "macro-delete-preceding-zw" を宣言する。 -@verbatim - +@subsection im-terms 入力メソッドの項(term) + +m17n データベースには、入力メソッドを記述するための特別な項(term)である +マーカ、セレクタ、キーシークエンスが定義されている。 + +@verbatim + - - + + + - @endverbatim -マーカは preediting テキスト中での文字位置を示すシンボルである。 -<mark-current-position> はマーカを特定の位置に設定する。 -<move-to-marker> と <delete-to-marker> はマーカの位置を参照 -する。 +これらの項はmimnew.rngで定義された関数内で用いられる。 @verbatim - - - - - @[0-9] - - @first - @current - @last - @previous - @next - @previous_candidate_list - @next_candidate_list - - + + - @endverbatim -predefined-marker は @@ で始まるマーカである。 @@0, @@1, ... , @@9は、 -それぞれ 0番目, 1番目, ... , 9番目の位置を示す。@@first, @@current, -@@last, @@previous, @@next はそれぞれ最初の、現在の、最後の、直前の、直 -後の位置を示す。@@previous_candidate_list 候補リストが変化する前の位置、 -@@next_candidate_list は候補リストが変化する際の次の位置を示す。 +マーカは preediting バッファ中での文字の位置を示すシンボルである。 +<mark> はマーカを特定の位置に設定する。<move>, +<char-at>, <delete> はマーカの位置を参照する。 + +@@ で始まるマーカは特別な意味を持つ。@@0, @@1, ... , @@9は、それぞれ +preediting バッファ中で 0 番目, 1番目, ... , 9番目の位置を示す。 +@@<, @@=, @@>, @@-, @@+はそれぞれ preediting バッファ中で最初の、 +現在の、最後の、直前の、直後の位置を示す。@@[ は候補リストが変化する前 +の位置、@@] は候補リストが変化する際の次の位置を示す。 + +@@+N と @@-N (N は正の整数) は N個前あるいは後の位置を示し、preediting +バッファ内外の文字を指し示すために用いる。preediting バッファ中の前ある +いは後の文字がN個より少なければ、入力スポットから数えて(N-バッファ中の +前後の文字数)文字前あるいは後の位置を示す。 + +これら以外のマーカは @@ で始まってはならない。 #if EXAMPLE_CODE - + @< #endif このコードは、バッファの最初の位置と現在の位置の間の文字を削除する。 -@verbatim +#if EXAMPLE_CODE + T +#endif - - - [^@].* - +このコードは、マーカをユーザ定義の位置 T へ移動する。 + +#if EXAMPLE_CODE + @-5 +#endif + +このコードは5文字前の文字を、preediting バッファ中であるかどうかにかか +わらず、参照する。 + +@verbatim + + + + + + +@endverbatim + +<markerterm> は、マーカを値としてもつ項である。すなわち、 +<varref> が <markerterm> として現れれば、その値はマーカでな +くてはならず、 <funcall> が <markerterm> として現れれば、そ +れはマーカを返さなくてはならない。 +@verbatim + + + + @first + @current + @last + @previous + @next + @previous-candidate-change + @next-candidate-change + + + @endverbatim -User-defined-marker は @@ で始まってはならない。 +セレクタは候補リスト中の位置を示し、<select> エレメント中で用いら +れる。@@first, @@current, @@last はそれぞれ、最初の、現在の、最後の候補 +を指す。@@previous は前の候補を指す。もし今の候補が今の候補グループ中で +の最初のものであれば、前の候補グループの最後の候補を指す。@@next は次の +候補を指す。もし今の候補が今の候補グループ中での最後のものであれば、次 +の候補グループの最初の候補を指す。@@previous_candidate_list と +@@next_candidate_list は、それぞれ前と後の候補グループ中で、今の候補と +同じ候補インデックスを持つものを指す。 + +<select> は内容として整数値をとることもできる。整数 N は、候補リスト中の +N番目の位置を表す。 #if EXAMPLE_CODE - + #endif -このコードは、マーカをユーザ定義の位置 T へ移動する。 +このコードは直前の候補を選択する。 @verbatim + + + + + + + +@endverbatim + +<selectorterm> は、セレクタを値としてもつ項である。すなわち、 +<varref> が <selectorterm> として現れれば、その値はセレクタ +でなくてはならず、 <funcall> が <selectorterm> として現れれ +ば、それはセレクタを返さなくてはならない。 - - - +@verbatim + + + - - + + - + - @endverbatim -<predefined-nth-previous-or-following-character> エレメントは、プ -リエデットバッファ中の1文字を指定する。 - -属性 "position" の値が負の整数 -N である場合、 -<predefined-nth-previous-or-following-character> エレメントは、プ -リエデット中の現在の位置から N 文字前の文字である。もしプリエディット中 -で先行する文字がM (M + + + 0x6F + S-@ + + + +ma #endif -このコードは直前の文字を参照する。 +これらは二つとも正しい入力シークエンスである。 @verbatim - - - @[0-9] - @first - @current - @last - @previous - @next - @previous_candidate_list - @next_candidate_list - + + + + + + - @endverbatim -Predefined-selector は候補グループ中での位置を示し、<select> エレ -メント中で用いられる。@@0, @@1, ... , @@9は、それぞれ 0番目, 1番目, -... , 9番目の位置を指す。@@first, @@current, @@last はそれぞれ、最初の、 -現在の、最後の候補である。@@previous は前の候補を指す。もし今の候補が今 -の候補グループ中での最初のものであれば、前の候補グループの最後の候補を -指す。@@next は次の候補を指す。もし今の候補が今の候補グループ中での最後 -のものであれば、次の候補グループの最初の候補を指す。 -@@previous_candidate_list と@@next_candidate_list は、それぞれ前と後の -候補グループ中で、今の候補と同じ候補インデックスを持つものを指す。 - -#if EXAMPLE_CODE -@first + #endif -このコードは後の文字1つを削除する。 +これらのコードはいずれもリストの最初の候補を選択する。 @verbatim - - - - - - - - - - - - variable - - - - - - + @endverbatim -<select> エレメントはまず、現在の位置の直前の文字が、候補リストが -付加されている文字列に属すかどうかを調べる。そうであれば、その文字列を -属性によって指定された候補に入れ換える。属性"selector" の値はいずれかの -predefined-selector であり、候補リスト中の新しい候補を指定する。属性 -"index" の値はリスト中の順番を示し、その順番の候補が選ばれる。値が -"variable" であった場合には、参照される変数は整数の値を持たなければなら -ず、その値の順番の候補が選ばれる。 - -#if EXAMPLE_CODE - -#endif - -これらのコードはそれぞれ前の候補と最初の候補を選択する。 +<show-candidates> エレメントは、現在の位置の前にある文字列に付加 +されている候補リストを示すよう入力メソッドドライバに指示する。 @verbatim + +@endverbatim - - - - - - +<hide-candidates> エレメントは、現在示されている候補リストを隠す +よう入力メソッドドライバに指示する。 +@verbatim + @endverbatim -この2つの <action>s は現在の位置を移動する。 -<move-to-marker> エレメントは指定されたマーカの位置に現在の位置を -移動する。<move-to-character-position> エレメントはその内容である -整数値を文字位置として扱い、そこへ現在の位置を移動する。 +<move> エレメントは現在の位置を移動する。 <markerterm> が +与えられれば、その位置に移動する。<intterm> が与えられれば、その +値を文字位置として扱い、そこへ現在の位置を移動する。 -#if EXAMPLE_CODE - -0 +#if EXAMPLE_CODE +@@< +0 #endif -これらのコードはそれぞれ直前、最初の位置へ現在の位置を移動する。 +これらのコードはいずれもバッファの最初の位置へ現在の位置を移動する。 @verbatim - - - - - - - + @endverbatim -<mark-current-position> エレメントは、指定のマーカを現在の位置に -設定する。 +<mark> エレメントは、指定のマーカを現在の位置に設定する。 #if EXAMPLE_CODE - +M #endif このコードは現在の位置にマーカ "M" を置く。 -@verbatim - - - - - - - - - +@verbatim + @endverbatim -この2つの <action> はキーイベントをイベントキューに差し戻す。 -<pushback-n-events> エレメントは最新のキーイベントを差し戻す。属 -性"n" の値が正の整数ならばそれは差し戻すイベントの数である。0ならばす -べて差し戻す。<pushback-keyseq> エレメントは、<keyseq;gt; で指 -定されたキーイベントを差し戻す。 +<pushback> エレメントはキーイベントをイベントキューに差し戻す。 +<keyseqterm> が与えられれば、指定されたキーイベントを差し戻す。 +<intterm> が与えられる場合にはその値は負であってはならない。正の +整数 N であれば N 個のイベントを差し戻す。0ならばすべて差し戻す。 #if EXAMPLE_CODE - +b #endif このコードはキー "b" を戻す。 @verbatim + +@endverbatim - - - - - - - - - - - - - - - +<pop> エレメントはまだ処理されていない最初のイベントをイベント +キューから取り出し破棄する。 +@verbatim + @endverbatim -<undo> エレメントは、属性が無いばあいには、最新の二つのキーイベン -ト、すなわちこのコマンドによって引き起こされたものとその直前のもの、を -キャンセルする。 - -属性 "target-of-undo" が正の整数 NUM ならば、NUM個めから最新のものまで -を キャンセルする。負の整数ならば最新の(- NUM) 個のイベントをキャンセル -する。変数参照である場合には、それは0でない整数に帰着されなくてはなら -ず、その値が上記の場合と同様に取り扱われる。 +<undo> エレメントは、<intterm> が無いばあいには最新の二つの +キーイベント、すなわちこのコマンドによって引き起こされたものとその直前 +のもの、をキャンセルする。<intterm> が与えられる場合には、その値 +は0であってはならない。値が正の整数 N ならば、N個めから最新のものまで +を キャンセルする。負の整数 -N ならば、最新の N 個のイベントをキャンセ +ルする。 #if EXAMPLE_CODE @@ -1054,269 +781,88 @@ predefined-selector であり、候補リスト中の新しい候補を指定す このコードは最新のイベントのみをキャンセルする。 @verbatim - - - - - - - - - - - - string - - - - integer - - \?. - [0#]x[0-9A-F]{1,6} - [0-9]{1,7} - - - - plist - - - - symbol - - - - - - - - + @endverbatim -<call> エレメントは外部モジュールの関数を呼ぶ。 関数は NULL を返 -すか、または行うべきアクションのリストを表す (#MPlist *) 型の値を返さな -くてはならない。 - -属性 "id" の値が外部モジュールを指定する。この値は<module-list> -エレメント中に現われるものでなくてはならない。. -<function-reference> エレメントが呼ぶ関数を指定する。これもまた、 -<module-list> エレメント中に現われるものでなくてはならない。. - -関数は (#MPlist *) 型の引数とともに呼ばれる。最初の要素のキーは #Mt で -あり、その値は#MInputContext 型のオブジェクトへのポインタである。第二の -要素のキーは#Msymbol であり、値は現在の状態名である。<argument> -エレメントの内容は三つ目以降の要素の値として用いられる。それらの要素の -キーは属性 "type" の値によって決定する。integer ならば対応するキーは -#Minteger であり、symbol ならば、対応するキーは #Msymbol、などのように。 - -#if EXAMPLE_CODE - - - - - - -#endif - -このコードは外部モジュール module-libmimx-anthy の関数 function-resize -をシンボルである引数 "t" と共に呼ぶ。 +<commit> エレメントは現在の preediting テキストを明示的にコミッ +トする。現在の preediting テキストは、入力メソッドドライバが最初の +<state>に遷移するたびにも、コミットされる。(@ref imstate 参照。) @verbatim - - - - - - - - - - - - - [0#]x[0-9A-F]{1,6} - \?. - - - - - - - - - + @endverbatim -<expr>ession とは、 - @li 演算子で結ばれた0個以上の <expr>essions - @li 整数値 - @li 特定の位置の文字 - @li 変数 -である。 - -#if EXAMPLE_CODE - - - 0x0D91 - -#endif +<unhandle> エレメントは現在の preediting テキストをコミットし、 +最新のキーを未処理として返す。 -このコード全体が expression であり、2つのexpression (2行目と3行目) -を含んでいる。 @verbatim - - - - - - - - - - + + @endverbatim -<variable-reference> エレメントは、参照された <variable> が -その位置に現れた場合と同じ効果を持つ。 - -#if EXAMPLE_CODE - - -#endif +<shift> エレメントは現在のステート (@ref imstate 参照) を与えられ +た <symterm> で指定されたものに遷移させる。<symterm> の値は +<state-list> に現れるものでなくてはならない。<shiftback> エ +レメントは現在のステート を直前のものに遷移させる。 @verbatim - - - - + - - - * - / - | - & - ! - = - < - > - <= - >= - - - + @endverbatim -これらは <expr>ession 中に現れ得る演算子である。演算子 -@c +, @c -, @c *, @c / は加減乗除を行う。@c |, @c &, @c -! はそれぞれ OR, AND, NOT 演算子である。@c =, @c <, @c >, -@c <=, @c >= は引数を二つとりそれらを比較する。 +<char-at> エレメントは、与えられた<markerterm>の位置にある +preediting テキストか surrounding テキスト中の文字の文字コードである整 +数値<integer>C</integer>を返す。 @verbatim - - - - - - = - < - > - <= - >= - - - - - - - - - - + @endverbatim -<if> エレメントは、2つの<expr> 間の関係が属性 "condition" -を満たす場合 <if-true-action-list> の内容である <action> を -実行する。そうでなければ、<if-not-true-action-list> があればその -内容を実行する。 - - -#if EXAMPLE_CODE - - 0 - - -#endif - -このコードは変数@c C が負の時、<shift-to> を実行する。 +<key-count> エレメントは、現在処理している文字の数を表す整数値 +<integer>N</integer> を返す。 @verbatim + - - - - - - - - - - - + - @endverbatim -<conditional> エレメントは、各<case>中の<expr>を一つ -づつ調べ、それが0 でない値をとる最初の<case>中の<saction>を -実行する。 - -#if EXAMPLE_CODE - - - - - - 0x0E24 - - - - 1 - - : : - - -#endif - -このコードは、2つ前の文字の文字コードが0x0E24 (Thai character RU)でな -い限り、二番めの<case> 中のactionを実行する。 - +<surrounding-text-flag> はsurrounding テキストをサポートしていれ +ば<integer>1</integer> を、そうでなければ +<integer>0</integer> を返す。 @subsection imstate 入力メソッドの状態と遷移 @verbatim +@verbatim + - + state-.* - + - + + + - + - + - + @@ -1327,161 +873,90 @@ predefined-selector であり、候補リスト中の新しい候補を指定す @endverbatim +The input method driver is always in one of the <state>s of an +<input-method> and may transit to another <state> when +processing an input. The same input sequence can trigger different +<funcall>s and produce different results in different +<state>s. + 入力メソッドドライバは常に一つの <state> にあり、入力を処理するこ -とによって別の <state> に遷移することがある。異なる -<state> では、同じ入力でも異なる<saction> を引き起こし、異 -なる結果を得ることがある。 +とによって別の <state> に遷移することがある。異なる<state> +では、同じ入力でも異なる<funcall> を呼び、異なる結果を得ることが +ある。 -属性 "id" が <state> の名前を示す。<state-title-text> エレ -メントの内容は、入力メソッドがこの状態にある時スクリーン上に表示される -テキストである。省略されている場合には <title> エレメントの内容が -用いられる。 +属性 "sname" が <state> の名前を示す。<state> エレメントの +子要素である <title>エレメントの内容は、入力メソッドがこの状態に +ある時スクリーン上に表示されるテキストである。省略されている場合には +<input-method> の子要素である <title> エレメントの内容が用 +いられる。 入力コンテクストが生成された、すなわち入力メソッドが起動された時点では 入力メソッドドライバは<state-list> エレメント中の最初の <state> にある。 各 <state> は0以上の <branch>を持つ。各<branch> は -<map-list> 中の各 <map> に対応する。 属性 -"branch-selecting-map" の値が<map> の属性 "id" の値を示す。入力シー -クエンスがある<map> 中の <rule> の <keyseq> (or -<command-reference>) 部分に合致すると、対応する <branch> を -選択し、その <rule> の <action> に続いてその -<branch> の<saction> を実行し、入力メソッドドライバはその -<state> の初期状態に戻る。 - -入力メソッドドライバが最初の <state> の初期状態になる度に、 +<map-list> 中の各 <map> のうち、属性"mname" の値が +<branch> の属性 "mname" の値と同じであるものに対応している。入力 +シークエンスがある<map> 中の <rule> の <keyseq> (また +は<command-reference>) 部分に合致すると、対応する <branch> +が選択される。入力メソッドドライバはまずその <rule> の +<funcall> を、次いでその <branch> の <funcall> を実行 +し、その後その <state> の初期状態に戻る。 + +入力メソッドドライバは、最初の <state> の初期状態になる度に preeditバッファ中の全ての文字をコミットし、preeditバッファを空にする。 (<commit> エレメントが指定されていなくても。) <state-hook> エレメント (省略可能) は、入力メソッドドライバがこの -<state> に遷移した時点で実行される<sactions> を指定する。 +<state> に遷移した時点で実行される<funcall> を指定する。 入力メソッドの入力コンテクストを生成した時点で、入力メソッドは <state-list> の最初の <state> に遷移するため、その -<state> の <state-hook> 中の <saction> が実行される。 +<state> の <state-hook> 中の <funcall> が実行される。 入力シークエンスが、その時点の <state> のいずれの <branch> にも合致しない場合には、 @li <catch-all-branch> エレメントが存在すれば、 - <catch-all-branch>中の<saction>を実行する。 + <catch-all-branch>中の<funcall>を実行する。 @li <catch-all-branch> がなければ、 入力メソッドは初期状態に遷移する。 #if EXAMPLE_CODE - - - - - : : - - - - - - - - - - : : - - - - - - - + + + + state-second + + + + + + state-init + + + state-init + + + + #endif このコードはある入力メソッドでの状態遷移を定義している。この入力メソッ -ドでの<state>は、"state-init" と "state-join" の2つである。 -"state-init" には3つの <branch> があり、それぞれ -"map-consonant", "map-misc", "map-join" に属す入力シークエンスが与えら -れた場合に選ばれる。"map-join"の <branch> が選ばれた場合には、 -<shift-to> エレメントによって "state-join" への遷移が起こる。 -"state-join"には、"map-consonant" に属す入力シークエンスのための -<branch> とそれ以外の全ての入力を処理する -<catch-all-branch>があり、双方とも最後は "state-init" への遷移を -実行する。 - -@verbatim - - - - - - - - - -@endverbatim - -<saction> (state-action) は <action> であるか状態遷移である。 - -<shift-to> エレメントは現在の状態を属性 "id" の値で指示されたもの -に遷移させる。属性の値は<state-list> に現れるものでなくてはならな -い。<shift-back> エレメントは、現在の状態を一つ前のものに遷移さ -せる。 - -@subsection implist Plist - -<call> エレメントで用いられる plistObject は以下のように定義されている。 - -@verbatim - - - - - - - - string - - - - symbol - - - - integer - - \?. - [0#]x[0-9A-F]{1,6} - [0-9]{1,7} - - - - - - - - - - - - - - - - - - - - - - - - - - -@endverbatim +ドでの<state>は、"state-init" と "state-second" の2つである。 +"state-init" には2つの <branch> があり、それぞれ"map-consonant", +"map-independent" に対応する。"map-consonant" に属す入力シークエンスが +与えられると、それに対応する <rule> 中の <funcall>s を実行 +した後"state-second" へ遷移する。"state-second"には、3つの +<branch> があり、それらのうち2つはとそれ以外の全ての入力を処理す +る最後に "state-init" への遷移を実行する。 @verbatim @endverbatim + 入力メソッド定義用の RelaxNG スキーマは、</grammar> で終わる。 @section im-seealso SEE ALSO