]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix setting of composition-function-table.
authorKenichi Handa <handa@m17n.org>
Sat, 6 Sep 2008 14:20:31 +0000 (14:20 +0000)
committerKenichi Handa <handa@m17n.org>
Sat, 6 Sep 2008 14:20:31 +0000 (14:20 +0000)
lisp/ChangeLog
lisp/language/lao.el

index f9785313c973215782fc36b5109c1186bda5d541..8e77bbdc1f1b4bff76d2ec85bc3c50d511221df3 100644 (file)
@@ -1,3 +1,7 @@
+2008-09-06  Kenichi Handa  <handa@m17n.org>
+
+       * language/lao.el: Fix setting of composition-function-table.
+
 2008-09-06  Eli Zaretskii  <eliz@gnu.org>
 
        * term/pc-win.el (msdos-show-help): Don't truncate lines while
index 12f72e3071dd6ad490d8aaa9d986fd4e93fb40f0..f1254906edf326fa7516b55ddd110160b9a2648f 100644 (file)
@@ -1,4 +1,4 @@
-;;; lao.el --- support for Lao -*- coding: iso-2022-7bit; no-byte-compile: t -*-
+;;; lao.el --- support for Lao -*- coding: utf-8; no-byte-compile: t -*-
 
 ;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
 ;;   Free Software Foundation, Inc.
         (features lao-util)
         (documentation . t)))
 
-(set-char-table-range composition-function-table '(#xE80 . #xEDF)
-                     '(("[\xE80-\xEDF]+" . lao-composition-function)))
+(let ((consonant "ກ-ຮໜໝ")
+      (tone "່-໌")
+      (vowel-upper-lower "ັິ-ົໍ")
+      (semivowel-lower "ຼ")
+      (fallback-rule [nil 0 compose-gstring-for-graphic]))
+  ;;            target characters    regexp
+  ;;            -----------------    ------
+  (dolist (l `((,vowel-upper-lower . "[c].[t]?")
+              (,tone .              "[c].")
+              (,semivowel-lower .   "[c].[v][t]?")
+              (,semivowel-lower .   "[c].[t]")))
+    (let* ((chars (car l))
+          (len (length chars))
+          ;; Replace `c', `t', `v' to consonant, tone, and vowel.
+          (regexp (mapconcat #'(lambda (c)
+                                 (cond ((= c ?c) consonant)
+                                       ((= c ?t) tone)
+                                       ((= c ?v) vowel-upper-lower)
+                                       (t (string c))))
+                             (cdr l) ""))
+          ;; Element of composition-function-table.
+          (elt (list (vector regexp 1 'lao-composition-function)
+                     fallback-rule))
+          ch)
+      (dotimes (i len)
+       (setq ch (aref chars i))
+       (if (and (> i 1) (= (aref chars (1- i)) ?-))
+           ;; End of character range.
+           (set-char-table-range composition-function-table
+                                 (cons (aref chars (- i 2)) ch) elt)
+         (if (or (= (1+ i) len)
+                 (and (/= ch ?-) (/= (aref chars (1+ i)) ?-)))
+             ;; A character not forming a range.
+             (set-char-table-range composition-function-table ch elt)))))))
 
 (provide 'lao)