e6f5a293722419ec0c4b1b9feabbb8fa69374ea1
[m17n/m17n-lib-js.git] / vi-viqr.mimx
1 <?xml version='1.0'?>
2 <input-method xmlns="http://www.m17n.org/MIM">
3   <tags>
4     <language>vi</language>
5     <name>viqr</name>
6   </tags>
7   <description>
8     <gettext>Vietnames input method using the VIQR 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>Ắ(VIQR)</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>a^</string>
67         </keyseq>
68         <insert-candidates>
69           <string>âấầẩẫậ</string>
70         </insert-candidates>
71       </rule>
72       <rule>
73         <keyseq>
74           <string>A^</string>
75         </keyseq>
76         <insert-candidates>
77           <string>ÂẤẦẨẪẬ</string>
78         </insert-candidates>
79       </rule>
80       <rule>
81         <keyseq>
82           <string>a(</string>
83         </keyseq>
84         <insert-candidates>
85           <string>ăắằẳẵặ</string>
86         </insert-candidates>
87       </rule>
88       <rule>
89         <keyseq>
90           <string>A(</string>
91         </keyseq>
92         <insert-candidates>
93           <string>ĂẮẰẲẴẶ</string>
94         </insert-candidates>
95       </rule>
96       <rule>
97         <keyseq>
98           <string>e^</string>
99         </keyseq>
100         <insert-candidates>
101           <string>êếềểễệ</string>
102         </insert-candidates>
103       </rule>
104       <rule>
105         <keyseq>
106           <string>E^</string>
107         </keyseq>
108         <insert-candidates>
109           <string>ÊẾỀỂỄỆ</string>
110         </insert-candidates>
111       </rule>
112       <rule>
113         <keyseq>
114           <string>o^</string>
115         </keyseq>
116         <insert-candidates>
117           <string>ôốồổỗộ</string>
118         </insert-candidates>
119       </rule>
120       <rule>
121         <keyseq>
122           <string>O^</string>
123         </keyseq>
124         <insert-candidates>
125           <string>ÔỐỒỔỖỘ</string>
126         </insert-candidates>
127       </rule>
128       <rule>
129         <keyseq>
130           <string>o+</string>
131         </keyseq>
132         <insert-candidates>
133           <string>ơớờởỡợ</string>
134         </insert-candidates>
135       </rule>
136       <rule>
137         <keyseq>
138           <string>O+</string>
139         </keyseq>
140         <insert-candidates>
141           <string>ƠỚỜỞỠỢ</string>
142         </insert-candidates>
143       </rule>
144       <rule>
145         <keyseq>
146           <string>u+</string>
147         </keyseq>
148         <insert-candidates>
149           <string>ưứừửữự</string>
150         </insert-candidates>
151       </rule>
152       <rule>
153         <keyseq>
154           <string>U+</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>dd</string>
165         </keyseq>
166         <insert>
167           <integer>273</integer>
168         </insert>
169       </rule>
170       <rule>
171         <keyseq>
172           <string>DD</string>
173         </keyseq>
174         <insert>
175           <integer>272</integer>
176         </insert>
177       </rule>
178       <rule>
179         <keyseq>
180           <string>Dd</string>
181         </keyseq>
182         <insert>
183           <integer>272</integer>
184         </insert>
185       </rule>
186     </map>
187     <map mname="map-tone-mark">
188       <rule>
189         <keyseq>
190           <string>0</string>
191         </keyseq>
192         <set vname="SELECT">
193           <integer>0</integer>
194         </set>
195         <insert>
196           <integer>48</integer>
197         </insert>
198       </rule>
199       <rule>
200         <keyseq>
201           <string>'</string>
202         </keyseq>
203         <set vname="SELECT">
204           <integer>1</integer>
205         </set>
206         <insert>
207           <integer>39</integer>
208         </insert>
209       </rule>
210       <rule>
211         <keyseq>
212           <string>`</string>
213         </keyseq>
214         <set vname="SELECT">
215           <integer>2</integer>
216         </set>
217         <insert>
218           <integer>96</integer>
219         </insert>
220       </rule>
221       <rule>
222         <keyseq>
223           <string>?</string>
224         </keyseq>
225         <set vname="SELECT">
226           <integer>3</integer>
227         </set>
228         <insert>
229           <integer>63</integer>
230         </insert>
231       </rule>
232       <rule>
233         <keyseq>
234           <string>~</string>
235         </keyseq>
236         <set vname="SELECT">
237           <integer>4</integer>
238         </set>
239         <insert>
240           <integer>126</integer>
241         </insert>
242       </rule>
243       <rule>
244         <keyseq>
245           <string>.</string>
246         </keyseq>
247         <set vname="SELECT">
248           <integer>5</integer>
249         </set>
250         <insert>
251           <integer>46</integer>
252         </insert>
253       </rule>
254     </map>
255     <map mname="map-temporary-escape">
256       <rule>
257         <keyseq>
258           <string>a^^</string>
259         </keyseq>
260         <insert>
261           <string>a^</string>
262         </insert>
263       </rule>
264       <rule>
265         <keyseq>
266           <string>A^^</string>
267         </keyseq>
268         <insert>
269           <string>A^</string>
270         </insert>
271       </rule>
272       <rule>
273         <keyseq>
274           <string>a((</string>
275         </keyseq>
276         <insert>
277           <string>a(</string>
278         </insert>
279       </rule>
280       <rule>
281         <keyseq>
282           <string>A((</string>
283         </keyseq>
284         <insert>
285           <string>A(</string>
286         </insert>
287       </rule>
288       <rule>
289         <keyseq>
290           <string>e^^</string>
291         </keyseq>
292         <insert>
293           <string>e^</string>
294         </insert>
295       </rule>
296       <rule>
297         <keyseq>
298           <string>E^^</string>
299         </keyseq>
300         <insert>
301           <string>E^</string>
302         </insert>
303       </rule>
304       <rule>
305         <keyseq>
306           <string>o^^</string>
307         </keyseq>
308         <insert>
309           <string>o^</string>
310         </insert>
311       </rule>
312       <rule>
313         <keyseq>
314           <string>O^^</string>
315         </keyseq>
316         <insert>
317           <string>O^</string>
318         </insert>
319       </rule>
320       <rule>
321         <keyseq>
322           <string>o++</string>
323         </keyseq>
324         <insert>
325           <string>o+</string>
326         </insert>
327       </rule>
328       <rule>
329         <keyseq>
330           <string>O++</string>
331         </keyseq>
332         <insert>
333           <string>O+</string>
334         </insert>
335       </rule>
336       <rule>
337         <keyseq>
338           <string>u++</string>
339         </keyseq>
340         <insert>
341           <string>u+</string>
342         </insert>
343       </rule>
344       <rule>
345         <keyseq>
346           <string>U++</string>
347         </keyseq>
348         <insert>
349           <string>U+</string>
350         </insert>
351       </rule>
352     </map>
353   </map-list>
354   <state-list>
355     <state sname="state-init">
356       <state-hook>
357         <set vname="C">
358           <char-at>
359             <marker>@-1</marker>
360           </char-at>
361         </set>
362         <set vname="V-1">
363           <integer>0</integer>
364         </set>
365         <set vname="V-2">
366           <integer>0</integer>
367         </set>
368         <set vname="V-3">
369           <integer>0</integer>
370         </set>
371         <set vname="C-AFTER-V">
372           <integer>0</integer>
373         </set>
374         <set vname="SELECT">
375           <integer>0</integer>
376         </set>
377       </state-hook>
378       <branch mname="map-consonant">
379         <set vname="C">
380           <char-at>
381             <marker>@-1</marker>
382           </char-at>
383         </set>
384       </branch>
385       <branch mname="map-consonant-ext">
386         <set vname="C">
387           <char-at>
388             <marker>@-1</marker>
389           </char-at>
390         </set>
391       </branch>
392       <branch mname="map-vowel">
393         <mark>
394           <marker>M</marker>
395         </mark>
396         <set vname="V-2">
397           <varref vname="V-1"/>
398         </set>
399         <set vname="V-1">
400           <char-at>
401             <marker>@-1</marker>
402           </char-at>
403         </set>
404         <shift>
405           <symbol>state-after-v</symbol>
406         </shift>
407       </branch>
408       <branch mname="map-vowel-ext">
409         <mark>
410           <marker>M</marker>
411         </mark>
412         <set vname="V-2">
413           <varref vname="V-1"/>
414         </set>
415         <set vname="V-1">
416           <char-at>
417             <marker>@-1</marker>
418           </char-at>
419         </set>
420         <shift>
421           <symbol>state-after-v</symbol>
422         </shift>
423       </branch>
424       <branch mname="map-temporary-escape">
425         <shift>
426           <symbol>state-temporary-escape</symbol>
427         </shift>
428       </branch>
429       <branch mname="map-permanent-escape">
430         <shift>
431           <symbol>state-escape-in-normal-mode</symbol>
432         </shift>
433       </branch>
434     </state>
435     <state sname="state-after-v">
436       <branch mname="map-consonant">
437         <shift>
438           <symbol>state-after-vc</symbol>
439         </shift>
440       </branch>
441       <branch mname="map-consonant-ext">
442         <shift>
443           <symbol>state-after-vc</symbol>
444         </shift>
445       </branch>
446       <branch mname="map-vowel">
447         <mark>
448           <marker>M</marker>
449         </mark>
450         <set vname="V-3">
451           <varref vname="V-2"/>
452         </set>
453         <set vname="V-2">
454           <varref vname="V-1"/>
455         </set>
456         <set vname="V-1">
457           <char-at>
458             <marker>@-1</marker>
459           </char-at>
460         </set>
461         <move>
462           <marker>T</marker>
463         </move>
464         <select>
465           <integer>0</integer>
466         </select>
467         <funcall fname="macro-handle-mark"/>
468         <move>
469           <marker>M</marker>
470         </move>
471       </branch>
472       <branch mname="map-vowel-ext">
473         <mark>
474           <marker>M</marker>
475         </mark>
476         <set vname="V-3">
477           <varref vname="V-2"/>
478         </set>
479         <set vname="V-2">
480           <varref vname="V-1"/>
481         </set>
482         <set vname="V-1">
483           <char-at>
484             <marker>@-1</marker>
485           </char-at>
486         </set>
487         <move>
488           <marker>T</marker>
489         </move>
490         <select>
491           <integer>0</integer>
492         </select>
493         <funcall fname="macro-handle-mark"/>
494         <move>
495           <marker>M</marker>
496         </move>
497       </branch>
498       <branch mname="map-tone-mark">
499         <delete>
500           <marker>@-</marker>
501         </delete>
502         <pushback>
503           <integer>1</integer>
504         </pushback>
505         <shift>
506           <symbol>state-after-t</symbol>
507         </shift>
508       </branch>
509       <branch mname="map-backspace">
510         <delete>
511           <marker>@-</marker>
512         </delete>
513         <cond>
514           <list>
515             <varref vname="V-3"/>
516             <set vname="V-1">
517               <varref vname="V-2"/>
518             </set>
519             <set vname="V-2">
520               <varref vname="V-3"/>
521             </set>
522             <set vname="V-3">
523               <integer>0</integer>
524             </set>
525             <cond>
526               <list>
527                 <gt>
528                   <varref vname="TPLACE"/>
529                   <integer>2</integer>
530                 </gt>
531                 <set vname="SELECT">
532                   <integer>0</integer>
533                 </set>
534               </list>
535             </cond>
536           </list>
537           <list>
538             <varref vname="V-2"/>
539             <set vname="V-1">
540               <varref vname="V-2"/>
541             </set>
542             <set vname="V-2">
543               <integer>0</integer>
544             </set>
545             <cond>
546               <list>
547                 <gt>
548                   <varref vname="TPLACE"/>
549                   <integer>1</integer>
550                 </gt>
551                 <set vname="SELECT">
552                   <integer>0</integer>
553                 </set>
554               </list>
555             </cond>
556           </list>
557           <list>
558             <integer>1</integer>
559             <shift>
560               <symbol>state-init</symbol>
561             </shift>
562           </list>
563         </cond>
564       </branch>
565     </state>
566     <state sname="state-after-vc">
567       <state-hook>
568         <set vname="C-AFTER-V">
569           <integer>1</integer>
570         </set>
571       </state-hook>
572       <branch mname="map-consonant">
573         <add vname="C-AFTER-V">
574           <integer>1</integer>
575         </add>
576       </branch>
577       <branch mname="map-consonant-ext">
578         <add vname="C-AFTER-V">
579           <integer>1</integer>
580         </add>
581       </branch>
582       <branch mname="map-tone-mark">
583         <delete>
584           <marker>@-</marker>
585         </delete>
586         <pushback>
587           <integer>1</integer>
588         </pushback>
589         <shift>
590           <symbol>state-after-t</symbol>
591         </shift>
592       </branch>
593       <branch mname="map-backspace">
594         <delete>
595           <marker>@-</marker>
596         </delete>
597         <sub vname="C-AFTER-V">
598           <integer>1</integer>
599         </sub>
600         <cond>
601           <list>
602             <eq>
603               <varref vname="C-AFTER-V"/>
604               <integer>0</integer>
605             </eq>
606             <shift>
607               <symbol>state-after-v</symbol>
608             </shift>
609           </list>
610         </cond>
611       </branch>
612     </state>
613     <state sname="state-after-t">
614       <state-hook>
615         <set vname="CURRENT-SELECT">
616           <integer>-1</integer>
617         </set>
618       </state-hook>
619       <branch mname="map-tone-mark">
620         <cond>
621           <list>
622             <eq>
623               <varref vname="CURRENT-SELECT"/>
624               <varref vname="SELECT"/>
625             </eq>
626             <move>
627               <marker>T</marker>
628             </move>
629             <select>
630               <integer>0</integer>
631             </select>
632             <move>
633               <marker>@&gt;</marker>
634             </move>
635             <shift>
636               <symbol>state-temporary-escape</symbol>
637             </shift>
638           </list>
639           <list>
640             <integer>1</integer>
641             <delete>
642               <marker>@-</marker>
643             </delete>
644             <funcall fname="macro-handle-mark"/>
645             <set vname="CURRENT-SELECT">
646               <varref vname="SELECT"/>
647             </set>
648           </list>
649         </cond>
650       </branch>
651       <catch-all-branch>
652         <cond>
653           <list>
654             <varref vname="C-AFTER-V"/>
655             <shift>
656               <symbol>state-after-vc</symbol>
657             </shift>
658           </list>
659           <list>
660             <integer>1</integer>
661             <shift>
662               <symbol>state-after-v</symbol>
663             </shift>
664           </list>
665         </cond>
666       </catch-all-branch>
667     </state>
668     <state sname="state-temporary-escape">
669       <title>en</title>
670       <state-hook>
671         <commit/>
672       </state-hook>
673       <branch mname="map-alnum">
674         <commit/>
675       </branch>
676     </state>
677     <state sname="state-escape-in-normal-mode">
678       <title>EN</title>
679       <branch mname="map-permanent-escape">
680         <insert>
681           <string>\</string>
682         </insert>
683         <shift>
684           <symbol>state-init</symbol>
685         </shift>
686       </branch>
687       <catch-all-branch>
688         <shift>
689           <symbol>state-permanent-escape</symbol>
690         </shift>
691       </catch-all-branch>
692     </state>
693     <state sname="state-permanent-escape">
694       <title>EN</title>
695       <state-hook>
696         <set vname="ESCAPE">
697           <integer>1</integer>
698         </set>
699       </state-hook>
700       <branch mname="map-permanent-escape">
701         <shift>
702           <symbol>state-escape-in-permanent-escape</symbol>
703         </shift>
704       </branch>
705       <catch-all-branch>
706         <unhandle/>
707       </catch-all-branch>
708     </state>
709     <state sname="state-escape-in-permanent-escape">
710       <title>Ắ</title>
711       <branch mname="map-permanent-escape">
712         <insert>
713           <string>\</string>
714         </insert>
715         <commit/>
716         <shift>
717           <symbol>state-permanent-escape</symbol>
718         </shift>
719       </branch>
720     </state>
721   </state-list>
722 </input-method>