]> code.delx.au - gnu-emacs/blobdiff - lisp/language/lao-util.el
Merge from emacs--devo--0
[gnu-emacs] / lisp / language / lao-util.el
index d8f6de900c9fd689cef3879d75764872ff5be00c..5fc12d8455c1fd49e25e500503d45269eb2717ec 100644 (file)
@@ -6,8 +6,11 @@
 ;;   2007, 2008
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
 ;;   Registration Number H14PRO021
+;; Copyright (C) 2003
+;;   National Institute of Advanced Industrial Science and Technology (AIST)
+;;   Registration Number H13PRO009
 
-;; Keywords: multilingual, Lao
+;; Keywords: multilingual, Lao, i18n
 
 ;; This file is part of GNU Emacs.
 
           (?\e(1{\e(B invalid nil)
           (?\e(1|\e(B consonant "LETTER NHOR NHUU" "MOUSE")
           (?\e(1}\e(B consonant "LETTER MHOR MHAR" "DOG")
-          (?\e(1~\e(B invalid nil)
-          ;; Unicode equivalents
-          (?\e$,1D!\e(B consonant "LETTER KOR  KAI'" "CHICKEN")
-          (?\e$,1D"\e(B consonant "LETTER KHOR KHAI'" "EGG")
-          (?\e$,1D$\e(B consonant "LETTER QHOR QHWARGN" "BUFFALO")
-          (?\e$,1D'\e(B consonant "LETTER NGOR NGUU" "SNAKE")
-          (?\e$,1D(\e(B consonant "LETTER JOR JUA" "BUDDHIST NOVICE")
-          (?\e$,1D*\e(B consonant "LETTER XOR X\"ARNG" "ELEPHANT")
-          (?\e$,1D-\e(B consonant "LETTER YOR YUNG" "MOSQUITO")
-          (?\e$,1D4\e(B consonant "LETTER DOR DANG" "NOSE")
-          (?\e$,1D5\e(B consonant "LETTER TOR TAR" "EYE")
-          (?\e$,1D6\e(B consonant "LETTER THOR THUNG" "TO ASK,QUESTION")
-          (?\e$,1D7\e(B consonant "LETTER DHOR DHARM" "FLAG")
-          (?\e$,1D9\e(B consonant "LETTER NOR NOK" "BIRD")
-          (?\e$,1D:\e(B consonant "LETTER BOR BED" "FISHHOOK")
-          (?\e$,1D;\e(B consonant "LETTER POR PAR" "FISH")
-          (?\e$,1D<\e(B consonant "LETTER HPOR HPER\"" "BEE")
-          (?\e$,1D=\e(B consonant "LETTER FHOR FHAR" "WALL")
-          (?\e$,1D>\e(B consonant "LETTER PHOR PHUU" "MOUNTAIN")
-          (?\e$,1D?\e(B consonant "LETTER FOR FAI" "FIRE")
-          (?\e$,1DA\e(B consonant "LETTER MOR MAR\"" "HORSE")
-          (?\e$,1DB\e(B consonant "LETTER GNOR GNAR" "MEDICINE")
-          (?\e$,1DC\e(B consonant "LETTER ROR ROD" "CAR")
-          (?\e$,1DE\e(B consonant "LETTER LOR LIING" "MONKEY")
-          (?\e$,1DG\e(B consonant "LETTER WOR WII" "HAND FAN")
-          (?\e$,1DJ\e(B consonant "LETTER SOR SEA" "TIGER")
-          (?\e$,1DK\e(B consonant "LETTER HHOR HHAI" "JAR")
-          (?\e$,1DM\e(B consonant "LETTER OR OOW" "TAKE")
-          (?\e$,1DN\e(B consonant "LETTER HOR HEA" "BOAT")
-          (?\e$,1DO\e(B special "ELLIPSIS")
-          (?\e$,1DP\e(B vowel-base "VOWEL SIGN SARA A")
-          (?\e$,1DQ\e(B vowel-upper "VOWEL SIGN MAI KAN")
-          (?\e$,1DR\e(B vowel-base "VOWEL SIGN SARA AR")
-          (?\e$,1DS\e(B vowel-base "VOWEL SIGN SARA AM")
-          (?\e$,1DT\e(B vowel-upper "VOWEL SIGN SARA I")
-          (?\e$,1DU\e(B vowel-upper "VOWEL SIGN SARA II")
-          (?\e$,1DV\e(B vowel-upper "VOWEL SIGN SARA EU")
-          (?\e$,1DW\e(B vowel-upper "VOWEL SIGN SARA UR")
-          (?\e$,1DX\e(B vowel-lower "VOWEL SIGN SARA U")
-          (?\e$,1DY\e(B vowel-lower "VOWEL SIGN SARA UU")
-          (?\e$,1D[\e(B vowel-upper "VOWEL SIGN MAI KONG")
-          (?\e$,1D\\e(B semivowel-lower "SEMIVOWEL SIGN LO")
-          (?\e$,1D]\e(B vowel-base "SEMIVOWEL SIGN SARA IA")
-          (?\e$,1D`\e(B vowel-base "VOWEL SIGN SARA EE")
-          (?\e$,1Da\e(B vowel-base "VOWEL SIGN SARA AA")
-          (?\e$,1Db\e(B vowel-base "VOWEL SIGN SARA OO")
-          (?\e$,1Dc\e(B vowel-base "VOWEL SIGN SARA EI MAI MUAN\"")
-          (?\e$,1Dd\e(B vowel-base "VOWEL SIGN SARA AI MAI MAY")
-          (?\e$,1Df\e(B special "KO LA (REPETITION)")
-          (?\e$,1Dh\e(B tone "TONE MAI EK")
-          (?\e$,1Di\e(B tone "TONE MAI THO")
-          (?\e$,1Dj\e(B tone "TONE MAI TI")
-          (?\e$,1Dk\e(B tone "TONE MAI JADTAWAR")
-          (?\e$,1Dl\e(B tone "CANCELLATION MARK")
-          (?\e$,1Dm\e(B vowel-upper "VOWEL SIGN SARA OR")
-          (?\e$,1Dp\e(B special "DIGIT ZERO")
-          (?\e$,1Dq\e(B special "DIGIT ONE")
-          (?\e$,1Dr\e(B special "DIGIT TWO")
-          (?\e$,1Ds\e(B special "DIGIT THREE")
-          (?\e$,1Dt\e(B special "DIGIT FOUR")
-          (?\e$,1Du\e(B special "DIGIT FIVE")
-          (?\e$,1Dv\e(B special "DIGIT SIX")
-          (?\e$,1Dw\e(B special "DIGIT SEVEN")
-          (?\e$,1Dx\e(B special "DIGIT EIGHT")
-          (?\e$,1Dy\e(B special "DIGIT NINE")
-          (?\e$,1D|\e(B consonant "LETTER NHOR NHUU" "MOUSE")
-          (?\e$,1D}\e(B consonant "LETTER MHOR MHAR" "DOG")))
+          (?\e(1~\e(B invalid nil)))
       elm)
   (while l
     (setq elm (car l) l (cdr l))
 ;; CV -> C, CT -> C, CVT -> C, Cv -> C, CvT -> C
 ;;                                   v         v
 ;;                             T
-;;        V         T          V                   T
-;; CsV -> C, CsT -> C, CsVT -> C, Csv -> C, CvT -> C
-;;        s         s          s         s         s
-;;                                       v         v
+;;        V         T          V                    T
+;; CsV -> C, CsT -> C, CsVT -> C, Csv -> C, CsvT -> C
+;;        s         s          s         s          s
+;;                                       v          v
 
 
 ;; where C: consonant, V: vowel upper, v: vowel lower,
     ("\e(1d\e(B" (?\e(1d\e(B 0))
     ("\e(1c\e(B" (?\e(1c\e(B 0))
     ("\e(1`[R\e(B" (?\e(1`\e(B 0 ?\e(1[\e(B ?\e(1R\e(B))
-    ("\e(1S\e(B" (0 ?\e(1S\e(B))
-
-    ;; Unicode equivalents
-    ("\e$,1DP\e(B" (0 ?\e$,1DP\e(B) (0 ?\e$,1DQ\e(B))
-    ("\e$,1DR\e(B" (0 ?\e$,1DR\e(B))
-    ("\e$,1DT\e(B" (0 ?\e$,1DU\e(B))
-    ("\e$,1DU\e(B" (0 ?\e$,1DU\e(B))
-    ("\e$,1DV\e(B" (0 ?\e$,1DV\e(B))
-    ("\e$,1DW\e(B" (0 ?\e$,1DW\e(B))
-    ("\e$,1DX\e(B" (0 ?\e$,1DX\e(B))
-    ("\e$,1DY\e(B" (0 ?\e$,1DY\e(B))
-    ("\e$,1D`DP\e(B" (?\e$,1D`\e(B 0 ?\e$,1DP\e(B) (?\e$,1D`\e(B 0 ?\e$,1DQ\e(B))
-    ("\e$,1D`\e(B" (?\e$,1D`\e(B 0))
-    ("\e$,1DaDP\e(B" (?\e$,1Da\e(B 0 ?\e$,1DP\e(B) (?\e$,1Da\e(B 0 ?\e$,1DQ\e(B))
-    ("\e$,1Da\e(B" (?\e$,1Da\e(B 0))
-    ("\e$,1DbDP\e(B" (?\e$,1Db\e(B 0 ?\e$,1DP\e(B) (0 ?\e$,1D[\e(B) (?\e$,1D-\e(B ?\e$,1Db\e(B 0 ?\e$,1DQ\e(B) (?\e$,1DG\e(B ?\e$,1Db\e(B 0 ?\e$,1DQ\e(B))
-    ("\e$,1Db\e(B" (?\e$,1Db\e(B 0))
-    ("\e$,1D`DRDP\e(B" (?\e$,1D`\e(B 0 ?\e$,1DR\e(B ?\e$,1DP\e(B) (0 ?\e$,1DQ\e(B ?\e$,1DM\e(B))
-    ("\e$,1Dm\e(B" (0 ?\e$,1Dm\e(B) (0 ?\e$,1DM\e(B))
-    ("\e$,1D`DT\e(B" (?\e$,1D`\e(B 0 ?\e$,1DT\e(B))
-    ("\e$,1D`DU\e(B" (?\e$,1D`\e(B 0 ?\e$,1DU\e(B))
-    ("\e$,1D[DGDP\e(B" (0 ?\e$,1D[\e(B ?\e$,1DG\e(B ?\e$,1DP\e(B) (0 ?\e$,1DQ\e(B ?\e$,1DG\e(B))
-    ("\e$,1D[DG\e(B" (0 ?\e$,1D[\e(B ?\e$,1DG\e(B) (0 ?\e$,1DG\e(B))
-    ("\e$,1D`DQD]DP\e(B" (?\e$,1D`\e(B 0 ?\e$,1DQ\e(B ?\e$,1D]\e(B ?\e$,1DP\e(B) (0 ?\e$,1DQ\e(B ?\e$,1D]\e(B))
-    ("\e$,1D`DQD]\e(B" (?\e$,1D`\e(B 0 ?\e$,1DQ\e(B ?\e$,1D]\e(B) (0 ?\e$,1D]\e(B))
-    ("\e$,1D`DVDM\e(B" (?\e$,1D`\e(B 0 ?\e$,1DV\e(B ?\e$,1DM\e(B))
-    ("\e$,1D`DWDM\e(B" (?\e$,1D`\e(B 0 ?\e$,1DW\e(B ?\e$,1DM\e(B))
-    ("\e$,1Dd\e(B" (?\e$,1Dd\e(B 0))
-    ("\e$,1Dc\e(B" (?\e$,1Dc\e(B 0))
-    ("\e$,1D`D[DR\e(B" (?\e$,1D`\e(B 0 ?\e$,1D[\e(B ?\e$,1DR\e(B))
-    ("\e$,1DS\e(B" (0 ?\e$,1DS\e(B)))
+    ("\e(1S\e(B" (0 ?\e(1S\e(B)))
   "Alist of Lao vowel string vs the corresponding re-ordering rule.
 Each element has this form:
        (VOWEL NO-MAA-SAKOD-RULE WITH-MAA-SAKOD-RULE (MAA-SAKOD-0 RULE-0) ...)
@@ -586,24 +493,20 @@ syllable.  In that case, FROM and TO are indexes to STR."
       lao-str)))
 
 ;;;###autoload
-(defun lao-post-read-conversion (len)
-  (lao-compose-region (point) (+ (point) len))
-  len)
-
-;;;###autoload
-(defun lao-composition-function (from to pattern &optional string)
-  "Compose Lao text in the region FROM and TO.
-The text matches the regular expression PATTERN.
-Optional 4th argument STRING, if non-nil, is a string containing text
-to compose.
-
-The return value is number of composed characters."
-  (if (< (1+ from) to)
-      (progn
-       (if string
-           (compose-string string from to)
-         (compose-region from to))
-       (- to from))))
+(defun lao-composition-function (pos &optional string)
+  (setq pos (1- pos))
+  (with-category-table lao-category-table
+    (if string
+       (if (and (>= pos 0)
+                (eq (string-match lao-composition-pattern string pos) pos))
+           (prog1 (match-end 0)
+             (compose-string string pos (match-end 0))))
+      (if (>= pos (point-min))
+         (save-excursion
+           (goto-char pos)
+           (if (looking-at lao-composition-pattern)
+               (prog1 (match-end 0)
+                 (compose-region pos (match-end 0)))))))))
 
 ;;;###autoload
 (defun lao-compose-region (from to)