(defvar its-pinyin-cn-open-braket "\e$A!8\e(B" "*[") ; "\e$A#[\e(B"
(defvar its-pinyin-cn-close-braket "\e$A!9\e(B" "*]") ; "\e$A#]\e(B"
-(defvar its-pinyin-tw-enable-quanjioao-alphabet t "*Enable Quanjiao alphabet")
+(defvar its-pinyin-tw-enable-quanjioao-alphabet
+ (if (boundp 'its-enable-fullwidth-alphabet)
+ its-enable-fullwidth-alphabet
+ t)
+ "*Enable Quanjiao alphabet")
+
(defvar its-pinyin-tw-open-braket "\e$(G!V\e(B" "*[") ; "\e$(G!b\e(B "
(defvar its-pinyin-tw-close-braket "\e$(G!W\e(B" "*]") ; "\e$(G!c\e(B"
(eval-when-compile
- (defconst its-pinyin-term
- (char-to-string (make-char 'chinese-sisheng ?@)))
-
- (defsubst its-defoutput* (input display)
- (its-set-output (its-goto-state input nil t) display))
-
- (defun its-prev-terminal-state (input)
- (let ((len (length input))
- (state (its-get-start-state (symbol-value its-current-map)))
- (i 0) (ret nil) kst ks)
- (while (and (< i len)
- (setq state (its-get-next-state state (aref input i))))
- (if (or (null (its-kst-p (setq kst (its-get-kst/t state))))
- (mapcan (lambda (eob) (if (eq (its-eob-back eob) -1) (list t)))
- (cdr kst))
- (and (setq ks (assq -1 (car kst)))
- (null (its-get-kst/t (cdr ks)))))
- (setq ret state))
- (setq i (1+ i)))
- ret))
+ (defun its-prev-terminal-state (state-list)
+ (while (and state-list
+ (null (its-get-next-state (car state-list) -1)))
+ (setq state-list (cdr state-list)))
+ (car state-list))
(defun its-define-qingsheng (shengmu yunmu &optional s y)
(let ((input (concat shengmu yunmu))
- (output (concat (if s s (capitalize shengmu))
- (if y y yunmu)
- its-pinyin-term))
- state term kst i len c+b)
- (setq state (its-goto-state input nil t))
- (its-make-next-state state -1 input output)
- (its-make-next-state state ? (concat input " ") output)
- (its-make-next-state state ?0 (concat input "0") output)
- (its-define-otherwise
- state (its-make-otherwise output its-otherwise-back-one))
- (setq term (its-prev-terminal-state (substring input 0 -1)))
- (if term
- (progn
- (setq len (length (its-get-keyseq term))
- i len
- output (car (rassoc '(nil . -1) (cdr (its-get-kst/t term)))))
- (while (null
- (eq (setq term (its-get-next-state term (aref input i)))
- state))
- (setq i (1+ i) kst (its-get-kst/t term))
- (if (null (assq -1 (car kst)))
- (its-make-next-state term -1
- (its-get-keyseq term) output (- len i)))
- (setq c+b (its-make-class+back nil (1- (- len i))))
- (if (null (rassoc c+b (cdr kst)))
- (its-define-otherwise term
- (its-make-otherwise output c+b))))))
+ (output (concat (if s s (capitalize shengmu)) (if y y yunmu) "\e(0@\e(B"))
+ state term-state)
+ (setq state (its-defrule* input output))
+ (its-make-next-state state ? output)
+ (its-make-next-state state ?0 output)
+ (setq term-state (its-prev-terminal-state its-parent-states))
+ (if term-state
+ (let ((back (- (length (its-get-keyseq term-state)) (length input)))
+ (output (its-get-output (its-get-next-state term-state -1)))
+ (parents its-parent-states))
+ (while (null (eq (car parents) term-state))
+ (its-make-next-state (car parents) -1 output (1+ back))
+ (its-defrule-otherwise (car parents) output nil back)
+ (setq back (1+ back)
+ parents (cdr parents)))))
state))
(defmacro its-do-sisheng-table (list)
(ss (list ,@shengmu)) s cs state i)
(while ss
(setq s (car ss)
+ ss (cdr ss)
cs (capitalize s)
state (its-define-qingsheng s y cs qing))
- (setq i 1)
- (while (<= i 4)
- (its-make-next-state state (+ ?0 i)
- (concat s y i)
- (concat cs (nth i ,yunmu) its-pinyin-term))
- (setq i (1+ i)))
- (setq ss (cdr ss)))))
+ (its-make-next-state state ?1 (concat cs (nth 1 ,yunmu) "\e(0@\e(B"))
+ (its-make-next-state state ?2 (concat cs (nth 2 ,yunmu) "\e(0@\e(B"))
+ (its-make-next-state state ?3 (concat cs (nth 3 ,yunmu) "\e(0@\e(B"))
+ (its-make-next-state state ?4 (concat cs (nth 4 ,yunmu) "\e(0@\e(B")))))
(defmacro its-define-pinyin-table ()
'(let ((- "") (B "b") (C "c") (D "d") (F "f") (G "g") (H "h")
(UN '("un" "\e(01\e(Bn" "\e(02\e(Bn" "\e(03\e(Bn" "\e(04\e(Bn" "un" ))
(UO '("uo" "u\e(0-\e(B" "u\e(0.\e(B" "u\e(0/\e(B" "u\e(00\e(B" "uo" )))
+ (its-define-qingsheng "hm" "")
+ (its-define-qingsheng "hng" "")
+ (its-defrule* "m" "m\e(0@\e(B")
+ (its-defrule "m0" "m\e(0@\e(B")
+ (its-defrule* "n" "n\e(0@\e(B")
+ (its-defrule "n0" "n\e(0@\e(B")
+ (its-defrule "n2" "\e(0=@\e(B")
+ (its-defrule "n3" "\e(0>@\e(B")
+ (its-defrule "n4" "\e(0?@\e(B")
+ (its-define-qingsheng "" "ng")
+
(its-do-sisheng-table
(((- B C D F G H K L M N P S T W Y Z CH SH ZH ) A)
((- B C D G H K L M N P S T W Z CH SH ZH ) AI)
((J Q X) (cons "ei" (cdr IE )))
((J Q X) (cons "en" (cdr IN )))
((J Q X) (cons "eng" (cdr ING )))
- ((J Q X) (cons "ou" (cdr IU )))))
-
- (its-define-qingsheng "hm" "")
- (its-define-qingsheng "hng" "")
- (its-define-qingsheng "" "ng")
-
- (its-define-qingsheng "" "m")
- (its-define-qingsheng "" "n")
- (its-defrule "n2" "\e(0=@\e(B")
- (its-defrule "n3" "\e(0>@\e(B")
- (its-defrule "n4" "\e(0?@\e(B"))))
+ ((J Q X) (cons "ou" (cdr IU ))))))))
(define-its-state-machine its-pinyin-cn-map
- "pinyin-cn" "\e$AF4\e(BG" 'Chinese-GB
+ "pinyin-cn" "\e$AF4\e(BG" Chinese-GB
"Map for Pinyin input. (Chinese-GB)"
(defconst its-quanjiao-escape "Z")
(its-defrule-select-mode-temporally "Q" quanjiao-downcase-cn)
(its-define-pinyin-table)
- (its-defoutput* "b " "\e$A2;\e(B")
- (its-defoutput* "c " "\e$A2E\e(B")
- (its-defoutput* "ch " "\e$A3v\e(B")
- (its-defoutput* "d " "\e$A5D\e(B")
- (its-defoutput* "f " "\e$A74\e(B")
- (its-defoutput* "g " "\e$A8v\e(B")
- (its-defoutput* "h " "\e$A:M\e(B")
- (its-defoutput* "i " "\e$AR;\e(B")
- (its-defoutput* "j " "\e$A>M\e(B")
- (its-defoutput* "k " "\e$A?I\e(B")
- (its-defoutput* "l " "\e$AAK\e(B")
- (its-defoutput* "m " "\e$AC?\e(B")
- (its-defoutput* "n " "\e$ADj\e(B")
- (its-defoutput* "p " "\e$AEz\e(B")
- (its-defoutput* "q " "\e$AH%\e(B")
- (its-defoutput* "r " "\e$AHU\e(B")
- (its-defoutput* "s " "\e$AJG\e(B")
- (its-defoutput* "sh " "\e$AIO\e(B")
- (its-defoutput* "t " "\e$AK{\e(B")
- (its-defoutput* "w " "\e$ANR\e(B")
- (its-defoutput* "x " "\e$AOr\e(B")
- (its-defoutput* "y " "\e$ASV\e(B")
- (its-defoutput* "z " "\e$ATZ\e(B")
- (its-defoutput* "zh " "\e$AWE\e(B")
+ (its-defrule "b " "\e$A2;\e(B")
+ (its-defrule "c " "\e$A2E\e(B")
+ (its-defrule "ch " "\e$A3v\e(B")
+ (its-defrule "d " "\e$A5D\e(B")
+ (its-defrule "f " "\e$A74\e(B")
+ (its-defrule "g " "\e$A8v\e(B")
+ (its-defrule "h " "\e$A:M\e(B")
+ (its-defrule "i " "\e$AR;\e(B")
+ (its-defrule "j " "\e$A>M\e(B")
+ (its-defrule "k " "\e$A?I\e(B")
+ (its-defrule "l " "\e$AAK\e(B")
+ (its-defrule "m " "\e$AC?\e(B")
+ (its-defrule "n " "\e$ADj\e(B")
+ (its-defrule "p " "\e$AEz\e(B")
+ (its-defrule "q " "\e$AH%\e(B")
+ (its-defrule "r " "\e$AHU\e(B")
+ (its-defrule "s " "\e$AJG\e(B")
+ (its-defrule "sh " "\e$AIO\e(B")
+ (its-defrule "t " "\e$AK{\e(B")
+ (its-defrule "w " "\e$ANR\e(B")
+ (its-defrule "x " "\e$AOr\e(B")
+ (its-defrule "y " "\e$ASV\e(B")
+ (its-defrule "z " "\e$ATZ\e(B")
+ (its-defrule "zh " "\e$AWE\e(B")
(dolist (ascii '(("0" . "\e$A#0\e(B") ("1" . "\e$A#1\e(B") ("2" . "\e$A#2\e(B") ("3" . "\e$A#3\e(B")
("4" . "\e$A#4\e(B") ("5" . "\e$A#5\e(B") ("6" . "\e$A#6\e(B") ("7" . "\e$A#7\e(B")
(its-defrule "!" "\e$A#!\e(B"))
(define-its-state-machine its-pinyin-tw-map
- "pinyin-tw" "\e$(GQ;\e(BC" 'Chinese-CNS
+ "pinyin-tw" "\e$(GQ;\e(BC" Chinese-CNS
"Map for Pinyin input."
(defconst its-quanjiao-escape "Z")
(its-defrule-select-mode-temporally "Q" quanjiao-downcase-tw)
(its-define-pinyin-table)
- (its-defoutput* "b " "\e$(GDb\e(B")
- (its-defoutput* "c " "\e$(GD_\e(B")
- (its-defoutput* "ch " "\e$(GEx\e(B")
- (its-defoutput* "d " "\e$(GN{\e(B")
- (its-defoutput* "f " "\e$(GE0\e(B")
- (its-defoutput* "g " "\e$(GT6\e(B")
- (its-defoutput* "h " "\e$(GLO\e(B")
- (its-defoutput* "i " "\e$(GD!\e(B")
- (its-defoutput* "j " "\e$(G^s\e(B")
- (its-defoutput* "k " "\e$(GF+\e(B")
- (its-defoutput* "l " "\e$(GD'\e(B")
- (its-defoutput* "m " "\e$(GJd\e(B")
- (its-defoutput* "n " "\e$(GH!\e(B")
- (its-defoutput* "p " "\e$(GJG\e(B")
- (its-defoutput* "q " "\e$(GF*\e(B")
- (its-defoutput* "r " "\e$(GEJ\e(B")
- (its-defoutput* "s " "\e$(GQR\e(B")
- (its-defoutput* "sh " "\e$(GD8\e(B")
- (its-defoutput* "t " "\e$(GEl\e(B")
- (its-defoutput* "w " "\e$(GJ<\e(B")
- (its-defoutput* "x " "\e$(GGW\e(B")
- (its-defoutput* "y " "\e$(GD4\e(B")
- (its-defoutput* "z " "\e$(GGc\e(B")
- (its-defoutput* "zh " "\e$(Gaa\e(B")
+ (its-defrule "b " "\e$(GDb\e(B")
+ (its-defrule "c " "\e$(GD_\e(B")
+ (its-defrule "ch " "\e$(GEx\e(B")
+ (its-defrule "d " "\e$(GN{\e(B")
+ (its-defrule "f " "\e$(GE0\e(B")
+ (its-defrule "g " "\e$(GT6\e(B")
+ (its-defrule "h " "\e$(GLO\e(B")
+ (its-defrule "i " "\e$(GD!\e(B")
+ (its-defrule "j " "\e$(G^s\e(B")
+ (its-defrule "k " "\e$(GF+\e(B")
+ (its-defrule "l " "\e$(GD'\e(B")
+ (its-defrule "m " "\e$(GJd\e(B")
+ (its-defrule "n " "\e$(GH!\e(B")
+ (its-defrule "p " "\e$(GJG\e(B")
+ (its-defrule "q " "\e$(GF*\e(B")
+ (its-defrule "r " "\e$(GEJ\e(B")
+ (its-defrule "s " "\e$(GQR\e(B")
+ (its-defrule "sh " "\e$(GD8\e(B")
+ (its-defrule "t " "\e$(GEl\e(B")
+ (its-defrule "w " "\e$(GJ<\e(B")
+ (its-defrule "x " "\e$(GGW\e(B")
+ (its-defrule "y " "\e$(GD4\e(B")
+ (its-defrule "z " "\e$(GGc\e(B")
+ (its-defrule "zh " "\e$(Gaa\e(B")
(dolist (ascii '(("0" . "\e$(G$!\e(B") ("1" . "\e$(G$"\e(B") ("2" . "\e$(G$#\e(B") ("3" . "\e$(G$$\e(B")
("4" . "\e$(G$%\e(B") ("5" . "\e$(G$&\e(B") ("6" . "\e$(G$'\e(B") ("7" . "\e$(G$(\e(B")
(its-defrule "=" "\e$A#=\e(B") (its-defrule "`" "\e$A#`\e(B")
(its-defrule "\\" "\e$A#\\e(B") (its-defrule "|" "\e$A#|\e(B")
(its-defrule "_" "\e$A#_\e(B") (its-defrule "+" "\e$A#+\e(B")
- (its-defrule "{" "\e$(G!B\e(B") (its-defrule "}" "\e$(G!C\e(B")
+ (its-defrule "{" "\e$A#{\e(B") (its-defrule "}" "\e$A#}\e(B")
(its-defrule "\"" "\e$A#"\e(B") (its-defrule "'" "\e$A#'\e(B")
(its-defrule "<" "\e$A#<\e(B") (its-defrule ">" "\e$A#>\e(B"))
(progn
(its-defrule "=" "\e$(G"8\e(B") (its-defrule "`" "\e$(G!j\e(B")
(its-defrule "\\" "\e$(G"b\e(B") (its-defrule "|" "\e$(G"^\e(B")
(its-defrule "_" "\e$(G"%\e(B") (its-defrule "+" "\e$(G"0\e(B")
- (its-defrule "{" "\e$A#{\e(B") (its-defrule "}" "\e$(G!a\e(B")
+ (its-defrule "{" "\e$(G!B\e(B") (its-defrule "}" "\e$(G!C\e(B")
(its-defrule "\"" "\e$(G!i\e(B") (its-defrule "'" "\e$(G!k\e(B")
(its-defrule "<" "\e$(G"6\e(B") (its-defrule ">" "\e$(G"7\e(B"))
(progn