(require 'quail)
(require 'tibet-util)
(defun quail-tibetan-update-translation (control-flag)
(if (numberp control-flag)
(setq quail-current-str
(buffer-substring (overlay-start quail-overlay)
(overlay-end quail-overlay))
unread-command-events
(string-to-list
(substring quail-current-key control-flag)))
(if (string-match "^-[dy]" quail-current-key)
(setq quail-current-key (substring quail-current-key 1)))
(let ((str (tibetan-transcription-to-tibetan quail-current-key)))
(if (> (aref str 0) 255)
(setq quail-current-str (tibetan-compose-string str))
(or quail-current-str
(setq quail-current-str quail-current-key)))))
control-flag)
(defconst tibetan-wylie-non-stacking-alist
'(("-d" . "$(7"2(B")
("-y" . "$(7"B(B")))
(defconst tibetan-wylie-punctuation-alist
'(("." . " ")
(":" . "$(7"`(B")
(" " . "$(7! ("/" . "$(7!=(B")
("//" . "$(7!>(B")
("////" . ["$(7!>(B $(7!>(B"])
("$" . "$(7!?(B")
("/\"" . "$(7!@(B") ("&" . "$(7!@(B")
(";" . "$(7!A(B")
("%" . "$(7!D(B")
("!" . "$(7!8(B")
("<" . "$(7!l(B")
(">" . "$(7!m(B")
("@" . "$(7"f(B")
("*" . ["$(7!4!5(B"])
("#" . ["$(7!4!5!5(B"])
("^" . "$(7!6(B")
("0" . "$(7!P(B")
("1" . "$(7!Q(B")
("2" . "$(7!R(B")
("3" . "$(7!S(B")
("4" . "$(7!T(B")
("5" . "$(7!U(B")
("6" . "$(7!V(B")
("7" . "$(7!W(B")
("8" . "$(7!X(B")
("9" . "$(7!Y(B")
("-0" . "$(7!c(B")
("-1" . "$(7!Z(B")
("-2" . "$(7![(B")
("-3" . "$(7!\(B")
("-4" . "$(7!](B")
("-5" . "$(7!^(B")
("-6" . "$(7!_(B")
("-7" . "$(7!`(B")
("-8" . "$(7!a(B")
("-9" . "$(7!b(B")
("|" . "$(7!0!1!2!3!7!9!:!B!C!E!F!G!H!I!J!K!L!M!N!O!d!f!h!j!k!n!o#O#P#Q#R#S#T#U#V#W#X#Y#Z#[#\#]#`(B")))
(quail-define-package "tibetan-wylie" "Tibetan" "TIBw" t
"Tibetan character input by Extended Wylie key assignment.
+-------------------------------------+
|$(7"!!;(B k |$(7""!;(B kh |$(7"#! |$(7"&!;(B c |$(7"'! |$(7"+!;(B T |$(7",! |$(7"0!;(B t |$(7"1! |$(7"5!;(B p |$(7"6! |$(7":!;(B ts|$(7" |$(7"?!;(B zh|$(7"@! |$(7"C!;(B r |$(7"D! |$(7"H!;(B h |$(7"I! +-------------------------------------+ $(7!D(B %
(The consonant $(7"I!;(B must be typed explicitly.)
NOT SPECIFIED IN EXT. WYLIE:
+--------------------------------------------------------+
|$(7"c(B = ~ |$(7"d(B = ` |$(7"e(B = , |$(7"f(B = @ |$(7!g(B = _o|$(7!e(B = _O|$(7!6(B = ^|
+--------------------------------------------------------+
|$(7"i(B = x |$(7"j(B = X |$(7"g(B = v |$(7"h(B = V |$(7"k(B = q |$(7"l(B = Q |
+-----------------------------------------------+
SPECIAL KEYS
+ : Consonant Stacking
\(Consonant stacking for ordinary Tibetan is done automatically)
- : No Consonant Stacking
\(To suppress automatic stacking for \"g-y\",
and to get da-drag in -r-d, -l-d .)
| : Special signs.
Tsheg is assigned to SPC. Space is assigned to period '.'.
"
nil nil nil nil nil nil nil nil
'quail-tibetan-update-translation)
(quail-install-map
(quail-map-from-table
'((base-state (tibetan-consonant-transcription-alist . svm-state)
(tibetan-precomposed-transcription-alist . svm-state)
(tibetan-wylie-non-stacking-alist . svm-state)
tibetan-subjoined-transcription-alist
tibetan-vowel-transcription-alist
tibetan-modifier-transcription-alist
tibetan-wylie-punctuation-alist)
(svm-state (tibetan-vowel-transcription-alist . vm-state)
(tibetan-subjoined-transcription-alist . svm-state)
(tibetan-modifier-transcription-alist . m-state))
(vm-state (tibetan-vowel-transcription-alist . vm-state)
(tibetan-modifier-transcription-alist . m-state))
(m-state (tibetan-modifier-transcription-alist . m-state)))))
(defconst tibetan-tibkey-to-transcription-alist
'( ("`" . "`") ("~" . "~") ("q" . "k") ("Q" ."kSH") ("w" . "kh") ("e" . "g") ("r" . "ng") ("t" . "c") ("T" . "I") ("y" . "ch") ("u" . "j") ("i" . "ny") ("o" . "t") ("O" . "T") ("p" . "th") ("P" . "TH") ("[" . "d") ("{" . "D") ("]" . "n") ("}" . "N") ("a" . "p") ("A" . "a") ("s" . "ph") ("d" . "b") ("f" . "m") ("F" . "M") ("g" . "u") ("G" . "i") ("H" . ",") ("j" . "o") ("J" . "e") ("k" . "ts") ("l" . "tsh") (";" . "dz") ("'" . "w") ("\"" . "+w") ("z" . "zh") ("x" . "z") ("c" . "'") ("C" . "+'") ("v" . "y") ("V" . "+y") ("b" . "r") ("B" . "+r") ("n" . "l") ("N" . "+l") ("m" . "sh") ("M" . "SH") ("," . "s") ("." . "h") ("/" . "A") ("hq" . "+k") ("hQ" ."+kSH") ("hw" . "+kh") ("he" . "+g") ("hr" . "+ng") ("ht" . "+c") ("hy" . "+ch") ("hu" . "+j") ("hi" . "+ny") ("ho" . "+t") ("hO" . "+T") ("hp" . "+th") ("hP" . "+TH") ("h[" . "+d") ("h{" . "+D") ("h]" . "+n") ("h}" . "+N") ("ha" . "+p") ("hs" . "+ph") ("hd" . "+b") ("hf" . "+m") ("hk" . "+ts") ("hl" . "+tsh") ("h;" . "+dz") ("h'" . "+w") ("hz" . "+zh") ("hx" . "+z") ("hc" . "+'") ("hv" . "+y") ("hb" . "+r") ("hn" . "+l") ("hm" . "+sh") ("hM" . "+SH") ("h," . "+s") ("h." . "+h") ("h/" . "+A") ("E" . "-y")
))
(defconst tibetan-consonant-tibkey-alist nil)
(defconst tibetan-subjoined-tibkey-alist nil)
(defconst tibetan-vowel-tibkey-alist nil)
(defconst tibetan-modifier-tibkey-alist nil)
(defconst tibetan-non-stacking-tibkey-alist nil)
(let ((type-list '("consonant" "subjoined" "vowel" "modifier" "non-stacking"))
(tail tibetan-tibkey-to-transcription-alist)
elt)
(while tail
(setq elt (car tail) tail (cdr tail))
(let ((types type-list)
type transcription trans-alist tibkey-alist)
(while types
(setq type (car types) types (cdr types))
(setq trans-alist
(if (string= type "non-stacking")
'tibetan-wylie-non-stacking-alist
(intern (format "tibetan-%s-transcription-alist" type)))
transcription
(cdr (assoc (cdr elt) (symbol-value trans-alist))))
(when transcription
(setq tibkey-alist (intern (format "tibetan-%s-tibkey-alist" type)))
(set tibkey-alist
(cons (cons (car elt) transcription)
(symbol-value tibkey-alist)))))
(or tibkey-alist
(error "No Tibetan transcription for %s" (cdr elt))))))
(defconst tibetan-punctuation-tibkey-alist
'(("1" . "$(7!Q(B")
("!" . "$(7!4(B") ("2" . "$(7!R(B")
("@" . "$(7!5(B") ("3" . "$(7!S(B")
("4" . "$(7!T(B")
("5" . "$(7!U(B")
("%" . "$(7!D(B")
("6" . "$(7!V(B")
("^" . "$(7!1(B")
("7" . "$(7!W(B")
("8" . "$(7!X(B")
("9" . "$(7!Y(B")
("(" . "$(7!l(B")
("0" . "$(7!P(B")
(")" . "$(7!m(B")
("+" . "$(7!A(B")
("\\" . "$(7!?(B")
("|" . "$(7!8(B")
("I" . "$(7"f(B") ; avagraha
(":" . "$(7"`(B")
(">" . " ")
("?" . "$(7!=(B")
("??" . "$(7!>(B")
("????" . ["$(7!>(B $(7!>(B"])
(" " . "$(7!;(B")
))
(defun quail-tibkey-to-transcription (tibkey)
(let ((len (length tibkey))
(i 0)
(trans-list nil))
(while (< i len)
(let ((last len)
trans)
(while (and (not trans) (> last i))
(or (setq trans (cdr (assoc (substring tibkey i last)
tibetan-tibkey-to-transcription-alist)))
(setq last (1- last))))
(if trans
(setq trans-list (cons trans trans-list)
i last)
(setq trans-list nil i len))))
(apply 'concat (nreverse trans-list))))
(defvar quail-tibkey-characters nil)
(defun quail-tibkey-update-translation (control-flag)
(if (integerp control-flag)
(setq quail-current-str
(buffer-substring (overlay-start quail-overlay)
(overlay-end quail-overlay))
unread-command-events
(string-to-list
(substring quail-current-key control-flag)))
(let ((transcription (quail-tibkey-to-transcription quail-current-key)))
(if (> (length transcription) 0)
(let ((quail-current-key transcription))
(setq control-flag
(quail-tibetan-update-translation control-flag)))
(or quail-current-str
(setq quail-current-str quail-current-key)))))
control-flag)
(quail-define-package "tibetan-tibkey" "Tibetan" "TIBt" t
"Tibetan character input by TibKey key assignment.
\(This implementation is still incomplete.
Therefore, the following key assignment is a provisional one.)
[NOT SHIFTED]
+-------------------------------------------------------+
|`$(7"d(B|1$(7!Q(B|2$(7!R(B|3$(7!S(B|4$(7!T(B|5$(7!U(B|6$(7!V(B|7$(7!W(B|8$(7!X(B|9$(7!Y(B|0$(7!P(B|- |= |\\$(7!8(B|
+-------------------------------------------------------+
|q$(7"!(B|w$(7""(B|e$(7"#(B|r$(7"%(B|t$(7"&(B|y$(7"'(B|u$(7"((B|i$(7"*(B|o$(7"0(B|p$(7"1(B|[$(7"2(B|]$(7"4(B|
+-----------------------------------------------+
|a$(7"5(B| s$(7"6(B| d$(7"7(B|f$(7"9(B|g$(7"U(B|h |j$(7"](B|k$(7":(B|l$(7";(B|;$(7"<(B|'$(7">(B|
+---------------------------------------------+
|z$(7"?(B|x$(7"@(B|c$(7"A(B|v$(7"B(B|b$(7"C(B|n$(7"D(B|m$(7"E(B|,$(7"G(B|.$(7"H(B|/$(7"I(B|
+---------------------------------------+
The key 'h' is used for consonant stacking.
[SHIFTED]
+----------------------------------------------------------+
|~$(7"c(B|!$(7!4(B|@$(7!5(B|# |$ |%$(7!D(B |^$(7!1(B|& |* |($(7!l(B|)$(7!m(B|_ |+$(7!A(B| |$(7!8(B|
+----------------------------------------------------------+
|Q$(7"J(B|W |E |R |T$(7"a(B|Y |U |I$(7"f(B|O$(7"+(B|P$(7",(B|{$(7"-(B|}$(7"/(B|
+-----------------------------------------------+
|A |S |D |F$(7"_(B|G$(7"S(B|H$(7"e(B|J$(7"[(B|K |L |:$(7"`(B|\"$(7#>(B|
+-------------------------------------------+
|Z |X |C$(7"R(B|V$(7#B(B|B$(7#C(B|N$(7#D(B|M$(7"F(B|< |> |?$(7!=(B |
+---------------------------------------+
DIFFERENCE FROM THE ORIGINAL TIBKEY:
1. Vowel 'a' should be typed explicitly by the key 'A'.
This is really inconvenient. But to make the coding
scheme clear, it is desirable to have an explicite
vowel sign for 'a'.
2. Tsheg is assigned to SPC key. You can input a space
by typing '>'.
4. To avoid the default stacking $(7$B(B and to obtain $(7"#"B(B,
type 'E' instead of 'v' (=$(7"B(B).
3. There are many characters that are not supported in the
current implementation (especially special signs). I hope
I'll complete in a future revision.
"
nil nil nil nil nil nil nil nil
'quail-tibkey-update-translation)
(quail-install-map
(quail-map-from-table
'((base-state (tibetan-consonant-tibkey-alist . s-state)
(tibetan-non-stacking-tibkey-alist . s-state)
tibetan-subjoined-tibkey-alist
tibetan-vowel-tibkey-alist
tibetan-modifier-tibkey-alist
tibetan-punctuation-tibkey-alist)
(s-state (tibetan-subjoined-tibkey-alist . s-state)
(tibetan-vowel-tibkey-alist . m-state))
(m-state tibetan-modifier-tibkey-alist))))
;;; arch-tag: 828fdb1a-733f-4c7b-b882-a19d2449ac99
;;; tibetan.el ends here