1953ce1f02c730bbec9a61ab336cb7ada432574d
[m17n/m17n-lib-js.git] / vi-telex.mimx
1 <?xml version='1.0'?>
2 <input-method xmlns="http://www.m17n.org/MIM">
3   <tags>
4     <language>vi</language>
5     <name>telex</name>
6   </tags>
7   <description>
8     <gettext>Vietnames input method using the TELEX 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>Ắ(TLX)</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>aa</string>
67         </keyseq>
68         <insert-candidates>
69           <string>âấầẩẫậ</string>
70         </insert-candidates>
71       </rule>
72       <rule>
73         <keyseq>
74           <string>AA</string>
75         </keyseq>
76         <insert-candidates>
77           <string>ÂẤẦẨẪẬ</string>
78         </insert-candidates>
79       </rule>
80       <rule>
81         <keyseq>
82           <string>Aa</string>
83         </keyseq>
84         <insert-candidates>
85           <string>ÂẤẦẨẪẬ</string>
86         </insert-candidates>
87       </rule>
88       <rule>
89         <keyseq>
90           <string>aw</string>
91         </keyseq>
92         <insert-candidates>
93           <string>ăắằẳẵặ</string>
94         </insert-candidates>
95       </rule>
96       <rule>
97         <keyseq>
98           <string>AW</string>
99         </keyseq>
100         <insert-candidates>
101           <string>ĂẮẰẲẴẶ</string>
102         </insert-candidates>
103       </rule>
104       <rule>
105         <keyseq>
106           <string>Aw</string>
107         </keyseq>
108         <insert-candidates>
109           <string>ĂẮẰẲẴẶ</string>
110         </insert-candidates>
111       </rule>
112       <rule>
113         <keyseq>
114           <string>ee</string>
115         </keyseq>
116         <insert-candidates>
117           <string>êếềểễệ</string>
118         </insert-candidates>
119       </rule>
120       <rule>
121         <keyseq>
122           <string>EE</string>
123         </keyseq>
124         <insert-candidates>
125           <string>ÊẾỀỂỄỆ</string>
126         </insert-candidates>
127       </rule>
128       <rule>
129         <keyseq>
130           <string>Ee</string>
131         </keyseq>
132         <insert-candidates>
133           <string>ÊẾỀỂỄỆ</string>
134         </insert-candidates>
135       </rule>
136       <rule>
137         <keyseq>
138           <string>oo</string>
139         </keyseq>
140         <insert-candidates>
141           <string>ôốồổỗộ</string>
142         </insert-candidates>
143       </rule>
144       <rule>
145         <keyseq>
146           <string>OO</string>
147         </keyseq>
148         <insert-candidates>
149           <string>ÔỐỒỔỖỘ</string>
150         </insert-candidates>
151       </rule>
152       <rule>
153         <keyseq>
154           <string>Oo</string>
155         </keyseq>
156         <insert-candidates>
157           <string>ÔỐỒỔỖỘ</string>
158         </insert-candidates>
159       </rule>
160       <rule>
161         <keyseq>
162           <string>ow</string>
163         </keyseq>
164         <insert-candidates>
165           <string>ơớờởỡợ</string>
166         </insert-candidates>
167       </rule>
168       <rule>
169         <keyseq>
170           <string>OW</string>
171         </keyseq>
172         <insert-candidates>
173           <string>ƠỚỜỞỠỢ</string>
174         </insert-candidates>
175       </rule>
176       <rule>
177         <keyseq>
178           <string>Ow</string>
179         </keyseq>
180         <insert-candidates>
181           <string>ƠỚỜỞỠỢ</string>
182         </insert-candidates>
183       </rule>
184       <rule>
185         <keyseq>
186           <string>uw</string>
187         </keyseq>
188         <insert-candidates>
189           <string>ưứừửữự</string>
190         </insert-candidates>
191       </rule>
192       <rule>
193         <keyseq>
194           <string>UW</string>
195         </keyseq>
196         <insert-candidates>
197           <string>ƯỨỪỬỮỰ</string>
198         </insert-candidates>
199       </rule>
200       <rule>
201         <keyseq>
202           <string>Uw</string>
203         </keyseq>
204         <insert-candidates>
205           <string>ƯỨỪỬỮỰ</string>
206         </insert-candidates>
207       </rule>
208       <rule>
209         <keyseq>
210           <string>w</string>
211         </keyseq>
212         <cond>
213           <list>
214             <eq>
215               <varref vname="V-1"/>
216               <integer>0</integer>
217             </eq>
218             <insert-candidates>
219               <string>ưứừửữự</string>
220             </insert-candidates>
221           </list>
222           <list>
223             <integer>1</integer>
224             <insert>
225               <string>w</string>
226             </insert>
227           </list>
228         </cond>
229       </rule>
230       <rule>
231         <keyseq>
232           <string>W</string>
233         </keyseq>
234         <cond>
235           <list>
236             <eq>
237               <varref vname="V-1"/>
238               <integer>0</integer>
239             </eq>
240             <insert-candidates>
241               <string>ƯỨỪỬỮỰ</string>
242             </insert-candidates>
243           </list>
244           <list>
245             <integer>1</integer>
246             <insert>
247               <string>W</string>
248             </insert>
249           </list>
250         </cond>
251       </rule>
252       <rule>
253         <keyseq>
254           <string>ooo</string>
255         </keyseq>
256         <insert-candidates>
257           <string>oóòỏõọ</string>
258         </insert-candidates>
259         <insert-candidates>
260           <string>oóòỏõọ</string>
261         </insert-candidates>
262         <set vname="V-2">
263           <varref vname="V-1"/>
264         </set>
265         <set vname="V-1">
266           <integer>111</integer>
267         </set>
268       </rule>
269       <rule>
270         <keyseq>
271           <string>OOO</string>
272         </keyseq>
273         <insert-candidates>
274           <string>OÓÒỎÕỌ</string>
275         </insert-candidates>
276         <insert-candidates>
277           <string>OÓÒỎÕỌ</string>
278         </insert-candidates>
279         <set vname="V-2">
280           <varref vname="V-1"/>
281         </set>
282         <set vname="V-1">
283           <integer>79</integer>
284         </set>
285       </rule>
286       <rule>
287         <keyseq>
288           <string>Ooo</string>
289         </keyseq>
290         <insert-candidates>
291           <string>OÓÒỎÕỌ</string>
292         </insert-candidates>
293         <insert-candidates>
294           <string>oóòỏõọ</string>
295         </insert-candidates>
296         <set vname="V-2">
297           <varref vname="V-1"/>
298         </set>
299         <set vname="V-1">
300           <integer>79</integer>
301         </set>
302       </rule>
303     </map>
304     <map mname="map-consonant-ext">
305       <rule>
306         <keyseq>
307           <string>dd</string>
308         </keyseq>
309         <insert>
310           <integer>273</integer>
311         </insert>
312       </rule>
313       <rule>
314         <keyseq>
315           <string>DD</string>
316         </keyseq>
317         <insert>
318           <integer>272</integer>
319         </insert>
320       </rule>
321       <rule>
322         <keyseq>
323           <string>Dd</string>
324         </keyseq>
325         <insert>
326           <integer>272</integer>
327         </insert>
328       </rule>
329     </map>
330     <map mname="map-tone-mark">
331       <rule>
332         <keyseq>
333           <string>z</string>
334         </keyseq>
335         <set vname="SELECT">
336           <integer>0</integer>
337         </set>
338         <insert>
339           <integer>122</integer>
340         </insert>
341       </rule>
342       <rule>
343         <keyseq>
344           <string>Z</string>
345         </keyseq>
346         <set vname="SELECT">
347           <integer>0</integer>
348         </set>
349         <insert>
350           <integer>90</integer>
351         </insert>
352       </rule>
353       <rule>
354         <keyseq>
355           <string>s</string>
356         </keyseq>
357         <set vname="SELECT">
358           <integer>1</integer>
359         </set>
360         <insert>
361           <integer>115</integer>
362         </insert>
363       </rule>
364       <rule>
365         <keyseq>
366           <string>S</string>
367         </keyseq>
368         <set vname="SELECT">
369           <integer>1</integer>
370         </set>
371         <insert>
372           <integer>83</integer>
373         </insert>
374       </rule>
375       <rule>
376         <keyseq>
377           <string>f</string>
378         </keyseq>
379         <set vname="SELECT">
380           <integer>2</integer>
381         </set>
382         <insert>
383           <integer>102</integer>
384         </insert>
385       </rule>
386       <rule>
387         <keyseq>
388           <string>F</string>
389         </keyseq>
390         <set vname="SELECT">
391           <integer>2</integer>
392         </set>
393         <insert>
394           <integer>70</integer>
395         </insert>
396       </rule>
397       <rule>
398         <keyseq>
399           <string>r</string>
400         </keyseq>
401         <set vname="SELECT">
402           <integer>3</integer>
403         </set>
404         <insert>
405           <integer>114</integer>
406         </insert>
407       </rule>
408       <rule>
409         <keyseq>
410           <string>R</string>
411         </keyseq>
412         <set vname="SELECT">
413           <integer>3</integer>
414         </set>
415         <insert>
416           <integer>82</integer>
417         </insert>
418       </rule>
419       <rule>
420         <keyseq>
421           <string>x</string>
422         </keyseq>
423         <set vname="SELECT">
424           <integer>4</integer>
425         </set>
426         <insert>
427           <integer>120</integer>
428         </insert>
429       </rule>
430       <rule>
431         <keyseq>
432           <string>X</string>
433         </keyseq>
434         <set vname="SELECT">
435           <integer>4</integer>
436         </set>
437         <insert>
438           <integer>88</integer>
439         </insert>
440       </rule>
441       <rule>
442         <keyseq>
443           <string>j</string>
444         </keyseq>
445         <set vname="SELECT">
446           <integer>5</integer>
447         </set>
448         <insert>
449           <integer>106</integer>
450         </insert>
451       </rule>
452       <rule>
453         <keyseq>
454           <string>J</string>
455         </keyseq>
456         <set vname="SELECT">
457           <integer>5</integer>
458         </set>
459         <insert>
460           <integer>74</integer>
461         </insert>
462       </rule>
463     </map>
464     <map mname="map-consonant-or-tone-mark">
465       <rule>
466         <keyseq>
467           <string>z</string>
468         </keyseq>
469         <insert>
470           <integer>122</integer>
471         </insert>
472       </rule>
473       <rule>
474         <keyseq>
475           <string>s</string>
476         </keyseq>
477         <insert>
478           <integer>115</integer>
479         </insert>
480       </rule>
481       <rule>
482         <keyseq>
483           <string>f</string>
484         </keyseq>
485         <insert>
486           <integer>102</integer>
487         </insert>
488       </rule>
489       <rule>
490         <keyseq>
491           <string>r</string>
492         </keyseq>
493         <insert>
494           <integer>114</integer>
495         </insert>
496       </rule>
497       <rule>
498         <keyseq>
499           <string>x</string>
500         </keyseq>
501         <insert>
502           <integer>120</integer>
503         </insert>
504       </rule>
505       <rule>
506         <keyseq>
507           <string>j</string>
508         </keyseq>
509         <insert>
510           <integer>106</integer>
511         </insert>
512       </rule>
513       <rule>
514         <keyseq>
515           <string>Z</string>
516         </keyseq>
517         <insert>
518           <integer>90</integer>
519         </insert>
520       </rule>
521       <rule>
522         <keyseq>
523           <string>S</string>
524         </keyseq>
525         <insert>
526           <integer>83</integer>
527         </insert>
528       </rule>
529       <rule>
530         <keyseq>
531           <string>F</string>
532         </keyseq>
533         <insert>
534           <integer>70</integer>
535         </insert>
536       </rule>
537       <rule>
538         <keyseq>
539           <string>R</string>
540         </keyseq>
541         <insert>
542           <integer>82</integer>
543         </insert>
544       </rule>
545       <rule>
546         <keyseq>
547           <string>X</string>
548         </keyseq>
549         <insert>
550           <integer>88</integer>
551         </insert>
552       </rule>
553       <rule>
554         <keyseq>
555           <string>J</string>
556         </keyseq>
557         <insert>
558           <integer>74</integer>
559         </insert>
560       </rule>
561     </map>
562     <map mname="map-temporary-escape">
563       <rule>
564         <keyseq>
565           <string>aaa</string>
566         </keyseq>
567         <insert>
568           <string>aa</string>
569         </insert>
570       </rule>
571       <rule>
572         <keyseq>
573           <string>AAA</string>
574         </keyseq>
575         <insert>
576           <string>AA</string>
577         </insert>
578       </rule>
579       <rule>
580         <keyseq>
581           <string>Aaa</string>
582         </keyseq>
583         <insert>
584           <string>Aa</string>
585         </insert>
586       </rule>
587       <rule>
588         <keyseq>
589           <string>eee</string>
590         </keyseq>
591         <insert>
592           <string>ee</string>
593         </insert>
594       </rule>
595       <rule>
596         <keyseq>
597           <string>EEE</string>
598         </keyseq>
599         <insert>
600           <string>EE</string>
601         </insert>
602       </rule>
603       <rule>
604         <keyseq>
605           <string>Eee</string>
606         </keyseq>
607         <insert>
608           <string>Ee</string>
609         </insert>
610       </rule>
611       <rule>
612         <keyseq>
613           <string>ddd</string>
614         </keyseq>
615         <insert>
616           <string>dd</string>
617         </insert>
618       </rule>
619       <rule>
620         <keyseq>
621           <string>DDD</string>
622         </keyseq>
623         <insert>
624           <string>DD</string>
625         </insert>
626       </rule>
627       <rule>
628         <keyseq>
629           <string>Ddd</string>
630         </keyseq>
631         <insert>
632           <string>Dd</string>
633         </insert>
634       </rule>
635       <rule>
636         <keyseq>
637           <string>aww</string>
638         </keyseq>
639         <insert>
640           <string>aw</string>
641         </insert>
642       </rule>
643       <rule>
644         <keyseq>
645           <string>AWW</string>
646         </keyseq>
647         <insert>
648           <string>AW</string>
649         </insert>
650       </rule>
651       <rule>
652         <keyseq>
653           <string>Aww</string>
654         </keyseq>
655         <insert>
656           <string>Aw</string>
657         </insert>
658       </rule>
659       <rule>
660         <keyseq>
661           <string>uww</string>
662         </keyseq>
663         <insert>
664           <string>uw</string>
665         </insert>
666       </rule>
667       <rule>
668         <keyseq>
669           <string>UWW</string>
670         </keyseq>
671         <insert>
672           <string>UW</string>
673         </insert>
674       </rule>
675       <rule>
676         <keyseq>
677           <string>Uww</string>
678         </keyseq>
679         <insert>
680           <string>Uw</string>
681         </insert>
682       </rule>
683       <rule>
684         <keyseq>
685           <string>oww</string>
686         </keyseq>
687         <insert>
688           <string>ow</string>
689         </insert>
690       </rule>
691       <rule>
692         <keyseq>
693           <string>OWW</string>
694         </keyseq>
695         <insert>
696           <string>OW</string>
697         </insert>
698       </rule>
699       <rule>
700         <keyseq>
701           <string>Oww</string>
702         </keyseq>
703         <insert>
704           <string>Ow</string>
705         </insert>
706       </rule>
707       <rule>
708         <keyseq>
709           <string>ww</string>
710         </keyseq>
711         <insert>
712           <integer>119</integer>
713         </insert>
714       </rule>
715       <rule>
716         <keyseq>
717           <string>WW</string>
718         </keyseq>
719         <insert>
720           <integer>87</integer>
721         </insert>
722       </rule>
723       <rule>
724         <keyseq>
725           <string>Ww</string>
726         </keyseq>
727         <insert>
728           <integer>87</integer>
729         </insert>
730       </rule>
731       <rule>
732         <keyseq>
733           <string>zz</string>
734         </keyseq>
735         <insert>
736           <integer>122</integer>
737         </insert>
738       </rule>
739       <rule>
740         <keyseq>
741           <string>ZZ</string>
742         </keyseq>
743         <insert>
744           <integer>90</integer>
745         </insert>
746       </rule>
747       <rule>
748         <keyseq>
749           <string>Zz</string>
750         </keyseq>
751         <insert>
752           <integer>90</integer>
753         </insert>
754       </rule>
755       <rule>
756         <keyseq>
757           <string>ss</string>
758         </keyseq>
759         <insert>
760           <integer>115</integer>
761         </insert>
762       </rule>
763       <rule>
764         <keyseq>
765           <string>SS</string>
766         </keyseq>
767         <insert>
768           <integer>83</integer>
769         </insert>
770       </rule>
771       <rule>
772         <keyseq>
773           <string>Ss</string>
774         </keyseq>
775         <insert>
776           <integer>83</integer>
777         </insert>
778       </rule>
779       <rule>
780         <keyseq>
781           <string>ff</string>
782         </keyseq>
783         <insert>
784           <integer>102</integer>
785         </insert>
786       </rule>
787       <rule>
788         <keyseq>
789           <string>FF</string>
790         </keyseq>
791         <insert>
792           <integer>70</integer>
793         </insert>
794       </rule>
795       <rule>
796         <keyseq>
797           <string>Ff</string>
798         </keyseq>
799         <insert>
800           <integer>70</integer>
801         </insert>
802       </rule>
803       <rule>
804         <keyseq>
805           <string>rr</string>
806         </keyseq>
807         <insert>
808           <integer>114</integer>
809         </insert>
810       </rule>
811       <rule>
812         <keyseq>
813           <string>RR</string>
814         </keyseq>
815         <insert>
816           <integer>82</integer>
817         </insert>
818       </rule>
819       <rule>
820         <keyseq>
821           <string>Rr</string>
822         </keyseq>
823         <insert>
824           <integer>82</integer>
825         </insert>
826       </rule>
827       <rule>
828         <keyseq>
829           <string>xx</string>
830         </keyseq>
831         <insert>
832           <integer>120</integer>
833         </insert>
834       </rule>
835       <rule>
836         <keyseq>
837           <string>XX</string>
838         </keyseq>
839         <insert>
840           <integer>88</integer>
841         </insert>
842       </rule>
843       <rule>
844         <keyseq>
845           <string>Xx</string>
846         </keyseq>
847         <insert>
848           <integer>88</integer>
849         </insert>
850       </rule>
851       <rule>
852         <keyseq>
853           <string>jj</string>
854         </keyseq>
855         <insert>
856           <integer>106</integer>
857         </insert>
858       </rule>
859       <rule>
860         <keyseq>
861           <string>JJ</string>
862         </keyseq>
863         <insert>
864           <integer>74</integer>
865         </insert>
866       </rule>
867       <rule>
868         <keyseq>
869           <string>Jj</string>
870         </keyseq>
871         <insert>
872           <integer>74</integer>
873         </insert>
874       </rule>
875     </map>
876   </map-list>
877   <state-list>
878     <state sname="state-init">
879       <state-hook>
880         <set vname="C">
881           <char-at>
882             <marker>@-1</marker>
883           </char-at>
884         </set>
885         <set vname="V-1">
886           <integer>0</integer>
887         </set>
888         <set vname="V-2">
889           <integer>0</integer>
890         </set>
891         <set vname="V-3">
892           <integer>0</integer>
893         </set>
894         <set vname="C-AFTER-V">
895           <integer>0</integer>
896         </set>
897         <set vname="SELECT">
898           <integer>0</integer>
899         </set>
900       </state-hook>
901       <branch mname="map-consonant">
902         <set vname="C">
903           <char-at>
904             <marker>@-1</marker>
905           </char-at>
906         </set>
907       </branch>
908       <branch mname="map-consonant-ext">
909         <set vname="C">
910           <char-at>
911             <marker>@-1</marker>
912           </char-at>
913         </set>
914       </branch>
915       <branch mname="map-consonant-or-tone-mark">
916         <cond>
917           <list>
918             <logior>
919               <eq>
920                 <char-at>
921                   <marker>@-1</marker>
922                 </char-at>
923                 <integer>102</integer>
924               </eq>
925               <eq>
926                 <char-at>
927                   <marker>@-1</marker>
928                 </char-at>
929                 <integer>106</integer>
930               </eq>
931               <eq>
932                 <char-at>
933                   <marker>@-1</marker>
934                 </char-at>
935                 <integer>122</integer>
936               </eq>
937               <eq>
938                 <char-at>
939                   <marker>@-1</marker>
940                 </char-at>
941                 <integer>70</integer>
942               </eq>
943               <eq>
944                 <char-at>
945                   <marker>@-1</marker>
946                 </char-at>
947                 <integer>74</integer>
948               </eq>
949               <eq>
950                 <char-at>
951                   <marker>@-1</marker>
952                 </char-at>
953                 <integer>90</integer>
954               </eq>
955             </logior>
956             <shift>
957               <symbol>state-temporary-escape</symbol>
958             </shift>
959           </list>
960           <list>
961             <integer>1</integer>
962             <set vname="C">
963               <char-at>
964                 <marker>@-1</marker>
965               </char-at>
966             </set>
967           </list>
968         </cond>
969       </branch>
970       <branch mname="map-vowel">
971         <mark>
972           <marker>M</marker>
973         </mark>
974         <set vname="V-2">
975           <varref vname="V-1"/>
976         </set>
977         <set vname="V-1">
978           <char-at>
979             <marker>@-1</marker>
980           </char-at>
981         </set>
982         <shift>
983           <symbol>state-after-v</symbol>
984         </shift>
985       </branch>
986       <branch mname="map-vowel-ext">
987         <mark>
988           <marker>M</marker>
989         </mark>
990         <set vname="V-2">
991           <varref vname="V-1"/>
992         </set>
993         <set vname="V-1">
994           <char-at>
995             <marker>@-1</marker>
996           </char-at>
997         </set>
998         <shift>
999           <symbol>state-after-v</symbol>
1000         </shift>
1001       </branch>
1002       <branch mname="map-temporary-escape">
1003         <shift>
1004           <symbol>state-temporary-escape</symbol>
1005         </shift>
1006       </branch>
1007       <branch mname="map-permanent-escape">
1008         <shift>
1009           <symbol>state-escape-in-normal-mode</symbol>
1010         </shift>
1011       </branch>
1012       <branch mname="map-smart-quotes"/>
1013     </state>
1014     <state sname="state-after-v">
1015       <branch mname="map-ending-1st-consonant">
1016         <funcall fname="macro-handle-mark"/>
1017         <shift>
1018           <symbol>state-after-vc</symbol>
1019         </shift>
1020       </branch>
1021       <branch mname="map-vowel">
1022         <mark>
1023           <marker>M</marker>
1024         </mark>
1025         <set vname="V-3">
1026           <varref vname="V-2"/>
1027         </set>
1028         <set vname="V-2">
1029           <varref vname="V-1"/>
1030         </set>
1031         <set vname="V-1">
1032           <char-at>
1033             <marker>@-1</marker>
1034           </char-at>
1035         </set>
1036         <move>
1037           <marker>T</marker>
1038         </move>
1039         <select>
1040           <integer>0</integer>
1041         </select>
1042         <funcall fname="macro-handle-mark"/>
1043         <move>
1044           <marker>M</marker>
1045         </move>
1046       </branch>
1047       <branch mname="map-vowel-ext">
1048         <mark>
1049           <marker>M</marker>
1050         </mark>
1051         <set vname="V-3">
1052           <varref vname="V-2"/>
1053         </set>
1054         <set vname="V-2">
1055           <varref vname="V-1"/>
1056         </set>
1057         <set vname="V-1">
1058           <char-at>
1059             <marker>@-1</marker>
1060           </char-at>
1061         </set>
1062         <move>
1063           <marker>T</marker>
1064         </move>
1065         <select>
1066           <integer>0</integer>
1067         </select>
1068         <funcall fname="macro-handle-mark"/>
1069         <move>
1070           <marker>M</marker>
1071         </move>
1072       </branch>
1073       <branch mname="map-ending-1st-notviet-consonant">
1074         <shift>
1075           <symbol>state-temporary-escape</symbol>
1076         </shift>
1077       </branch>
1078       <branch mname="map-consonant-or-tone-mark">
1079         <delete>
1080           <marker>@-</marker>
1081         </delete>
1082         <pushback>
1083           <integer>1</integer>
1084         </pushback>
1085         <shift>
1086           <symbol>state-after-t</symbol>
1087         </shift>
1088       </branch>
1089       <branch mname="map-backspace">
1090         <delete>
1091           <marker>@-</marker>
1092         </delete>
1093         <cond>
1094           <list>
1095             <varref vname="V-3"/>
1096             <set vname="V-1">
1097               <varref vname="V-2"/>
1098             </set>
1099             <set vname="V-2">
1100               <varref vname="V-3"/>
1101             </set>
1102             <set vname="V-3">
1103               <integer>0</integer>
1104             </set>
1105             <cond>
1106               <list>
1107                 <gt>
1108                   <varref vname="TPLACE"/>
1109                   <integer>2</integer>
1110                 </gt>
1111                 <set vname="SELECT">
1112                   <integer>0</integer>
1113                 </set>
1114               </list>
1115             </cond>
1116             <funcall fname="macro-handle-mark"/>
1117           </list>
1118           <list>
1119             <varref vname="V-2"/>
1120             <set vname="V-1">
1121               <varref vname="V-2"/>
1122             </set>
1123             <set vname="V-2">
1124               <integer>0</integer>
1125             </set>
1126             <cond>
1127               <list>
1128                 <gt>
1129                   <varref vname="TPLACE"/>
1130                   <integer>1</integer>
1131                 </gt>
1132                 <set vname="SELECT">
1133                   <integer>0</integer>
1134                 </set>
1135               </list>
1136             </cond>
1137             <funcall fname="macro-handle-mark"/>
1138           </list>
1139           <list>
1140             <integer>1</integer>
1141             <shift>
1142               <symbol>state-init</symbol>
1143             </shift>
1144           </list>
1145         </cond>
1146       </branch>
1147     </state>
1148     <state sname="state-after-vc">
1149       <state-hook>
1150         <set vname="C-AFTER-V">
1151           <integer>1</integer>
1152         </set>
1153       </state-hook>
1154       <branch mname="map-ending-2nd-consonant">
1155         <cond>
1156           <list>
1157             <logior>
1158               <eq>
1159                 <char-at>
1160                   <marker>@-2</marker>
1161                 </char-at>
1162                 <integer>110</integer>
1163               </eq>
1164               <eq>
1165                 <char-at>
1166                   <marker>@-2</marker>
1167                 </char-at>
1168                 <integer>99</integer>
1169               </eq>
1170               <eq>
1171                 <char-at>
1172                   <marker>@-2</marker>
1173                 </char-at>
1174                 <integer>78</integer>
1175               </eq>
1176               <eq>
1177                 <char-at>
1178                   <marker>@-2</marker>
1179                 </char-at>
1180                 <integer>67</integer>
1181               </eq>
1182             </logior>
1183             <add vname="C-AFTER-V">
1184               <integer>1</integer>
1185             </add>
1186           </list>
1187           <list>
1188             <integer>1</integer>
1189             <shift>
1190               <symbol>state-temporary-escape</symbol>
1191             </shift>
1192           </list>
1193         </cond>
1194       </branch>
1195       <branch mname="map-ending-1st-notviet-consonant">
1196         <shift>
1197           <symbol>state-temporary-escape</symbol>
1198         </shift>
1199       </branch>
1200       <branch mname="map-consonant-or-tone-mark">
1201         <delete>
1202           <marker>@-</marker>
1203         </delete>
1204         <pushback>
1205           <integer>1</integer>
1206         </pushback>
1207         <shift>
1208           <symbol>state-after-t</symbol>
1209         </shift>
1210       </branch>
1211       <branch mname="map-vowel">
1212         <shift>
1213           <symbol>state-temporary-escape</symbol>
1214         </shift>
1215       </branch>
1216       <branch mname="map-vowel-ext">
1217         <shift>
1218           <symbol>state-temporary-escape</symbol>
1219         </shift>
1220       </branch>
1221       <branch mname="map-backspace">
1222         <delete>
1223           <marker>@-</marker>
1224         </delete>
1225         <sub vname="C-AFTER-V">
1226           <integer>1</integer>
1227         </sub>
1228         <funcall fname="macro-handle-mark"/>
1229         <cond>
1230           <list>
1231             <eq>
1232               <varref vname="C-AFTER-V"/>
1233               <integer>0</integer>
1234             </eq>
1235             <shift>
1236               <symbol>state-after-v</symbol>
1237             </shift>
1238           </list>
1239         </cond>
1240       </branch>
1241     </state>
1242     <state sname="state-after-t">
1243       <state-hook>
1244         <set vname="CURRENT-SELECT">
1245           <integer>-1</integer>
1246         </set>
1247       </state-hook>
1248       <branch mname="map-tone-mark">
1249         <cond>
1250           <list>
1251             <eq>
1252               <varref vname="CURRENT-SELECT"/>
1253               <varref vname="SELECT"/>
1254             </eq>
1255             <move>
1256               <marker>T</marker>
1257             </move>
1258             <select>
1259               <integer>0</integer>
1260             </select>
1261             <move>
1262               <marker>@&gt;</marker>
1263             </move>
1264             <shift>
1265               <symbol>state-temporary-escape</symbol>
1266             </shift>
1267           </list>
1268           <list>
1269             <integer>1</integer>
1270             <delete>
1271               <marker>@-</marker>
1272             </delete>
1273             <funcall fname="macro-handle-mark"/>
1274             <set vname="CURRENT-SELECT">
1275               <varref vname="SELECT"/>
1276             </set>
1277           </list>
1278         </cond>
1279       </branch>
1280       <catch-all-branch>
1281         <cond>
1282           <list>
1283             <varref vname="C-AFTER-V"/>
1284             <shift>
1285               <symbol>state-after-vc</symbol>
1286             </shift>
1287           </list>
1288           <list>
1289             <integer>1</integer>
1290             <shift>
1291               <symbol>state-after-v</symbol>
1292             </shift>
1293           </list>
1294         </cond>
1295       </catch-all-branch>
1296     </state>
1297     <state sname="state-temporary-escape">
1298       <title>en</title>
1299       <state-hook>
1300         <commit/>
1301       </state-hook>
1302       <branch mname="map-alnum">
1303         <commit/>
1304       </branch>
1305     </state>
1306     <state sname="state-escape-in-normal-mode">
1307       <title>EN</title>
1308       <branch mname="map-permanent-escape">
1309         <insert>
1310           <string>\</string>
1311         </insert>
1312         <shift>
1313           <symbol>state-init</symbol>
1314         </shift>
1315       </branch>
1316       <catch-all-branch>
1317         <shift>
1318           <symbol>state-permanent-escape</symbol>
1319         </shift>
1320       </catch-all-branch>
1321     </state>
1322     <state sname="state-permanent-escape">
1323       <title>EN</title>
1324       <state-hook>
1325         <set vname="ESCAPE">
1326           <integer>1</integer>
1327         </set>
1328       </state-hook>
1329       <branch mname="map-permanent-escape">
1330         <shift>
1331           <symbol>state-escape-in-permanent-escape</symbol>
1332         </shift>
1333       </branch>
1334       <catch-all-branch>
1335         <unhandle/>
1336       </catch-all-branch>
1337     </state>
1338     <state sname="state-escape-in-permanent-escape">
1339       <title>Ắ</title>
1340       <branch mname="map-permanent-escape">
1341         <insert>
1342           <string>\</string>
1343         </insert>
1344         <commit/>
1345         <shift>
1346           <symbol>state-permanent-escape</symbol>
1347         </shift>
1348       </branch>
1349     </state>
1350   </state-list>
1351 </input-method>