Comment change.
[emacs.git] / lisp / language / tibetan.el
blobd54689119c6e20488924ddcee8ba159f46cae63b
1 ;;; tibetan.el --- Support for Tibetan language
3 ;; Copyright (C) 1997 Free Software Foundation, Inc.
4 ;; Copyright (C) 1997 Electrotechnical Laboratory, JAPAN.
6 ;; Keywords: multilingual, Tibetan
8 ;; This file is part of GNU Emacs.
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
11 ;; it under the terms of the GNU General Public License as published by
12 ;; the Free Software Foundation; either version 2, or (at your option)
13 ;; any later version.
15 ;; GNU Emacs is distributed in the hope that it will be useful,
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 ;; GNU General Public License for more details.
20 ;; You should have received a copy of the GNU General Public License
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23 ;; Boston, MA 02111-1307, USA.
25 ;; Author: Toru TOMABECHI, <Toru.Tomabechi@orient.unil.ch>
27 ;; Created: Feb. 17. 1997
29 ;; History:
30 ;; 1997.03.13 Modification for special signs and punctuations.
32 ;;; Code:
34 (define-category ?q "Tibetan")
35 (modify-category-entry (make-char 'tibetan) ?q)
36 (modify-category-entry (make-char 'tibetan-1-column) ?q)
38 (let ((row 33))
39 (while (< row 38)
40 (modify-category-entry (make-char 'tibetan row) ?q)
41 (setq row (1+ row))))
43 (modify-category-entry (make-char 'tibetan-1-column 33) ?q)
45 (let ((deflist '(;; chars syntax category
46 ("\e$(7"!\e(B-\e$(7"J\e(B" "w" ?0) ; consonant
47 ("\e$(7#!\e(B-\e$(7#J#P#Q\e(B" "w" ?0) ;
48 ("\e$(7$!\e(B-\e$(7$e\e(B" "w" ?0) ;
49 ("\e$(7%!\e(B-\e$(7%u\e(B" "w" ?0) ;
50 ("\e$(7"S"["\"]"^"a\e(B" "w" ?2) ; upper vowel
51 ("\e$(7"_"c"d"g"h"i"j"k"l\e(B" "w" ?2) ; upper modifier
52 ("\e$(7!I"Q"U"e!e!g\e(B" "w" ?3) ; lowel vowel/modifier
53 ("\e$(7!P\e(B-\e$(7!Y!Z\e(B-\e$(7!c\e(B" "w" ?6) ; digit
54 ("\e$(7!;!=\e(B-\e$(7!B!D"`\e(B" "." ?|) ; line-break char
55 ("\e$(8!;!=!?!@!A!D"`\e(B" "." ?|) ;
56 ("\e$(7!8!;!=\e(B-\e$(7!B!D"`!m!d\e(B" "." ?>) ; prohibition
57 ("\e$(8!;!=!?!@!A!D"`\e(B" "." ?>) ;
58 ("\e$(7!0\e(B-\e$(7!:!l#R#S"f\e(B" "." ?<) ; prohibition
59 ("\e$(7!C!E\e(B-\e$(7!H!J\e(B-\e$(7!O!f!h\e(B-\e$(7!k!n!o\e(B" "." ?q) ; others
61 elm chars len syntax category to ch i)
62 (while deflist
63 (setq elm (car deflist))
64 (setq chars (car elm)
65 len (length chars)
66 syntax (nth 1 elm)
67 category (nth 2 elm)
68 i 0)
69 (while (< i len)
70 (if (= (aref chars i) ?-)
71 (setq i (1+ i)
72 to (sref chars i))
73 (setq ch (sref chars i)
74 to ch))
75 (while (<= ch to)
76 (modify-syntax-entry ch syntax)
77 (modify-category-entry ch category)
78 (setq ch (1+ ch)))
79 (setq i (+ i (char-bytes to))))
80 (setq deflist (cdr deflist))))
83 ;;; Tibetan Character set.
84 ;;; \x2130 -- \x234a is a subset of Unicode v.2 \x0f00 - \x0fb9
85 ;;; with a slight modification. And there are some subjoined
86 ;;; consonants which are not specified in Unicode.
87 ;;; I hope I can add missing characters later.
88 ;;;
89 ;;; 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
90 ;;;2120 // \e$(7!!\e(B \e$(7!"\e(B \e$(7!#\e(B \e$(7!$\e(B \e$(7!%\e(B \e$(7!&\e(B \e$(7!'\e(B \e$(7!(\e(B \e$(7!)\e(B \e$(7!*\e(B \e$(7!+\e(B \e$(7!,\e(B \e$(7!-\e(B \e$(7!.\e(B \e$(7!/\e(B ;
91 ;;;2130 \e$(7!0\e(B \e$(7!1\e(B \e$(7!2\e(B \e$(7!3\e(B \e$(7!4\e(B \e$(7!5\e(B \e$(7!6\e(B \e$(7!7\e(B \e$(7!8\e(B \e$(7!9\e(B \e$(7!:\e(B \e$(7!;\e(B \e$(7!<\e(B \e$(7!=\e(B \e$(7!>\e(B \e$(7!?\e(B ; Punctuations,
92 ;;;2140 \e$(7!@\e(B \e$(7!A\e(B \e$(7!B\e(B \e$(7!C\e(B \e$(7!D\e(B \e$(7!E\e(B \e$(7!F\e(B \e$(7!G\e(B \e$(7!H\e(B \e$(7!I\e(B \e$(7!J\e(B \e$(7!K\e(B \e$(7!L\e(B \e$(7!M\e(B \e$(7!N\e(B \e$(7!O\e(B ; Digits and
93 ;;;2150 \e$(7!P\e(B \e$(7!Q\e(B \e$(7!R\e(B \e$(7!S\e(B \e$(7!T\e(B \e$(7!U\e(B \e$(7!V\e(B \e$(7!W\e(B \e$(7!X\e(B \e$(7!Y\e(B \e$(7!Z\e(B \e$(7![\e(B \e$(7!\\e(B \e$(7!]\e(B \e$(7!^\e(B \e$(7!_\e(B ; Special signs.
94 ;;;2160 \e$(7!`\e(B \e$(7!a\e(B \e$(7!b\e(B \e$(7!c\e(B \e$(7!d\e(B \e$(7!e\e(B \e$(7!f\e(B \e$(7!g\e(B \e$(7!h\e(B \e$(7!i\e(B \e$(7!j\e(B \e$(7!k\e(B \e$(7!l\e(B \e$(7!m\e(B \e$(7!n\e(B \e$(7!o\e(B ;
95 ;;;2170 \e$(7!p\e(B \e$(7!q\e(B \e$(7!r\e(B \e$(7!s\e(B \e$(7!t\e(B \e$(7!u\e(B \e$(7!v\e(B \e$(7!w\e(B \e$(7!x\e(B \e$(7!y\e(B \e$(7!z\e(B \e$(7!{\e(B \e$(7!|\e(B \e$(7!}\e(B \e$(7!~\e(B // ;
96 ;;;
97 ;;; 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
98 ;;;2220 // \e$(7"!\e(B \e$(7""\e(B \e$(7"#\e(B \e$(7"$\e(B \e$(7"%\e(B \e$(7"&\e(B \e$(7"'\e(B \e$(7"(\e(B \e$(7")\e(B \e$(7"*\e(B \e$(7"+\e(B \e$(7",\e(B \e$(7"-\e(B \e$(7".\e(B \e$(7"/\e(B ; Base consonants
99 ;;;2230 \e$(7"0\e(B \e$(7"1\e(B \e$(7"2\e(B \e$(7"3\e(B \e$(7"4\e(B \e$(7"5\e(B \e$(7"6\e(B \e$(7"7\e(B \e$(7"8\e(B \e$(7"9\e(B \e$(7":\e(B \e$(7";\e(B \e$(7"<\e(B \e$(7"=\e(B \e$(7">\e(B \e$(7"?\e(B ; and
100 ;;;2240 \e$(7"@\e(B \e$(7"A\e(B \e$(7"B\e(B \e$(7"C\e(B \e$(7"D\e(B \e$(7"E\e(B \e$(7"F\e(B \e$(7"G\e(B \e$(7"H\e(B \e$(7"I\e(B \e$(7"J\e(B \e$(7"K\e(B \e$(7"L\e(B \e$(7"M\e(B \e$(7"N\e(B \e$(7"O\e(B ; Vowel signs.
101 ;;;2250 \e$(7"P\e(B \e$(7"Q\e(B \e$(7"R\e(B \e$(7"S\e(B \e$(7"T\e(B \e$(7"U\e(B \e$(7"V\e(B \e$(7"W\e(B \e$(7"X\e(B \e$(7"Y\e(B \e$(7"Z\e(B \e$(7"[\e(B \e$(7"\\e(B \e$(7"]\e(B \e$(7"^\e(B \e$(7"_\e(B ; (\x2251 = vowel a)
102 ;;;2260 \e$(7"`\e(B \e$(7"a\e(B \e$(7"b\e(B \e$(7"c\e(B \e$(7"d\e(B \e$(7"e\e(B \e$(7"f\e(B \e$(7"g\e(B \e$(7"h\e(B \e$(7"i\e(B \e$(7"j\e(B \e$(7"k\e(B \e$(7"l\e(B \e$(7"m\e(B \e$(7"n\e(B \e$(7"o\e(B ; Long vowels and
103 ;;;2270 \e$(7"p\e(B \e$(7"q\e(B \e$(7"r\e(B \e$(7"s\e(B \e$(7"t\e(B \e$(7"u\e(B \e$(7"v\e(B \e$(7"w\e(B \e$(7"x\e(B \e$(7"y\e(B \e$(7"z\e(B \e$(7"{\e(B \e$(7"|\e(B \e$(7"}\e(B \e$(7"~\e(B // ; vocalic r, l are
104 ;;; ; not atomically
105 ;;; ; encoded.
106 ;;; 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
107 ;;;2320 // \e$(7#!\e(B \e$(7#"\e(B \e$(7##\e(B \e$(7#$\e(B \e$(7#%\e(B \e$(7#&\e(B \e$(7#'\e(B \e$(7#(\e(B \e$(7#)\e(B \e$(7#*\e(B \e$(7#+\e(B \e$(7#,\e(B \e$(7#-\e(B \e$(7#.\e(B \e$(7#/\e(B ; Subjoined consonants
108 ;;;2330 \e$(7#0\e(B \e$(7#1\e(B \e$(7#2\e(B \e$(7#3\e(B \e$(7#4\e(B \e$(7#5\e(B \e$(7#6\e(B \e$(7#7\e(B \e$(7#8\e(B \e$(7#9\e(B \e$(7#:\e(B \e$(7#;\e(B \e$(7#<\e(B \e$(7#=\e(B \e$(7#>\e(B \e$(7#?\e(B ;
109 ;;;2340 \e$(7#@\e(B \e$(7#A\e(B \e$(7#B\e(B \e$(7#C\e(B \e$(7#D\e(B \e$(7#E\e(B \e$(7#F\e(B \e$(7#G\e(B \e$(7#H\e(B \e$(7#I\e(B \e$(7#J\e(B \e$(7#K\e(B \e$(7#L\e(B \e$(7#M\e(B \e$(7#N\e(B \e$(7#O\e(B ; 'a chung (\x2341)is
110 ;;; ; here,
111 ;;; ; while in Unicode
112 ;;; ; it is classified
113 ;;; ; as a vowel sign
114 ;;; ; (\x0f71).
116 ;;;2350 \e$(7#P\e(B \e$(7#Q\e(B \e$(7#R\e(B \e$(7#S\e(B \e$(7#T\e(B \e$(7#U\e(B \e$(7#V\e(B \e$(7#W\e(B \e$(7#X\e(B \e$(7#Y\e(B \e$(7#Z\e(B \e$(7#[\e(B \e$(7#\\e(B \e$(7#]\e(B \e$(7#^\e(B \e$(7#_\e(B ; Hereafter, the chars
117 ;;;2360 \e$(7#`\e(B \e$(7#a\e(B \e$(7#b\e(B \e$(7#c\e(B \e$(7#d\e(B \e$(7#e\e(B \e$(7#f\e(B \e$(7#g\e(B \e$(7#h\e(B \e$(7#i\e(B \e$(7#j\e(B \e$(7#k\e(B \e$(7#l\e(B \e$(7#m\e(B \e$(7#n\e(B \e$(7#o\e(B ; are not specified
118 ;;;2370 \e$(7#p\e(B \e$(7#q\e(B \e$(7#r\e(B \e$(7#s\e(B \e$(7#t\e(B \e$(7#u\e(B \e$(7#v\e(B \e$(7#w\e(B \e$(7#x\e(B \e$(7#y\e(B \e$(7#z\e(B \e$(7#{\e(B \e$(7#|\e(B \e$(7#}\e(B \e$(7#~\e(B // ; in Unicode.
119 ;;; ; The character \x2351
120 ;;; ; is not used in our
121 ;;; ; implementation.
122 ;;; 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
123 ;;;2420 // \e$(7$!\e(B \e$(7$"\e(B \e$(7$#\e(B \e$(7$$\e(B \e$(7$%\e(B \e$(7$&\e(B \e$(7$'\e(B \e$(7$(\e(B \e$(7$)\e(B \e$(7$*\e(B \e$(7$+\e(B \e$(7$,\e(B \e$(7$-\e(B \e$(7$.\e(B \e$(7$/\e(B ; Precomposed
124 ;;;2430 \e$(7$0\e(B \e$(7$1\e(B \e$(7$2\e(B \e$(7$3\e(B \e$(7$4\e(B \e$(7$5\e(B \e$(7$6\e(B \e$(7$7\e(B \e$(7$8\e(B \e$(7$9\e(B \e$(7$:\e(B \e$(7$;\e(B \e$(7$<\e(B \e$(7$=\e(B \e$(7$>\e(B \e$(7$?\e(B ; consonants for
125 ;;;2440 \e$(7$@\e(B \e$(7$A\e(B \e$(7$B\e(B \e$(7$C\e(B \e$(7$D\e(B \e$(7$E\e(B \e$(7$F\e(B \e$(7$G\e(B \e$(7$H\e(B \e$(7$I\e(B \e$(7$J\e(B \e$(7$K\e(B \e$(7$L\e(B \e$(7$M\e(B \e$(7$N\e(B \e$(7$O\e(B ; ordinary Tibetan.
126 ;;;2450 \e$(7$P\e(B \e$(7$Q\e(B \e$(7$R\e(B \e$(7$S\e(B \e$(7$T\e(B \e$(7$U\e(B \e$(7$V\e(B \e$(7$W\e(B \e$(7$X\e(B \e$(7$Y\e(B \e$(7$Z\e(B \e$(7$[\e(B \e$(7$\\e(B \e$(7$]\e(B \e$(7$^\e(B \e$(7$_\e(B ; They are decomposed
127 ;;;2460 \e$(7$`\e(B \e$(7$a\e(B \e$(7$b\e(B \e$(7$c\e(B \e$(7$d\e(B \e$(7$e\e(B \e$(7$f\e(B \e$(7$g\e(B \e$(7$h\e(B \e$(7$i\e(B \e$(7$j\e(B \e$(7$k\e(B \e$(7$l\e(B \e$(7$m\e(B \e$(7$n\e(B \e$(7$o\e(B ; into base and
128 ;;;2470 \e$(7$p\e(B \e$(7$q\e(B \e$(7$r\e(B \e$(7$s\e(B \e$(7$t\e(B \e$(7$u\e(B \e$(7$v\e(B \e$(7$w\e(B \e$(7$x\e(B \e$(7$y\e(B \e$(7$z\e(B \e$(7${\e(B \e$(7$|\e(B \e$(7$}\e(B \e$(7$~\e(B // ; subjoined consonants
129 ;;; ; when written on a
130 ;;; 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ; file in Tibetan
131 ;;;2520 // \e$(7%!\e(B \e$(7%"\e(B \e$(7%#\e(B \e$(7%$\e(B \e$(7%%\e(B \e$(7%&\e(B \e$(7%'\e(B \e$(7%(\e(B \e$(7%)\e(B \e$(7%*\e(B \e$(7%+\e(B \e$(7%,\e(B \e$(7%-\e(B \e$(7%.\e(B \e$(7%/\e(B ; coding system.
132 ;;;2530 \e$(7%0\e(B \e$(7%1\e(B \e$(7%2\e(B \e$(7%3\e(B \e$(7%4\e(B \e$(7%5\e(B \e$(7%6\e(B \e$(7%7\e(B \e$(7%8\e(B \e$(7%9\e(B \e$(7%:\e(B \e$(7%;\e(B \e$(7%<\e(B \e$(7%=\e(B \e$(7%>\e(B \e$(7%?\e(B ;
133 ;;;2540 \e$(7%@\e(B \e$(7%A\e(B \e$(7%B\e(B \e$(7%C\e(B \e$(7%D\e(B \e$(7%E\e(B \e$(7%F\e(B \e$(7%G\e(B \e$(7%H\e(B \e$(7%I\e(B \e$(7%J\e(B \e$(7%K\e(B \e$(7%L\e(B \e$(7%M\e(B \e$(7%N\e(B \e$(7%O\e(B ;
134 ;;;2550 \e$(7%P\e(B \e$(7%Q\e(B \e$(7%R\e(B \e$(7%S\e(B \e$(7%T\e(B \e$(7%U\e(B \e$(7%V\e(B \e$(7%W\e(B \e$(7%X\e(B \e$(7%Y\e(B \e$(7%Z\e(B \e$(7%[\e(B \e$(7%\\e(B \e$(7%]\e(B \e$(7%^\e(B \e$(7%_\e(B ;
135 ;;;2560 \e$(7%`\e(B \e$(7%a\e(B \e$(7%b\e(B \e$(7%c\e(B \e$(7%d\e(B \e$(7%e\e(B \e$(7%f\e(B \e$(7%g\e(B \e$(7%h\e(B \e$(7%i\e(B \e$(7%j\e(B \e$(7%k\e(B \e$(7%l\e(B \e$(7%m\e(B \e$(7%n\e(B \e$(7%o\e(B ;
136 ;;;2570 \e$(7%p\e(B \e$(7%q\e(B \e$(7%r\e(B \e$(7%s\e(B \e$(7%t\e(B \e$(7%u\e(B \e$(7%v\e(B \e$(7%w\e(B \e$(7%x\e(B \e$(7%y\e(B \e$(7%z\e(B \e$(7%{\e(B \e$(7%|\e(B \e$(7%}\e(B \e$(7%~\e(B // ;
140 (make-coding-system
141 'tibetan 2 ?Q
142 "Coding-system used for ASCII(MSB=0) & TIBETAN(MSB=1)."
143 '((ascii t) (tibetan t) nil nil
144 nil ascii-eol))
146 (put 'tibetan 'post-read-conversion 'tibetan-post-read-conversion)
147 (put 'tibetan 'pre-write-conversion 'tibetan-pre-write-conversion)
149 (register-input-method
150 "Tibetan" '("quail-tibetan-wylie" quail-use-package "quail/tibetan"))
151 (register-input-method
152 "Tibetan" '("quail-tibetan-tibkey" quail-use-package "quail/tibetan"))
154 (defun setup-tibetan-environment ()
155 (setq coding-category-iso-7 'tibetan)
157 (set-coding-priority
158 '(coding-category-iso-7
159 coding-category-iso-8-1))
161 (setq-default buffer-file-coding-system 'iso-2022-7)
163 (setq default-input-method '("Tibetan" . "quail-tibetan-wylie")))
165 (set-language-info-alist
166 "Tibetan" '((setup-function . setup-tibetan-environment)
167 (charset . (tibetan tibetan-1-column))
168 (coding-system . (tibetan))
169 (documentation . t)
170 (sample-text .
171 "Tibetan (\e2\e$(7"70"]\e1"2\e$(8!;\e2\e$(7%P`"Q\e1"2\e$(8!;\e(B) \e2\e$(7#RP#SP#S\e1!>"7\e2$P`"Q\e1\e$(8!;\e2\e$(7"E0"S\e1"G\e$(8!;\e$(7"7\e2"20"[\e1\e$(8!;\e2\e$(7"D0"[\e1"#"G!>\e2"I0"]0"_\e1\e$(8!;\e2\e$(7"9`"Q\e1\e$(8!;\e2\e$(7"/0"S\e1\e$(8!;\e2\e$(7"5`"Q\e1\e2#2`#90"[\e1\e$(8!;\e2\e$(7"H`#A`"U0"c\e1!>\e(B")))
175 ;;; Definitions of conversion data.
179 ;;; alists for tibetan char <-> transcription conversion
180 ;;; longer transcription should come first
181 (defconst tibetan-consonant-transcription-alist
182 '(("tsh" . "\e$(7";\e(B")
183 ("dzh" . "\e$(7"=\e(B")
184 ("kSH" . "\e$(7"J\e(B")
185 ("kh" . "\e$(7""\e(B")
186 ("gh" . "\e$(7"$\e(B")
187 ("ng" . "\e$(7"%\e(B")
188 ("ch" . "\e$(7"'\e(B")
189 ("ny" . "\e$(7"*\e(B")
190 ("TH" . "\e$(7",\e(B")
191 ("DH" . "\e$(7".\e(B")
192 ("th" . "\e$(7"1\e(B")
193 ("dh" . "\e$(7"3\e(B")
194 ("ph" . "\e$(7"6\e(B")
195 ("bh" . "\e$(7"8\e(B")
196 ("ts" . "\e$(7":\e(B")
197 ("dz" . "\e$(7"<\e(B")
198 ("zh" . "\e$(7"?\e(B")
199 ("sh" . "\e$(7"E\e(B")
200 ("SH" . "\e$(7"F\e(B")
201 ("k" . "\e$(7"!\e(B")
202 ("g" . "\e$(7"#\e(B")
203 ("c" . "\e$(7"&\e(B")
204 ("j" . "\e$(7"(\e(B")
205 ("T" . "\e$(7"+\e(B")
206 ("D" . "\e$(7"-\e(B")
207 ("N" . "\e$(7"/\e(B")
208 ("t" . "\e$(7"0\e(B")
209 ("d" . "\e$(7"2\e(B")
210 ("n" . "\e$(7"4\e(B")
211 ("p" . "\e$(7"5\e(B")
212 ("b" . "\e$(7"7\e(B")
213 ("m" . "\e$(7"9\e(B")
214 ("w" . "\e$(7">\e(B")
215 ("z" . "\e$(7"@\e(B")
216 ("'" . "\e$(7"A\e(B")
217 ("y" . "\e$(7"B\e(B")
218 ("r" . "\e$(7"C\e(B")
219 ("l" . "\e$(7"D\e(B")
220 ("s" . "\e$(7"G\e(B")
221 ("h" . "\e$(7"H\e(B")
222 ("H" . "\e$(7"H\e(B")
223 ("A" . "\e$(7"I\e(B")))
226 (defconst tibetan-vowel-transcription-alist
227 '(("ai" . "\e$(7"\\e(B")
228 ("au" . "\e$(7"^\e(B")
229 ("ee" . "\e$(7"\\e(B")
230 ("oo" . "\e$(7"^\e(B")
231 ("a" . "\e$(7"Q\e(B") ; invisible vowel sign (\x2251)
232 ("i" . "\e$(7"S\e(B")
233 ("u" . "\e$(7"U\e(B")
234 ("e" . "\e$(7"[\e(B")
235 ("o" . "\e$(7"]\e(B")
236 ("E" . "\e$(7"\\e(B")
237 ("O" . "\e$(7"^\e(B")
238 ("I" . "\e$(7"a\e(B")
239 ("M" . "\e$(7"_\e(B")
240 ("~" . "\e$(7"c\e(B") ; not specified in Ext.wylie
241 ("`" . "\e$(7"d\e(B") ; idem.
242 ("," . "\e$(7"e\e(B") ; idem.
243 ("v" . "\e$(7"g\e(B") ; idem.
244 ("V" . "\e$(7"h\e(B") ; idem.
245 ("x" . "\e$(7"i\e(B") ; idem.
246 ("X" . "\e$(7"j\e(B") ; idem.
247 ("q" . "\e$(7"k\e(B") ; idem.
248 ("Q" . "\e$(7"l\e(B") ; idem.
249 ("_o" . "\e$(7!g\e(B") ; idem.
250 ("_O" . "\e$(7!e\e(B") ; idem.
251 ("_/" . "\e$(7!I\e(B") ; idem.
254 (defconst tibetan-precomposed-transcription-alist
255 '(("phyw" . "\e$(7$G\e(B")
256 ("tshw" . "\e$(7$)\e(B")
257 ("rtsw" . "\e$(7%.\e(B")
258 ("khw" . "\e$(7$"\e(B")
259 ("nyw" . "\e$(7$%\e(B")
260 ("tsw" . "\e$(7$(\e(B")
261 ("zhw" . "\e$(7$*\e(B")
262 ("shw" . "\e$(7$.\e(B")
263 ("khy" . "\e$(7$A\e(B")
264 ("phy" . "\e$(7$D\e(B")
265 ("khr" . "\e$(7$Q\e(B")
266 ("thr" . "\e$(7$T\e(B")
267 ("phr" . "\e$(7$W\e(B")
268 ("shr" . "\e$(7$Z\e(B")
269 ("dzr" . "\e$(7$^\e(B")
270 ("grw" . "\e$(7$_\e(B")
271 ("rng" . "\e$(7%#\e(B")
272 ("rny" . "\e$(7%%\e(B")
273 ("rts" . "\e$(7%+\e(B")
274 ("rdz" . "\e$(7%,\e(B")
275 ("rgw" . "\e$(7%-\e(B")
276 ("rky" . "\e$(7%0\e(B")
277 ("rgy" . "\e$(7%1\e(B")
278 ("rmy" . "\e$(7%2\e(B")
279 ("lng" . "\e$(7%B\e(B")
280 ("sng" . "\e$(7%R\e(B")
281 ("sny" . "\e$(7%S\e(B")
282 ("sts" . "\e$(7%Z\e(B")
283 ("sky" . "\e$(7%`\e(B")
284 ("sgy" . "\e$(7%a\e(B")
285 ("spy" . "\e$(7%b\e(B")
286 ("sby" . "\e$(7%c\e(B")
287 ("smy" . "\e$(7%d\e(B")
288 ("skr" . "\e$(7%p\e(B")
289 ("sgr" . "\e$(7%q\e(B")
290 ("snr" . "\e$(7%r\e(B")
291 ("spr" . "\e$(7%s\e(B")
292 ("sbr" . "\e$(7%t\e(B")
293 ("smr" . "\e$(7%u\e(B")
294 ("kw" . "\e$(7$!\e(B")
295 ("gw" . "\e$(7$#\e(B")
296 ("cw" . "\e$(7$$\e(B")
297 ("tw" . "\e$(7$&\e(B")
298 ("dw" . "\e$(7$'\e(B")
299 ("zw" . "\e$(7$+\e(B")
300 ("rw" . "\e$(7$,\e(B")
301 ("lw" . "\e$(7$-\e(B")
302 ("sw" . "\e$(7$/\e(B")
303 ("hw" . "\e$(7$0\e(B")
304 ("ky" . "\e$(7$@\e(B")
305 ("gy" . "\e$(7$B\e(B")
306 ("py" . "\e$(7$C\e(B")
307 ("by" . "\e$(7$E\e(B")
308 ("my" . "\e$(7$F\e(B")
309 ("kr" . "\e$(7$P\e(B")
310 ("gr" . "\e$(7$R\e(B")
311 ("tr" . "\e$(7$S\e(B")
312 ("dr" . "\e$(7$U\e(B")
313 ("pr" . "\e$(7$V\e(B")
314 ("brk" . "\e$(7"7%!\e(B")
315 ("brg" . "\e$(7"7%"\e(B")
316 ("brng" . "\e$(7"7%#\e(B")
317 ("brj" . "\e$(7"7%$\e(B")
318 ("brny" . "\e$(7"7%%\e(B")
319 ("brt" . "\e$(7"7%&\e(B")
320 ("brd" . "\e$(7"7%'\e(B")
321 ("brn" . "\e$(7"7%(\e(B")
322 ("brts" . "\e$(7"7%+\e(B")
323 ("brdz" . "\e$(7"7%,\e(B")
324 ("brl" . "\e$(7"7$d\e(B")
325 ("br" . "\e$(7$X\e(B")
326 ("mr" . "\e$(7$Y\e(B")
327 ("sr" . "\e$(7$[\e(B")
328 ("hr" . "\e$(7$\\e(B")
329 ("jr" . "\e$(7$]\e(B")
330 ("kl" . "\e$(7$`\e(B")
331 ("gl" . "\e$(7$a\e(B")
332 ("blt" . "\e$(7"7%E\e(B")
333 ("bld" . "\e$(7"7%F\e(B")
334 ("bl" . "\e$(7$b\e(B")
335 ("zl" . "\e$(7$c\e(B")
336 ("rl" . "\e$(7$d\e(B")
337 ("sl" . "\e$(7$e\e(B")
338 ("rk" . "\e$(7%!\e(B")
339 ("rg" . "\e$(7%"\e(B")
340 ("rj" . "\e$(7%$\e(B")
341 ("rt" . "\e$(7%&\e(B")
342 ("rd" . "\e$(7%'\e(B")
343 ("rn" . "\e$(7%(\e(B")
344 ("rb" . "\e$(7%)\e(B")
345 ("rm" . "\e$(7%*\e(B")
346 ("lk" . "\e$(7%@\e(B")
347 ("lg" . "\e$(7%A\e(B")
348 ("lc" . "\e$(7%C\e(B")
349 ("lj" . "\e$(7%D\e(B")
350 ("lt" . "\e$(7%E\e(B")
351 ("ld" . "\e$(7%F\e(B")
352 ("ln" . "\e$(7!!\e(B") ; dummy \x2121
353 ("lp" . "\e$(7%G\e(B")
354 ("lb" . "\e$(7%H\e(B")
355 ("lh" . "\e$(7%I\e(B")
356 ("sk" . "\e$(7%P\e(B")
357 ("sg" . "\e$(7%Q\e(B")
358 ("st" . "\e$(7%T\e(B")
359 ("sd" . "\e$(7%U\e(B")
360 ("sn" . "\e$(7%V\e(B")
361 ("sp" . "\e$(7%W\e(B")
362 ("sb" . "\e$(7%X\e(B")
363 ("sm" . "\e$(7%Y\e(B")))
365 (defconst tibetan-subjoined-transcription-alist
366 '(("+k" . "\e$(7#!\e(B")
367 ("+kh" . "\e$(7#"\e(B")
368 ("+g" . "\e$(7##\e(B")
369 ("+gh" . "\e$(7#$\e(B")
370 ("+ng" . "\e$(7#%\e(B")
371 ("+c" . "\e$(7#&\e(B")
372 ("+ch" . "\e$(7#'\e(B")
373 ("+j" . "\e$(7#(\e(B")
374 ("+ny" . "\e$(7#*\e(B")
375 ("+T" . "\e$(7#+\e(B")
376 ("+TH" . "\e$(7#,\e(B")
377 ("+D" . "\e$(7#-\e(B")
378 ("+DH" . "\e$(7#.\e(B")
379 ("+N" . "\e$(7#/\e(B")
380 ("+t" . "\e$(7#0\e(B")
381 ("+th" . "\e$(7#1\e(B")
382 ("+d" . "\e$(7#2\e(B")
383 ("+dh" . "\e$(7#3\e(B")
384 ("+n" . "\e$(7#4\e(B")
385 ("+p" . "\e$(7#5\e(B")
386 ("+ph" . "\e$(7#6\e(B")
387 ("+b" . "\e$(7#7\e(B")
388 ("+bh" . "\e$(7#8\e(B")
389 ("+m" . "\e$(7#9\e(B")
390 ("+ts" . "\e$(7#:\e(B")
391 ("+tsh" . "\e$(7#;\e(B")
392 ("+dz" . "\e$(7#<\e(B")
393 ("+dzh" . "\e$(7#=\e(B")
394 ("+w" . "\e$(7#>\e(B")
395 ("+zh" . "\e$(7#?\e(B")
396 ("+z" . "\e$(7#@\e(B")
397 ("+'" . "\e$(7#A\e(B")
398 ("+y" . "\e$(7#B\e(B")
399 ("+r" . "\e$(7#C\e(B")
400 ("+l" . "\e$(7#D\e(B")
401 ("+sh" . "\e$(7#E\e(B")
402 ("+SH" . "\e$(7#F\e(B")
403 ("+s" . "\e$(7#G\e(B")
404 ("+h" . "\e$(7#H\e(B")
405 ("+A" . "\e$(7#I\e(B")
406 ("+kSH" . "\e$(7#J\e(B")
407 ("R" . "\e$(7#P\e(B")))
410 ;;; alist for Tibetan base consonant <-> subjoined consonant conversion.
412 (defconst tibetan-base-to-subjoined-alist
413 '(("\e$(7"!\e(B" . "\e$(7#!\e(B")
414 ("\e$(7""\e(B" . "\e$(7#"\e(B")
415 ("\e$(7"#\e(B" . "\e$(7##\e(B")
416 ("\e$(7"$\e(B" . "\e$(7#$\e(B")
417 ("\e$(7"%\e(B" . "\e$(7#%\e(B")
418 ("\e$(7"&\e(B" . "\e$(7#&\e(B")
419 ("\e$(7"'\e(B" . "\e$(7#'\e(B")
420 ("\e$(7"(\e(B" . "\e$(7#(\e(B")
421 ("\e$(7"*\e(B" . "\e$(7#*\e(B")
422 ("\e$(7"+\e(B" . "\e$(7#+\e(B")
423 ("\e$(7",\e(B" . "\e$(7#,\e(B")
424 ("\e$(7"-\e(B" . "\e$(7#-\e(B")
425 ("\e$(7".\e(B" . "\e$(7#.\e(B")
426 ("\e$(7"/\e(B" . "\e$(7#/\e(B")
427 ("\e$(7"0\e(B" . "\e$(7#0\e(B")
428 ("\e$(7"1\e(B" . "\e$(7#1\e(B")
429 ("\e$(7"2\e(B" . "\e$(7#2\e(B")
430 ("\e$(7"3\e(B" . "\e$(7#3\e(B")
431 ("\e$(7"4\e(B" . "\e$(7#4\e(B")
432 ("\e$(7"5\e(B" . "\e$(7#5\e(B")
433 ("\e$(7"6\e(B" . "\e$(7#6\e(B")
434 ("\e$(7"7\e(B" . "\e$(7#7\e(B")
435 ("\e$(7"8\e(B" . "\e$(7#8\e(B")
436 ("\e$(7"9\e(B" . "\e$(7#9\e(B")
437 ("\e$(7":\e(B" . "\e$(7#:\e(B")
438 ("\e$(7";\e(B" . "\e$(7#;\e(B")
439 ("\e$(7"<\e(B" . "\e$(7#<\e(B")
440 ("\e$(7"=\e(B" . "\e$(7#=\e(B")
441 ("\e$(7">\e(B" . "\e$(7#>\e(B")
442 ("\e$(7"?\e(B" . "\e$(7#?\e(B")
443 ("\e$(7"@\e(B" . "\e$(7#@\e(B")
444 ("\e$(7"A\e(B" . "\e$(7#A\e(B")
445 ("\e$(7"B\e(B" . "\e$(7#B\e(B")
446 ("\e$(7"C\e(B" . "\e$(7#C\e(B")
447 ("\e$(7"D\e(B" . "\e$(7#D\e(B")
448 ("\e$(7"E\e(B" . "\e$(7#E\e(B")
449 ("\e$(7"F\e(B" . "\e$(7#F\e(B")
450 ("\e$(7"G\e(B" . "\e$(7#G\e(B")
451 ("\e$(7"H\e(B" . "\e$(7#H\e(B")
452 ("\e$(7"I\e(B" . "\e$(7#I\e(B")
453 ("\e$(7"J\e(B" . "\e$(7#J\e(B")))
456 ;;; alist for Tibetan consonantic components <-> precomposed glyph conversion.
457 ;;; (includes some punctuation conversion rules)
459 (defconst tibetan-precomposition-rule-alist
460 '(("\e$(7"6#B#>\e(B" . "\e$(7$G\e(B")
461 ("\e$(7"##C#>\e(B" . "\e$(7$_\e(B")
462 ("\e$(7";#>\e(B" . "\e$(7$)\e(B")
463 ("\e$(7"C#:#>\e(B" . "\e$(7%.\e(B")
464 ("\e$(7"C###>\e(B" . "\e$(7%-\e(B")
465 ("\e$(7"C#!#B\e(B" . "\e$(7%0\e(B")
466 ("\e$(7"C###B\e(B" . "\e$(7%1\e(B")
467 ("\e$(7"C#9#B\e(B" . "\e$(7%2\e(B")
468 ("\e$(7"G#!#B\e(B" . "\e$(7%`\e(B")
469 ("\e$(7"G###B\e(B" . "\e$(7%a\e(B")
470 ("\e$(7"G#5#B\e(B" . "\e$(7%b\e(B")
471 ("\e$(7"G#7#B\e(B" . "\e$(7%c\e(B")
472 ("\e$(7"G#9#B\e(B" . "\e$(7%d\e(B")
473 ("\e$(7"G#!#C\e(B" . "\e$(7%p\e(B")
474 ("\e$(7"G###C\e(B" . "\e$(7%q\e(B")
475 ("\e$(7"G#4#C\e(B" . "\e$(7%r\e(B")
476 ("\e$(7"G#5#C\e(B" . "\e$(7%s\e(B")
477 ("\e$(7"G#7#C\e(B" . "\e$(7%t\e(B")
478 ("\e$(7"G#9#C\e(B" . "\e$(7%u\e(B")
479 ("\e$(7""#>\e(B" . "\e$(7$"\e(B")
480 ("\e$(7"*#>\e(B" . "\e$(7$%\e(B")
481 ("\e$(7":#>\e(B" . "\e$(7$(\e(B")
482 ("\e$(7"?#>\e(B" . "\e$(7$*\e(B")
483 ("\e$(7"E#>\e(B" . "\e$(7$.\e(B")
484 ("\e$(7""#B\e(B" . "\e$(7$A\e(B")
485 ("\e$(7"6#B\e(B" . "\e$(7$D\e(B")
486 ("\e$(7""#C\e(B" . "\e$(7$Q\e(B")
487 ("\e$(7"1#C\e(B" . "\e$(7$T\e(B")
488 ("\e$(7"6#C\e(B" . "\e$(7$W\e(B")
489 ("\e$(7"E#C\e(B" . "\e$(7$Z\e(B")
490 ("\e$(7"<#C\e(B" . "\e$(7$^\e(B")
491 ("\e$(7"C#%\e(B" . "\e$(7%#\e(B")
492 ("\e$(7"C#*\e(B" . "\e$(7%%\e(B")
493 ("\e$(7"C#:\e(B" . "\e$(7%+\e(B")
494 ("\e$(7"C#<\e(B" . "\e$(7%,\e(B")
495 ("\e$(7"D#%\e(B" . "\e$(7%B\e(B")
496 ("\e$(7"G#%\e(B" . "\e$(7%R\e(B")
497 ("\e$(7"G#*\e(B" . "\e$(7%S\e(B")
498 ("\e$(7"G#:\e(B" . "\e$(7%Z\e(B")
499 ("\e$(7"!#>\e(B" . "\e$(7$!\e(B")
500 ("\e$(7"##>\e(B" . "\e$(7$#\e(B")
501 ("\e$(7"&#>\e(B" . "\e$(7$$\e(B")
502 ("\e$(7"0#>\e(B" . "\e$(7$&\e(B")
503 ("\e$(7"2#>\e(B" . "\e$(7$'\e(B")
504 ("\e$(7"@#>\e(B" . "\e$(7$+\e(B")
505 ("\e$(7"C#>\e(B" . "\e$(7$,\e(B")
506 ("\e$(7"D#>\e(B" . "\e$(7$-\e(B")
507 ("\e$(7"G#>\e(B" . "\e$(7$/\e(B")
508 ("\e$(7"H#>\e(B" . "\e$(7$0\e(B")
509 ("\e$(7"!#B\e(B" . "\e$(7$@\e(B")
510 ("\e$(7"##B\e(B" . "\e$(7$B\e(B")
511 ("\e$(7"5#B\e(B" . "\e$(7$C\e(B")
512 ("\e$(7"7#B\e(B" . "\e$(7$E\e(B")
513 ("\e$(7"9#B\e(B" . "\e$(7$F\e(B")
514 ("\e$(7"!#C\e(B" . "\e$(7$P\e(B")
515 ("\e$(7"##C\e(B" . "\e$(7$R\e(B")
516 ("\e$(7"0#C\e(B" . "\e$(7$S\e(B")
517 ("\e$(7"2#C\e(B" . "\e$(7$U\e(B")
518 ("\e$(7"5#C\e(B" . "\e$(7$V\e(B")
519 ("\e$(7"7#C\e(B" . "\e$(7$X\e(B")
520 ("\e$(7"9#C\e(B" . "\e$(7$Y\e(B")
521 ("\e$(7"G#C\e(B" . "\e$(7$[\e(B")
522 ("\e$(7"H#C\e(B" . "\e$(7$\\e(B")
523 ("\e$(7"(#C\e(B" . "\e$(7$]\e(B")
524 ("\e$(7"!#D\e(B" . "\e$(7$`\e(B")
525 ("\e$(7"##D\e(B" . "\e$(7$a\e(B")
526 ("\e$(7"7#D\e(B" . "\e$(7$b\e(B")
527 ("\e$(7"@#D\e(B" . "\e$(7$c\e(B")
528 ("\e$(7"C#D\e(B" . "\e$(7$d\e(B")
529 ("\e$(7"G#D\e(B" . "\e$(7$e\e(B")
530 ("\e$(7"C#!\e(B" . "\e$(7%!\e(B")
531 ("\e$(7"C##\e(B" . "\e$(7%"\e(B")
532 ("\e$(7"C#(\e(B" . "\e$(7%$\e(B")
533 ("\e$(7"C#0\e(B" . "\e$(7%&\e(B")
534 ("\e$(7"C#2\e(B" . "\e$(7%'\e(B")
535 ("\e$(7"C#4\e(B" . "\e$(7%(\e(B")
536 ("\e$(7"C#7\e(B" . "\e$(7%)\e(B")
537 ("\e$(7"C#9\e(B" . "\e$(7%*\e(B")
538 ("\e$(7"D#!\e(B" . "\e$(7%@\e(B")
539 ("\e$(7"D##\e(B" . "\e$(7%A\e(B")
540 ("\e$(7"D#&\e(B" . "\e$(7%C\e(B")
541 ("\e$(7"D#(\e(B" . "\e$(7%D\e(B")
542 ("\e$(7"D#0\e(B" . "\e$(7%E\e(B")
543 ("\e$(7"D#2\e(B" . "\e$(7%F\e(B")
544 ("\e$(7"D#5\e(B" . "\e$(7%G\e(B")
545 ("\e$(7"D#7\e(B" . "\e$(7%H\e(B")
546 ("\e$(7"D#H\e(B" . "\e$(7%I\e(B")
547 ("\e$(7"G#!\e(B" . "\e$(7%P\e(B")
548 ("\e$(7"G##\e(B" . "\e$(7%Q\e(B")
549 ("\e$(7"G#0\e(B" . "\e$(7%T\e(B")
550 ("\e$(7"G#2\e(B" . "\e$(7%U\e(B")
551 ("\e$(7"G#4\e(B" . "\e$(7%V\e(B")
552 ("\e$(7"G#5\e(B" . "\e$(7%W\e(B")
553 ("\e$(7"G#7\e(B" . "\e$(7%X\e(B")
554 ("\e$(7"G#9\e(B" . "\e$(7%Y\e(B")
555 ("\e$(7!=\e(B" . "\e$(8!=\e(B") ; 2 col <-> 1 col
556 ("\e$(7!?\e(B" . "\e$(8!?\e(B")
557 ("\e$(7!@\e(B" . "\e$(8!@\e(B")
558 ("\e$(7!A\e(B" . "\e$(8!A\e(B")
559 ("\e$(7"`\e(B" . "\e$(8"`\e(B")
560 ("\e$(7!;\e(B" . "\e$(8!;\e(B")
561 ("\e$(7!D\e(B" . "\e$(8!D\e(B")
562 ("\e$(7!>\e(B \e$(7!>\e(B" . "\e2\e$(7!>P\e(B P\e$(7!>\e1\e(B") ; Yes this is dirty. But ...
563 ("\e$(7!4!5!5\e(B" . "\e2\e$(7#RP#SP#SP#S\e1\e(B")
564 ("\e$(7!4!5\e(B" . "\e2\e$(7#RP#SP#S\e1\e(B")
565 ("\e$(7!6\e(B" . "\e2\e$(7#RP#S_!I\e1\e(B")
566 ("\e$(7!4\e(B" . "\e2\e$(7#RP#S\e1\e(B")))
568 (defvar tibetan-regexp
569 (let ((l (append tibetan-consonant-transcription-alist
570 tibetan-vowel-transcription-alist
571 tibetan-subjoined-transcription-alist))
572 temp)
573 (setq temp "\\(")
574 (setq temp (concat temp (car (car l))))
575 (setq l (cdr l))
576 (while l
577 (setq temp (concat temp "\\|" (car (car l))))
578 (setq l (cdr l)))
579 (concat temp "\\)$"))
580 "Regexp string to match a romanized Tibetan character component, i.e.,
581 base and subjoined consonant, vowel and vowel modifier. The result of matching
582 is to be used for indexing alists at conversion from a roman transcription to
583 the corresponding Tibetan character.")
585 (defvar tibetan-precomposed-regexp
586 (let ((l tibetan-precomposed-transcription-alist)
587 temp)
588 (setq temp "^\\(")
589 (setq temp
590 (concat temp (car (car l))))
591 (setq l (cdr l))
592 (while l
593 (setq temp
594 (concat temp "\\|" (car (car l))))
595 (setq l (cdr l)))
596 (concat temp "\\)"))
597 "Regexp string to match a romanized Tibetan complex consonant.
598 The result of matching is to be used for indexing alists when the input key
599 from an input method is converted to the corresponding precomposed glyph.")
601 (defvar tibetan-precomposition-rule-regexp
602 (let ((l tibetan-precomposition-rule-alist)
603 temp)
604 (setq temp "\\(")
605 (setq temp (concat temp (car (car l))))
606 (setq l (cdr l))
607 (while l
608 (setq temp (concat temp "\\|" (car (car l))))
609 (setq l (cdr l)))
610 (concat temp "\\)"))
611 "Regexp string to match a sequence of Tibetan consonantic components, i.e.,
612 one base consonant and one or more subjoined consonants.
613 The result of matching is to be used for indexing alist when the component
614 sequence is converted to the corresponding precomposed glyph.
615 This also matches some punctuation characters which need conversion.")
617 (defvar tibetan-decomposed nil)
618 (defvar tibetan-decomposed-temp nil)
620 ;;; language/tibetan.el ends here