summaryrefslogtreecommitdiff
path: root/lisp/language
diff options
context:
space:
mode:
authorKenichi Handa <handa@m17n.org>2008-09-06 14:20:31 +0000
committerKenichi Handa <handa@m17n.org>2008-09-06 14:20:31 +0000
commit0fbd94961a859d531240a23a738a507b7bb4326a (patch)
tree215ec047e520656d81bdf69232df202c5c0223a5 /lisp/language
parent2de7397f328dca71014a534fcf1c2a0e14f8f5d5 (diff)
downloademacs-0fbd94961a859d531240a23a738a507b7bb4326a.tar.gz
emacs-0fbd94961a859d531240a23a738a507b7bb4326a.tar.bz2
emacs-0fbd94961a859d531240a23a738a507b7bb4326a.zip
Fix setting of composition-function-table.
Diffstat (limited to 'lisp/language')
-rw-r--r--lisp/language/lao.el38
1 files changed, 35 insertions, 3 deletions
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)