X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=FORMATS%2FIM.txt;h=4c5dc57e7b859d2fd8ef529161f330ec35b9bb4c;hb=85653102bf0286504bab296abb8e52963ebf0cce;hp=49e94e87bc0c72edbfe2fc74d5629baceb289885;hpb=dc8d221fd442b0b8558215252bf322aeacace21f;p=m17n%2Fm17n-db.git diff --git a/FORMATS/IM.txt b/FORMATS/IM.txt index 49e94e8..4c5dc57 100644 --- a/FORMATS/IM.txt +++ b/FORMATS/IM.txt @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004 +/* Copyright (C) 2003, 2004, 2005 National Institute of Advanced Industrial Science and Technology (AIST) Registration Number H15PRO112 See the end for copying conditions. */ @@ -18,18 +18,67 @@ methods. @section im-format SYNTAX and SEMANTICS -The following data format defines an input method. The driver loads -a definition from a file, a stream, etc. A definitions is converted +The following data format defines an input method. The driver loads a +definition from a file, a stream, etc. The definition is converted into the form of plist in the driver. @verbatim -INPUT-METHOD ::= TITLE MAP-LIST MACRO-LIST ? MODULE-LIST ? STATE-LIST - -TITLE ::= '(' 'title' MTEXT ')' +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 ] ')' +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 +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 MTEXT is a text displayed on the screen when this input method is -active. +@c IM-DECLARATION specifies the language and name of this input +method. + +@c VERSION specifies the required minimum version number of the m17n +library. The format is is "XX.YY.ZZ" where XX is a major version +number, YY is a minor version number, and ZZ is a patch level. + +@c DESCRIPTION specifies the description text of this input method by +MTEXT-OR-GETTEXT. It it takes the second form, the text is translated +according to the current locale by "gettext" (if the translation is +provided). + +@c VARIABLE-DECLARATION declares a variable used in this input method. +If a variable must be initialized to the default value, or is to be +customized by a user, it must be declared here. + +@c COMMAND-DECLARATION declares a command used in this input method. +If a command must be bound to the default key sequence, or is to be +customized by a user, it must be declared here. + +@c TITLE-TEXT is a text displayed on the screen when this input method +is active. @verbatim MAP-LIST ::= '(' 'map' MAP * ')' @@ -53,7 +102,16 @@ used, for instance, with a West European keyboard, @c MTEXT may contain Latin-1 characters. @c SYMBOL in the definition of @c KEYSEQ must be the return value of -the minput_event_to_key () function. +the minput_event_to_key () function. Under the X window system, you +can quickly check the value using the @c xev command. For example, +the return key, the backspace key, and the 0 key on the keypad are +represented as @c (Return) , @c (BackSpace) , and @c (KP_0) +respectively. If the shift, control, meta, alt, super, and hyper +modifiers are used, they are represented by the S- , C- , M- , A- , s- +, and H- prefixes respectively in this oreder. Thus, "return with +shift with meta with hyper" is @c (S-M-H-Return) . Note that "a with +shift" .. "z with shift" are represented simply as A .. Z . Thus "a +with shift with meta with hyper" is @c (M-H-A) . @c INTEGER in the definition of @c KEYSEQ must be a valid character code. @@ -61,14 +119,16 @@ code. @verbatim MAP-ACTION ::= ACTION -ACTION ::= INSERT | DELETE | SELECT | MOVE | MARK | - | SHOW | HIDE | PUSHBACK | UNDO | SHIFT | CALL - | SET | IF | '(' MACRO-NAME ')' +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' | '@1' | '@2' | '@3' | '@4' + | '@5' | '@6' | '@7' | '@8' | '@9' + | '@<' | '@=' | '@>' | '@-' | '@+' | '@[' | '@]' + | '@@' + | '@-N' | '@+N' @endverbatim @verbatim MACRO-LIST ::= '(' 'macro' MACRO * ')' @@ -99,27 +159,33 @@ default arguments when an input context is destroyed. @verbatim STATE-LIST ::= '(' 'state' STATE * ')' -STATE ::= '(' STATE-NAME BRANCH * ')' +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 -In the first form of @c BRANCH, @c MAP-NAME must be an item that appears -in @c MAP. In this case, if a key sequence matching one of @c +The optional @c STATE-TITLE-TEXT specifies a title text displayed on +the screen when the input method is in this state. If @c +STATE-TITLE-TEXT is omitted, @c TITLE-TEXT is used. + +In the first form of @c BRANCH, @c MAP-NAME must be an item that +appears in @c MAP. In this case, if a key sequence matching one of @c KEYSEQs of @c MAP-NAME is typed, @c BRANCH-ACTIONs are executed. In the second form of @c BRANCH, @c BRANCH-ACTIONs are executed if a key sequence that doesn't match any of @c Branch's of the current state is typed. -In the third form of @c BRANCH, @c BRANCH-ACTIONs are executed if we -shift to the current state after handling all typed keys. If the -current state is the initial state, @c BRANCH-ACTIONs are executed -just after an input context of the input method is created. +In the third form of @c BRANCH, @c BRANCH-ACTIONs are executed when +shifted to the current state. If the current state is the initial +state, @c BRANCH-ACTIONs are executed also when an input context of +the input method is created. @verbatim BRANCH-ACTION ::= ACTION @@ -163,15 +229,11 @@ The previous and the next position. The previous and the next position where a candidate list changes. -Each @c PREDEFINED-SYMBOL has a special meaning when used as a candidate +Some of the @c PREDEFINED-SYMBOL has a special meaning when used as a candidate index in the @c SELECT action. +And, this also has a special meaning. + + + +These are for supporting surround text handling. + + + The arguments and the behavior of each action are listed below. @verbatim @@ -288,18 +377,44 @@ MARK ::= '(' 'mark' SYMBOL ')' This action treats @c SYMBOL as a marker, and sets its position to the current position. @c SYMBOL must not be a @c PREDEFINED-SYMBOL. +@verbatim +PUSHBACK :: = '(' 'pushback' INTEGER ')' + | '(' 'pushback' KEYSEQ ')' +@endverbatim + +The first form pushes back the latest @c INTEGER number of key events +to the event queue if @c INTEGER is positive, and pushes back all key +events if @c INTEGER is zero. + +The second form pushes back keys in @c KEYSEQ to the event queue. @verbatim -PUSHBACK :: = '(pushback INTEGER)' +POP ::= '(' 'pop' ')' @endverbatim -This action pushes back the latest key events to the event queue. +This action pops the first key event that is not yet handled from the +event queue. + +@verbatim +UNDO :: = '(' 'undo' [ INTEGER | SYMBOL ] ')' +@endverbatim + +If there's no argument, this action cancels the last two key events +(i.e. the one that invoked this command, and the previous one). + +If there's an integer argument NUM, it must be positive or negative +(not zero). If positive, from the NUMth to the last events are +canceled. If negative the last (- NUM) events are canceled. + +If there's a symbol argument, it must be resolved to an integer number +and the number is treated as the actual argument as above. @verbatim -UNDO :: = '(undo)' +UNHANDLE :: = '(unhandle)' @endverbatim -This action cancels the last key event. +This action commit the current preedit and return the last key as +unhandled. @verbatim SHIFT :: = '(' 'shift' STATE-NAME ')' @@ -331,43 +446,43 @@ The function must return NULL or a value of the type (#MPlist *) that represents a list of actions to take. @verbatim -SET ::= '(' OPERAND SYMBOL1 [ INTEGER | SYMBOL2 ] ')' +SET ::= '(' CMD SYMBOL1 EXPRESSION ')' + +CMD ::= 'set' | 'add' | 'sub' | 'mul' | 'div' + +EXPRESSION ::= INTEGER | SYMBOL2 | '(' OPERAND EXPRESSION * ')' + +OPERAND ::= '+' | '-' | '*' | '/' | '|' | '&' | '!' + | '=' | '<' | '>' | '<=' | '>=' -OPERAND ::= 'set' | 'add' | 'sub' | 'mul' | 'div' @endverbatim This action treats @c SYMBOL1 and @c SYMBOL2 as variables and sets the value of @c SYMBOL1 as below. -If @c OPERAND is 'set', it sets the value of @c SYMBOL1 to @c INTEGER or the -value of @c SYMBOL2. +If @c CMD is 'set', it sets the value of @c SYMBOL1 to the value of @c +EXPRESSION. -If @c OPERAND is 'add', it increments the value of @c SYMBOL1 by @c INTEGER -or the value of @c SYMBOL2. +If @c CMD is 'add', it increments the value of @c SYMBOL1 by the value +of @c EXPRESSION. -If @c OPERAND is 'sub', it decrements the value of @c SYMBOL1 by @c INTEGER -or the value of @c SYMBOL2. +If @c CMD is 'sub', it decrements the value of @c SYMBOL1 by the value +of @c EXPRESSION. -If @c OPERAND is 'mul', it multiplies the value of @c SYMBOL1 by @c INTEGER -or the value of @c SYMBOL2. +If @c CMD is 'mul', it multiplies the value of @c SYMBOL1 by the value +of @c EXPRESSION. -If @c OPERAND is 'div', it divides the value of @c SYMBOL1 by @c INTEGER or -the value of @c SYMBOL2. +If @c CMD is 'div', it divides the value of @c SYMBOL1 by the value of +@c EXPRESSION. @verbatim -IF ::= '(' 'if' CONDITION ACTION-LIST1 ACTION-LIST2 * ')' +IF ::= '(' CONDITION ACTION-LIST1 ACTION-LIST2 ')' -CONDITION ::= '(' OPERAND VAL1 VAL2 ')' +CONDITION ::= [ '=' | '<' | '>' | '<=' | '>=' ] EXPRESSION1 EXPRESSION2 ACTION-LIST1 ::= '(' ACTION * ')' ACTION-LIST2 ::= '(' ACTION * ')' - -OPERAND ::= '=' '<' '>' - -VAL1 ::= [ INTEGER1 | SYMBOL1 ] - -VAL2 ::= [ INTEGER2 | SYMBOL2 ] @endverbatim This action performs actions in @c ACTION-LIST1 if @c CONDITION is @@ -375,6 +490,13 @@ true, and performs @c ACTION-LIST2 (if any) otherwise. @c SYMBOL1 and @c SYMBOL2 are treated as variables. +@verbatim +COND ::= '(' 'cond' [ '(' EXPRESSION ACTION * ') ] * ')' +@endverbatim + +This action performs the first action @c ACTION whose corresponding +@c EXPRESSION has nonzero value. + @ifnot FOR-MAN @section im-example1 EXAMPLE 1 @@ -382,17 +504,17 @@ true, and performs @c ACTION-LIST2 (if any) otherwise. This is a very simple example for inputting Latin characters with diacritical marks (acute and cedilla). For instance, when you type: @verbatim - Comme'die-Franc,ais, chic,, + Comme'die-Franc,aise, chic,, @endverbatim you will get this: @if FOR-HTML @verbatim - Commédie-Français, chic, + Commédie-Française, chic, @endverbatim @endif @if FOR-LATEX @latexonly -\hskip5mm\texttt{\footnotesize Comm\'{e}die-Fran\c{c}ais, chic,} +\hskip5mm\texttt{\footnotesize Comm\'{e}die-Fran\c{c}aise, chic,} @endlatexonly @endif @@ -438,7 +560,7 @@ quite straight forward to extend it to cover all Latin characters. @section im-example2 EXAMPLE 2 This example is for inputting Unicode characters by typing C-u -(Control-u) followed by four hexadecimal numbers. For instance, when +(Control-u) followed by four hexadecimal digits. For instance, when you type ("^u" means Control-u): @verbatim ^u2190^u2191^u2192^u2193 @@ -550,7 +672,7 @@ as Backspace. */ /* -Copyright (C) 2003, 2004 +Copyright (C) 2003, 2004, 2005 National Institute of Advanced Industrial Science and Technology (AIST) Registration Number H15PRO112 @@ -569,8 +691,8 @@ 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., 59 Temple Place, Suite 330, Boston, MA -02111-1307, USA. +Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +Boston, MA 02110-1301, USA. */ /* Local Variables: */