Initial revision

This commit is contained in:
Kenichi Handa
1997-04-05 02:44:02 +00:00
parent 37cdc7adb3
commit 80d75b56bd
3 changed files with 1147 additions and 0 deletions

74
lisp/language/english.el Normal file
View File

@@ -0,0 +1,74 @@
;;; english.el --- English support
;; Copyright (C) 1997 Free Software Foundation, Inc.
;; Copyright (C) 1997 Electrotechnical Laboratory, JAPAN.
;; Keywords: multibyte character, character set, syntax, category
;; This file is part of GNU Emacs.
;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.
;;; Commentary:
;; We need nothing special to support English on Emacs. Selecting
;; English as a language environment is one of the ways to reset
;; various multilingual environment to the original settting.
;;; Code
(defun setup-english-environment ()
"Reset MULE (multilingual environment) to the default status."
(interactive)
(setq-default enable-multibyte-characters t)
(if (local-variable-p 'enable-multibyte-characters)
(setq enable-multibyte-characters t))
(setq coding-category-internal 'internal
coding-category-iso-7 'iso-2022-7
coding-category-iso-8-1 'iso-8859-1
coding-category-iso-8-2 'iso-8859-1
coding-category-iso-else 'iso-8859-1
coding-category-sjis 'sjis
coding-category-big5 'big5
coding-category-binary 'no-conversion)
(set-coding-priority
'(coding-category-iso-7
coding-category-iso-8-2
coding-category-iso-8-1
coding-category-iso-else
coding-category-internal
coding-category-binary
coding-category-sjis
coding-category-big5))
(setq-default buffer-file-coding-system 'iso-8859-1)
(set-terminal-coding-system 'iso-8859-1)
(set-keyboard-coding-system 'iso-8859-1)
)
(set-language-info-alist
"English" '((setup-function . setup-english-environment)
(tutorial . "TUTORIAL")
(charset . (ascii))
(documentation . t)
(sample-text . "Hello!, Hi!, How are you?")))
(register-input-method "English"
'("quail-dvorak" quail-use-package "quail/latin"))
;;; english.el ends here

453
lisp/language/tibet-util.el Normal file
View File

@@ -0,0 +1,453 @@
;;; language/tibet-util.el -- Support for inputting Tibetan characters
;; Copyright (C) 1995 Free Software Foundation, Inc.
;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN.
;; Keywords: multilingual, Tibetan
;; This file is part of GNU Emacs.
;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.
;; Author: Toru TOMABECHI, <Toru.Tomabechi@orient.unil.ch>
;; Created: Feb. 17. 1997
;; History:
;; 1997.03.13 Modification in treatment of text properties;
;; Support for some special signs and punctuations.
;;; Code:
;;; This function makes a transcription string for
;;; re-composing a character.
;;;###autoload
(defun tibetan-tibetan-to-transcription (ch)
"Return a transcription string of Tibetan character CH"
(let ((char ch)
(l (append tibetan-consonant-transcription-alist
tibetan-vowel-transcription-alist
tibetan-precomposed-transcription-alist
tibetan-subjoined-transcription-alist))
decomp-l t-char trans str result)
(if (eq (char-charset char) 'composition)
(setq decomp-l (decompose-composite-char char 'list nil))
(setq decomp-l (cons char nil)))
(setq str "")
(while decomp-l
(setq t-char (char-to-string (car decomp-l)))
(setq trans (car (rassoc t-char l)))
(setq str (concat str trans))
(setq decomp-l (cdr decomp-l)))
(setq result str)))
;;; This function translates transcription string into a string of
;;; Tibetan characters.
;;;###autoload
(defun tibetan-transcription-to-tibetan (transcription)
"Translate Roman transcription into a sequence of Tibetan components."
(let ((trans transcription)
(lp tibetan-precomposed-transcription-alist)
(l (append tibetan-consonant-transcription-alist
tibetan-vowel-transcription-alist
tibetan-subjoined-transcription-alist))
(case-fold-search nil)
substr t-char p-str t-str result)
(setq substr "")
(setq p-str "")
(setq t-str "")
(cond ((string-match tibetan-precomposed-regexp trans)
(setq substr (substring trans (match-beginning 0) (match-end 0)))
(setq trans (substring trans (match-end 0)))
(setq t-char (cdr (assoc substr lp)))
(setq p-str t-char)))
(while (string-match tibetan-regexp trans)
(setq substr (substring trans (match-beginning 0) (match-end 0)))
(setq trans (substring trans 0 (match-beginning 0)))
(setq t-char
(cdr (assoc substr l)))
(setq t-str (concat t-char t-str)))
(setq result (concat p-str t-str))))
;;;
;;; Functions for composing Tibetan character.
;;;
;;; A Tibetan syllable is typically structured as follows:
;;;
;;; [Prefix] C [C+] V [M] [Suffix [Post suffix]]
;;;
;;; where C's are all vertically stacked, V appears below or above
;;; consonant cluster and M is always put above the C[C+]V combination.
;;; (Sanskrit visarga, though it is a vowel modifier, is considered
;;; to be a punctuation.)
;;;
;;; Here are examples of the words "bsgrubs" and "h'uM"
;;;
;;; $(7"72%q`"U1"7"G(B 2$(7"H`#A`"U0"_1(B
;;;
;;; M
;;; b s b s h
;;; g '
;;; r u
;;; u
;;;
;;; Consonants ''', 'w', 'y', 'r' take special forms when they are used
;;; as subjoined consonant. Consonant 'r' takes another special form
;;; when used as superjoined as in "rka", and so on, while it does not
;;; change its form when conjoined with subjoined ''', 'w' or 'y'
;;; as in "rwa", "rya".
;;;
;;;
;;; As a Tibetan input method should avoid using conversion key,
;;; we use a "Tibetan glyph -> transcription -> Tibetan glyph"
;;; translation at each key input.
;;;
;;; 1st stage - Check the preceding char.
;;; If the preceding char is Tibetan and composable, then
;;;
;;; 2nd stage - Translate the preceding char into transcription
;;;
;;; 3rd stage - Concatenate the transcription of preceding char
;;; and the current input key.
;;;
;;; 4th stage - Re-translate the concatenated transcription into
;;; a sequence of Tibetan letters.
;;;
;;; 5th stage - Convert leading consonants into one single precomposed char
;;; if possible.
;;;
;;; 6th stage - Compose the consonants into one composite glyph.
;;;
;;; (If the current input is a vowel sign or a vowel modifier,
;;; then it is composed with preceding char without checking
;;; except when the preceding char is a punctuation or a digit.)
;;;
;;;
;;; This function is used to avoid composition
;;; between Tibetan and non-Tibetan chars.
;;;###autoload
(defun tibetan-char-examin (ch)
"Check if char CH is Tibetan character.
Returns non-nil if CH is Tibetan. Otherwise, returns nil."
(let ((chr ch))
(if (eq (char-charset chr) 'composition)
(string-match "\\cq+" (decompose-composite-char chr))
(string-match "\\cq" (char-to-string chr)))))
;;; This is used to avoid composition between digits, signs, punctuations
;;; and word constituents.
;;;###autoload
(defun tibetan-composable-examin (ch)
"Check if Tibetan char CH is composable.
Returns t if CH is a composable char \(i.e. neither punctuation nor digit)."
(let ((chr ch)
chstr)
(if (eq (char-charset chr) 'composition)
(setq chstr (decompose-composite-char chr))
(setq chstr (char-to-string chr)))
(not (string-match "[$(7!1(B-$(7!o"f$(8!;!=!?!@!A!D"`(B]" chstr))))
;;; This checks if a character to be composed contains already
;;; one or more vowels / vowel modifiers. If the character contains
;;; them, then no more consonant should be added.
;;;###autoload
(defun tibetan-complete-char-examin (ch)
"Check if composite char CH contains one or more vowel/vowel modifiers.
Returns non-nil, if CH contains vowel/vowel modifiers."
(let ((chr ch)
chstr)
(if (eq (char-charset chr) 'composition)
(setq chstr (decompose-composite-char chr))
(setq chstr (char-to-string chr)))
(string-match "[$(7!g!e"Q(B-$(7"^"_(B-$(7"l(B]" chstr)))
;;; This function makes a composite character consisting of two characters
;;; vertically stacked.
;;;###autoload
(defun tibetan-vertical-stacking (first second upward)
"Return a vertically stacked composite char consisting of FIRST and SECOND.
If UPWARD is non-nil, then SECOND is put above FIRST."
(if upward
(compose-chars first '(tc . bc) second)
(compose-chars first '(bc . tc) second)))
;;; This function makes a composite char from a string.
;;; Note that this function returns a string, not a char.
;;;###autoload
(defun tibetan-compose-string (str)
"Compose a sequence of Tibetan character components into a composite character.
Returns a string containing a composite character."
(let ((t-str str)
f-str s-str f-ch s-ch rest composed result)
;;Make sure no redundant vowel sign is present.
(if (string-match
"^\\(.+\\)\\($(7"Q(B\\)\\([$(7!I!g!e"Q(B-$(7"^"_(B-$(7"l(B]\\)" t-str)
(setq t-str (concat
(match-string 1 t-str)
(match-string 3 t-str))))
(if (string-match
"^\\(.+\\)\\([$(7!I!g!e"Q(B-$(7"^"_(B-$(7"l(B]\\)\\($(7"Q(B\\)" t-str)
(setq t-str (concat
(match-string 1 t-str)
(match-string 2 t-str))))
;;Start conversion.
(setq result "")
;; Consecutive base/precomposed consonants are reduced to the last one.
(while (string-match "^\\([$(7"!(B-$(7"J$!(B-$(7%u(B]\\)\\([$(7"!(B-$(7"@"B(B-$(7"J$!(B-$(7%u(B].*\\)" t-str)
(setq result (concat result (match-string 1 t-str)))
(setq t-str (match-string 2 t-str)))
;; Vowel/vowel modifier, subjoined consonants are added one by one
;; to the preceding element.
(while
(string-match "^\\(.\\)\\([$(7"A#!(B-$(7#J!I!g!e"Q(B-$(7"^"_(B-$(7"l(B]\\)\\(.*\\)" t-str)
(setq f-str (match-string 1 t-str))
(setq f-ch (string-to-char f-str))
(setq s-str (match-string 2 t-str))
;;Special treatment for 'a chung.
;;If 'a follows a consonant, then turned into its subjoined form.
(if (and (string-match "$(7"A(B" s-str)
(not (tibetan-complete-char-examin f-ch)))
(setq s-str "$(7#A(B"))
(setq s-ch (string-to-char s-str))
(setq rest (match-string 3 t-str))
(cond ((string-match "\\c2" s-str);; upper vowel sign
(setq composed
(tibetan-vertical-stacking f-ch s-ch t)))
((string-match "\\c3" s-str);; lower vowel sign
(setq composed
(tibetan-vertical-stacking f-ch s-ch nil)))
;;Automatic conversion of ra-mgo (superscribed r).
;;'r' is converted if followed by a subjoined consonant
;;other than w, ', y, r.
((and (string-match "$(7"C(B" f-str)
(not (string-match "[$(7#>#A#B#C(B]" s-str)))
(setq f-ch ?$(7#P(B)
(setq composed
(tibetan-vertical-stacking f-ch s-ch nil)))
((not (tibetan-complete-char-examin f-ch))
;;Initial base consonant is tranformed, if followed by
;;a subjoined consonant, except when it is followed
;;by a subscribed 'a.
(if (and (string-match "[$(7"!(B-$(7"="?"@"D(B-$(7"J(B]" f-str)
(not (string-match "$(7#A(B" s-str)))
(setq f-ch
(string-to-char
(cdr (assoc f-str tibetan-base-to-subjoined-alist)))))
(setq composed
(tibetan-vertical-stacking f-ch s-ch nil)))
(t
(setq composed s-str)
(setq result (concat result f-str))))
(setq t-str (concat composed rest)))
(setq result (concat result t-str))))
;;; quail <-> conversion interface.
(defun tibetan-composition (pc key)
"Interface to quail input method.
Takes two arguments: char PC and string KEY, where PC is the preceding
character to be composed with current input KEY.
Returns a string which is the result of composition."
(let (trans cur-ch t-str result)
;; Make a tibetan character corresponding to current input key.
(setq cur-ch (tibetan-transcription-to-tibetan key))
;; Check if the preceding character is Tibetan and composable.
(cond ((and (tibetan-char-examin pc)
(tibetan-composable-examin pc))
;;If Tibetan char corresponding to the current input key exists,
(cond (cur-ch
;; Then,
;; Convert the preceding character into transcription,
;; and concatenate it with the current input key,
(setq trans (tibetan-tibetan-to-transcription pc))
(setq trans (concat trans key))
;; Concatenated transcription is converted to
;; a sequence of Tibetan characters,
(setq t-str (tibetan-transcription-to-tibetan trans))
;; And it is composed into a composite character.
(setq result (tibetan-compose-string t-str)))
;; Else,
(t
;; Simply concatenate the preceding character and
;; the current input key.
(setq result (char-to-string pc))
(setq result (concat result key)))))
;; If the preceding char is not Tibetan or not composable,
(t
;; pc = 0 means the point is at the beginning of buffer.
(if (not (eq pc 0))
(setq result (char-to-string pc)))
(if cur-ch
(setq result (concat result cur-ch))
(setq result (concat result key))))
)))
;;;###autoload
(defun tibetan-decompose-region (beg end)
"Decompose Tibetan characters in the region BEG END into their components.
Components are: base and subjoined consonants, vowel signs, vowel modifiers.
One column punctuations are converted to their 2 column equivalents."
(interactive "r")
(let (ch-str ch-beg ch-end)
(save-excursion
(save-restriction
(narrow-to-region beg end)
(goto-char (point-min))
;; \\cq = Tibetan character
(while (re-search-forward "\\cq" nil t)
(setq ch-str (buffer-substring-no-properties
(match-beginning 0) (match-end 0)))
;; Save the points. Maybe, using save-match-data is preferable.
;; But in order not to lose the trace(because the body is too long),
;; we save the points in variables.
(setq ch-beg (match-beginning 0))
(setq ch-end (match-end 0))
;; Here starts the decomposition.
(cond
;; 1 column punctuations -> 2 column equivalent
((string-match "[$(8!D!;!=!?!@!A"`(B]" ch-str)
(setq ch-str
(car (rassoc ch-str tibetan-precomposition-rule-alist))))
;; Decomposition of composite character.
((eq (char-charset (string-to-char ch-str)) 'composition)
;; Make a string which consists of a sequence of
;; components.
(setq ch-str (decompose-composite-char (string-to-char ch-str)))
;; Converts nyi zla into base elements.
(cond ((string= ch-str "$(7#R#S#S#S(B")
(setq ch-str "$(7!4!5!5(B"))
((string= ch-str "$(7#R#S#S(B")
(setq ch-str "$(7!4!5(B"))
((string= ch-str "$(7#R#S!I(B")
(setq ch-str "$(7!6(B"))
((string= ch-str "$(7#R#S(B")
(setq ch-str "$(7!4(B")))))
;; If the sequence of components starts with a subjoined consonants,
(if (string-match "^\\([$(7#!(B-$(7#J(B]\\)\\(.*\\)$" ch-str)
;; then the first components is converted to its base form.
(setq ch-str
(concat (car (rassoc (match-string 1 ch-str)
tibetan-base-to-subjoined-alist))
(match-string 2 ch-str))))
;; If the sequence of components starts with a precomposed character,
(if (string-match "^\\([$(7$!(B-$(7%u(B]\\)\\(.*\\)$" ch-str)
;; then it is converted into a sequence of components.
(setq ch-str
(concat (car (rassoc (match-string 1 ch-str)
tibetan-precomposition-rule-alist))
(match-string 2 ch-str))))
;; Special treatment for superscribed r.
(if (string-match "^$(7#P(B\\(.*\\)$" ch-str)
(setq ch-str (concat "$(7"C(B" (match-string 1 ch-str))))
;; Finally, the result of decomposition is inserted, and
;; the composite character is deleted.
(insert-and-inherit ch-str)
(delete-region ch-beg ch-end))))))
;;;###autoload
(defun tibetan-compose-region (beg end)
"Make composite chars from Tibetan character components in the region BEG END.
Two column punctuations are converted to their 1 column equivalents."
(interactive "r")
(let (str result)
(save-excursion
(save-restriction
(narrow-to-region beg end)
(goto-char (point-min))
;; First, sequence of components which has a precomposed equivalent
;; is converted.
(while (re-search-forward
tibetan-precomposition-rule-regexp nil t)
(setq str (buffer-substring-no-properties
(match-beginning 0) (match-end 0)))
(save-match-data
(insert-and-inherit
(cdr (assoc str tibetan-precomposition-rule-alist))))
(delete-region (match-beginning 0) (match-end 0)))
(goto-char (point-min))
;; Then, composable elements are put into a composite character.
(while (re-search-forward
"[$(7"!(B-$(7"J$!(B-$(7%u(B]+[$(7#!(B-$(7#J!I!g!e"Q(B-$(7"^"_(B-$(7"l(B]+"
nil t)
(setq str (buffer-substring-no-properties
(match-beginning 0) (match-end 0)))
(save-match-data
(setq result (tibetan-compose-string str))
(insert-and-inherit result))
(delete-region (match-beginning 0) (match-end 0)))))))
;;;
;;; This variable is used to avoid repeated decomposition.
;;;
(setq-default tibetan-decomposed nil)
;;;###autoload
(defun tibetan-decompose-buffer ()
"Decomposes Tibetan characters in the buffer into their components.
See also docstring of the function tibetan-decompose-region."
(interactive)
(make-local-variable 'tibetan-decomposed)
(cond ((not tibetan-decomposed)
(tibetan-decompose-region (point-min) (point-max))
(setq tibetan-decomposed t))))
;;;###autoload
(defun tibetan-compose-buffer ()
"Composes Tibetan character components in the buffer.
See also docstring of the function tibetan-compose-region."
(interactive)
(make-local-variable 'tibetan-decomposed)
(tibetan-compose-region (point-min) (point-max))
(setq tibetan-decomposed nil))
;;;###autoload
(defun tibetan-post-read-conversion (len)
(save-excursion
(save-restriction
(let ((buffer-modified-p (buffer-modified-p)))
(narrow-to-region (point) (+ (point) len))
(tibetan-compose-region (point-min) (point-max))
(set-buffer-modified-p buffer-modified-p)
(point-max))))
(make-local-variable 'tibetan-decomposed)
(setq tibetan-decomposed nil))
;;;###autoload
(defun tibetan-pre-write-conversion (from to)
(setq tibetan-decomposed-temp tibetan-decomposed)
(let ((old-buf (current-buffer))
(work-buf (get-buffer-create " *tibetan-work*")))
(set-buffer work-buf)
(erase-buffer)
(insert-buffer-substring old-buf from to)
(if (not tibetan-decomposed-temp)
(tibetan-decompose-region (point-min) (point-max)))))
(provide 'language/tibet-util)
;;; language/tibet-util.el ends here.

620
lisp/language/tibetan.el Normal file
View File

@@ -0,0 +1,620 @@
;;; tibetan.el --- Support for Tibetan language
;; Copyright (C) 1997 Free Software Foundation, Inc.
;; Copyright (C) 1997 Electrotechnical Laboratory, JAPAN.
;; Keywords: multilingual, Tibetan
;; This file is part of GNU Emacs.
;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.
;; Author: Toru TOMABECHI, <Toru.Tomabechi@orient.unil.ch>
;; Created: Feb. 17. 1997
;; History:
;; 1997.03.13 Modification for special signs and punctuations.
;;; Code:
(define-category ?q "Tibetan")
(modify-category-entry (make-char 'tibetan) ?q)
(modify-category-entry (make-char 'tibetan-1-column) ?q)
(let ((row 33))
(while (< row 38)
(modify-category-entry (make-char 'tibetan row) ?q)
(setq row (1+ row))))
(modify-category-entry (make-char 'tibetan-1-column 33) ?q)
(let ((deflist '(;; chars syntax category
("$(7"!(B-$(7"J(B" "w" ?0) ; consonant
("$(7#!(B-$(7#J#P#Q(B" "w" ?0) ;
("$(7$!(B-$(7$e(B" "w" ?0) ;
("$(7%!(B-$(7%u(B" "w" ?0) ;
("$(7"S"["\"]"^"a(B" "w" ?2) ; upper vowel
("$(7"_"c"d"g"h"i"j"k"l(B" "w" ?2) ; upper modifier
("$(7!I"Q"U"e!e!g(B" "w" ?3) ; lowel vowel/modifier
("$(7!P(B-$(7!Y!Z(B-$(7!c(B" "w" ?6) ; digit
("$(7!;!=(B-$(7!B!D"`(B" "." ?|) ; line-break char
("$(8!;!=!?!@!A!D"`(B" "." ?|) ;
("$(7!8!;!=(B-$(7!B!D"`!m!d(B" "." ?>) ; prohibition
("$(8!;!=!?!@!A!D"`(B" "." ?>) ;
("$(7!0(B-$(7!:!l#R#S"f(B" "." ?<) ; prohibition
("$(7!C!E(B-$(7!H!J(B-$(7!O!f!h(B-$(7!k!n!o(B" "." ?q) ; others
))
elm chars len syntax category to ch i)
(while deflist
(setq elm (car deflist))
(setq chars (car elm)
len (length chars)
syntax (nth 1 elm)
category (nth 2 elm)
i 0)
(while (< i len)
(if (= (aref chars i) ?-)
(setq i (1+ i)
to (sref chars i))
(setq ch (sref chars i)
to ch))
(while (<= ch to)
(modify-syntax-entry ch syntax)
(modify-category-entry ch category)
(setq ch (1+ ch)))
(setq i (+ i (char-bytes to))))
(setq deflist (cdr deflist))))
;;; Tibetan Character set.
;;; \x2130 -- \x234a is a subset of Unicode v.2 \x0f00 - \x0fb9
;;; with a slight modification. And there are some subjoined
;;; consonants which are not specified in Unicode.
;;; 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 // $(7!!(B $(7!"(B $(7!#(B $(7!$(B $(7!%(B $(7!&(B $(7!'(B $(7!((B $(7!)(B $(7!*(B $(7!+(B $(7!,(B $(7!-(B $(7!.(B $(7!/(B ;
;;;2130 $(7!0(B $(7!1(B $(7!2(B $(7!3(B $(7!4(B $(7!5(B $(7!6(B $(7!7(B $(7!8(B $(7!9(B $(7!:(B $(7!;(B $(7!<(B $(7!=(B $(7!>(B $(7!?(B ; Punctuations,
;;;2140 $(7!@(B $(7!A(B $(7!B(B $(7!C(B $(7!D(B $(7!E(B $(7!F(B $(7!G(B $(7!H(B $(7!I(B $(7!J(B $(7!K(B $(7!L(B $(7!M(B $(7!N(B $(7!O(B ; Digits and
;;;2150 $(7!P(B $(7!Q(B $(7!R(B $(7!S(B $(7!T(B $(7!U(B $(7!V(B $(7!W(B $(7!X(B $(7!Y(B $(7!Z(B $(7![(B $(7!\(B $(7!](B $(7!^(B $(7!_(B ; Special signs.
;;;2160 $(7!`(B $(7!a(B $(7!b(B $(7!c(B $(7!d(B $(7!e(B $(7!f(B $(7!g(B $(7!h(B $(7!i(B $(7!j(B $(7!k(B $(7!l(B $(7!m(B $(7!n(B $(7!o(B ;
;;;2170 $(7!p(B $(7!q(B $(7!r(B $(7!s(B $(7!t(B $(7!u(B $(7!v(B $(7!w(B $(7!x(B $(7!y(B $(7!z(B $(7!{(B $(7!|(B $(7!}(B $(7!~(B // ;
;;;
;;; 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
;;;2220 // $(7"!(B $(7""(B $(7"#(B $(7"$(B $(7"%(B $(7"&(B $(7"'(B $(7"((B $(7")(B $(7"*(B $(7"+(B $(7",(B $(7"-(B $(7".(B $(7"/(B ; Base consonants
;;;2230 $(7"0(B $(7"1(B $(7"2(B $(7"3(B $(7"4(B $(7"5(B $(7"6(B $(7"7(B $(7"8(B $(7"9(B $(7":(B $(7";(B $(7"<(B $(7"=(B $(7">(B $(7"?(B ; and
;;;2240 $(7"@(B $(7"A(B $(7"B(B $(7"C(B $(7"D(B $(7"E(B $(7"F(B $(7"G(B $(7"H(B $(7"I(B $(7"J(B $(7"K(B $(7"L(B $(7"M(B $(7"N(B $(7"O(B ; Vowel signs.
;;;2250 $(7"P(B $(7"Q(B $(7"R(B $(7"S(B $(7"T(B $(7"U(B $(7"V(B $(7"W(B $(7"X(B $(7"Y(B $(7"Z(B $(7"[(B $(7"\(B $(7"](B $(7"^(B $(7"_(B ; (\x2251 = vowel a)
;;;2260 $(7"`(B $(7"a(B $(7"b(B $(7"c(B $(7"d(B $(7"e(B $(7"f(B $(7"g(B $(7"h(B $(7"i(B $(7"j(B $(7"k(B $(7"l(B $(7"m(B $(7"n(B $(7"o(B ; Long vowels and
;;;2270 $(7"p(B $(7"q(B $(7"r(B $(7"s(B $(7"t(B $(7"u(B $(7"v(B $(7"w(B $(7"x(B $(7"y(B $(7"z(B $(7"{(B $(7"|(B $(7"}(B $(7"~(B // ; vocalic r, l are
;;; ; not atomically
;;; ; encoded.
;;; 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
;;;2320 // $(7#!(B $(7#"(B $(7##(B $(7#$(B $(7#%(B $(7#&(B $(7#'(B $(7#((B $(7#)(B $(7#*(B $(7#+(B $(7#,(B $(7#-(B $(7#.(B $(7#/(B ; Subjoined consonants
;;;2330 $(7#0(B $(7#1(B $(7#2(B $(7#3(B $(7#4(B $(7#5(B $(7#6(B $(7#7(B $(7#8(B $(7#9(B $(7#:(B $(7#;(B $(7#<(B $(7#=(B $(7#>(B $(7#?(B ;
;;;2340 $(7#@(B $(7#A(B $(7#B(B $(7#C(B $(7#D(B $(7#E(B $(7#F(B $(7#G(B $(7#H(B $(7#I(B $(7#J(B $(7#K(B $(7#L(B $(7#M(B $(7#N(B $(7#O(B ; 'a chung (\x2341)is
;;; ; here,
;;; ; while in Unicode
;;; ; it is classified
;;; ; as a vowel sign
;;; ; (\x0f71).
;;;
;;;2350 $(7#P(B $(7#Q(B $(7#R(B $(7#S(B $(7#T(B $(7#U(B $(7#V(B $(7#W(B $(7#X(B $(7#Y(B $(7#Z(B $(7#[(B $(7#\(B $(7#](B $(7#^(B $(7#_(B ; Hereafter, the chars
;;;2360 $(7#`(B $(7#a(B $(7#b(B $(7#c(B $(7#d(B $(7#e(B $(7#f(B $(7#g(B $(7#h(B $(7#i(B $(7#j(B $(7#k(B $(7#l(B $(7#m(B $(7#n(B $(7#o(B ; are not specified
;;;2370 $(7#p(B $(7#q(B $(7#r(B $(7#s(B $(7#t(B $(7#u(B $(7#v(B $(7#w(B $(7#x(B $(7#y(B $(7#z(B $(7#{(B $(7#|(B $(7#}(B $(7#~(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 // $(7$!(B $(7$"(B $(7$#(B $(7$$(B $(7$%(B $(7$&(B $(7$'(B $(7$((B $(7$)(B $(7$*(B $(7$+(B $(7$,(B $(7$-(B $(7$.(B $(7$/(B ; Precomposed
;;;2430 $(7$0(B $(7$1(B $(7$2(B $(7$3(B $(7$4(B $(7$5(B $(7$6(B $(7$7(B $(7$8(B $(7$9(B $(7$:(B $(7$;(B $(7$<(B $(7$=(B $(7$>(B $(7$?(B ; consonants for
;;;2440 $(7$@(B $(7$A(B $(7$B(B $(7$C(B $(7$D(B $(7$E(B $(7$F(B $(7$G(B $(7$H(B $(7$I(B $(7$J(B $(7$K(B $(7$L(B $(7$M(B $(7$N(B $(7$O(B ; ordinary Tibetan.
;;;2450 $(7$P(B $(7$Q(B $(7$R(B $(7$S(B $(7$T(B $(7$U(B $(7$V(B $(7$W(B $(7$X(B $(7$Y(B $(7$Z(B $(7$[(B $(7$\(B $(7$](B $(7$^(B $(7$_(B ; They are decomposed
;;;2460 $(7$`(B $(7$a(B $(7$b(B $(7$c(B $(7$d(B $(7$e(B $(7$f(B $(7$g(B $(7$h(B $(7$i(B $(7$j(B $(7$k(B $(7$l(B $(7$m(B $(7$n(B $(7$o(B ; into base and
;;;2470 $(7$p(B $(7$q(B $(7$r(B $(7$s(B $(7$t(B $(7$u(B $(7$v(B $(7$w(B $(7$x(B $(7$y(B $(7$z(B $(7${(B $(7$|(B $(7$}(B $(7$~(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
;;;2520 // $(7%!(B $(7%"(B $(7%#(B $(7%$(B $(7%%(B $(7%&(B $(7%'(B $(7%((B $(7%)(B $(7%*(B $(7%+(B $(7%,(B $(7%-(B $(7%.(B $(7%/(B ; coding system.
;;;2530 $(7%0(B $(7%1(B $(7%2(B $(7%3(B $(7%4(B $(7%5(B $(7%6(B $(7%7(B $(7%8(B $(7%9(B $(7%:(B $(7%;(B $(7%<(B $(7%=(B $(7%>(B $(7%?(B ;
;;;2540 $(7%@(B $(7%A(B $(7%B(B $(7%C(B $(7%D(B $(7%E(B $(7%F(B $(7%G(B $(7%H(B $(7%I(B $(7%J(B $(7%K(B $(7%L(B $(7%M(B $(7%N(B $(7%O(B ;
;;;2550 $(7%P(B $(7%Q(B $(7%R(B $(7%S(B $(7%T(B $(7%U(B $(7%V(B $(7%W(B $(7%X(B $(7%Y(B $(7%Z(B $(7%[(B $(7%\(B $(7%](B $(7%^(B $(7%_(B ;
;;;2560 $(7%`(B $(7%a(B $(7%b(B $(7%c(B $(7%d(B $(7%e(B $(7%f(B $(7%g(B $(7%h(B $(7%i(B $(7%j(B $(7%k(B $(7%l(B $(7%m(B $(7%n(B $(7%o(B ;
;;;2570 $(7%p(B $(7%q(B $(7%r(B $(7%s(B $(7%t(B $(7%u(B $(7%v(B $(7%w(B $(7%x(B $(7%y(B $(7%z(B $(7%{(B $(7%|(B $(7%}(B $(7%~(B // ;
;;;
(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))
(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"))
(defun setup-tibetan-environment ()
(setq coding-category-iso-7 'tibetan)
(set-coding-priority
'(coding-category-iso-7
coding-category-iso-8-1))
(setq-default buffer-file-coding-system 'iso-2022-7)
(setq default-input-method '("Tibetan" . "quail-tibetan-wylie")))
(set-language-info-alist
"Tibetan" '((setup-function . setup-tibetan-environment)
(charset . (tibetan tibetan-1-column))
(coding-system . (tibetan))
(documentation . t)
(sample-text .
"Tibetan (2$(7"70"]1"2$(8!;2$(7%P`"Q1"2$(8!;(B) 2$(7#RP#SP#S1!>"72$P`"Q1$(8!;2$(7"E0"S1"G$(8!;$(7"72"20"[1$(8!;2$(7"D0"[1"#"G!>2"I0"]0"_1$(8!;2$(7"9`"Q1$(8!;2$(7"/0"S1$(8!;2$(7"5`"Q12#2`#90"[1$(8!;2$(7"H`#A`"U0"c1!>(B")))
;;;
;;; Definitions of conversion data.
;;;
;;; alists for tibetan char <-> transcription conversion
;;; longer transcription should come first
(defconst tibetan-consonant-transcription-alist
'(("tsh" . "$(7";(B")
("dzh" . "$(7"=(B")
("kSH" . "$(7"J(B")
("kh" . "$(7""(B")
("gh" . "$(7"$(B")
("ng" . "$(7"%(B")
("ch" . "$(7"'(B")
("ny" . "$(7"*(B")
("TH" . "$(7",(B")
("DH" . "$(7".(B")
("th" . "$(7"1(B")
("dh" . "$(7"3(B")
("ph" . "$(7"6(B")
("bh" . "$(7"8(B")
("ts" . "$(7":(B")
("dz" . "$(7"<(B")
("zh" . "$(7"?(B")
("sh" . "$(7"E(B")
("SH" . "$(7"F(B")
("k" . "$(7"!(B")
("g" . "$(7"#(B")
("c" . "$(7"&(B")
("j" . "$(7"((B")
("T" . "$(7"+(B")
("D" . "$(7"-(B")
("N" . "$(7"/(B")
("t" . "$(7"0(B")
("d" . "$(7"2(B")
("n" . "$(7"4(B")
("p" . "$(7"5(B")
("b" . "$(7"7(B")
("m" . "$(7"9(B")
("w" . "$(7">(B")
("z" . "$(7"@(B")
("'" . "$(7"A(B")
("y" . "$(7"B(B")
("r" . "$(7"C(B")
("l" . "$(7"D(B")
("s" . "$(7"G(B")
("h" . "$(7"H(B")
("H" . "$(7"H(B")
("A" . "$(7"I(B")))
(defconst tibetan-vowel-transcription-alist
'(("ai" . "$(7"\(B")
("au" . "$(7"^(B")
("ee" . "$(7"\(B")
("oo" . "$(7"^(B")
("a" . "$(7"Q(B") ; invisible vowel sign (\x2251)
("i" . "$(7"S(B")
("u" . "$(7"U(B")
("e" . "$(7"[(B")
("o" . "$(7"](B")
("E" . "$(7"\(B")
("O" . "$(7"^(B")
("I" . "$(7"a(B")
("M" . "$(7"_(B")
("~" . "$(7"c(B") ; not specified in Ext.wylie
("`" . "$(7"d(B") ; idem.
("," . "$(7"e(B") ; idem.
("v" . "$(7"g(B") ; idem.
("V" . "$(7"h(B") ; idem.
("x" . "$(7"i(B") ; idem.
("X" . "$(7"j(B") ; idem.
("q" . "$(7"k(B") ; idem.
("Q" . "$(7"l(B") ; idem.
("_o" . "$(7!g(B") ; idem.
("_O" . "$(7!e(B") ; idem.
("_/" . "$(7!I(B") ; idem.
))
(defconst tibetan-precomposed-transcription-alist
'(("phyw" . "$(7$G(B")
("tshw" . "$(7$)(B")
("rtsw" . "$(7%.(B")
("khw" . "$(7$"(B")
("nyw" . "$(7$%(B")
("tsw" . "$(7$((B")
("zhw" . "$(7$*(B")
("shw" . "$(7$.(B")
("khy" . "$(7$A(B")
("phy" . "$(7$D(B")
("khr" . "$(7$Q(B")
("thr" . "$(7$T(B")
("phr" . "$(7$W(B")
("shr" . "$(7$Z(B")
("dzr" . "$(7$^(B")
("grw" . "$(7$_(B")
("rng" . "$(7%#(B")
("rny" . "$(7%%(B")
("rts" . "$(7%+(B")
("rdz" . "$(7%,(B")
("rgw" . "$(7%-(B")
("rky" . "$(7%0(B")
("rgy" . "$(7%1(B")
("rmy" . "$(7%2(B")
("lng" . "$(7%B(B")
("sng" . "$(7%R(B")
("sny" . "$(7%S(B")
("sts" . "$(7%Z(B")
("sky" . "$(7%`(B")
("sgy" . "$(7%a(B")
("spy" . "$(7%b(B")
("sby" . "$(7%c(B")
("smy" . "$(7%d(B")
("skr" . "$(7%p(B")
("sgr" . "$(7%q(B")
("snr" . "$(7%r(B")
("spr" . "$(7%s(B")
("sbr" . "$(7%t(B")
("smr" . "$(7%u(B")
("kw" . "$(7$!(B")
("gw" . "$(7$#(B")
("cw" . "$(7$$(B")
("tw" . "$(7$&(B")
("dw" . "$(7$'(B")
("zw" . "$(7$+(B")
("rw" . "$(7$,(B")
("lw" . "$(7$-(B")
("sw" . "$(7$/(B")
("hw" . "$(7$0(B")
("ky" . "$(7$@(B")
("gy" . "$(7$B(B")
("py" . "$(7$C(B")
("by" . "$(7$E(B")
("my" . "$(7$F(B")
("kr" . "$(7$P(B")
("gr" . "$(7$R(B")
("tr" . "$(7$S(B")
("dr" . "$(7$U(B")
("pr" . "$(7$V(B")
("brk" . "$(7"7%!(B")
("brg" . "$(7"7%"(B")
("brng" . "$(7"7%#(B")
("brj" . "$(7"7%$(B")
("brny" . "$(7"7%%(B")
("brt" . "$(7"7%&(B")
("brd" . "$(7"7%'(B")
("brn" . "$(7"7%((B")
("brts" . "$(7"7%+(B")
("brdz" . "$(7"7%,(B")
("brl" . "$(7"7$d(B")
("br" . "$(7$X(B")
("mr" . "$(7$Y(B")
("sr" . "$(7$[(B")
("hr" . "$(7$\(B")
("jr" . "$(7$](B")
("kl" . "$(7$`(B")
("gl" . "$(7$a(B")
("blt" . "$(7"7%E(B")
("bld" . "$(7"7%F(B")
("bl" . "$(7$b(B")
("zl" . "$(7$c(B")
("rl" . "$(7$d(B")
("sl" . "$(7$e(B")
("rk" . "$(7%!(B")
("rg" . "$(7%"(B")
("rj" . "$(7%$(B")
("rt" . "$(7%&(B")
("rd" . "$(7%'(B")
("rn" . "$(7%((B")
("rb" . "$(7%)(B")
("rm" . "$(7%*(B")
("lk" . "$(7%@(B")
("lg" . "$(7%A(B")
("lc" . "$(7%C(B")
("lj" . "$(7%D(B")
("lt" . "$(7%E(B")
("ld" . "$(7%F(B")
("ln" . "$(7!!(B") ; dummy \x2121
("lp" . "$(7%G(B")
("lb" . "$(7%H(B")
("lh" . "$(7%I(B")
("sk" . "$(7%P(B")
("sg" . "$(7%Q(B")
("st" . "$(7%T(B")
("sd" . "$(7%U(B")
("sn" . "$(7%V(B")
("sp" . "$(7%W(B")
("sb" . "$(7%X(B")
("sm" . "$(7%Y(B")))
(defconst tibetan-subjoined-transcription-alist
'(("+k" . "$(7#!(B")
("+kh" . "$(7#"(B")
("+g" . "$(7##(B")
("+gh" . "$(7#$(B")
("+ng" . "$(7#%(B")
("+c" . "$(7#&(B")
("+ch" . "$(7#'(B")
("+j" . "$(7#((B")
("+ny" . "$(7#*(B")
("+T" . "$(7#+(B")
("+TH" . "$(7#,(B")
("+D" . "$(7#-(B")
("+DH" . "$(7#.(B")
("+N" . "$(7#/(B")
("+t" . "$(7#0(B")
("+th" . "$(7#1(B")
("+d" . "$(7#2(B")
("+dh" . "$(7#3(B")
("+n" . "$(7#4(B")
("+p" . "$(7#5(B")
("+ph" . "$(7#6(B")
("+b" . "$(7#7(B")
("+bh" . "$(7#8(B")
("+m" . "$(7#9(B")
("+ts" . "$(7#:(B")
("+tsh" . "$(7#;(B")
("+dz" . "$(7#<(B")
("+dzh" . "$(7#=(B")
("+w" . "$(7#>(B")
("+zh" . "$(7#?(B")
("+z" . "$(7#@(B")
("+'" . "$(7#A(B")
("+y" . "$(7#B(B")
("+r" . "$(7#C(B")
("+l" . "$(7#D(B")
("+sh" . "$(7#E(B")
("+SH" . "$(7#F(B")
("+s" . "$(7#G(B")
("+h" . "$(7#H(B")
("+A" . "$(7#I(B")
("+kSH" . "$(7#J(B")
("R" . "$(7#P(B")))
;;;
;;; alist for Tibetan base consonant <-> subjoined consonant conversion.
;;;
(defconst tibetan-base-to-subjoined-alist
'(("$(7"!(B" . "$(7#!(B")
("$(7""(B" . "$(7#"(B")
("$(7"#(B" . "$(7##(B")
("$(7"$(B" . "$(7#$(B")
("$(7"%(B" . "$(7#%(B")
("$(7"&(B" . "$(7#&(B")
("$(7"'(B" . "$(7#'(B")
("$(7"((B" . "$(7#((B")
("$(7"*(B" . "$(7#*(B")
("$(7"+(B" . "$(7#+(B")
("$(7",(B" . "$(7#,(B")
("$(7"-(B" . "$(7#-(B")
("$(7".(B" . "$(7#.(B")
("$(7"/(B" . "$(7#/(B")
("$(7"0(B" . "$(7#0(B")
("$(7"1(B" . "$(7#1(B")
("$(7"2(B" . "$(7#2(B")
("$(7"3(B" . "$(7#3(B")
("$(7"4(B" . "$(7#4(B")
("$(7"5(B" . "$(7#5(B")
("$(7"6(B" . "$(7#6(B")
("$(7"7(B" . "$(7#7(B")
("$(7"8(B" . "$(7#8(B")
("$(7"9(B" . "$(7#9(B")
("$(7":(B" . "$(7#:(B")
("$(7";(B" . "$(7#;(B")
("$(7"<(B" . "$(7#<(B")
("$(7"=(B" . "$(7#=(B")
("$(7">(B" . "$(7#>(B")
("$(7"?(B" . "$(7#?(B")
("$(7"@(B" . "$(7#@(B")
("$(7"A(B" . "$(7#A(B")
("$(7"B(B" . "$(7#B(B")
("$(7"C(B" . "$(7#C(B")
("$(7"D(B" . "$(7#D(B")
("$(7"E(B" . "$(7#E(B")
("$(7"F(B" . "$(7#F(B")
("$(7"G(B" . "$(7#G(B")
("$(7"H(B" . "$(7#H(B")
("$(7"I(B" . "$(7#I(B")
("$(7"J(B" . "$(7#J(B")))
;;;
;;; alist for Tibetan consonantic components <-> precomposed glyph conversion.
;;; (includes some punctuation conversion rules)
;;;
(defconst tibetan-precomposition-rule-alist
'(("$(7"6#B#>(B" . "$(7$G(B")
("$(7"##C#>(B" . "$(7$_(B")
("$(7";#>(B" . "$(7$)(B")
("$(7"C#:#>(B" . "$(7%.(B")
("$(7"C###>(B" . "$(7%-(B")
("$(7"C#!#B(B" . "$(7%0(B")
("$(7"C###B(B" . "$(7%1(B")
("$(7"C#9#B(B" . "$(7%2(B")
("$(7"G#!#B(B" . "$(7%`(B")
("$(7"G###B(B" . "$(7%a(B")
("$(7"G#5#B(B" . "$(7%b(B")
("$(7"G#7#B(B" . "$(7%c(B")
("$(7"G#9#B(B" . "$(7%d(B")
("$(7"G#!#C(B" . "$(7%p(B")
("$(7"G###C(B" . "$(7%q(B")
("$(7"G#4#C(B" . "$(7%r(B")
("$(7"G#5#C(B" . "$(7%s(B")
("$(7"G#7#C(B" . "$(7%t(B")
("$(7"G#9#C(B" . "$(7%u(B")
("$(7""#>(B" . "$(7$"(B")
("$(7"*#>(B" . "$(7$%(B")
("$(7":#>(B" . "$(7$((B")
("$(7"?#>(B" . "$(7$*(B")
("$(7"E#>(B" . "$(7$.(B")
("$(7""#B(B" . "$(7$A(B")
("$(7"6#B(B" . "$(7$D(B")
("$(7""#C(B" . "$(7$Q(B")
("$(7"1#C(B" . "$(7$T(B")
("$(7"6#C(B" . "$(7$W(B")
("$(7"E#C(B" . "$(7$Z(B")
("$(7"<#C(B" . "$(7$^(B")
("$(7"C#%(B" . "$(7%#(B")
("$(7"C#*(B" . "$(7%%(B")
("$(7"C#:(B" . "$(7%+(B")
("$(7"C#<(B" . "$(7%,(B")
("$(7"D#%(B" . "$(7%B(B")
("$(7"G#%(B" . "$(7%R(B")
("$(7"G#*(B" . "$(7%S(B")
("$(7"G#:(B" . "$(7%Z(B")
("$(7"!#>(B" . "$(7$!(B")
("$(7"##>(B" . "$(7$#(B")
("$(7"&#>(B" . "$(7$$(B")
("$(7"0#>(B" . "$(7$&(B")
("$(7"2#>(B" . "$(7$'(B")
("$(7"@#>(B" . "$(7$+(B")
("$(7"C#>(B" . "$(7$,(B")
("$(7"D#>(B" . "$(7$-(B")
("$(7"G#>(B" . "$(7$/(B")
("$(7"H#>(B" . "$(7$0(B")
("$(7"!#B(B" . "$(7$@(B")
("$(7"##B(B" . "$(7$B(B")
("$(7"5#B(B" . "$(7$C(B")
("$(7"7#B(B" . "$(7$E(B")
("$(7"9#B(B" . "$(7$F(B")
("$(7"!#C(B" . "$(7$P(B")
("$(7"##C(B" . "$(7$R(B")
("$(7"0#C(B" . "$(7$S(B")
("$(7"2#C(B" . "$(7$U(B")
("$(7"5#C(B" . "$(7$V(B")
("$(7"7#C(B" . "$(7$X(B")
("$(7"9#C(B" . "$(7$Y(B")
("$(7"G#C(B" . "$(7$[(B")
("$(7"H#C(B" . "$(7$\(B")
("$(7"(#C(B" . "$(7$](B")
("$(7"!#D(B" . "$(7$`(B")
("$(7"##D(B" . "$(7$a(B")
("$(7"7#D(B" . "$(7$b(B")
("$(7"@#D(B" . "$(7$c(B")
("$(7"C#D(B" . "$(7$d(B")
("$(7"G#D(B" . "$(7$e(B")
("$(7"C#!(B" . "$(7%!(B")
("$(7"C##(B" . "$(7%"(B")
("$(7"C#((B" . "$(7%$(B")
("$(7"C#0(B" . "$(7%&(B")
("$(7"C#2(B" . "$(7%'(B")
("$(7"C#4(B" . "$(7%((B")
("$(7"C#7(B" . "$(7%)(B")
("$(7"C#9(B" . "$(7%*(B")
("$(7"D#!(B" . "$(7%@(B")
("$(7"D##(B" . "$(7%A(B")
("$(7"D#&(B" . "$(7%C(B")
("$(7"D#((B" . "$(7%D(B")
("$(7"D#0(B" . "$(7%E(B")
("$(7"D#2(B" . "$(7%F(B")
("$(7"D#5(B" . "$(7%G(B")
("$(7"D#7(B" . "$(7%H(B")
("$(7"D#H(B" . "$(7%I(B")
("$(7"G#!(B" . "$(7%P(B")
("$(7"G##(B" . "$(7%Q(B")
("$(7"G#0(B" . "$(7%T(B")
("$(7"G#2(B" . "$(7%U(B")
("$(7"G#4(B" . "$(7%V(B")
("$(7"G#5(B" . "$(7%W(B")
("$(7"G#7(B" . "$(7%X(B")
("$(7"G#9(B" . "$(7%Y(B")
("$(7!=(B" . "$(8!=(B") ; 2 col <-> 1 col
("$(7!?(B" . "$(8!?(B")
("$(7!@(B" . "$(8!@(B")
("$(7!A(B" . "$(8!A(B")
("$(7"`(B" . "$(8"`(B")
("$(7!;(B" . "$(8!;(B")
("$(7!D(B" . "$(8!D(B")
("$(7!>(B $(7!>(B" . "2$(7!>P(B P$(7!>1(B") ; Yes this is dirty. But ...
("$(7!4!5!5(B" . "2$(7#RP#SP#SP#S1(B")
("$(7!4!5(B" . "2$(7#RP#SP#S1(B")
("$(7!6(B" . "2$(7#RP#S_!I1(B")
("$(7!4(B" . "2$(7#RP#S1(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))
(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.")
(defvar tibetan-precomposed-regexp
(let ((l tibetan-precomposed-transcription-alist)
temp)
(setq temp "^\\(")
(setq temp
(concat temp (car (car l))))
(setq l (cdr l))
(while l
(setq temp
(concat temp "\\|" (car (car l))))
(setq l (cdr l)))
(concat temp "\\)"))
"Regexp string to match a romanized Tibetan complex consonant.
The result of matching is to be used for indexing alists when the input key
from an input method is converted to the corresponding precomposed glyph.")
(defvar tibetan-precomposition-rule-regexp
(let ((l tibetan-precomposition-rule-alist)
temp)
(setq temp "\\(")
(setq temp (concat temp (car (car l))))
(setq l (cdr l))
(while l
(setq temp (concat temp "\\|" (car (car l))))
(setq l (cdr l)))
(concat temp "\\)"))
"Regexp string to match a sequence of Tibetan consonantic components, i.e.,
one base consonant and one or more subjoined consonants.
The result of matching is to be used for indexing alist when the component
sequence is converted to the corresponding precomposed glyph.
This also matches some punctuation characters which need conversion.")
(defvar tibetan-decomposed nil)
(defvar tibetan-decomposed-temp nil)
;;; language/tibetan.el ends here