@verbatim
INPUT-METHOD ::=
- IM-DECLARATION ? DESCRIPTION ? TITLE ?
+ IM-DECLARATION ? IM-DESCRIPTION ? TITLE ?
VARIABLE-LIST ? COMMAND-LIST ? MODULE-LIST ?
MACRO-LIST ? MAP-LIST ? STATE-LIST ?
IM-DECLARATION ::= '(' 'input-method' LANGUAGE NAME EXTRA-ID ? VERSION ? ')'
+LANGUAGE ::= SYMBOL
+NAME ::= SYMBOL
+EXTRA-ID ::= SYMBOL
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 * ')'
+IM-DESCRIPTION ::= '(' 'description' DESCRIPTION ')'
+DESCRIPTION ::= MTEXT-OR-GETTEXT | 'nil'
+MTEXT-OR-GETTEXT ::= [ MTEXT | '(' '_' MTEXT ')']
-MTEXT-OR-GETTEXT ::=
- [ MTEXT | '(' '_' MTEXT ')']
+TITLE ::= '(' 'title' TITLE-TEXT ')'
+TITLE-TEXT ::= MTEXT
-LANGUAGE ::= SYMBOL
-NAME ::= SYMBOL
-EXTRA-ID ::= SYMBOL
-VERSION ::= MTEXT
-IM-DESCRIPTION ::= MTEXT
+VARIABLE-LIST ::= '(' 'variable' VARIABLE-DECLARATION * ')'
+VARIABLE-DECLARATION ::= '(' VAR-NAME [ DESCRIPTION VALUE VALUE-CANDIDATE * ]')'
VAR-NAME ::= SYMBOL
-VAR-DESCRIPTION ::= MTEXT
VALUE ::= MTEXT | SYMBOL | INTEGER
VALUE-CANDIDATE ::= VALUE | '(' RANGE-FROM RANGE-TO ')'
RANGE-FROM ::= INTEGER
RANGE-TO ::= INTEGER
+
+COMMAND-LIST ::= '(' 'command' COMMAND-DECLARATION * ')'
+COMMAND-DECLARATION ::= '(' CMD-NAME [ DESCRIPTION KEYSEQ * ] ')'
CMD-NAME ::= SYMBOL
-CMD-DESCRIPTION ::= MTEXT
-TITLE-TEXT ::= MTEXT
+
@endverbatim
@c IM-DECLARATION specifies the language and name of this input
-method.
+method.
When @c LANGUAGE is @c t, the use of the input method is not limited
to one language.
When @c NAME is @c nil, the input method is not standalone, but
is expected to be used in other input methods. In such cases,
-@EXTRA-ID is required to identify the input method.
+@c EXTRA-ID is required to identify the input method.
@c VERSION specifies the required minimum version number of the m17n
library. The format 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 DESCRIPTION, if not nil, specifies the description text of an input
+method, a variable or a command. If @c MTEXT-OR-GETTEXT takes the
+second form, the text is translated according to the current locale by
+"gettext" (if the translation is provided).
@c TITLE-TEXT is a text displayed on the screen when this input method
is active.
+There is one special input method file "global.mim" that declares
+common variables and commands. The input method driver always loads
+this file and other input methods can inherit the variables and the
+commands.
+
@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.
+customized by a user, it must be declared here. The declaration can
+be used in two ways. One is to introduce a new variable. In that
+case, @c VALUE must not be omitted. Another is to inherit the variable
+from what declared in "global.mim", and to give the different default
+value and/or to make the variable customizable specially for the
+current input method. In the latter case, @c VALUE can be omitted.
@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.
+customized by a user, it must be declared here. Like @c
+VARIABLE-DECLARATION, the declaration can be used in two ways. One is
+to introduce a new command. In that case, @c KEYSEQ must not be omitted.
+Another is to inherit the command from what declared in "global.mim",
+and to give the different key binding and/or to make the command
+customizable specially for the current input method. In the latter
+case, @c KEYSEQ can be omitted.
+
@verbatim
MODULE-LIST ::= '(' 'module' MODULE * ')'
FUNCTION ::= SYMBOL
@endverbatim
-Each @c MODULE declares the name of external module (i.e. dynamic
+Each @c MODULE declares the name of an external module (i.e. dynamic
library) and function names exported by the module. If a @c FUNCTION has
name "init", it is called with only the default arguments (see the
section about @c CALL) when an input context is created for the input
@endverbatim
-@c MACRO-INCLUSION includes macros from another input method specified by @c TAGS.
-When @c MACRO-NAME is not given, all macros from the input method are included.
+@c MACRO-INCLUSION includes macros from another input method specified
+by @c TAGS. When @c MACRO-NAME is not given, all macros from the
+input method are included.
-@verbatim
-MAP-LIST ::= MAP-INCLUSION ? '(' 'map' MAP * ')' MAP-INCLUSION ?
+@verbatim MAP-LIST ::= MAP-INCLUSION ? '(' 'map' MAP * ')'
+MAP-INCLUSION ?
MAP ::= '(' MAP-NAME RULE * ')'
@endverbatim
-When an input system is never standalone and always included in
-another system, @c MAP-LIST can be omitted.
+When an input method is never standalone and always included in
+another method, @c MAP-LIST can be omitted.
@c SYMBOL in the definitions of @c MAP-NAME must not be @c t nor @c
nil.
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
+, and H- prefixes respectively in this order. 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.
-@c MAP-INCLUSION includes maps from another input method specified by @c TAGS.
-When @c MAP-NAME is not given, all maps from the input method are included.
+@c MAP-INCLUSION includes maps from another input method specified by
+@c TAGS. When @c MAP-NAME is not given, all maps from the input method
+are included.
+
@verbatim
MAP-ACTION ::= ACTION
STATE-TITLE-TEXT ::= MTEXT
BRANCH ::= '(' MAP-NAME BRANCH-ACTION * ')'
- | '(' nil BRANCH-ACTION * ')'
- | '(' t BRANCH-ACTION * ')'
+ | '(' 'nil' BRANCH-ACTION * ')'
+ | '(' 't' BRANCH-ACTION * ')'
STATE-INCLUSION ::= '(' 'include' TAGS 'state' STATE-NAME ? ')'
When an input system is never standalone and always included in
another system, @c STATE-LIST can be omitted.
-@c STATE-INCLUSION includes states from another input method specified by @c TAGS.
-When @c STATE-NAME is not given, all states from the input method are included.
+@c STATE-INCLUSION includes states from another input method specified
+by @c TAGS. When @c STATE-NAME is not given, all states from the input
+method are included.
The optional @c STATE-TITLE-TEXT specifies a title text displayed on
the screen when the input method is in this state. If @c
key sequence that doesn't match any of @c Branch's of the current
state is typed.
+If there is no @c BRANCH beginning with @c nil and the typed key
+sequence does not match any of the current @c BRANCHs, the input
+method transits to the initial state.
+
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
<li> variable list
-A variable is a symbol associated with an integer value. The value of
-a variable is set by the @c SET action, and is referred by the @c SET,
-the @c INSERT, and the @c IF actions. All variables are implicitly
-initialized to zero.
+A variable is a symbol associated with an integer, a symbol, or an
+M-text value. The integer value of a variable can be set and referred
+by the @c SET action. It can be referred by the @c SET, the @c
+INSERT, the @c SELECT, the @c UNDO, the @c IF, the @c COND actions.
+The M-text value of a variable can be referred by the @c INSERT
+action. The symbol value of a variable can not be referred directly,
+is used the library implicitly (e.g. candidates-charset). All
+variables are implicitly initialized to the integer value zero.
</ul>
INSERT ::= '(' 'insert' MTEXT ')'
| MTEXT
| INTEGER
+ | SYMBOL
| '(' 'insert' SYMBOL ')'
| '(' 'insert' '(' CANDIDATES * ')' ')'
| '(' CANDIDATES * ')'
The third form inserts the character @c INTEGER before the current
position.
-The fourth form treats @c SYMBOL as a variable, and inserts its value
-(if it is a valid character code) before the current position.
+The fourth and fith form treats @c SYMBOL as a variable, and inserts
+its value (if it is a valid character code) before the current
+position.
-In the fifth and sixth forms, each @c CANDIDATES represents a
+In the sixth and seventh forms, each @c CANDIDATES represents a
candidate group, and each element of @c CANDIDATES represents a
candidate, i.e. if @c CANDIDATES is an M-text, the candidates are the
characters in the M-text; if @c CANDIDATES is a list of M-texts, the
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.
+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.
UNHANDLE :: = '(unhandle)'
@endverbatim
-This action commits the current preedit and return the last key as
+This action commits the current preedit and returns the last key as
unhandled.
@verbatim
SHIFT :: = '(' 'shift' STATE-NAME ')'
@endverbatim
-This action shifts the current state to @c STATE-NAME. @c
-STATE-NAME must appear in @c STATE-LIST.
+If @c STATE-NAME is @c t, this action shifts the current state to the
+previous one, otherwise it shifts to @c STATE-NAME. In the latter
+case, @c STATE-NAME must appear in @c STATE-LIST.
@verbatim
CALL ::= '(' 'call' MODULE-NAME FUNCTION ARG * ')'
@c EXPRESSION.
@verbatim
-IF ::= '(' CONDITION ACTION-LIST1 ACTION-LIST2 ')'
+IF ::= '(' CONDITION ACTION-LIST1 ACTION-LIST2 ? ')'
CONDITION ::= [ '=' | '<' | '>' | '<=' | '>=' ] EXPRESSION1 EXPRESSION2
This action performs actions in @c ACTION-LIST1 if @c CONDITION is
true, and performs @c ACTION-LIST2 (if any) otherwise.
-@c SYMBOL1 and @c SYMBOL2 are treated as variables.
-
@verbatim
COND ::= '(' 'cond' [ '(' EXPRESSION ACTION * ') ] * ')'
@endverbatim