[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/leim/quail/sisheng.el [lexbind]
From: |
Miles Bader |
Subject: |
[Emacs-diffs] Changes to emacs/leim/quail/sisheng.el [lexbind] |
Date: |
Tue, 06 Jul 2004 07:14:55 -0400 |
Index: emacs/leim/quail/sisheng.el
diff -c /dev/null emacs/leim/quail/sisheng.el:1.2.4.1
*** /dev/null Tue Jul 6 09:16:53 2004
--- emacs/leim/quail/sisheng.el Tue Jul 6 09:14:14 2004
***************
*** 0 ****
--- 1,292 ----
+ ;;; sisheng.el --- sisheng input method for Chinese pinyin transliteration
+
+ ;; Copyright (C) 2004 Free Software Foundation, Inc.
+
+ ;; Author: Werner LEMBERG <address@hidden>
+
+ ;; Keywords: multilingual, input method, Chinese, pinyin, sisheng
+
+ ;; This program 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.
+
+ ;; This program 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, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ ;;; Commentary:
+
+ ;;; Code:
+
+ (require 'quail)
+
+ (defconst sisheng-regexp
+ "[ÄÄÄ«ÅÅ«Ç]\\|üÄ")
+
+ ;; First element is the key,
+ ;; second element is the vowel used for the input sequence,
+ ;; last four elements are the resulting tones.
+ ;;
+ (defconst sisheng-vowel-table
+ '(("Ä" "a" "Ä" "á" "Ç" "à ")
+ ("Ä" "e" "Ä" "é" "Ä" "è")
+ ("Ä«" "i" "Ä«" "Ã" "Ç" "ì")
+ ("Å" "o" "Å" "ó" "Ç" "ò")
+ ("Å«" "u" "Å«" "ú" "Ç" "ù")
+ ("Ç" "v" "Ç" "Ç" "Ç" "Ç")
+ ("üÄ" "ve" "üÄ" "üé" "üÄ" "üè")))
+
+
+ ;; All possible syllables in Mandarin Chinese, presented in the first
+ ;; tone. Note that make-sisheng-rules always constructs rules for all
+ ;; four tones even if some of those tones aren't used in Mandarin.
+ ;;
+ (defconst sisheng-syllable-table
+ '("Ä" "Äi" "Än" "Äng" "Äo"
+
+ "bÄ" "bÄi" "bÄn" "bÄng" "bÄo"
+ "bÄi" "bÄn" "bÄng"
+ "bÄ«" "biÄn" "biÄo" "biÄ" "bÄ«n" "bÄ«ng"
+ "bÅ"
+ "bū"
+
+ "cÄ" "cÄi" "cÄn" "cÄng" "cÄo"
+ "cÄ" "cÄn" "cÄng"
+ "cī"
+ "cÅng" "cÅu"
+ "cÅ«" "cuÄn" "cuÄ«" "cÅ«n" "cuÅ"
+
+ "chÄ" "chÄi" "chÄn" "chÄng" "chÄo"
+ "chÄ" "chÄn" "chÄng"
+ "chī"
+ "chÅng" "chÅu"
+ "chÅ«" "chuÄ" "chuÄi" "chuÄn" "chuÄng" "chuÄ«" "chÅ«n" "chuÅ"
+
+ "dÄ" "dÄi" "dÄn" "dÄng" "dÄo"
+ "dÄ" "dÄi" "dÄn" "dÄng"
+ "dÄ«" "diÄn" "diÄo" "diÄ" "dÄ«ng" "diÅ«"
+ "dÅng" "dÅu"
+ "dÅ«" "duÄn" "duÄ«" "dÅ«n" "duÅ"
+
+ "Ä" "Äi" "Än" "Äng" "Är"
+
+ "fÄ" "fÄn" "fÄng"
+ "fÄi" "fÄn" "fÄng"
+ "fiÄo"
+ "fÅ" "fÅu"
+ "fū"
+
+ "gÄ" "gÄi" "gÄn" "gÄng" "gÄo"
+ "gÄ" "gÄi" "gÄn" "gÄng"
+ "gÅng" "gÅu"
+ "gÅ«" "guÄ" "guÄi" "guÄn" "guÄng" "guÄ«" "gÅ«n" "guÅ"
+
+ "hÄ" "hÄi" "hÄn" "hÄng" "hÄo"
+ "hÄ" "hÄi" "hÄn" "hÄng"
+ "hÅng" "hÅu"
+ "hÅ«" "huÄ" "huÄi" "huÄn" "huÄng" "huÄ«" "hÅ«n" "huÅ"
+
+ "jÄ«" "jiÄ" "jiÄn" "jiÄng" "jiÄo" "jiÄ" "jÄ«n" "jÄ«ng" "jiÅng"
"jiū"
+ "jÅ«" "juÄn" "juÄ" "jÅ«n"
+
+ "kÄ" "kÄi" "kÄn" "kÄng" "kÄo"
+ "kÄ" "kÄi" "kÄn" "kÄng"
+ "kÅng" "kÅu"
+ "kÅ«" "kuÄ" "kuÄi" "kuÄn" "kuÄng" "kuÄ«" "kÅ«n" "kuÅ"
+
+ "lÄ" "lÄi" "lÄn" "lÄng" "lÄo"
+ "lÄ" "lÄi" "lÄng"
+ "lÄ«" "liÄ" "liÄn" "liÄng" "liÄo" "liÄ" "lÄ«n" "lÄ«ng" "liÅ«"
+ "lÅng" "lÅu"
+ "lÅ«" "luÄn" "lÅ«n" "luÅ"
+ "lÇ" "lüÄ"
+
+ "mÄ" "mÄi" "mÄn" "mÄng" "mÄo"
+ "mÄ" "mÄi" "mÄn" "mÄng"
+ "mÄ«" "miÄn" "miÄo" "miÄ" "mÄ«n" "mÄ«ng" "miÅ«"
+ "mÅ" "mÅu"
+ "mū"
+
+ "nÄ" "nÄi" "nÄn" "nÄng" "nÄo"
+ "nÄ" "nÄi" "nÄn" "nÄng"
+ "nÄ«" "niÄn" "niÄng" "niÄo" "niÄ" "nÄ«n" "nÄ«ng" "niÅ«"
+ "nÅng" "nÅu"
+ "nÅ«" "nuÄn" "nuÅ"
+ "nÇ" "nüÄ"
+
+ "Å" "Åu"
+
+ "pÄ" "pÄi" "pÄn" "pÄng" "pÄo"
+ "pÄi" "pÄn" "pÄng"
+ "pÄ«" "piÄn" "piÄo" "piÄ" "pÄ«n" "pÄ«ng"
+ "pÅ" "pÅu"
+ "pū"
+
+ "qÄ«" "qiÄ" "qiÄn" "qiÄng" "qiÄo" "qiÄ" "qÄ«n" "qÄ«ng" "qiÅng"
"qiū"
+ "qÅ«" "quÄn" "quÄ" "qÅ«n"
+
+ "rÄn" "rÄng" "rÄo"
+ "rÄ" "rÄn" "rÄng"
+ "rī"
+ "rÅng" "rÅu"
+ "rÅ«" "ruÄ" "ruÄn" "ruÄ«" "rÅ«n" "ruÅ"
+
+ "sÄ" "sÄi" "sÄn" "sÄng" "sÄo"
+ "sÄ" "sÄn" "sÄng"
+ "sī"
+ "sÅng" "sÅu"
+ "sÅ«" "suÄn" "suÄ«" "sÅ«n" "suÅ"
+
+ "shÄ" "shÄi" "shÄn" "shÄng" "shÄo"
+ "shÄ" "shÄi" "shÄn" "shÄng"
+ "shī"
+ "shÅu"
+ "shÅ«" "shuÄ" "shuÄi" "shuÄn" "shuÄng" "shuÄ«" "shÅ«n" "shuÅ"
+
+ "tÄ" "tÄi" "tÄn" "tÄng" "tÄo"
+ "tÄ" "tÄi" "tÄng"
+ "tÄ«" "tiÄn" "tiÄo" "tiÄ" "tÄ«ng"
+ "tÅng" "tÅu"
+ "tÅ«" "tuÄn" "tuÄ«" "tÅ«n" "tuÅ"
+
+ "wÄ" "wÄi" "wÄn" "wÄng"
+ "wÄi" "wÄn" "wÄng"
+ "wÅ"
+ "wū"
+
+ "xÄ«" "xiÄ" "xiÄn" "xiÄng" "xiÄo" "xiÄ" "xÄ«n" "xÄ«ng" "xiÅng"
"xiū"
+ "xÅ«" "xuÄn" "xuÄ" "xÅ«n"
+
+ "yÄ" "yÄn" "yÄng" "yÄo"
+ "yÄ"
+ "yī" "yīn" "yīng"
+ "yÅ" "yÅng" "yÅu"
+ "yÅ«" "yuÄn" "yuÄ" "yÅ«n"
+
+ "zÄ" "zÄi" "zÄn" "zÄng" "zÄo"
+ "zÄ" "zÄi" "zÄn" "zÄng"
+ "zī"
+ "zÅng" "zÅu"
+ "zÅ«" "zuÄn" "zuÄ«" "zÅ«n" "zuÅ"
+
+ "zhÄ" "zhÄi" "zhÄn" "zhÄng" "zhÄo"
+ "zhÄ" "zhÄi" "zhÄn" "zhÄng"
+ "zhī"
+ "zhÅng" "zhÅu"
+ "zhÅ«" "zhuÄ" "zhuÄi" "zhuÄn" "zhuÄng" "zhuÄ«" "zhÅ«n" "zhuÅ"))
+
+ ;; This function converts e.g.
+ ;;
+ ;; "zhuÅ"
+ ;;
+ ;; into
+ ;;
+ ;; (("zhuo4" ["zhuò"])
+ ;; ("zhuo3" ["zhuÇ"])
+ ;; ("zhuo2" ["zhuó"])
+ ;; ("zhuo1" ["zhuÅ"]))
+ ;;
+ (defun quail-make-sisheng-rules (syllable)
+ (let ((case-fold-search t)
+ vowel-match
+ vowel-list
+ input-vowel
+ base-key
+ key
+ value
+ key-value-list
+ (i 1))
+ (string-match sisheng-regexp syllable)
+ (setq vowel-match (downcase (match-string 0 syllable)))
+ (setq vowel-list
+ (cdr (assoc-string vowel-match sisheng-vowel-table)))
+ (setq input-vowel (car vowel-list))
+ (setq base-key (replace-match input-vowel nil nil syllable))
+ (while (<= i 4)
+ (setq key (concat base-key (number-to-string i)))
+ (setq value (vector (replace-match (nth i vowel-list) nil nil
syllable)))
+ (push (list key value) key-value-list)
+ (setq i (1+ i)))
+ key-value-list))
+
+ ;; Set up sisheng input method.
+ ;;
+ (quail-define-package
+ "chinese-sisheng" ; name
+ "Chinese" ; language
+ "Ç" ; title
+ t ; guidance
+ "SìshÄng input method for pÄ«nyÄ«n transliteration of Chinese.
+
+ Examples: shuang1 -> shuÄng
+ Lv3 -> LÇ
+ AN4 -> ÃN
+
+ Use the fifth (unstressed) tone for syllables containing `ü'
+ without a tone mark.
+
+ Example: nve5 -> nüe
+ " ; docstring
+ nil ; translation-keys
+ t ; forget-last-selection
+ nil ; deterministic
+ nil ; kbd-translate
+ nil ; show-layout
+ nil ; create-decode-map
+ nil ; maximum-shortest
+ nil ; overlay-plist
+ nil ; update-translation-function
+ nil ; conversion-keys
+ t ; simple
+ )
+
+ ;; Call quail-make-sisheng-rules for all syllables in sisheng-syllable-table.
+ ;;
+ (let ((case-table-save (current-case-table))
+ sisheng-list)
+ (set-case-table (standard-case-table))
+ (dolist (syllable sisheng-syllable-table)
+ (setq sisheng-list
+ (append (quail-make-sisheng-rules syllable)
+ sisheng-list)))
+
+ (dolist (syllable sisheng-syllable-table)
+ (setq sisheng-list
+ (append (quail-make-sisheng-rules (upcase-initials syllable))
+ sisheng-list)))
+
+ (dolist (syllable sisheng-syllable-table)
+ (setq sisheng-list
+ (append (quail-make-sisheng-rules (upcase syllable))
+ sisheng-list)))
+
+ (eval `(quail-define-rules
+ ,@sisheng-list
+
+ ("lv5" ["lü"])
+ ("lve5" ["lüe"])
+ ("nv5" ["nü"])
+ ("nve5" ["nüe"])
+
+ ("Lv5" ["Lü"])
+ ("Lve5" ["Lüe"])
+ ("Nv5" ["Nü"])
+ ("Nve5" ["Nüe"])
+
+ ("LV5" ["LÃ"])
+ ("LVE5" ["LÃE"])
+ ("NV5" ["NÃ"])
+ ("NVE5" ["NÃE"])))
+ (set-case-table case-table-save))
+
+ ;; Local Variables:
+ ;; coding: utf-8
+ ;; End:
+
+ ;;; arch-tag: 1fa6ba5f-6747-44bc-bf12-30628ad3e8ad
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] Changes to emacs/leim/quail/sisheng.el [lexbind],
Miles Bader <=