Trailing whitepace deleted.
[bpt/emacs.git] / lisp / language / tibetan.el
index cfea183..3ca1da9 100644 (file)
@@ -1,7 +1,7 @@
-;;; tibetan.el --- Support for Tibetan language
+;;; tibetan.el --- support for Tibetan language -*- coding: iso-2022-7bit; -*-
 
-;; Copyright (C) 1997 Free Software Foundation, Inc.
 ;; Copyright (C) 1997 Electrotechnical Laboratory, JAPAN.
+;; Licensed to the Free Software Foundation.
 
 ;; Keywords: multilingual, Tibetan
 
@@ -27,7 +27,9 @@
 ;; Created: Feb. 17. 1997
 
 ;; History:
-;; 1997.03.13 Modification for special signs and punctuations. 
+;; 1997.03.13 Modification for special signs and punctuations.
+
+;;; Commentary:
 
 ;;; Code:
 
@@ -38,7 +40,7 @@
 ;;; I hope I can add missing characters later.
 ;;;
 ;;;     00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
-;;;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 ;
+;;;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 ; obsolete glyphs (2123-5)
 ;;;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,
 ;;;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
 ;;;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.
 ;;;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.
 ;;;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)
 ;;;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
-;;;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
-;;;                                                     ; not atomically
-;;;                                                     ; encoded. 
+;;;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
+;;;                                                     ; atomically
+;;;                                                     ; encoded.
 ;;;     00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
 ;;;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
 ;;;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 ;
-;;;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
-;;;                                                     ; here,
-;;;                                                     ; while in Unicode
-;;;                                                     ; it is classified
-;;;                                                     ; as a vowel sign
-;;;                                                     ; (\x0f71).
-;;;
+;;;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 ;
 ;;;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
 ;;;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
 ;;;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.
-;;;                                                     ; The character \x2351
-;;;                                                     ; is not used in our
-;;;                                                     ; implementation.
+;;;
 ;;;     00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
 ;;;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
 ;;;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
 ;;;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.
 ;;;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
-;;;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 
+;;;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
 ;;;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
 ;;;                                                     ; when written on a
 ;;;     00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ; file in Tibetan
 
 
 (make-coding-system
- 'tibetan 2 ?Q
- "Coding-system used for ASCII(MSB=0) & TIBETAN(MSB=1)."
- '((ascii t) (tibetan t) nil nil
-   nil ascii-eol))
+ 'tibetan-iso-8bit 2 ?Q
+ "8-bit encoding for ASCII (MSB=0) and TIBETAN (MSB=1)."
+ '(ascii tibetan nil nil
+   nil nil)
+ '((safe-charsets ascii tibetan)
+   (post-read-conversion . tibetan-post-read-conversion)
+   (pre-write-conversion . tibetan-pre-write-conversion)))
 
