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