changeset 98037:31c8c0a7d56c

Fix setting of composition-function-table.
author Kenichi Handa <handa@m17n.org>
date Sat, 06 Sep 2008 14:20:09 +0000
parents 70619fdc3dac
children 00084e2ca762
files lisp/language/lao.el
diffstat 1 files changed, 35 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/language/lao.el	Sat Sep 06 13:43:36 2008 +0000
+++ b/lisp/language/lao.el	Sat Sep 06 14:20:09 2008 +0000
@@ -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.
@@ -46,8 +46,40 @@
 	 (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)