96a74cf0f0af6420403545dd9e242d5f0da87569
[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       </state-hook>
370       <branch mname="map-consonant">
371         <set vname="C">
372           <char-at>
373             <marker>@-1</marker>
374           </char-at>
375         </set>
376       </branch>
377       <branch mname="map-consonant-ext">
378         <set vname="C">
379           <char-at>
380             <marker>@-1</marker>
381           </char-at>
382         </set>
383       </branch>
384       <branch mname="map-vowel">
385         <mark>
386           <marker>M</marker>
387         </mark>
388         <set vname="V-2">
389           <varref vname="V-1"/>
390         </set>
391         <set vname="V-1">
392           <char-at>
393             <marker>@-1</marker>
394           </char-at>
395         </set>
396         <shift>
397           <symbol>state-after-v</symbol>
398         </shift>
399       </branch>
400       <branch mname="map-vowel-ext">
401         <mark>
402           <marker>M</marker>
403         </mark>
404         <set vname="V-2">
405           <varref vname="V-1"/>
406         </set>
407         <set vname="V-1">
408           <char-at>
409             <marker>@-1</marker>
410           </char-at>
411         </set>
412         <shift>
413           <symbol>state-after-v</symbol>
414         </shift>
415       </branch>
416       <branch mname="map-temporary-escape">
417         <shift>
418           <symbol>state-temporary-escape</symbol>
419         </shift>
420       </branch>
421       <branch mname="map-permanent-escape">
422         <shift>
423           <symbol>state-escape-in-normal-mode</symbol>
424         </shift>
425       </branch>
426       <branch mname="map-smart-quotes"/>
427     </state>
428     <state sname="state-after-v">
429       <branch mname="map-consonant">
430         <shift>
431           <symbol>state-after-vc</symbol>
432         </shift>
433       </branch>
434       <branch mname="map-consonant-ext">
435         <shift>
436           <symbol>state-after-vc</symbol>
437         </shift>
438       </branch>
439       <branch mname="map-vowel">
440         <mark>
441           <marker>M</marker>
442         </mark>
443         <set vname="V-3">
444           <varref vname="V-2"/>
445         </set>
446         <set vname="V-2">
447           <varref vname="V-1"/>
448         </set>
449         <set vname="V-1">
450           <char-at>
451             <marker>@-1</marker>
452           </char-at>
453         </set>
454         <move>
455           <marker>T</marker>
456         </move>
457         <select>
458           <integer>0</integer>
459         </select>
460         <funcall fname="macro-handle-mark"/>
461         <move>
462           <marker>M</marker>
463         </move>
464       </branch>
465       <branch mname="map-vowel-ext">
466         <mark>
467           <marker>M</marker>
468         </mark>
469         <set vname="V-3">
470           <varref vname="V-2"/>
471         </set>
472         <set vname="V-2">
473           <varref vname="V-1"/>
474         </set>
475         <set vname="V-1">
476           <char-at>
477             <marker>@-1</marker>
478           </char-at>
479         </set>
480         <move>
481           <marker>T</marker>
482         </move>
483         <select>
484           <integer>0</integer>
485         </select>
486         <funcall fname="macro-handle-mark"/>
487         <move>
488           <marker>M</marker>
489         </move>
490       </branch>
491       <branch mname="map-tone-mark">
492         <delete>
493           <marker>@-</marker>
494         </delete>
495         <pushback>
496           <integer>1</integer>
497         </pushback>
498         <shift>
499           <symbol>state-after-t</symbol>
500         </shift>
501       </branch>
502       <branch mname="map-backspace">
503         <delete>
504           <marker>@-</marker>
505         </delete>
506         <cond>
507           <list>
508             <varref vname="V-3"/>
509             <set vname="V-1">
510               <varref vname="V-2"/>
511             </set>
512             <set vname="V-2">
513               <varref vname="V-3"/>
514             </set>
515             <set vname="V-3">
516               <integer>0</integer>
517             </set>
518             <cond>
519               <list>
520                 <gt>
521                   <varref vname="TPLACE"/>
522                   <integer>2</integer>
523                 </gt>
524                 <set vname="SELECT">
525                   <integer>0</integer>
526                 </set>
527               </list>
528             </cond>
529           </list>
530           <list>
531             <varref vname="V-2"/>
532             <set vname="V-1">
533               <varref vname="V-2"/>
534             </set>
535             <set vname="V-2">
536               <integer>0</integer>
537             </set>
538             <cond>
539               <list>
540                 <gt>
541                   <varref vname="TPLACE"/>
542                   <integer>1</integer>
543                 </gt>
544                 <set vname="SELECT">
545                   <integer>0</integer>
546                 </set>
547               </list>
548             </cond>
549           </list>
550           <list>
551             <integer>1</integer>
552             <shift>
553               <symbol>state-init</symbol>
554             </shift>
555           </list>
556         </cond>
557       </branch>
558     </state>
559     <state sname="state-after-vc">
560       <state-hook>
561         <set vname="C-AFTER-V">
562           <integer>1</integer>
563         </set>
564       </state-hook>
565       <branch mname="map-consonant">
566         <add vname="C-AFTER-V">
567           <integer>1</integer>
568         </add>
569       </branch>
570       <branch mname="map-consonant-ext">
571         <add vname="C-AFTER-V">
572           <integer>1</integer>
573         </add>
574       </branch>
575       <branch mname="map-tone-mark">
576         <delete>
577           <marker>@-</marker>
578         </delete>
579         <pushback>
580           <integer>1</integer>
581         </pushback>
582         <shift>
583           <symbol>state-after-t</symbol>
584         </shift>
585       </branch>
586       <branch mname="map-backspace">
587         <delete>
588           <marker>@-</marker>
589         </delete>
590         <sub vname="C-AFTER-V">
591           <integer>1</integer>
592         </sub>
593         <cond>
594           <list>
595             <eq>
596               <varref vname="C-AFTER-V"/>
597               <integer>0</integer>
598             </eq>
599             <shift>
600               <symbol>state-after-v</symbol>
601             </shift>
602           </list>
603         </cond>
604       </branch>
605     </state>
606     <state sname="state-after-t">
607       <state-hook>
608         <set vname="CURRENT-SELECT">
609           <integer>-1</integer>
610         </set>
611       </state-hook>
612       <branch mname="map-tone-mark">
613         <cond>
614           <list>
615             <eq>
616               <varref vname="CURRENT-SELECT"/>
617               <varref vname="SELECT"/>
618             </eq>
619             <move>
620               <marker>T</marker>
621             </move>
622             <select>
623               <integer>0</integer>
624             </select>
625             <move>
626               <marker>@&gt;</marker>
627             </move>
628             <shift>
629               <symbol>state-temporary-escape</symbol>
630             </shift>
631           </list>
632           <list>
633             <integer>1</integer>
634             <delete>
635               <marker>@-</marker>
636             </delete>
637             <funcall fname="macro-handle-mark"/>
638             <set vname="CURRENT-SELECT">
639               <varref vname="SELECT"/>
640             </set>
641           </list>
642         </cond>
643       </branch>
644       <catch-all-branch>
645         <cond>
646           <list>
647             <varref vname="C-AFTER-V"/>
648             <shift>
649               <symbol>state-after-vc</symbol>
650             </shift>
651           </list>
652           <list>
653             <integer>1</integer>
654             <shift>
655               <symbol>state-after-v</symbol>
656             </shift>
657           </list>
658         </cond>
659       </catch-all-branch>
660     </state>
661     <state sname="state-temporary-escape">
662       <title>en</title>
663       <state-hook>
664         <commit/>
665       </state-hook>
666       <branch mname="map-alnum">
667         <commit/>
668       </branch>
669     </state>
670     <state sname="state-escape-in-normal-mode">
671       <title>EN</title>
672       <branch mname="map-permanent-escape">
673         <insert>
674           <string>\</string>
675         </insert>
676         <shift>
677           <symbol>state-init</symbol>
678         </shift>
679       </branch>
680       <catch-all-branch>
681         <shift>
682           <symbol>state-permanent-escape</symbol>
683         </shift>
684       </catch-all-branch>
685     </state>
686     <state sname="state-permanent-escape">
687       <title>EN</title>
688       <state-hook>
689         <set vname="ESCAPE">
690           <integer>1</integer>
691         </set>
692       </state-hook>
693       <branch mname="map-permanent-escape">
694         <shift>
695           <symbol>state-escape-in-permanent-escape</symbol>
696         </shift>
697       </branch>
698       <catch-all-branch>
699         <unhandle/>
700       </catch-all-branch>
701     </state>
702     <state sname="state-escape-in-permanent-escape">
703       <title>Ắ</title>
704       <branch mname="map-permanent-escape">
705         <insert>
706           <string>\</string>
707         </insert>
708         <commit/>
709         <shift>
710           <symbol>state-permanent-escape</symbol>
711         </shift>
712       </branch>
713     </state>
714   </state-list>
715 </input-method>