-(put 'tibetan 'post-read-conversion 'tibetan-post-read-conversion)
-(put 'tibetan 'pre-write-conversion 'tibetan-pre-write-conversion)
-
-(register-input-method
- "Tibetan" '("quail-tibetan-wylie" quail-use-package "quail/tibetan"))
-(register-input-method
- "Tibetan" '("quail-tibetan-tibkey" quail-use-package "quail/tibetan"))
+(define-coding-system-alias 'tibetan 'tibetan-iso-8bit)
 
 (set-language-info-alist
- "Tibetan" '((setup-function . setup-tibetan-environment)
-            (charset . (tibetan tibetan-1-column))
-            (coding-system . (tibetan))
+ "Tibetan" '((charset tibetan tibetan-1-column)
+            (coding-system tibetan-iso-8bit)
+            (coding-priority iso-2022-7bit tibetan-iso-8bit)
+            (input-method . "tibetan-wylie")
+            (features tibet-util)
             (documentation . t)
-            (sample-text .
-"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")))
+            (sample-text
+             . (tibetan-compose-string
+                (copy-sequence
+"Tibetan (\e4\e$(7"7r'"]\e0"7"]\e1\e4"2\e0"2\e1!;\e4%P\e0"G#!"Q\e1\e4"2\e0"2\e1!;\e(B) \e$(7!4!5!5!>\e4"7\e0"7\e1\e4$P\e0"!#C"Q\e1!;\e4"Er'"S\e0"E"S\e1\e4"G\e0"G\e1!;\e4"7\e0"7\e1\e4"2r'"[\e0"2"[\e1!;\e4"Dr'"[\e0"D"[\e1\e4"#\e0"#\e1\e4"G\e0"G\e1!>\e4"Ir'"]r'"_\e0"I"]"_\e1!;\e4"9\e0"9"Q\e1!;\e4"/r'"S\e0"/"S\e1!;\e4"5\e0"5"Q\e1\e4#2x!#9r'"[\e0"2#9"[\e1!;\e4"Hx!"Rx!"Ur'"c\e0"H"A"U"c\e1!>\e(B")))))
+
+
+;; `\e$(7"A\e(B' is included in the pattern for subjoined consonants because we
+;; treat it specially in tibetan-add-components.
+;; modified by Tomabechi 1999/12/10
+;; modified by Tomabechi 2000/06/08
+;;          To allow infinite addition of vowels/modifiers
+;;          as specified in Unicode v.3
+;; \e$(7"A\e(B is removed from the class of subjoined. Tomabechi 2000/06/08
+;; (for Unicode support)
+(defconst tibetan-composable-pattern
+  "[\e$(7"!\e(B-\e$(7"J"K\e(B][\e$(7#!\e(B-\e$(7#J#K#L#M\e(B]*[\e$(7"Q"R"S\e(B-\e$(7"^"a"b"e\e(B]*[\e$(7"_"c"d"g\e(B-\e$(7"l!I!e!g\e(B]*"
+  "Regexp matching a composable sequence of Tibetan characters.")
 
+;; Register a function to compose Tibetan characters.
+(aset composition-function-table (make-char 'tibetan)
+      (list (cons tibetan-composable-pattern 'tibetan-composition-function)))
 
 ;;;
 ;;; Definitions of conversion data.
     ("s" . "\e$(7"G\e(B")
     ("h" . "\e$(7"H\e(B")
     ("H" . "\e$(7"H\e(B")
-    ("A" . "\e$(7"I\e(B")))
+    ("A" . "\e$(7"I\e(B")
+    ;; Added by Tomabechi 1999/12/10
+    ("R" . "\e$(7"K\e(B") ;; fixed form RA
+    ))
 
 
 (defconst tibetan-vowel-transcription-alist
-  '(("ai" . "\e$(7"\\e(B")
+  '(
+    ;; Composite Vowels
+    ;; Added by Tomabechi 2000/06/08
+    ("frr" . "\e$(7"X\e(B")
+    ("fll" . "\e$(7"Z\e(B")
+    ("fa" . "\e$(7"R\e(B")
+    ("fi" . "\e$(7"T\e(B")
+    ("fu" . "\e$(7"V\e(B")
+    ("fr" . "\e$(7"W\e(B")
+    ("fl" . "\e$(7"Y\e(B")
+    ("fI" . "\e$(7"b\e(B")
+    ;; Normal Vowels
+    ("ai" . "\e$(7"\\e(B")
     ("au" . "\e$(7"^\e(B")
     ("ee" . "\e$(7"\\e(B")
     ("oo" . "\e$(7"^\e(B")
     ("E" . "\e$(7"\\e(B")
     ("O" . "\e$(7"^\e(B")
     ("I" . "\e$(7"a\e(B")
-    ("M" . "\e$(7"_\e(B")
-    ("~" . "\e$(7"c\e(B")                        ; not specified in Ext.wylie
-    ("`" . "\e$(7"d\e(B")                        ; idem.
     ("," . "\e$(7"e\e(B")                        ; idem.
-    ("v" . "\e$(7"g\e(B")                        ; idem.
-    ("V" . "\e$(7"h\e(B")                        ; idem.
-    ("x" . "\e$(7"i\e(B")                        ; idem.
-    ("X" . "\e$(7"j\e(B")                        ; idem.
-    ("q" . "\e$(7"k\e(B")                        ; idem.
-    ("Q" . "\e$(7"l\e(B")                        ; idem.
-    ("_o" . "\e$(7!g\e(B")                       ; idem.
-    ("_O" . "\e$(7!e\e(B")                       ; idem.
-    ("_/" . "\e$(7!I\e(B")                       ; idem.
     ))
 
+(defconst tibetan-modifier-transcription-alist
+  '(("M" . "\e$(7"_\e(B")
+    ("~" . "\e$(7"c\e(B")
+    ("`" . "\e$(7"d\e(B")
+    ("x" . "\e$(7"i\e(B")
+    ("X" . "\e$(7"j\e(B")
+    ("v" . "\e$(7"g\e(B")
+    ("V" . "\e$(7"h\e(B")
+    ("q" . "\e$(7"k\e(B")
+    ("Q" . "\e$(7"l\e(B")
+    ("_/" . "\e$(7!I\e(B")
+    ("_o" . "\e$(7!g\e(B")
+    ("_O" . "\e$(7!e\e(B")))
+
 (defconst tibetan-precomposed-transcription-alist
   '(("phyw" . "\e$(7$G\e(B")
     ("tshw" . "\e$(7$)\e(B")
     ("brng" . "\e$(7"7%#\e(B")
     ("brj" . "\e$(7"7%$\e(B")
     ("brny" . "\e$(7"7%%\e(B")
-    ("brt" . "\e$(7"7%&\e(B")
+    ("brt" .  "\e$(7"7%&\e(B")
     ("brd" . "\e$(7"7%'\e(B")
     ("brn" . "\e$(7"7%(\e(B")
     ("brts" . "\e$(7"7%+\e(B")
     ("sn" . "\e$(7%V\e(B")
     ("sp" . "\e$(7%W\e(B")
     ("sb" . "\e$(7%X\e(B")
-    ("sm" . "\e$(7%Y\e(B")))
+    ("sm" . "\e$(7%Y\e(B"))
+  )
+
 
 (defconst tibetan-subjoined-transcription-alist
-  '(("+k"  . "\e$(7#!\e(B")
-    ("+kh" . "\e$(7#"\e(B")
-    ("+g"  . "\e$(7##\e(B")
-    ("+gh" . "\e$(7#$\e(B")
-    ("+ng" . "\e$(7#%\e(B")
-    ("+c"  . "\e$(7#&\e(B")
-    ("+ch" . "\e$(7#'\e(B")
-    ("+j"  . "\e$(7#(\e(B")
-    ("+ny"  . "\e$(7#*\e(B")
-    ("+T"  . "\e$(7#+\e(B")
-    ("+TH" . "\e$(7#,\e(B")
-    ("+D"  . "\e$(7#-\e(B")
-    ("+DH" . "\e$(7#.\e(B")
-    ("+N"  . "\e$(7#/\e(B")
-    ("+t"  . "\e$(7#0\e(B")
-    ("+th" . "\e$(7#1\e(B")
-    ("+d"  . "\e$(7#2\e(B")
-    ("+dh" . "\e$(7#3\e(B")
-    ("+n"  . "\e$(7#4\e(B")
-    ("+p"  . "\e$(7#5\e(B")
-    ("+ph" . "\e$(7#6\e(B")
-    ("+b"  . "\e$(7#7\e(B")
-    ("+bh" . "\e$(7#8\e(B")
-    ("+m"  . "\e$(7#9\e(B")
-    ("+ts" . "\e$(7#:\e(B")
-    ("+tsh" . "\e$(7#;\e(B")
-    ("+dz" . "\e$(7#<\e(B")
-    ("+dzh" . "\e$(7#=\e(B")
-    ("+w"  . "\e$(7#>\e(B")
-    ("+zh" . "\e$(7#?\e(B")
-    ("+z"  . "\e$(7#@\e(B")
-    ("+'"  . "\e$(7#A\e(B")
-    ("+y"  . "\e$(7#B\e(B")
-    ("+r"  . "\e$(7#C\e(B")
-    ("+l"  . "\e$(7#D\e(B")
-    ("+sh" . "\e$(7#E\e(B")
-    ("+SH" . "\e$(7#F\e(B")
-    ("+s"  . "\e$(7#G\e(B")
-    ("+h"  . "\e$(7#H\e(B")
-    ("+A"  . "\e$(7#I\e(B")
-    ("+kSH" . "\e$(7#J\e(B")
-    ("R"   . "\e$(7#P\e(B")))
+  (sort '(("+k"  . "\e$(7#!\e(B")
+         ("+kh" . "\e$(7#"\e(B")
+         ("+g"  . "\e$(7##\e(B")
+         ("+gh" . "\e$(7#$\e(B")
+         ("+ng" . "\e$(7#%\e(B")
+         ("+c"  . "\e$(7#&\e(B")
+         ("+ch" . "\e$(7#'\e(B")
+         ("+j"  . "\e$(7#(\e(B")
+         ("+ny"  . "\e$(7#*\e(B")
+         ("+T"  . "\e$(7#+\e(B")
+         ("+TH" . "\e$(7#,\e(B")
+         ("+D"  . "\e$(7#-\e(B")
+         ("+DH" . "\e$(7#.\e(B")
+         ("+N"  . "\e$(7#/\e(B")
+         ("+t"  . "\e$(7#0\e(B")
+         ("+th" . "\e$(7#1\e(B")
+         ("+d"  . "\e$(7#2\e(B")
+         ("+dh" . "\e$(7#3\e(B")
+         ("+n"  . "\e$(7#4\e(B")
+         ("+p"  . "\e$(7#5\e(B")
+         ("+ph" . "\e$(7#6\e(B")
+         ("+b"  . "\e$(7#7\e(B")
+         ("+bh" . "\e$(7#8\e(B")
+         ("+m"  . "\e$(7#9\e(B")
+         ("+ts" . "\e$(7#:\e(B")
+         ("+tsh" . "\e$(7#;\e(B")
+         ("+dz" . "\e$(7#<\e(B")
+         ("+dzh" . "\e$(7#=\e(B")
+         ("+w"  . "\e$(7#>\e(B")
+         ("+zh" . "\e$(7#?\e(B")
+         ("+z"  . "\e$(7#@\e(B")
+         ("+'"  . "\e$(7#A\e(B")
+         ("+y"  . "\e$(7#B\e(B")
+         ("+r"  . "\e$(7#C\e(B")
+         ("+l"  . "\e$(7#D\e(B")
+         ("+sh" . "\e$(7#E\e(B")
+         ("+SH" . "\e$(7#F\e(B")
+         ("+s"  . "\e$(7#G\e(B")
+         ("+h"  . "\e$(7#H\e(B")
+         ("+A"  . "\e$(7#I\e(B")
+         ("+kSH" . "\e$(7#J\e(B")
+         ;; Added by Tomabechi 1999/12/10
+         ("+W" . "\e$(7#K\e(B") ;; fixed form subscribed WA
+         ("+Y" . "\e$(7#L\e(B") ;; fixed form subscribed YA
+         ("+R" . "\e$(7#M\e(B") ;; fixed form subscribed RA
+         )
+       (lambda (x y) (> (length (car x)) (length (car y))))))
 
 ;;;
 ;;; alist for Tibetan base consonant <-> subjoined consonant conversion.
     ("\e$(7"G\e(B" . "\e$(7#G\e(B")
     ("\e$(7"H\e(B" . "\e$(7#H\e(B")
     ("\e$(7"I\e(B" . "\e$(7#I\e(B")
-    ("\e$(7"J\e(B" . "\e$(7#J\e(B")))
+    ("\e$(7"J\e(B" . "\e$(7#J\e(B")
+    ;; Added by Tomabechi 1999/12/10
+    ("\e$(7"K\e(B" . "\e$(7#M\e(B") ;; Fixed form RA (224B->234D)
+    ))
+
+;;; alist for Tibetan composite vowels (long i, vocalic r, etc.)
+;;; New varialble. created by Tomabechi 2000/06/08
+(defconst tibetan-composite-vowel-alist
+  '(;; LONG A
+    ;; ("\e$(7"R\e(B" . ((bc . tc) ?\e$(7"R\e(B))
+    ;; LONG I
+    ("\e$(7"T\e(B" . (?\e$(7"R\e(B (tc . bc) ?\e$(7"S\e(B))
+    ;; LONG U
+    ("\e$(7"V\e(B" . (?\e$(7"R\e(B (bc . tc) ?\e$(7"U\e(B))
+    ;; VOCALIC R
+    ("\e$(7"W\e(B" . (?\e$(7#C\e(B (tc . bc) ?\e$(7"a\e(B))
+    ;; LONG VOCALIC R
+    ("\e$(7"X\e(B" . (?\e$(7#C\e(B (bc . tc) ?\e$(7"R\e(B (tc . bc) ?\e$(7"a\e(B))
+    ;; VOCALIC L
+    ("\e$(7"Y\e(B" . (?\e$(7#D\e(B (tc . bc) ?\e$(7"a\e(B))
+    ;;\e$(7!;\e(BLONG VOCALIC L
+    ("\e$(7"Z\e(B" . (?\e$(7#D\e(B (bc . tc) ?\e$(7"R\e(B (tc . bc) ?\e$(7"a\e(B))
+    ;; LONG REVERSE I
+    ("\e$(7"b\e(B" . (?\e$(7"R\e(B (tc . bc) ?\e$(7"a\e(B))
+    ))
+
+
 
 ;;;
 ;;; alist for Tibetan consonantic components <-> precomposed glyph conversion.
 ;;; (includes some punctuation conversion rules)
 ;;;
 (defconst tibetan-precomposition-rule-alist
-  '(("\e$(7"6#B#>\e(B" . "\e$(7$G\e(B")
+  `(("\e$(7"6#B#>\e(B" . "\e$(7$G\e(B")
     ("\e$(7"##C#>\e(B" . "\e$(7$_\e(B")
     ("\e$(7";#>\e(B" . "\e$(7$)\e(B")
     ("\e$(7"C#:#>\e(B" . "\e$(7%.\e(B")
     ("\e$(7"C#9\e(B" . "\e$(7%*\e(B")
     ("\e$(7"D#!\e(B" . "\e$(7%@\e(B")
     ("\e$(7"D##\e(B" . "\e$(7%A\e(B")
+    ("\e$(7"D#4\e(B" . "\e$(7!!\e(B") ; dummy 0x2121 added 2000/06/08 for transition l -> lng
     ("\e$(7"D#&\e(B" . "\e$(7%C\e(B")
     ("\e$(7"D#(\e(B" . "\e$(7%D\e(B")
     ("\e$(7"D#0\e(B" . "\e$(7%E\e(B")
     ("\e$(7"G#4\e(B" . "\e$(7%V\e(B")
     ("\e$(7"G#5\e(B" . "\e$(7%W\e(B")
     ("\e$(7"G#7\e(B" . "\e$(7%X\e(B")
-    ("\e$(7"G#9\e(B" . "\e$(7%Y\e(B")
-    ("\e$(7!=\e(B" . "\e$(8!=\e(B")                        ; 2 col <-> 1 col
-    ("\e$(7!?\e(B" . "\e$(8!?\e(B")
-    ("\e$(7!@\e(B" . "\e$(8!@\e(B")
-    ("\e$(7!A\e(B" . "\e$(8!A\e(B")
-    ("\e$(7"`\e(B" . "\e$(8"`\e(B")
-    ("\e$(7!;\e(B" . "\e$(8!;\e(B")
-    ("\e$(7!D\e(B" . "\e$(8!D\e(B")
-    ("\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 ...
-    ("\e$(7!4!5!5\e(B" . "\e2\e$(7#RP#SP#SP#S\e1\e(B")
-    ("\e$(7!4!5\e(B" . "\e2\e$(7#RP#SP#S\e1\e(B")
-    ("\e$(7!6\e(B" . "\e2\e$(7#RP#S_!I\e1\e(B")
-    ("\e$(7!4\e(B"   . "\e2\e$(7#RP#S\e1\e(B")))
-
-(defvar tibetan-regexp
-  (let ((l (append tibetan-consonant-transcription-alist
-                  tibetan-vowel-transcription-alist
-                  tibetan-subjoined-transcription-alist))
-       temp)
-    (setq temp "\\(")
-    (setq temp (concat temp (car (car l))))
-    (setq l (cdr l))
+    ("\e$(7"G#9\e(B" . "\e$(7%Y\e(B")))
+
+(defconst tibetan-regexp
+  (let ((l (list tibetan-precomposed-transcription-alist
+                tibetan-consonant-transcription-alist
+                tibetan-vowel-transcription-alist
+                tibetan-modifier-transcription-alist
+                tibetan-subjoined-transcription-alist))
+       (separator "\\|")
+       tail pattern)
     (while l
-      (setq temp (concat temp "\\|" (car (car l))))
-      (setq l (cdr l)))
-    (concat temp "\\)$"))
-  "Regexp string to match a romanized Tibetan character component, i.e.,
-base and subjoined consonant, vowel and vowel modifier. The result of matching
-is to be used for indexing alists at conversion from a roman transcription to
-the corresponding Tibetan character.")
+      (setq tail (car l) l (cdr l))
+      (while tail
+       (setq pattern (cons separator (cons (car (car tail)) pattern))
+             tail (cdr tail))))
+    (apply 'concat (nreverse (cdr pattern))))
+  "Regexp matching a Tibetan transcription of a composable Tibetan sequence.
+The result of matching is to be used for indexing alists at conversion
+from a roman transcription to the corresponding Tibetan character.")
 
 (defvar tibetan-precomposed-regexp
   (let ((l tibetan-precomposed-transcription-alist)
@@ -557,4 +608,6 @@ This also matches some punctuation characters which need conversion.")
 (defvar tibetan-decomposed nil)
 (defvar tibetan-decomposed-temp nil)
 
-;;; language/tibetan.el ends here
+(provide 'tibetan)
+
+;;; tibetan.el ends here