*** empty log message ***
[m17n/m17n-lib-js.git] / vi-vni.mimx
1 <?xml version='1.0'?>
2 <input-method xmlns="http://www.m17n.org/MIM">
3   <tags>
4     <language>vi</language>
5     <name>vni</name>
6   </tags>
7   <description>
8     <gettext>Vietnames input method using the VNI key sequence.
9 Typing Backslash ('\') toggles the normal mode and English mode.
10 The following variables are customizable:
11   tone-mark-on-last: control tone mark position in equivocal cases
12   backspace-is-undo: control the action of Backspace key (delete or undo)</gettext>
13   </description>
14   <title>Ắ(VNI)</title>
15   <variable-list>
16     <defvar vname="tone-mark-on-last">
17       <description>
18         <gettext>Flag to control tone mark position in equivocal cases.
19 If this variable is 0 (the default), put tone mark on the first vowel
20 in such equivocal cases as "oa", "oe", "uy".
21 Otherwise, put tone mark on the last vowel.</gettext>
22       </description>
23       <integer>0</integer>
24       <possible-value>
25         <integer>0</integer>
26         <integer>1</integer>
27       </possible-value>
28     </defvar>
29     <defvar vname="backspace-is-undo">
30       <description>
31         <gettext>Flag to control the action of Backspace key (delete or undo).
32 If this variable is 0 (the default), Backspace key deletes the previous
33 character (e.g. "q u a i s BS" =&gt; "quá").
34 If the value is 1, Backspace key undoes the previous key
35 (e.g. "q u a i s BS" =&gt; "quai").</gettext>
36       </description>
37       <integer>0</integer>
38       <possible-value>
39         <integer>0</integer>
40         <integer>1</integer>
41       </possible-value>
42     </defvar>
43   </variable-list>
44   <macro-list>
45     <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="vi-base.mimx" xpointer="xmlns(mim=http://www.m17n.org/MIM)xpointer(//mim:defmacro)">
46       <tags>
47         <language>t</language>
48         <name>nil</name>
49         <extra-id>vi-base</extra-id>
50       </tags>
51       <section>macro</section>
52     </xi:include>
53   </macro-list>
54   <map-list>
55     <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="vi-base.mimx" xpointer="xmlns(mim=http://www.m17n.org/MIM)xpointer(//mim:map)">
56       <tags>
57         <language>t</language>
58         <name>nil</name>
59         <extra-id>vi-base</extra-id>
60       </tags>
61       <section>map</section>
62     </xi:include>
63     <map mname="map-vowel-ext">
64       <rule>
65         <keyseq>
66           <string>a6</string>
67         </keyseq>
68         <insert-candidates>
69           <string>âấầẩẫậ</string>
70         </insert-candidates>
71       </rule>
72       <rule>
73         <keyseq>
74           <string>A6</string>
75         </keyseq>
76         <insert-candidates>
77           <string>ÂẤẦẨẪẬ</string>
78         </insert-candidates>
79       </rule>
80       <rule>
81         <keyseq>
82           <string>a8</string>
83         </keyseq>
84         <insert-candidates>
85           <string>ăắằẳẵặ</string>
86         </insert-candidates>
87       </rule>
88       <rule>
89         <keyseq>
90           <string>A8</string>
91         </keyseq>
92         <insert-candidates>
93           <string>ĂẮẰẲẴẶ</string>
94         </insert-candidates>
95       </rule>
96       <rule>
97         <keyseq>
98           <string>e6</string>
99         </keyseq>
100         <insert-candidates>
101           <string>êếềểễệ</string>
102         </insert-candidates>
103       </rule>
104       <rule>
105         <keyseq>
106           <string>E6</string>
107         </keyseq>
108         <insert-candidates>
109           <string>ÊẾỀỂỄỆ</string>
110         </insert-candidates>
111       </rule>
112       <rule>
113         <keyseq>
114           <string>o6</string>
115         </keyseq>
116         <insert-candidates>
117           <string>ôốồổỗộ</string>
118         </insert-candidates>
119       </rule>
120       <rule>
121         <keyseq>
122           <string>O6</string>
123         </keyseq>
124         <insert-candidates>
125           <string>ÔỐỒỔỖỘ</string>
126         </insert-candidates>
127       </rule>
128       <rule>
129         <keyseq>
130           <string>o7</string>
131         </keyseq>
132         <insert-candidates>
133           <string>ơớờởỡợ</string>
134         </insert-candidates>
135       </rule>
136       <rule>
137         <keyseq>
138           <string>O7</string>
139         </keyseq>
140         <insert-candidates>
141           <string>ƠỚỜỞỠỢ</string>
142         </insert-candidates>
143       </rule>
144       <rule>
145         <keyseq>
146           <string>u7</string>
147         </keyseq>
148         <insert-candidates>
149           <string>ưứừửữự</string>
150         </insert-candidates>
151       </rule>
152       <rule>
153         <keyseq>
154           <string>U7</string>
155         </keyseq>
156         <insert-candidates>
157           <string>ƯỨỪỬỮỰ</string>
158         </insert-candidates>
159       </rule>
160     </map>
161     <map mname="map-consonant-ext">
162       <rule>
163         <keyseq>
164           <string>d9</string>
165         </keyseq>
166         <insert>
167           <integer>273</integer>
168         </insert>
169       </rule>
170       <rule>
171         <keyseq>
172           <string>D9</string>
173         </keyseq>
174         <insert>
175           <integer>272</integer>
176         </insert>
177       </rule>
178     </map>
179     <map mname="map-tone-mark">
180       <rule>
181         <keyseq>
182           <string>0</string>
183         </keyseq>
184         <set vname="SELECT">
185           <integer>0</integer>
186         </set>
187         <insert>
188           <integer>48</integer>
189         </insert>
190       </rule>
191       <rule>
192         <keyseq>
193           <string>1</string>
194         </keyseq>
195         <set vname="SELECT">
196           <integer>1</integer>
197         </set>
198         <insert>
199           <integer>49</integer>
200         </insert>
201       </rule>
202       <rule>
203         <keyseq>
204           <string>2</string>
205         </keyseq>
206         <set vname="SELECT">
207           <integer>2</integer>
208         </set>
209         <insert>
210           <integer>50</integer>
211         </insert>
212       </rule>
213       <rule>
214         <keyseq>
215           <string>3</string>
216         </keyseq>
217         <set vname="SELECT">
218           <integer>3</integer>
219         </set>
220         <insert>
221           <integer>51</integer>
222         </insert>
223       </rule>
224       <rule>
225         <keyseq>
226           <string>4</string>
227         </keyseq>
228         <set vname="SELECT">
229           <integer>4</integer>
230         </set>
231         <insert>
232           <integer>52</integer>
233         </insert>
234       </rule>
235       <rule>
236         <keyseq>
237           <string>5</string>
238         </keyseq>
239         <set vname="SELECT">
240           <integer>5</integer>
241         </set>
242         <insert>
243           <integer>53</integer>
244         </insert>
245       </rule>
246     </map>
247     <map mname="map-temporary-escape">
248       <rule>
249         <keyseq>
250           <string>a66</string>
251         </keyseq>
252         <insert>
253           <string>a6</string>
254         </insert>
255       </rule>
256       <rule>
257         <keyseq>
258           <string>A66</string>
259         </keyseq>
260         <insert>
261           <string>A6</string>
262         </insert>
263       </rule>
264       <rule>
265         <keyseq>
266           <string>a88</string>
267         </keyseq>
268         <insert>
269           <string>a8</string>
270         </insert>
271       </rule>
272       <rule>
273         <keyseq>
274           <string>A88</string>
275         </keyseq>
276         <insert>
277           <string>A8</string>
278         </insert>
279       </rule>
280       <rule>
281         <keyseq>
282           <string>e66</string>
283         </keyseq>
284         <insert>
285           <string>e6</string>
286         </insert>
287       </rule>
288       <rule>
289         <keyseq>
290           <string>E66</string>
291         </keyseq>
292         <insert>
293           <string>E6</string>
294         </insert>
295       </rule>
296       <rule>
297         <keyseq>
298           <string>o66</string>
299         </keyseq>
300         <insert>
301           <string>o6</string>
302         </insert>
303       </rule>
304       <rule>
305         <keyseq>
306           <string>O66</string>
307         </keyseq>
308         <insert>
309           <string>O6</string>
310         </insert>
311       </rule>
312       <rule>
313         <keyseq>
314           <string>o77</string>
315         </keyseq>
316         <insert>
317           <string>o7</string>
318         </insert>
319       </rule>
320       <rule>
321         <keyseq>
322           <string>O77</string>
323         </keyseq>
324         <insert>
325           <string>O7</string>
326         </insert>
327       </rule>
328       <rule>
329         <keyseq>
330           <string>u77</string>
331         </keyseq>
332         <insert>
333           <string>u7</string>
334         </insert>
335       </rule>
336       <rule>
337         <keyseq>
338           <string>U77</string>
339         </keyseq>
340         <insert>
341           <string>U7</string>
342         </insert>
343       </rule>
344     </map>
345   </map-list>
346   <state-list>
347     <state sname="state-init">
348       <state-hook>
349         <set vname="C">
350           <char-at>
351             <marker>@-1</marker>
352           </char-at>
353         </set>
354         <set vname="V-1">
355           <integer>0</integer>
356         </set>
357         <set vname="V-2">
358           <integer>0</integer>
359         </set>
360         <set vname="V-3">
361           <integer>0</integer>
362         </set>
363         <set vname="C-AFTER-V">
364           <integer>0</integer>
365         </set>
366         <set vname="SELECT">
367           <integer>0</integer>
368         </set>
369         <set vname="NST">
370           <eq>
371             <surrounding-text-flag/>
372             <integer>-2</integer>
373           </eq>
374         </set>
375       </state-hook>
376       <branch mname="map-consonant">
377         <set vname="C">
378           <char-at>
379             <marker>@-1</marker>
380           </char-at>
381         </set>
382         <cond>
383           <list>
384             <varref vname="NST"/>
385             <shift>
386               <symbol>state-after-c</symbol>
387             </shift>
388           </list>
389         </cond>
390       </branch>
391       <branch mname="map-consonant-ext">
392         <set vname="C">
393           <char-at>
394             <marker>@-1</marker>
395           </char-at>
396         </set>
397         <cond>
398           <list>
399             <varref vname="NST"/>
400             <shift>
401               <symbol>state-after-c</symbol>
402             </shift>
403           </list>
404         </cond>
405       </branch>
406       <branch mname="map-vowel">
407         <mark>
408           <marker>M</marker>
409         </mark>
410         <set vname="V-2">
411           <varref vname="V-1"/>
412         </set>
413         <set vname="V-1">
414           <char-at>
415             <marker>@-1</marker>
416           </char-at>
417         </set>
418         <shift>
419           <symbol>state-after-v</symbol>
420         </shift>
421       </branch>
422       <branch mname="map-vowel-ext">
423         <mark>
424           <marker>M</marker>
425         </mark>
426         <set vname="V-2">
427           <varref vname="V-1"/>
428         </set>
429         <set vname="V-1">
430           <char-at>
431             <marker>@-1</marker>
432           </char-at>
433         </set>
434         <shift>
435           <symbol>state-after-v</symbol>
436         </shift>
437       </branch>
438       <branch mname="map-temporary-escape">
439         <shift>
440           <symbol>state-temporary-escape</symbol>
441         </shift>
442       </branch>
443       <branch mname="map-permanent-escape">
444         <shift>
445           <symbol>state-escape-in-normal-mode</symbol>
446         </shift>
447       </branch>
448       <branch mname="map-smart-quotes"/>
449     </state>
450     <state sname="state-after-c">
451       <branch mname="map-vowel">
452         <mark>
453           <marker>M</marker>
454         </mark>
455         <set vname="V-2">
456           <varref vname="V-1"/>
457         </set>
458         <set vname="V-1">
459           <char-at>
460             <marker>@-1</marker>
461           </char-at>
462         </set>
463         <shift>
464           <symbol>state-after-v</symbol>
465         </shift>
466       </branch>
467       <branch mname="map-vowel-ext">
468         <mark>
469           <marker>M</marker>
470         </mark>
471         <set vname="V-2">
472           <varref vname="V-1"/>
473         </set>
474         <set vname="V-1">
475           <char-at>
476             <marker>@-1</marker>
477           </char-at>
478         </set>
479         <shift>
480           <symbol>state-after-v</symbol>
481         </shift>
482       </branch>
483     </state>
484     <state sname="state-after-v">
485       <branch mname="map-consonant">
486         <shift>
487           <symbol>state-after-vc</symbol>
488         </shift>
489       </branch>
490       <branch mname="map-consonant-ext">
491         <shift>
492           <symbol>state-after-vc</symbol>
493         </shift>
494       </branch>
495       <branch mname="map-vowel">
496         <mark>
497           <marker>M</marker>
498         </mark>
499         <set vname="V-3">
500           <varref vname="V-2"/>
501         </set>
502         <set vname="V-2">
503           <varref vname="V-1"/>
504         </set>
505         <set vname="V-1">
506           <char-at>
507             <marker>@-1</marker>
508           </char-at>
509         </set>
510         <move>
511           <marker>T</marker>
512         </move>
513         <select>
514           <integer>0</integer>
515         </select>
516         <funcall fname="macro-handle-mark"/>
517         <move>
518           <marker>M</marker>
519         </move>
520       </branch>
521       <branch mname="map-vowel-ext">
522         <mark>
523           <marker>M</marker>
524         </mark>
525         <set vname="V-3">
526           <varref vname="V-2"/>
527         </set>
528         <set vname="V-2">
529           <varref vname="V-1"/>
530         </set>
531         <set vname="V-1">
532           <char-at>
533             <marker>@-1</marker>
534           </char-at>
535         </set>
536         <move>
537           <marker>T</marker>
538         </move>
539         <select>
540           <integer>0</integer>
541         </select>
542         <funcall fname="macro-handle-mark"/>
543         <move>
544           <marker>M</marker>
545         </move>
546       </branch>
547       <branch mname="map-tone-mark">
548         <delete>
549           <marker>@-</marker>
550         </delete>
551         <pushback>
552           <integer>1</integer>
553         </pushback>
554         <shift>
555           <symbol>state-after-t</symbol>
556         </shift>
557       </branch>
558       <branch mname="map-backspace">
559         <delete>
560           <marker>@-</marker>
561         </delete>
562         <cond>
563           <list>
564             <varref vname="V-3"/>
565             <set vname="V-1">
566               <varref vname="V-2"/>
567             </set>
568             <set vname="V-2">
569               <varref vname="V-3"/>
570             </set>
571             <set vname="V-3">
572               <integer>0</integer>
573             </set>
574             <cond>
575               <list>
576                 <gt>
577                   <varref vname="TPLACE"/>
578                   <integer>2</integer>
579                 </gt>
580                 <set vname="SELECT">
581                   <integer>0</integer>
582                 </set>
583               </list>
584             </cond>
585           </list>
586           <list>
587             <varref vname="V-2"/>
588             <set vname="V-1">
589               <varref vname="V-2"/>
590             </set>
591             <set vname="V-2">
592               <integer>0</integer>
593             </set>
594             <cond>
595               <list>
596                 <gt>
597                   <varref vname="TPLACE"/>
598                   <integer>1</integer>
599                 </gt>
600                 <set vname="SELECT">
601                   <integer>0</integer>
602                 </set>
603               </list>
604             </cond>
605           </list>
606           <list>
607             <integer>1</integer>
608             <shift>
609               <symbol>state-init</symbol>
610             </shift>
611           </list>
612         </cond>
613       </branch>
614     </state>
615     <state sname="state-after-vc">
616       <state-hook>
617         <set vname="C-AFTER-V">
618           <integer>1</integer>
619         </set>
620       </state-hook>
621       <branch mname="map-consonant">
622         <add vname="C-AFTER-V">
623           <integer>1</integer>
624         </add>
625       </branch>
626       <branch mname="map-consonant-ext">
627         <add vname="C-AFTER-V">
628           <integer>1</integer>
629         </add>
630       </branch>
631       <branch mname="map-tone-mark">
632         <delete>
633           <marker>@-</marker>
634         </delete>
635         <pushback>
636           <integer>1</integer>
637         </pushback>
638         <shift>
639           <symbol>state-after-t</symbol>
640         </shift>
641       </branch>
642       <branch mname="map-backspace">
643         <delete>
644           <marker>@-</marker>
645         </delete>
646         <sub vname="C-AFTER-V">
647           <integer>1</integer>
648         </sub>
649         <cond>
650           <list>
651             <eq>
652               <varref vname="C-AFTER-V"/>
653               <integer>0</integer>
654             </eq>
655             <shift>
656               <symbol>state-after-v</symbol>
657             </shift>
658           </list>
659         </cond>
660       </branch>
661     </state>
662     <state sname="state-after-t">
663       <state-hook>
664         <set vname="CURRENT-SELECT">
665           <integer>-1</integer>
666         </set>
667       </state-hook>
668       <branch mname="map-tone-mark">
669         <cond>
670           <list>
671             <eq>
672               <varref vname="CURRENT-SELECT"/>
673               <varref vname="SELECT"/>
674             </eq>
675             <move>
676               <marker>T</marker>
677             </move>
678             <select>
679               <integer>0</integer>
680             </select>
681             <move>
682               <marker>@&gt;</marker>
683             </move>
684             <shift>
685               <symbol>state-temporary-escape</symbol>
686             </shift>
687           </list>
688           <list>
689             <integer>1</integer>
690             <delete>
691               <marker>@-</marker>
692             </delete>
693             <funcall fname="macro-handle-mark"/>
694             <set vname="CURRENT-SELECT">
695               <varref vname="SELECT"/>
696             </set>
697           </list>
698         </cond>
699       </branch>
700       <catch-all-branch>
701         <cond>
702           <list>
703             <varref vname="C-AFTER-V"/>
704             <shift>
705               <symbol>state-after-vc</symbol>
706             </shift>
707           </list>
708           <list>
709             <integer>1</integer>
710             <shift>
711               <symbol>state-after-v</symbol>
712             </shift>
713           </list>
714         </cond>
715       </catch-all-branch>
716     </state>
717     <state sname="state-temporary-escape">
718       <title>en</title>
719       <state-hook>
720         <commit/>
721       </state-hook>
722       <branch mname="map-alnum">
723         <commit/>
724       </branch>
725     </state>
726     <state sname="state-escape-in-normal-mode">
727       <title>EN</title>
728       <branch mname="map-permanent-escape">
729         <insert>
730           <string>\</string>
731         </insert>
732         <shift>
733           <symbol>state-init</symbol>
734         </shift>
735       </branch>
736       <catch-all-branch>
737         <shift>
738           <symbol>state-permanent-escape</symbol>
739         </shift>
740       </catch-all-branch>
741     </state>
742     <state sname="state-permanent-escape">
743       <title>EN</title>
744       <state-hook>
745         <set vname="ESCAPE">
746           <integer>1</integer>
747         </set>
748       </state-hook>
749       <branch mname="map-permanent-escape">
750         <shift>
751           <symbol>state-escape-in-permanent-escape</symbol>
752         </shift>
753       </branch>
754       <catch-all-branch>
755         <unhandle/>
756       </catch-all-branch>
757     </state>
758     <state sname="state-escape-in-permanent-escape">
759       <title>Ắ</title>
760       <branch mname="map-permanent-escape">
761         <insert>
762           <string>\</string>
763         </insert>
764         <commit/>
765         <shift>
766           <symbol>state-permanent-escape</symbol>
767         </shift>
768       </branch>
769     </state>
770   </state-list>
771 </input-method>