Mercurial > emacs
view leim/quail/sisheng.el @ 77569:cb84f0c61221
*** empty log message ***
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Thu, 26 Apr 2007 19:42:48 +0000 (2007-04-26) |
parents | f5f322eb227f |
children | 2904684117d6 |
line wrap: on
line source
;;; sisheng.el --- sisheng input method for Chinese pinyin transliteration ;; Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Werner LEMBERG <wl@gnu.org> ;; 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, 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, 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