From: Kenichi Handa Date: Sat, 6 Sep 2008 14:20:31 +0000 (+0000) Subject: Fix setting of composition-function-table. X-Git-Tag: emacs-pretest-23.0.90~3003 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=0fbd94961a859d531240a23a738a507b7bb4326a;p=emacs.git Fix setting of composition-function-table. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f9785313c97..8e77bbdc1f1 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2008-09-06 Kenichi Handa + + * language/lao.el: Fix setting of composition-function-table. + 2008-09-06 Eli Zaretskii * term/pc-win.el (msdos-show-help): Don't truncate lines while diff --git a/lisp/language/lao.el b/lisp/language/lao.el index 12f72e3071d..f1254906edf 100644 --- a/lisp/language/lao.el +++ b/lisp/language/lao.el @@ -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)