;;; lao-util.el --- utilities for Lao -*- coding: iso-2022-7bit; -*-
-;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
-;; Free Software Foundation, Inc.
-;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+;; Copyright (C) 2001-2011 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+;; 2007, 2008, 2009, 2010, 2011
;; 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.
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; 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.
+;; the Free Software Foundation, either version 3 of the License, 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
;; 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., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
(?\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) ...)
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 (gstring)
+ (if (= (lgstring-char-len gstring) 1)
+ (compose-gstring-for-graphic gstring)
+ (or (font-shape-gstring gstring)
+ (let ((glyph-len (lgstring-glyph-len gstring))
+ (i 0)
+ glyph)
+ (while (and (< i glyph-len)
+ (setq glyph (lgstring-glyph gstring i)))
+ (setq i (1+ i)))
+ (compose-glyph-string-relative gstring 0 i 0.1)))))
;;;###autoload
(defun lao-compose-region (from to)
;;
(provide 'lao-util)
-;;; arch-tag: 1f828781-3cb8-4695-88af-8f33222338ce
;;; lao-util.el ends here