1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-06 11:55:48 +00:00

New file.

This commit is contained in:
Kenichi Handa 2007-06-16 01:58:08 +00:00
parent b878f5f15a
commit ee4f828424
2 changed files with 211 additions and 0 deletions

66
lisp/language/tai-viet.el Normal file
View File

@ -0,0 +1,66 @@
;;; tai-viet.el --- support for Tai Viet -*- coding: utf-8; no-byte-compile: t -*-
;; Copyright (C) 2007
;; National Institute of Advanced Industrial Science and Technology (AIST)
;; Registration Number H13PRO009
;; Copyright (C) 2007 Free Software Foundation, Inc.
;; Keywords: multilingual, Tai Viet, i18n
;; This file is part of GNU Emacs.
;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Commentary:
;; Tai Viet is being included in the Unicode at the range U+AA80..U+AADF.
;;; Code:
(set-char-table-range composition-function-table
'(#xAA80 . #xAADF)
'tai-viet-composition-function)
(set-language-info-alist
"TaiViet" '((charset unicode)
(coding-system utf-8)
(coding-priority utf-8)
(input-method . "tai-sonla")
(sample-text
"TaiViet (ꪁꪫꪱꪣ ꪽꪕ)\t\tꪅꪰꪙ꫃ ꪨꪮ꫃ ꪁꪫꪱ / ꪅꪾ ꪨ<> ꪁꪫꪱ")
(documentation . "\
TaiViet refers to the Tai language used by Tai people in
Vietnam, and also refers to the script used for this language.
Both the script and language have the same origin as that of Thai
language/script used in Thailand, but now they differ from each
other in a significant way (especially the scripts are).
The language name is spelled as \"ꪁꪫꪱꪣ ꪽꪕ\", and the script name is
spelled as \"ꪎ<EFBFBD> ꪽꪕ\" in the modern form, \"ꪎꪴ ꪽꪕ\" in the traditional
from.
As the proposal for TaiViet script to the Unicode is still on
the progress, we use the Private Use Area for TaiViet
characters (U+F000..U+F07E). A TaiViet font encoded accordingly
is available at this web page:
http://www.m17n.org/TaiViet/
")))
(provide 'tai-viet)
;; Local Variables:
;; coding: utf-8
;; End:

145
lisp/language/tv-util.el Normal file
View File

@ -0,0 +1,145 @@
;;; tv-util.el --- support for Tai Viet -*- coding: utf-8 -*-
;; Copyright (C) 2007
;; National Institute of Advanced Industrial Science and Technology (AIST)
;; Registration Number H13PRO009
;; Keywords: multilingual, Tai Viet, i18n
;; This file is part of GNU Emacs.
;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Code
;; Regexp matching with a sequence of Tai Viet characters.
(defconst tai-viet-re
(format "[\xaa80-\xaac2\xaadb-\xaadf]+"))
;; Char-table of information about glyph type of Tai Viet characters.
(defconst tai-viet-glyph-info
(let ((table (make-char-table nil))
(specials '((right-overhang . "ꪊꪋꪌꪍꪏꪓꪖꪜꪞꪡꪤꪨ")
(left-overhang . "")
(combining-vowel . "ꪴꪰꪲꪳꪷꪸꪾ")
(combining-tone . "꪿꫁"))))
;; Set all TaiViet characters to `t'.
(set-char-table-range table (cons #xaa80 #xaac2) t)
(set-char-table-range table (cons #xaadb #xaadf) t)
;; Overwrite it for special characters.
(dolist (elt specials)
(let ((category (car elt))
(chars (cdr elt)))
(dotimes (i (length chars))
(aset table (aref chars i) category))))
table))
(defun tai-viet-compose-string (from to string)
"Compose Tai Viet characters in STRING between indices FROM and TO."
(let* ((ch (aref string from))
(info (aref tai-viet-glyph-info ch))
prev-info)
(if (eq info 'non-spacing)
(compose-string string from (1+ from) (string ch ?\t)))
(setq from (1+ from) prev-info info)
(while (and (< from to)
(tai-viet-char-p (setq ch (aref string from))))
(setq info (aref tai-viet-glyph-info ch))
(if (and (eq info 'non-spacing)
(eq prev-info 'non-spacing))
(compose-string from (1+ from) (string ?\t ch)))
(setq from (1+ from) prev-info info))
(if (eq info 'right-overhang)
(compose-string string (1- from) from (string ch ?\t)))
from))
(defun tai-viet-compose-region (from to)
"Compose Tai Viet characters in the region between FROM and TO."
(decompose-region from to)
(let ((normal-rule '(Br . Bl))
(tone-rule '(tr . bl))
(prev-viet nil)
ch info pos components overhang)
(while (< from to)
(or ch
(setq ch (char-after from)
info (aref tai-viet-glyph-info ch)))
(setq from (1+ from))
(if (not info)
(setq prev-viet nil
ch nil)
(if (memq info '(combining-vowel combining-tone))
(progn
;; Display this as a spacing glyph.
(compose-region (1- from) from (string ?\t ch))
(setq prev-viet t
ch nil))
(setq pos (1- from)
components ch
overhang (if (eq info 'right-overhang)
'right-overhang
(if (and (not prev-viet) (eq info 'left-overhang))
'left-overhang))
prev-viet t
ch nil)
(if (and (< from to)
(setq ch (char-after from)
info (aref tai-viet-glyph-info ch)))
(if (memq info '(combining-vowel combining-tone))
(progn
(setq components
(list components normal-rule ch)
from (1+ from)
ch nil)
(if (and (< from to)
(setq ch (char-after from)
info (aref tai-viet-glyph-info ch))
(eq info 'combining-tone))
(setq components (nconc components
(list tone-rule ch))
from (1+ from)))
(if (eq overhang 'left-overhang)
(setq components (cons ?\t
(cons normal-rule components)))
(if (and (eq overhang 'right-overhang)
(>= from to))
(setq components (nconc components
(list normal-rule ?\t)))))
(compose-region pos from components))
(if (eq overhang 'left-overhang)
(compose-region pos from (string ?\t components))))
(if (eq overhang 'left-overhang)
(compose-region pos from (string ?\t components))
(if (and (eq overhang 'right-overhang) (>= from to))
(compose-region pos from (string components ?\t))))))))
from))
;;;###autoload
(defun tai-viet-composition-function (pos &optional string)
(let (to)
(if string
(progn
(if (string-match tai-viet-re string pos)
(tai-viet-compose-string pos (match-end 0) string)
(1+ pos)))
(goto-char pos)
(if (looking-at tai-viet-re)
(tai-viet-compose-region pos (match-end 0))
(1+ pos)))))
;;
(provide 'tai-viet-util)