*** empty log message ***
[m17n/m17n-db.git] / FORMATS / IM.txt
1 /* Copyright (C) 2003, 2004, 2005
2      National Institute of Advanced Industrial Science and Technology (AIST)
3      Registration Number H15PRO112
4    See the end for copying conditions.  */
5
6 /***en
7
8 @page mdbIM Input Method
9
10 @section im-description DESCRIPTION
11
12 The m17n library provides a driver for input methods that are
13 dynamically loadable from the m17n database (see @ref m17nInputMethod
14 @latexonly (P.\pageref{group__m17nInputMethod}) @endlatexonly).
15
16 This section describes the data format that defines those input
17 methods.
18
19 @section im-format SYNTAX and SEMANTICS
20
21 The following data format defines an input method.  The driver loads a
22 definition from a file, a stream, etc.  The definition is converted
23 into the form of plist in the driver.
24
25 @verbatim
26 INPUT-METHOD ::=
27     IM-DECLARATION ? DESCRIPTION ? VARIABLE-LIST ? COMMAND-LIST ?
28     TITLE MAP-LIST MACRO-LIST ? MODULE-LIST ? STATE-LIST
29
30 IM-DECLARATION ::= '(' 'input-method' LANGUAGE NAME ')'
31 DESCRIPTION ::= '(' 'description' [ MTEXT-OR-GETTEXT | nil] ')'
32 VARIABLE-LIST ::= '(' 'variable' VARIABLE-DECLARATION * ')'
33 COMMAND-LIST ::= '(' 'command' COMMAND-DECLARATION * ')'
34 TITLE ::= '(' 'title' TITLE-TEXT ')'
35
36 VARIABLE-DECLARATION ::=
37     '(' VAR-NAME [ MTEXT-OR-GETTEXT | nil ] VALUE VALUE-CANDIDATE * ')'
38
39 COMMAND-DECLARATION ::=
40     '(' CMD-NAME [ MTEXT-OR-GETTEXT | nil ] KEYSEQ * ')'
41
42 MTEXT-OR-GETTEXT ::=
43     [ MTEXT | '(' '_' MTEXT ')']
44
45 LANGUAGE ::= SYMBOL
46 NAME ::= SYMBOL
47 IM-DESCRIPTION ::= MTEXT
48 VAR-NAME ::= SYMBOL
49 VAR-DESCRIPTION ::= MTEXT
50 VALUE ::= MTEXT | SYMBOL | INTEGER
51 VALUE-CANDIDATE ::= VALUE | '(' RANGE-FROM RANGE-TO ')'
52 RANGE-FROM ::= INTEGER
53 RANGE-TO ::= INTEGER
54 CMD-NAME ::= SYMBOL
55 CMD-DESCRIPTION ::= MTEXT
56 TITLE-TEXT ::= MTEXT
57 @endverbatim
58
59 @c IM-DECLARATION specifies the language and name of this input
60 method.
61
62 @c DESCRIPTION specifies the description text of this input method by
63 MTEXT-OR-GETTEXT.  It it takes the second form, the text is translated
64 according to the current locale by "gettext" (if the translation is
65 provided).
66
67 @c VARIABLE-DECLARATION declares a variable used in this input method.
68 If a variable must be initialized to the default value, or is to be
69 customized by a user, it must be declared here.
70
71 @c COMMAND-DECLARATION declares a command used in this input method.
72 If a command must be bound to the default key sequence, or is to be
73 customized by a user, it must be declared here.
74
75 @c TITLE-TEXT is a text displayed on the screen when this input method
76 is active.
77
78 @verbatim
79 MAP-LIST ::= '(' 'map' MAP * ')'
80
81 MAP ::= '(' MAP-NAME RULE * ')'
82
83 MAP-NAME ::= SYMBOL
84
85 RULE ::= '(' KEYSEQ MAP-ACTION * ')'
86
87 KEYSEQ ::= MTEXT | '(' [ SYMBOL | INTEGER ] * ')'
88 @endverbatim
89
90 @c SYMBOL in the definitions of @c MAP-NAME must not be @c t nor @c
91 nil.
92
93 @c MTEXT in the definition of @c KEYSEQ consists of characters that
94 can be generated by a keyboard.  Therefore @c MTEXT usually contains
95 only ASCII characters.  However, if the input method is intended to be
96 used, for instance, with a West European keyboard, @c MTEXT may
97 contain Latin-1 characters.
98
99 @c SYMBOL in the definition of @c KEYSEQ must be the return value of
100 the minput_event_to_key () function.  Under the X window system, you
101 can quickly check the value using the @c xev command.  For example,
102 the return key, the backspace key, and the 0 key on the keypad are
103 represented as @c (Return) , @c (BackSpace) , and @c (KP_0)
104 respectively.  If the shift, control, meta, alt, super, and hyper
105 modifiers are used, they are represented by the S- , C- , M- , A- , s-
106 , and H- prefixes respectively in this oreder.  Thus, "return with
107 shift with meta with hyper" is @c (S-M-H-Return) .  Note that "a with
108 shift" .. "z with shift" are represented simply as A .. Z . Thus "a
109 with shift with meta with hyper" is @c (M-H-A) .
110
111 @c INTEGER in the definition of @c KEYSEQ must be a valid character
112 code.
113
114 @verbatim
115 MAP-ACTION ::= ACTION
116
117 ACTION ::= INSERT | DELETE | SELECT | MOVE | MARK
118            | SHOW | HIDE | PUSHBACK | POP | UNDO | UNHANDLE | SHIFT | CALL
119            | SET | IF | COND | '(' MACRO-NAME ')'
120
121 PREDEFINED-SYMBOL ::=
122     '@0' | '@1' | '@2' | '@3' | '@4'
123     | '@5' | '@6' | '@7' | '@8' | '@9'
124     | '@<' | '@=' | '@>' | '@-' | '@+' | '@[' | '@]'
125     | '@@'
126     | '@-N' | '@+N'
127 @endverbatim
128 @verbatim
129 MACRO-LIST ::= '(' 'macro' MACRO * ')'
130
131 MACRO ::= '(' MACRO-NAME MACRO-ACTION * ')'
132
133 MACRO-NAME ::= SYMBOL
134
135 MACRO-ACTION ::= ACTION
136 @endverbatim
137 @verbatim
138 MODULE-LIST ::= '(' 'module' MODULE * ')'
139
140 MODULE ::= '(' MODULE-NAME FUNCTION * ')'
141
142 MODULE-NAME ::= SYMBOL
143
144 FUNCTION ::= SYMBOL
145 @endverbatim
146
147 Each @c MODULE declares the name of external module (i.e. dynamic
148 library) and function names exported by the module.  If a @c FUNCTION has
149 name "init", it is called with only the default arguments (see the
150 section about @c CALL) when an input context is created for the input
151 method.  If a @c FUNCTION has name "fini", it is called with only the
152 default arguments when an input context is destroyed.
153
154 @verbatim
155 STATE-LIST ::= '(' 'state' STATE * ')'
156
157 STATE ::= '(' STATE-NAME [ STATE-TITLE-TEXT ] BRANCH * ')'
158
159 STATE-NAME ::= SYMBOL
160
161 STATE-TITLE-TEXT ::= MTEXT
162
163 BRANCH ::= '(' MAP-NAME BRANCH-ACTION * ')'
164            | '(' nil BRANCH-ACTION * ')'
165            | '(' t BRANCH-ACTION * ')'
166 @endverbatim
167
168 The optional @c STATE-TITLE-TEXT specifies a title text displayed on
169 the screen when the input method is in this state.  If @c
170 STATE-TITLE-TEXT is omitted, @c TITLE-TEXT is used.
171
172 In the first form of @c BRANCH, @c MAP-NAME must be an item that
173 appears in @c MAP.  In this case, if a key sequence matching one of @c
174 KEYSEQs of @c MAP-NAME is typed, @c BRANCH-ACTIONs are executed.
175
176 In the second form of @c BRANCH, @c BRANCH-ACTIONs are executed if a
177 key sequence that doesn't match any of @c Branch's of the current
178 state is typed.
179
180 In the third form of @c BRANCH, @c BRANCH-ACTIONs are executed when
181 shifted to the current state.  If the current state is the initial
182 state, @c BRANCH-ACTIONs are executed also when an input context of
183 the input method is created.
184
185 @verbatim
186 BRANCH-ACTION ::= ACTION
187 @endverbatim
188
189 An input method has the following two lists of symbols.
190
191 <ul>
192 <li> marker list
193
194 A marker is a symbol indicating a character position in the preediting
195 text.  The @c MARK action assigns a position to a marker.  The
196 position of a marker is referred by the @c MOVE and the @c DELETE actions.
197
198 <li> variable list
199
200 A variable is a symbol associated with an integer value.  The value of
201 a variable is set by the @c SET action, and is referred by the @c SET,
202 the @c INSERT, and the @c IF actions.  All variables are implicitly
203 initialized to zero.
204
205 </ul>
206
207 Each @c PREDEFINED-SYMBOL has a special meaning when used as a marker.
208
209 <ul>
210 <li> @c @@0, @c @@1, @c @@2, @c @@3, @c @@4, @c @@5, @c @@6, @c @@7, @c @@8, @c @@9
211
212 The 0th, 1st, 2nd, ... 9th position respectively.
213
214 <li> @c @@<, @c @@=, @c @@>
215
216 The first, the current, and the last position.
217
218 <li> @c @@-, @c @@+
219
220 The previous and the next position.
221
222 <li> @c @@[, @c @@]
223
224 The previous and the next position where a candidate list changes.
225 </ul>
226
227 Some of the @c PREDEFINED-SYMBOL has a special meaning when used as a candidate
228 index in the @c SELECT action.
229
230 <ul>
231
232 <li> @c @@<, @c @@=, @c @@>
233
234 The first, the current, and the last candidate of the current candidate group.
235
236 <li> @c @@-
237
238 The previous candidate.  If the current candidate is the first one in
239 the current candidate group, then it means the last candidate in the
240 previous candidate group.
241
242 <li> @c @@+
243
244 The next candidate.  If the current candidate is the last one in the
245 current candidate group, then it means the first candidate in the next
246 candidate group.
247
248 <li> @c @@[, @c @@]
249
250 The candidate in the previous and the next candidate group having the same
251 candidate index as the current one.
252 </ul>
253
254 And, this also has a special meaning.
255
256 <ul>
257 <li> @c @@@
258
259 Number of handled keys at that moment.
260
261 </ul>
262
263 These are for supporting surround text handling.
264
265 <ul>
266 <li> @c @@-N
267
268 Here, @c N is a positive integer.  The value is a character at Nth
269 previous position from the current caret of the surrounding text.
270 When this is used as the argument of @c delete action, it specifies
271 how many preceding characters in the surround text to delete.
272
273 <li> @c @@+N
274
275 Here, @c N is a positive integer.  The value is a character at Nth
276 next position from the current caret of the surrounding text.
277 When this is used as the argument of @c delete action, it specifies
278 how many following characters in the surround text to delete.
279 </ul>
280
281 The arguments and the behavior of each action are listed below.
282
283 @verbatim
284 INSERT ::= '(' 'insert' MTEXT ')'
285            | MTEXT
286            | INTEGER
287            | '(' 'insert' SYMBOL ')'
288            | '(' 'insert' '(' CANDIDATES * ')' ')'
289            | '(' CANDIDATES * ')' 
290
291 CANDIDATES ::= MTEXT | '(' MTEXT * ')'
292 @endverbatim
293
294 The first and second forms insert @c MTEXT before the current position.
295
296 The third form inserts the character @c INTEGER before the current
297 position.
298
299 The fourth form treats @c SYMBOL as a variable, and inserts its value
300 (if it is a valid character code) before the current position.
301
302 In the fifth and sixth forms, each @c CANDIDATES represents a
303 candidate group, and each element of @c CANDIDATES represents a
304 candidate, i.e. if @c CANDIDATES is an M-text, the candidates are the
305 characters in the M-text; if @c CANDIDATES is a list of M-texts, the
306 candidates are the M-texts in the list.
307
308 These forms insert the first candidate before the current position.
309 The inserted string is associated with the list of candidates and
310 the information indicating the currently selected candidate.
311
312 The marker positions affected by the insertion are automatically relocated.
313
314 @verbatim
315 DELETE ::= '(' 'delete' SYMBOL ')'
316            | '(' 'delete' INTEGER ')'
317 @endverbatim
318
319 The first form treats @c SYMBOL as a marker, and deletes characters
320 between the current position and the marker position.
321
322 The second form treats @c INTEGER as a character position, and deletes
323 characters between the current position and the character position.
324
325 The marker positions affected by the deletion are automatically relocated.
326
327 @verbatim
328 SELECT ::= '(' 'select' PREDEFINED-SYMBOL ')'
329            | '(' 'select' INTEGER ')'
330 @endverbatim
331
332 This action first checks if the character just before the current position
333 belongs to a string that is associated with a candidate list.  If it is,
334 the action replaces that string with a candidate specified by the
335 argument.
336
337 The first form treats @c PREDEFINED-SYMBOL as a candidate index (as
338 described above) that specifies a new candidate in the candidate list.
339
340 The second form treats @c INTEGER as a candidate index that specifies a
341 new candidate in the candidate list.
342
343 @verbatim
344 SHOW ::= '(show)'
345 @endverbatim
346
347 This actions instructs the input method driver to display a candidate
348 list associated with the string before the current position.
349
350 @verbatim
351 HIDE ::= '(hide)'
352 @endverbatim
353
354 This action instructs the input method driver to hide the currently
355 displayed candidate list.
356
357 @verbatim
358 MOVE ::= '(' 'move' SYMBOL ')'
359          | '(' 'move' INTEGER ')'
360 @endverbatim
361
362 The first form treats @c SYMBOL as a marker, and makes the marker
363 position be the new current position.
364
365 The second form treats @c INTEGER as a character position, and makes
366 that position be the new current position.
367
368 @verbatim
369 MARK ::= '(' 'mark' SYMBOL ')'
370 @endverbatim
371
372 This action treats @c SYMBOL as a marker, and sets its position to the
373 current position.  @c SYMBOL must not be a @c PREDEFINED-SYMBOL.
374
375 @verbatim
376 PUSHBACK :: = '(' 'pushback' INTEGER ')'
377               | '(' 'pushback' KEYSEQ ')'
378 @endverbatim
379
380 The first form pushes back the latest @c INTEGER number of key events
381 to the event queue if @c INTEGER is positive, and pushes back all key
382 events if @c INTEGER is zero.
383
384 The second form pushes back keys in @c KEYSEQ to the event queue.
385
386 @verbatim
387 POP ::= '(' 'pop' ')'
388 @endverbatim
389
390 This action pops the first key event that is not yet handled from the
391 event queue.
392
393 @verbatim
394 UNDO :: = '(' 'undo' [ INTEGER | SYMBOL ] ')'
395 @endverbatim
396
397 If there's no argument, this action cancels the last two key events
398 (i.e. the one that invoked this command, and the previous one).
399
400 If there's an integer argument NUM, it must be positive or negative
401 (not zero).  If positive, from the NUMth to the last events are
402 canceled.  If negative the last (- NUM) events are canceled.
403
404 If there's a symbol argument, it must be resolved to an integer number
405 and the number is treated as the actual argument as above.
406
407 @verbatim
408 UNHANDLE :: = '(unhandle)'
409 @endverbatim
410
411 This action commit the current preedit and return the last key as
412 unhandled.
413
414 @verbatim
415 SHIFT :: = '(' 'shift' STATE-NAME ')'
416 @endverbatim
417
418 This action shifts the current state to @c STATE-NAME.  @c
419 STATE-NAME must appear in @c STATE-LIST.
420
421 @verbatim
422 CALL ::= '(' 'call' MODULE-NAME FUNCTION ARG * ')'
423
424 ARG ::= INTEGER | SYMBOL | MTEXT | PLIST
425 @endverbatim
426
427 This action calls the function @c FUNCTION of external module @c
428 MODULE-NAME.  @c MODULE-NAME and @c FUNCTION must appear in @c
429 MODULE-LIST.
430
431 The function is called with an argument of the type (#MPlist *).  The
432 key of the first element is #Mt and its value is a pointer to an
433 object of the type #MInputContext.  The key of the second element is
434 #Msymbol and its value is the current state name.  @c ARGs are used as
435 the value of the third and later elements.  Their keys are determined
436 automatically; if an @c ARG is an integer, the corresponding key is
437 #Minteger; if an @c ARG is a symbol, the corresponding key is
438 #Msymbol, etc.
439
440 The function must return NULL or a value of the type (#MPlist *) that
441 represents a list of actions to take.
442
443 @verbatim
444 SET ::= '(' CMD SYMBOL1 EXPRESSION ')'
445
446 CMD ::= 'set' | 'add' | 'sub' | 'mul' | 'div'
447
448 EXPRESSION ::= INTEGER | SYMBOL2 | '(' OPERAND EXPRESSION * ')'
449
450 OPERAND ::= '+' | '-' | '*' | '/' | '|' | '&' | '!'
451             | '=' | '<' | '>' | '<=' | '>='
452
453 @endverbatim
454
455 This action treats @c SYMBOL1 and @c SYMBOL2 as variables and sets the
456 value of @c SYMBOL1 as below.
457
458 If @c CMD is 'set', it sets the value of @c SYMBOL1 to the value of @c
459 EXPRESSION.
460
461 If @c CMD is 'add', it increments the value of @c SYMBOL1 by the value
462 of @c EXPRESSION.
463
464 If @c CMD is 'sub', it decrements the value of @c SYMBOL1 by the value
465 of @c EXPRESSION.
466
467 If @c CMD is 'mul', it multiplies the value of @c SYMBOL1 by the value
468 of @c EXPRESSION.
469
470 If @c CMD is 'div', it divides the value of @c SYMBOL1 by the value of
471 @c EXPRESSION.
472
473 @verbatim
474 IF ::= '(' CONDITION ACTION-LIST1 ACTION-LIST2 ')'
475
476 CONDITION ::= [ '=' | '<' | '>' | '<=' | '>=' ] EXPRESSION1 EXPRESSION2
477
478 ACTION-LIST1 ::= '(' ACTION * ')'
479
480 ACTION-LIST2 ::= '(' ACTION * ')'
481 @endverbatim
482
483 This action performs actions in @c ACTION-LIST1 if @c CONDITION is
484 true, and performs @c ACTION-LIST2 (if any) otherwise.
485
486 @c SYMBOL1 and @c SYMBOL2 are treated as variables.
487
488 @verbatim
489 COND ::= '(' 'cond' [ '(' EXPRESSION ACTION * ') ] * ')'
490 @endverbatim
491
492 This action performs the first action @c ACTION whose corresponding
493 @c EXPRESSION has nonzero value.
494
495 @ifnot FOR-MAN
496
497 @section im-example1 EXAMPLE 1
498
499 This is a very simple example for inputting Latin characters with
500 diacritical marks (acute and cedilla).  For instance, when you type:
501 @verbatim
502     Comme'die-Franc,aise, chic,,
503 @endverbatim
504 you will get this:
505 @if FOR-HTML
506 @verbatim
507     Commédie-Française, chic,
508 @endverbatim
509 @endif
510 @if FOR-LATEX
511 @latexonly
512 \hskip5mm\texttt{\footnotesize Comm\'{e}die-Fran\c{c}aise, chic,}
513 @endlatexonly
514 @endif
515
516 The definition of the input method is very simple as below, and it is
517 quite straight forward to extend it to cover all Latin characters.
518
519 @if FOR-HTML
520 @verbatim
521 (title "latin-postfix")
522 (map
523  (trans
524   ("a'" ?á) ("e'" ?é) ("i'" ?í) ("o'" ?ó) ("u'" ?ú) ("c," ?ç)
525   ("A'" ?Á) ("E'" ?É) ("I'" ?Í) ("O'" ?Ó) ("U'" ?Ú) ("C," ?Ç)
526   ("a''" "a'") ("e''" "e'") ("i''" "i'") ("o''" "o'") ("u''" "u'")
527   ("c,," "c,")
528   ("A''" "A'") ("E''" "E'") ("I''" "I'") ("O''" "O'") ("U''" "U'")
529   ("C,," "C,")))
530 (state
531  (init
532   (trans)))
533 @endverbatim
534 @endif
535 @if FOR-LATEX
536 @latexonly
537 \texttt{\footnotesize
538 \hskip2mm(title "latin-postfix")\\
539 \hskip2mm(map\\
540 \hskip4mm (trans\\
541 \hskip6mm  ("a'" ?\'{a}) ("e'" ?\'{e}) ("i'" ?\'{i}) ("o'" ?\'{o})
542 ("u'" ?\'{u}) ("c," ?\c{c})\\
543 \hskip6mm  ("A'" ?\'{A}) ("E'" ?\'{E}) ("I'" ?\'{I}) ("O'" ?\'{O})
544 ("U'" ?\'{U}) ("C," ?\c{C})\\
545 \hskip6mm  ("a''" "a'") ("e''" "e'") ("i''" "i'") ("o''" "o'") ("u''" "u'")\\
546 \hskip6mm  ("c,," "c,")\\
547 \hskip6mm  ("A''" "A'") ("E''" "E'") ("I''" "I'") ("O''" "O'") ("U''" "U'")\\
548 \hskip6mm  ("C,," "C,")))\\
549 \hskip2mm(state\\
550 \hskip4mm (init\\
551 \hskip6mm  (trans)))}
552 @endlatexonly
553 @endif
554
555 @section im-example2 EXAMPLE 2
556
557 This example is for inputting Unicode characters by typing C-u
558 (Control-u) followed by four hexadecimal digits.  For instance, when
559 you type ("^u" means Control-u):
560 @verbatim
561     ^u2190^u2191^u2192^u2193
562 @endverbatim
563 you will get this (Unicode arrow symbols):
564 @verbatim
565     ←↑→↓
566 @endverbatim
567
568 The definition utilizes @c SET and @c IF commands as below:
569 @verbatim
570 (title "UNICODE")
571 (map
572  (starter
573   ((C-U) "U+"))
574  (hex
575   ("0" ?0) ("1" ?1) ... ("9" ?9) ("a" ?A) ("b" ?B) ... ("f" ?F)))
576 (state
577  (init
578   (starter (set code 0) (set count 0) (shift unicode)))
579  (unicode
580   (hex (set this @-)
581        (< this ?A
582           ((sub this 48))
583           ((sub this 55)))
584        (mul code 16) (add code this)
585        (add count 1)
586        (= count 4
587           ((delete @<) (insert code) (shift init))))))
588 @endverbatim
589
590 @section im-example3 EXAMPLE 3
591
592 This example is for inputting Chinese characters by typing PinYin key
593 sequence.
594 @if FOR-HTML
595 For instance, when you type:
596 @verbatim
597     nihaobei2jing2
598 @endverbatim
599 you will get:
600 @verbatim
601     你好北京
602 @endverbatim
603
604 The definition utilizes @c CANDIDATE and @c SELECT commands as below.
605 Note that this is just an example, and it ignores such important key
606 as Backspace.
607
608 @verbatim
609 (title "拼")
610
611 (map
612  ;; The initial character of Pinyin.
613  (starter
614   ("a") ("b") ... ("h") ("j") ... ("t") ("w") ("x") ("y") ("z"))
615
616  ;; Big table of Pinyin vs the corresponding Chinese characters.
617  (pinyin
618   ...
619   ("bei" ("被北备背悲辈杯倍贝碑" ...))
620   ("hao" ("好号毫豪浩耗皓嚎昊郝" ...))
621   ("jing" ("经京精境警竟静惊景敬" ...))
622   ("ni" ("你呢尼泥逆倪匿拟腻妮" ...))
623   ...)
624  ;; Typing 1, 2, ..., 0 selects the 0th, 1st, ..., 9th candidate.
625  (choose
626   ("1" (select 0)) ("2" (select 1)) ... ("9" (select 8)) ("0" (select 9))))
627
628 (state
629  (init
630   ;; When an initial character of Pinyin is typed, re-handle it in
631   ;; "main" state.  Anything else is just produced as is.
632   (starter (show) (pushback 1) (shift main)))
633
634  (main
635   ;; When a complete Pinyin sequence is typed, shift to "select" state
636   ;; to allow users to select one from the candidates.
637   (pinyin (shift select))
638
639   ;; When anything else is typed, produce the current candidate (if
640   ;; any), and re-handle the last input in "init" state.
641   (nil (hide) (shift init)))
642
643  (select
644   ;; When a number is typed, select the corresponding canidate,
645   ;; produce it, and shift to "init" state.
646   (choose (hide) (shift init))
647
648   ;; When anything else is typed, produce the current candidate,
649   ;; and re-handle the last input in "init" state.
650   (nil (hide) (shift init))))
651 @endverbatim
652
653 @elseif FOR-LATEX
654 @latexonly
655 \begin{center}
656 \fbox{This example is readable only in the documentation of HTML version.}
657 \end{center}
658 @endlatexonly
659 @endif
660
661 @endif
662
663 @section im-seealso SEE ALSO
664
665 @ref mim-list "Input Methods provided by the m17n database",
666 @ref mdbGeneral "mdbGeneral(5)"
667 */
668
669 /* 
670 Copyright (C) 2003, 2004, 2005
671   National Institute of Advanced Industrial Science and Technology (AIST)
672   Registration Number H15PRO112
673
674 This file is part of the m17n database; a sub-part of the m17n
675 library.
676
677 The m17n library is free software; you can redistribute it and/or
678 modify it under the terms of the GNU Lesser General Public License
679 as published by the Free Software Foundation; either version 2.1 of
680 the License, or (at your option) any later version.
681
682 The m17n library is distributed in the hope that it will be useful,
683 but WITHOUT ANY WARRANTY; without even the implied warranty of
684 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
685 Lesser General Public License for more details.
686
687 You should have received a copy of the GNU Lesser General Public
688 License along with the m17n library; if not, write to the Free
689 Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
690 Boston, MA 02110-1301, USA.
691 */
692
693 /* Local Variables: */
694 /* coding: utf-8 */
695 /* End: */