]> code.delx.au - gnu-emacs/blob - lisp/language/lao.el
d60459a1f1d570c3ce46e6079f35ca319b9619c7
[gnu-emacs] / lisp / language / lao.el
1 ;;; lao.el --- support for Lao -*- coding: utf-8; no-byte-compile: t -*-
2
3 ;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
4 ;; Free Software Foundation, Inc.
5 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
6 ;; 2007, 2008, 2009, 2010, 2011
7 ;; National Institute of Advanced Industrial Science and Technology (AIST)
8 ;; Registration Number H14PRO021
9 ;; Copyright (C) 2003
10 ;; National Institute of Advanced Industrial Science and Technology (AIST)
11 ;; Registration Number H13PRO009
12
13 ;; Keywords: multilingual, Lao
14
15 ;; This file is part of GNU Emacs.
16
17 ;; GNU Emacs is free software: you can redistribute it and/or modify
18 ;; it under the terms of the GNU General Public License as published by
19 ;; the Free Software Foundation, either version 3 of the License, or
20 ;; (at your option) any later version.
21
22 ;; GNU Emacs is distributed in the hope that it will be useful,
23 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
24 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 ;; GNU General Public License for more details.
26
27 ;; You should have received a copy of the GNU General Public License
28 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
29
30 ;;; Commentary:
31
32 ;;; Code:
33
34 (define-coding-system 'lao
35 "8-bit encoding for ASCII (MSB=0) and LAO (MSB=1)."
36 :coding-type 'charset
37 :mnemonic ?L
38 :charset-list '(lao))
39
40 (set-language-info-alist
41 "Lao" '((charset lao)
42 (coding-system lao)
43 (coding-priority lao)
44 (input-method . "lao")
45 (unibyte-display . lao)
46 (features lao-util)
47 (documentation . t)))
48
49 (let ((consonant "ກ-ຮໜໝ")
50 (tone "່-໌")
51 (vowel-upper-lower "ັິ-ົໍ")
52 (semivowel-lower "ຼ")
53 (fallback-rule [nil 0 compose-gstring-for-graphic]))
54 ;; target characters regexp
55 ;; ----------------- ------
56 (dolist (l `((,vowel-upper-lower . "[c].[t]?")
57 (,tone . "[c].")
58 (,semivowel-lower . "[c].[v][t]?")
59 (,semivowel-lower . "[c].[t]")))
60 (let* ((chars (car l))
61 (len (length chars))
62 ;; Replace `c', `t', `v' to consonant, tone, and vowel.
63 (regexp (mapconcat #'(lambda (c)
64 (cond ((= c ?c) consonant)
65 ((= c ?t) tone)
66 ((= c ?v) vowel-upper-lower)
67 (t (string c))))
68 (cdr l) ""))
69 ;; Element of composition-function-table.
70 (elt (list (vector regexp 1 'lao-composition-function)
71 fallback-rule))
72 ch)
73 (dotimes (i len)
74 (setq ch (aref chars i))
75 (if (and (> i 1) (= (aref chars (1- i)) ?-))
76 ;; End of character range.
77 (set-char-table-range composition-function-table
78 (cons (aref chars (- i 2)) ch) elt)
79 (if (or (= (1+ i) len)
80 (and (/= ch ?-) (/= (aref chars (1+ i)) ?-)))
81 ;; A character not forming a range.
82 (set-char-table-range composition-function-table ch elt)))))))
83
84 (provide 'lao)
85
86 ;; arch-tag: ba540fd9-6352-4449-a9cd-669afd21fa57
87 ;;; lao.el ends here