emacs-diffs
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]