]> code.delx.au - gnu-emacs/blob - lisp/language/tibetan.el
Assorted cleanups for compiler warnings, doc strings, `array-' prefix
[gnu-emacs] / lisp / language / tibetan.el
1 ;;; tibetan.el --- Support for Tibetan language -*- coding: iso-2022-7bit; -*-
2
3 ;; Copyright (C) 1997 Electrotechnical Laboratory, JAPAN.
4 ;; Licensed to the Free Software Foundation.
5
6 ;; Keywords: multilingual, Tibetan
7
8 ;; This file is part of GNU Emacs.
9
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.
14
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.
19
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.
24
25 ;; Author: Toru TOMABECHI, <Toru.Tomabechi@orient.unil.ch>
26
27 ;; Created: Feb. 17. 1997
28
29 ;; History:
30 ;; 1997.03.13 Modification for special signs and punctuations.
31
32 ;;; Code:
33
34 ;;; Tibetan Character set.
35 ;;; \x2130 -- \x234a is a subset of Unicode v.2 \x0f00 - \x0fb9
36 ;;; with a slight modification. And there are some subjoined
37 ;;; consonants which are not specified in Unicode.
38 ;;; I hope I can add missing characters later.
39 ;;;
40 ;;; 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
41 ;;;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 ;
42 ;;;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,
43 ;;;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
44 ;;;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.
45 ;;;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 ;
46 ;;;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 // ;
47 ;;;
48 ;;; 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
49 ;;;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
50 ;;;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
51 ;;;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.
52 ;;;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)
53 ;;;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
54 ;;;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
55 ;;; ; not atomically
56 ;;; ; encoded.
57 ;;; 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
58 ;;;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
59 ;;;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 ;
60 ;;;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
61 ;;; ; here,
62 ;;; ; while in Unicode
63 ;;; ; it is classified
64 ;;; ; as a vowel sign
65 ;;; ; (\x0f71).
66 ;;;
67 ;;;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
68 ;;;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
69 ;;;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.
70 ;;; ; The character \x2351
71 ;;; ; is not used in our
72 ;;; ; implementation.
73 ;;; 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
74 ;;;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
75 ;;;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
76 ;;;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.
77 ;;;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
78 ;;;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
79 ;;;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
80 ;;; ; when written on a
81 ;;; 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ; file in Tibetan
82 ;;;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.
83 ;;;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 ;
84 ;;;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 ;
85 ;;;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 ;
86 ;;;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 ;
87 ;;;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 // ;
88 ;;;
89
90
91 (make-coding-system
92 'tibetan-iso-8bit 2 ?Q
93 "8-bit encoding for ASCII (MSB=0) and TIBETAN (MSB=1)"
94 '(ascii tibetan nil nil
95 nil nil)
96 '((safe-charsets ascii tibetan)
97 (post-read-conversion . tibetan-post-read-conversion)
98 (pre-write-conversion . tibetan-pre-write-conversion)))
99
100 (define-coding-system-alias 'tibetan 'tibetan-iso-8bit)
101
102 (set-language-info-alist
103 "Tibetan" '((charset tibetan tibetan-1-column)
104 (coding-system tibetan-iso-8bit)
105 (coding-priority iso-2022-7bit tibetan-iso-8bit)
106 (input-method . "tibetan-wylie")
107 (features tibet-util)
108 (documentation . t)
109 (sample-text .
110 "Tibetan (\e4\e$(7"7r'"]\e0"7"]\e1"2\e$(8!;\e4\e$(7%Px!"Q\e0%P"Q\e1"2\e$(8!;\e(B) \e4\e$(7#Rv##Sv##S\e0#R#S#S\e1!>"7\e4$Px!"Q\e0$P"Q\e1\e$(8!;\e4\e$(7"Er'"S\e0"E"S\e1"G\e$(8!;\e$(7"7\e4"2r'"[\e0"2"[\e1\e$(8!;\e4\e$(7"Dr'"[\e0"D"[\e1"#"G!>\e4"Ir'"]r'"_\e0"I"]"_\e1\e$(8!;\e4\e$(7"9x!"Q\e0"9"Q\e1\e$(8!;\e4\e$(7"/r'"S\e0"/"S\e1\e$(8!;\e4\e$(7"5x!"Q\e0"5"Q\e1\e4#2x!#9r'"[\e0#2#9"[\e1\e$(8!;\e4\e$(7"Hx!#Ax!"Ur'"c\e0"H#A"U"c\e1!>\e(B")))
111
112
113 ;; `\e$(7"A\e(B' is included in the pattern for subjoined consonants because we
114 ;; treat it specially in tibetan-add-components.
115 (defconst tibetan-composable-pattern
116 "[\e$(7"!\e(B-\e$(7"J\e(B][\e$(7"A#!\e(B-\e$(7#J\e(B]*[\e$(7"Q\e(B-\e$(7"^"a"e\e(B]?[\e$(7"_"c"d"g\e(B-\e$(7"l!I!e!g\e(B]?"
117 "Regexp matching a composable sequence of Tibetan characters.")
118
119 ;; Register a function to compose Tibetan characters.
120 (aset composition-function-table (make-char 'tibetan)
121 (list (cons tibetan-composable-pattern 'tibetan-composition-function)))
122
123 ;;;
124 ;;; Definitions of conversion data.
125 ;;;
126
127
128 ;;; alists for tibetan char <-> transcription conversion
129 ;;; longer transcription should come first
130 (defconst tibetan-consonant-transcription-alist
131 '(("tsh" . "\e$(7";\e(B")
132 ("dzh" . "\e$(7"=\e(B")
133 ("kSH" . "\e$(7"J\e(B")
134 ("kh" . "\e$(7""\e(B")
135 ("gh" . "\e$(7"$\e(B")
136 ("ng" . "\e$(7"%\e(B")
137 ("ch" . "\e$(7"'\e(B")
138 ("ny" . "\e$(7"*\e(B")
139 ("TH" . "\e$(7",\e(B")
140 ("DH" . "\e$(7".\e(B")
141 ("th" . "\e$(7"1\e(B")
142 ("dh" . "\e$(7"3\e(B")
143 ("ph" . "\e$(7"6\e(B")
144 ("bh" . "\e$(7"8\e(B")
145 ("ts" . "\e$(7":\e(B")
146 ("dz" . "\e$(7"<\e(B")
147 ("zh" . "\e$(7"?\e(B")
148 ("sh" . "\e$(7"E\e(B")
149 ("SH" . "\e$(7"F\e(B")
150 ("k" . "\e$(7"!\e(B")
151 ("g" . "\e$(7"#\e(B")
152 ("c" . "\e$(7"&\e(B")
153 ("j" . "\e$(7"(\e(B")
154 ("T" . "\e$(7"+\e(B")
155 ("D" . "\e$(7"-\e(B")
156 ("N" . "\e$(7"/\e(B")
157 ("t" . "\e$(7"0\e(B")
158 ("d" . "\e$(7"2\e(B")
159 ("n" . "\e$(7"4\e(B")
160 ("p" . "\e$(7"5\e(B")
161 ("b" . "\e$(7"7\e(B")
162 ("m" . "\e$(7"9\e(B")
163 ("w" . "\e$(7">\e(B")
164 ("z" . "\e$(7"@\e(B")
165 ("'" . "\e$(7"A\e(B")
166 ("y" . "\e$(7"B\e(B")
167 ("r" . "\e$(7"C\e(B")
168 ("l" . "\e$(7"D\e(B")
169 ("s" . "\e$(7"G\e(B")
170 ("h" . "\e$(7"H\e(B")
171 ("H" . "\e$(7"H\e(B")
172 ("A" . "\e$(7"I\e(B")))
173
174
175 (defconst tibetan-vowel-transcription-alist
176 '(("ai" . "\e$(7"\\e(B")
177 ("au" . "\e$(7"^\e(B")
178 ("ee" . "\e$(7"\\e(B")
179 ("oo" . "\e$(7"^\e(B")
180 ("a" . "\e$(7"Q\e(B") ; invisible vowel sign (\x2251)
181 ("i" . "\e$(7"S\e(B")
182 ("u" . "\e$(7"U\e(B")
183 ("e" . "\e$(7"[\e(B")
184 ("o" . "\e$(7"]\e(B")
185 ("E" . "\e$(7"\\e(B")
186 ("O" . "\e$(7"^\e(B")
187 ("I" . "\e$(7"a\e(B")
188 ("," . "\e$(7"e\e(B") ; idem.
189 ))
190
191 (defconst tibetan-modifier-transcription-alist
192 '(("M" . "\e$(7"_\e(B")
193 ("~" . "\e$(7"c\e(B")
194 ("`" . "\e$(7"d\e(B")
195 ("x" . "\e$(7"i\e(B")
196 ("X" . "\e$(7"j\e(B")
197 ("v" . "\e$(7"g\e(B")
198 ("V" . "\e$(7"h\e(B")
199 ("q" . "\e$(7"k\e(B")
200 ("Q" . "\e$(7"l\e(B")
201 ("_/" . "\e$(7!I\e(B")
202 ("_o" . "\e$(7!g\e(B")
203 ("_O" . "\e$(7!e\e(B")))
204
205 (defconst tibetan-precomposed-transcription-alist
206 '(("phyw" . "\e$(7$G\e(B")
207 ("tshw" . "\e$(7$)\e(B")
208 ("rtsw" . "\e$(7%.\e(B")
209 ("khw" . "\e$(7$"\e(B")
210 ("nyw" . "\e$(7$%\e(B")
211 ("tsw" . "\e$(7$(\e(B")
212 ("zhw" . "\e$(7$*\e(B")
213 ("shw" . "\e$(7$.\e(B")
214 ("khy" . "\e$(7$A\e(B")
215 ("phy" . "\e$(7$D\e(B")
216 ("khr" . "\e$(7$Q\e(B")
217 ("thr" . "\e$(7$T\e(B")
218 ("phr" . "\e$(7$W\e(B")
219 ("shr" . "\e$(7$Z\e(B")
220 ("dzr" . "\e$(7$^\e(B")
221 ("grw" . "\e$(7$_\e(B")
222 ("rng" . "\e$(7%#\e(B")
223 ("rny" . "\e$(7%%\e(B")
224 ("rts" . "\e$(7%+\e(B")
225 ("rdz" . "\e$(7%,\e(B")
226 ("rgw" . "\e$(7%-\e(B")
227 ("rky" . "\e$(7%0\e(B")
228 ("rgy" . "\e$(7%1\e(B")
229 ("rmy" . "\e$(7%2\e(B")
230 ("lng" . "\e$(7%B\e(B")
231 ("sng" . "\e$(7%R\e(B")
232 ("sny" . "\e$(7%S\e(B")
233 ("sts" . "\e$(7%Z\e(B")
234 ("sky" . "\e$(7%`\e(B")
235 ("sgy" . "\e$(7%a\e(B")
236 ("spy" . "\e$(7%b\e(B")
237 ("sby" . "\e$(7%c\e(B")
238 ("smy" . "\e$(7%d\e(B")
239 ("skr" . "\e$(7%p\e(B")
240 ("sgr" . "\e$(7%q\e(B")
241 ("snr" . "\e$(7%r\e(B")
242 ("spr" . "\e$(7%s\e(B")
243 ("sbr" . "\e$(7%t\e(B")
244 ("smr" . "\e$(7%u\e(B")
245 ("kw" . "\e$(7$!\e(B")
246 ("gw" . "\e$(7$#\e(B")
247 ("cw" . "\e$(7$$\e(B")
248 ("tw" . "\e$(7$&\e(B")
249 ("dw" . "\e$(7$'\e(B")
250 ("zw" . "\e$(7$+\e(B")
251 ("rw" . "\e$(7$,\e(B")
252 ("lw" . "\e$(7$-\e(B")
253 ("sw" . "\e$(7$/\e(B")
254 ("hw" . "\e$(7$0\e(B")
255 ("ky" . "\e$(7$@\e(B")
256 ("gy" . "\e$(7$B\e(B")
257 ("py" . "\e$(7$C\e(B")
258 ("by" . "\e$(7$E\e(B")
259 ("my" . "\e$(7$F\e(B")
260 ("kr" . "\e$(7$P\e(B")
261 ("gr" . "\e$(7$R\e(B")
262 ("tr" . "\e$(7$S\e(B")
263 ("dr" . "\e$(7$U\e(B")
264 ("pr" . "\e$(7$V\e(B")
265 ("brk" . "\e$(7"7%!\e(B")
266 ("brg" . "\e$(7"7%"\e(B")
267 ("brng" . "\e$(7"7%#\e(B")
268 ("brj" . "\e$(7"7%$\e(B")
269 ("brny" . "\e$(7"7%%\e(B")
270 ("brt" . "\e$(7"7%&\e(B")
271 ("brd" . "\e$(7"7%'\e(B")
272 ("brn" . "\e$(7"7%(\e(B")
273 ("brts" . "\e$(7"7%+\e(B")
274 ("brdz" . "\e$(7"7%,\e(B")
275 ("brl" . "\e$(7"7$d\e(B")
276 ("br" . "\e$(7$X\e(B")
277 ("mr" . "\e$(7$Y\e(B")
278 ("sr" . "\e$(7$[\e(B")
279 ("hr" . "\e$(7$\\e(B")
280 ("jr" . "\e$(7$]\e(B")
281 ("kl" . "\e$(7$`\e(B")
282 ("gl" . "\e$(7$a\e(B")
283 ("blt" . "\e$(7"7%E\e(B")
284 ("bld" . "\e$(7"7%F\e(B")
285 ("bl" . "\e$(7$b\e(B")
286 ("zl" . "\e$(7$c\e(B")
287 ("rl" . "\e$(7$d\e(B")
288 ("sl" . "\e$(7$e\e(B")
289 ("rk" . "\e$(7%!\e(B")
290 ("rg" . "\e$(7%"\e(B")
291 ("rj" . "\e$(7%$\e(B")
292 ("rt" . "\e$(7%&\e(B")
293 ("rd" . "\e$(7%'\e(B")
294 ("rn" . "\e$(7%(\e(B")
295 ("rb" . "\e$(7%)\e(B")
296 ("rm" . "\e$(7%*\e(B")
297 ("lk" . "\e$(7%@\e(B")
298 ("lg" . "\e$(7%A\e(B")
299 ("lc" . "\e$(7%C\e(B")
300 ("lj" . "\e$(7%D\e(B")
301 ("lt" . "\e$(7%E\e(B")
302 ("ld" . "\e$(7%F\e(B")
303 ("ln" . "\e$(7!!\e(B") ; dummy \x2121
304 ("lp" . "\e$(7%G\e(B")
305 ("lb" . "\e$(7%H\e(B")
306 ("lh" . "\e$(7%I\e(B")
307 ("sk" . "\e$(7%P\e(B")
308 ("sg" . "\e$(7%Q\e(B")
309 ("st" . "\e$(7%T\e(B")
310 ("sd" . "\e$(7%U\e(B")
311 ("sn" . "\e$(7%V\e(B")
312 ("sp" . "\e$(7%W\e(B")
313 ("sb" . "\e$(7%X\e(B")
314 ("sm" . "\e$(7%Y\e(B")))
315
316 (defconst tibetan-subjoined-transcription-alist
317 (sort '(("+k" . "\e$(7#!\e(B")
318 ("+kh" . "\e$(7#"\e(B")
319 ("+g" . "\e$(7##\e(B")
320 ("+gh" . "\e$(7#$\e(B")
321 ("+ng" . "\e$(7#%\e(B")
322 ("+c" . "\e$(7#&\e(B")
323 ("+ch" . "\e$(7#'\e(B")
324 ("+j" . "\e$(7#(\e(B")
325 ("+ny" . "\e$(7#*\e(B")
326 ("+T" . "\e$(7#+\e(B")
327 ("+TH" . "\e$(7#,\e(B")
328 ("+D" . "\e$(7#-\e(B")
329 ("+DH" . "\e$(7#.\e(B")
330 ("+N" . "\e$(7#/\e(B")
331 ("+t" . "\e$(7#0\e(B")
332 ("+th" . "\e$(7#1\e(B")
333 ("+d" . "\e$(7#2\e(B")
334 ("+dh" . "\e$(7#3\e(B")
335 ("+n" . "\e$(7#4\e(B")
336 ("+p" . "\e$(7#5\e(B")
337 ("+ph" . "\e$(7#6\e(B")
338 ("+b" . "\e$(7#7\e(B")
339 ("+bh" . "\e$(7#8\e(B")
340 ("+m" . "\e$(7#9\e(B")
341 ("+ts" . "\e$(7#:\e(B")
342 ("+tsh" . "\e$(7#;\e(B")
343 ("+dz" . "\e$(7#<\e(B")
344 ("+dzh" . "\e$(7#=\e(B")
345 ("+w" . "\e$(7#>\e(B")
346 ("+zh" . "\e$(7#?\e(B")
347 ("+z" . "\e$(7#@\e(B")
348 ("+'" . "\e$(7#A\e(B")
349 ("+y" . "\e$(7#B\e(B")
350 ("+r" . "\e$(7#C\e(B")
351 ("+l" . "\e$(7#D\e(B")
352 ("+sh" . "\e$(7#E\e(B")
353 ("+SH" . "\e$(7#F\e(B")
354 ("+s" . "\e$(7#G\e(B")
355 ("+h" . "\e$(7#H\e(B")
356 ("+A" . "\e$(7#I\e(B")
357 ("+kSH" . "\e$(7#J\e(B")
358 ("+R" . "\e$(7#P\e(B"))
359 (lambda (x y) (> (length (car x)) (length (car y))))))
360
361 ;;;
362 ;;; alist for Tibetan base consonant <-> subjoined consonant conversion.
363 ;;;
364 (defconst tibetan-base-to-subjoined-alist
365 '(("\e$(7"!\e(B" . "\e$(7#!\e(B")
366 ("\e$(7""\e(B" . "\e$(7#"\e(B")
367 ("\e$(7"#\e(B" . "\e$(7##\e(B")
368 ("\e$(7"$\e(B" . "\e$(7#$\e(B")
369 ("\e$(7"%\e(B" . "\e$(7#%\e(B")
370 ("\e$(7"&\e(B" . "\e$(7#&\e(B")
371 ("\e$(7"'\e(B" . "\e$(7#'\e(B")
372 ("\e$(7"(\e(B" . "\e$(7#(\e(B")
373 ("\e$(7"*\e(B" . "\e$(7#*\e(B")
374 ("\e$(7"+\e(B" . "\e$(7#+\e(B")
375 ("\e$(7",\e(B" . "\e$(7#,\e(B")
376 ("\e$(7"-\e(B" . "\e$(7#-\e(B")
377 ("\e$(7".\e(B" . "\e$(7#.\e(B")
378 ("\e$(7"/\e(B" . "\e$(7#/\e(B")
379 ("\e$(7"0\e(B" . "\e$(7#0\e(B")
380 ("\e$(7"1\e(B" . "\e$(7#1\e(B")
381 ("\e$(7"2\e(B" . "\e$(7#2\e(B")
382 ("\e$(7"3\e(B" . "\e$(7#3\e(B")
383 ("\e$(7"4\e(B" . "\e$(7#4\e(B")
384 ("\e$(7"5\e(B" . "\e$(7#5\e(B")
385 ("\e$(7"6\e(B" . "\e$(7#6\e(B")
386 ("\e$(7"7\e(B" . "\e$(7#7\e(B")
387 ("\e$(7"8\e(B" . "\e$(7#8\e(B")
388 ("\e$(7"9\e(B" . "\e$(7#9\e(B")
389 ("\e$(7":\e(B" . "\e$(7#:\e(B")
390 ("\e$(7";\e(B" . "\e$(7#;\e(B")
391 ("\e$(7"<\e(B" . "\e$(7#<\e(B")
392 ("\e$(7"=\e(B" . "\e$(7#=\e(B")
393 ("\e$(7">\e(B" . "\e$(7#>\e(B")
394 ("\e$(7"?\e(B" . "\e$(7#?\e(B")
395 ("\e$(7"@\e(B" . "\e$(7#@\e(B")
396 ("\e$(7"A\e(B" . "\e$(7#A\e(B")
397 ("\e$(7"B\e(B" . "\e$(7#B\e(B")
398 ("\e$(7"C\e(B" . "\e$(7#C\e(B")
399 ("\e$(7"D\e(B" . "\e$(7#D\e(B")
400 ("\e$(7"E\e(B" . "\e$(7#E\e(B")
401 ("\e$(7"F\e(B" . "\e$(7#F\e(B")
402 ("\e$(7"G\e(B" . "\e$(7#G\e(B")
403 ("\e$(7"H\e(B" . "\e$(7#H\e(B")
404 ("\e$(7"I\e(B" . "\e$(7#I\e(B")
405 ("\e$(7"J\e(B" . "\e$(7#J\e(B")))
406
407 ;;;
408 ;;; alist for Tibetan consonantic components <-> precomposed glyph conversion.
409 ;;; (includes some punctuation conversion rules)
410 ;;;
411 (defconst tibetan-precomposition-rule-alist
412 `(("\e$(7"6#B#>\e(B" . "\e$(7$G\e(B")
413 ("\e$(7"##C#>\e(B" . "\e$(7$_\e(B")
414 ("\e$(7";#>\e(B" . "\e$(7$)\e(B")
415 ("\e$(7"C#:#>\e(B" . "\e$(7%.\e(B")
416 ("\e$(7"C###>\e(B" . "\e$(7%-\e(B")
417 ("\e$(7"C#!#B\e(B" . "\e$(7%0\e(B")
418 ("\e$(7"C###B\e(B" . "\e$(7%1\e(B")
419 ("\e$(7"C#9#B\e(B" . "\e$(7%2\e(B")
420 ("\e$(7"G#!#B\e(B" . "\e$(7%`\e(B")
421 ("\e$(7"G###B\e(B" . "\e$(7%a\e(B")
422 ("\e$(7"G#5#B\e(B" . "\e$(7%b\e(B")
423 ("\e$(7"G#7#B\e(B" . "\e$(7%c\e(B")
424 ("\e$(7"G#9#B\e(B" . "\e$(7%d\e(B")
425 ("\e$(7"G#!#C\e(B" . "\e$(7%p\e(B")
426 ("\e$(7"G###C\e(B" . "\e$(7%q\e(B")
427 ("\e$(7"G#4#C\e(B" . "\e$(7%r\e(B")
428 ("\e$(7"G#5#C\e(B" . "\e$(7%s\e(B")
429 ("\e$(7"G#7#C\e(B" . "\e$(7%t\e(B")
430 ("\e$(7"G#9#C\e(B" . "\e$(7%u\e(B")
431 ("\e$(7""#>\e(B" . "\e$(7$"\e(B")
432 ("\e$(7"*#>\e(B" . "\e$(7$%\e(B")
433 ("\e$(7":#>\e(B" . "\e$(7$(\e(B")
434 ("\e$(7"?#>\e(B" . "\e$(7$*\e(B")
435 ("\e$(7"E#>\e(B" . "\e$(7$.\e(B")
436 ("\e$(7""#B\e(B" . "\e$(7$A\e(B")
437 ("\e$(7"6#B\e(B" . "\e$(7$D\e(B")
438 ("\e$(7""#C\e(B" . "\e$(7$Q\e(B")
439 ("\e$(7"1#C\e(B" . "\e$(7$T\e(B")
440 ("\e$(7"6#C\e(B" . "\e$(7$W\e(B")
441 ("\e$(7"E#C\e(B" . "\e$(7$Z\e(B")
442 ("\e$(7"<#C\e(B" . "\e$(7$^\e(B")
443 ("\e$(7"C#%\e(B" . "\e$(7%#\e(B")
444 ("\e$(7"C#*\e(B" . "\e$(7%%\e(B")
445 ("\e$(7"C#:\e(B" . "\e$(7%+\e(B")
446 ("\e$(7"C#<\e(B" . "\e$(7%,\e(B")
447 ("\e$(7"D#%\e(B" . "\e$(7%B\e(B")
448 ("\e$(7"G#%\e(B" . "\e$(7%R\e(B")
449 ("\e$(7"G#*\e(B" . "\e$(7%S\e(B")
450 ("\e$(7"G#:\e(B" . "\e$(7%Z\e(B")
451 ("\e$(7"!#>\e(B" . "\e$(7$!\e(B")
452 ("\e$(7"##>\e(B" . "\e$(7$#\e(B")
453 ("\e$(7"&#>\e(B" . "\e$(7$$\e(B")
454 ("\e$(7"0#>\e(B" . "\e$(7$&\e(B")
455 ("\e$(7"2#>\e(B" . "\e$(7$'\e(B")
456 ("\e$(7"@#>\e(B" . "\e$(7$+\e(B")
457 ("\e$(7"C#>\e(B" . "\e$(7$,\e(B")
458 ("\e$(7"D#>\e(B" . "\e$(7$-\e(B")
459 ("\e$(7"G#>\e(B" . "\e$(7$/\e(B")
460 ("\e$(7"H#>\e(B" . "\e$(7$0\e(B")
461 ("\e$(7"!#B\e(B" . "\e$(7$@\e(B")
462 ("\e$(7"##B\e(B" . "\e$(7$B\e(B")
463 ("\e$(7"5#B\e(B" . "\e$(7$C\e(B")
464 ("\e$(7"7#B\e(B" . "\e$(7$E\e(B")
465 ("\e$(7"9#B\e(B" . "\e$(7$F\e(B")
466 ("\e$(7"!#C\e(B" . "\e$(7$P\e(B")
467 ("\e$(7"##C\e(B" . "\e$(7$R\e(B")
468 ("\e$(7"0#C\e(B" . "\e$(7$S\e(B")
469 ("\e$(7"2#C\e(B" . "\e$(7$U\e(B")
470 ("\e$(7"5#C\e(B" . "\e$(7$V\e(B")
471 ("\e$(7"7#C\e(B" . "\e$(7$X\e(B")
472 ("\e$(7"9#C\e(B" . "\e$(7$Y\e(B")
473 ("\e$(7"G#C\e(B" . "\e$(7$[\e(B")
474 ("\e$(7"H#C\e(B" . "\e$(7$\\e(B")
475 ("\e$(7"(#C\e(B" . "\e$(7$]\e(B")
476 ("\e$(7"!#D\e(B" . "\e$(7$`\e(B")
477 ("\e$(7"##D\e(B" . "\e$(7$a\e(B")
478 ("\e$(7"7#D\e(B" . "\e$(7$b\e(B")
479 ("\e$(7"@#D\e(B" . "\e$(7$c\e(B")
480 ("\e$(7"C#D\e(B" . "\e$(7$d\e(B")
481 ("\e$(7"G#D\e(B" . "\e$(7$e\e(B")
482 ("\e$(7"C#!\e(B" . "\e$(7%!\e(B")
483 ("\e$(7"C##\e(B" . "\e$(7%"\e(B")
484 ("\e$(7"C#(\e(B" . "\e$(7%$\e(B")
485 ("\e$(7"C#0\e(B" . "\e$(7%&\e(B")
486 ("\e$(7"C#2\e(B" . "\e$(7%'\e(B")
487 ("\e$(7"C#4\e(B" . "\e$(7%(\e(B")
488 ("\e$(7"C#7\e(B" . "\e$(7%)\e(B")
489 ("\e$(7"C#9\e(B" . "\e$(7%*\e(B")
490 ("\e$(7"D#!\e(B" . "\e$(7%@\e(B")
491 ("\e$(7"D##\e(B" . "\e$(7%A\e(B")
492 ("\e$(7"D#&\e(B" . "\e$(7%C\e(B")
493 ("\e$(7"D#(\e(B" . "\e$(7%D\e(B")
494 ("\e$(7"D#0\e(B" . "\e$(7%E\e(B")
495 ("\e$(7"D#2\e(B" . "\e$(7%F\e(B")
496 ("\e$(7"D#5\e(B" . "\e$(7%G\e(B")
497 ("\e$(7"D#7\e(B" . "\e$(7%H\e(B")
498 ("\e$(7"D#H\e(B" . "\e$(7%I\e(B")
499 ("\e$(7"G#!\e(B" . "\e$(7%P\e(B")
500 ("\e$(7"G##\e(B" . "\e$(7%Q\e(B")
501 ("\e$(7"G#0\e(B" . "\e$(7%T\e(B")
502 ("\e$(7"G#2\e(B" . "\e$(7%U\e(B")
503 ("\e$(7"G#4\e(B" . "\e$(7%V\e(B")
504 ("\e$(7"G#5\e(B" . "\e$(7%W\e(B")
505 ("\e$(7"G#7\e(B" . "\e$(7%X\e(B")
506 ("\e$(7"G#9\e(B" . "\e$(7%Y\e(B")))
507
508 (defconst tibetan-obsolete-glyphs
509 `(("\e$(7!=\e(B" . "\e$(8!=\e(B") ; 2 col <-> 1 col
510 ("\e$(7!?\e(B" . "\e$(8!?\e(B")
511 ("\e$(7!@\e(B" . "\e$(8!@\e(B")
512 ("\e$(7!A\e(B" . "\e$(8!A\e(B")
513 ("\e$(7"`\e(B" . "\e$(8"`\e(B")
514 ("\e$(7!;\e(B" . "\e$(8!;\e(B")
515 ("\e$(7!D\e(B" . "\e$(8!D\e(B")
516 ;; Yes these are dirty. But ...
517 ("\e$(7!>\e(B \e$(7!>\e(B" . ,(compose-string "\e$(7!>\e(B \e$(7!>\e(B" 0 3 [?\e$(7!>\e(B (Br . Bl) ? (Br . Bl) ?\e$(7!>\e(B]))
518 ("\e$(7!4!5!5\e(B" . ,(compose-string
519 "\e$(7#R#S#S#S\e(B" 0 4
520 [?\e$(7#R\e(B (Br . Bl) ?\e$(7#S\e(B (Br . Bl) ?\e$(7#S\e(B (Br . Bl) ?\e$(7#S\e(B]))
521 ("\e$(7!4!5\e(B" . ,(compose-string "\e$(7#R#S#S\e(B" 0 3 [?\e$(7#R\e(B (Br . Bl) ?\e$(7#S\e(B (Br . Bl) ?\e$(7#S\e(B]))
522 ("\e$(7!6\e(B" . ,(compose-string "\e$(7#R#S!I\e(B" 0 3 [?\e$(7#R\e(B (Br . Bl) ?\e$(7#S\e(B (br . tr) ?\e$(7!I\e(B]))
523 ("\e$(7!4\e(B" . ,(compose-string "\e$(7#R#S\e(B" 0 2 [?\e$(7#R\e(B (Br . Bl) ?\e$(7#S\e(B]))))
524
525 (defconst tibetan-regexp
526 (let ((l (list tibetan-precomposed-transcription-alist
527 tibetan-consonant-transcription-alist
528 tibetan-vowel-transcription-alist
529 tibetan-modifier-transcription-alist
530 tibetan-subjoined-transcription-alist))
531 (separator "\\|")
532 tail pattern)
533 (while l
534 (setq tail (car l) l (cdr l))
535 (while tail
536 (setq pattern (cons separator (cons (car (car tail)) pattern))
537 tail (cdr tail))))
538 (apply 'concat (nreverse (cdr pattern))))
539 "Regexp matching a Tibetan transcription of a composable Tibetan sequence.
540 The result of matching is to be used for indexing alists at conversion
541 from a roman transcription to the corresponding Tibetan character.")
542
543 (defvar tibetan-precomposed-regexp
544 (let ((l tibetan-precomposed-transcription-alist)
545 temp)
546 (setq temp "^\\(")
547 (setq temp
548 (concat temp (car (car l))))
549 (setq l (cdr l))
550 (while l
551 (setq temp
552 (concat temp "\\|" (car (car l))))
553 (setq l (cdr l)))
554 (concat temp "\\)"))
555 "Regexp string to match a romanized Tibetan complex consonant.
556 The result of matching is to be used for indexing alists when the input key
557 from an input method is converted to the corresponding precomposed glyph.")
558
559 (defvar tibetan-precomposition-rule-regexp
560 (let ((l tibetan-precomposition-rule-alist)
561 temp)
562 (setq temp "\\(")
563 (setq temp (concat temp (car (car l))))
564 (setq l (cdr l))
565 (while l
566 (setq temp (concat temp "\\|" (car (car l))))
567 (setq l (cdr l)))
568 (concat temp "\\)"))
569 "Regexp string to match a sequence of Tibetan consonantic components, i.e.,
570 one base consonant and one or more subjoined consonants.
571 The result of matching is to be used for indexing alist when the component
572 sequence is converted to the corresponding precomposed glyph.
573 This also matches some punctuation characters which need conversion.")
574
575 (defvar tibetan-decomposed nil)
576 (defvar tibetan-decomposed-temp nil)
577
578 ;;; language/tibetan.el ends here