egg-980703.
[elisp/egg.git] / its / zhuyin.el
index ff7213f..7357dac 100644 (file)
        ,@(mapcar (lambda (syl) `(its-define-zhuyin ,@syl))
                 list)))
 
-  (defmacro its-define-zhuyin (shengmu yunmu1 &optional yunmu2 qing-only)
+  (defmacro its-define-zhuyin (shengmu yunmu1 &optional yunmu2 qingsheng)
     `(let ((s (list ,@shengmu))
           (yi (concat (car ,yunmu1) (car ,yunmu2)))
           (yo (concat (nth 1 ,yunmu1) (nth 1 ,yunmu2)))
-          (tone (if ,qing-only "\e(0A\e(B" "\e(0@\e(B"))
+          (tone (if ,qingsheng "\e(0A\e(B" "\e(0@\e(B"))
           in out out1 state)
        (while s
         (setq in (concat (car (car s)) yi)
               out (concat (nth 1 (car s)) yo)
               out1 (concat out tone)
-              state (its-goto-state in nil t))
-        (if (and ,qing-only (its-get-kst/t state))
-            (its-set-output state out)
-          (its-set-output state out1))
-        (its-make-next-state state -1 in out1)
-        (its-make-next-state state ?  (concat in " ") out1)
-        (its-define-otherwise state (its-make-otherwise
-                                     out1
-                                     its-otherwise-back-one))
-        ,(if qing-only
-             nil
-           '(progn
-              (its-make-next-state state ?1 (concat in 1) (concat out "\e(0A\e(B"))
-              (its-make-next-state state ?2 (concat in 2) (concat out "\e(0B\e(B"))
-              (its-make-next-state state ?3 (concat in 3) (concat out "\e(0C\e(B"))
-              (its-make-next-state state ?4 (concat in 4) (concat out "\e(0D\e(B"))))
-        (setq s (cdr s)))))
+              state (its-defrule in out1)
+              s (cdr s))
+        (its-defrule (concat in " ") out1)
+        ,@(if (null qingsheng)
+              '((its-make-next-state state ?1 (concat out "\e(0A\e(B"))
+                (its-make-next-state state ?2 (concat out "\e(0B\e(B"))
+                (its-make-next-state state ?3 (concat out "\e(0C\e(B"))
+                (its-make-next-state state ?4 (concat out "\e(0D\e(B")))))))
 
   (defmacro its-define-zhuyin-table ()
     '(let ((-  '(""  ""))
           (ER  '("^" "\e(0f\e(B")) (OU  '("y" "\e(0a\e(B"))
           (I   '("e" "\e(0g\e(B")) (U   '("x" "\e(0h\e(B")) (V   '("u" "\e(0i\e(B")))
 
-       (mapcar (lambda (s) (its-defrule (car s) (nth 1 s)))
-              (list B P M F D T N L G K H J Q X))
+       (its-define-zhuyin (- H) M nil t)
+       (its-define-zhuyin (- H) '("@" "@") nil t)
+       (its-define-zhuyin (-  ) N nil t)
 
        (its-do-zhuyin-table
-       (((- B P M F D T N L G K H       ZH CH SH   Z C S ) A)
+       (((                              ZH CH SH R Z C S ) -)
+        ((- B P M F D T N L G K H       ZH CH SH   Z C S ) A)
         ((- B P M F       L                              ) O)
         ((-     M   D T N L G K H       ZH CH SH R Z C S ) e)
         ((- B P M   D T N L G K H       ZH CH SH   Z C S ) AI)
         ((- B P M F D T N L G K H       ZH CH SH R Z C S ) ENG)
         ((-                                              ) ER)
         ((-   P M F D T N L G K H       ZH CH SH R Z C S ) OU)
-        ((                              ZH CH SH R Z C S ) -)
         ((- B P M   D T N L       J Q X                  ) I)
         ((-         D     L       J Q X                  ) I A)
         ((-                                              ) I O)
         ((-             N L       J Q X                  ) V E)
         ((-                       J Q X                  ) V AN)
         ((-                       J Q X                  ) V EN)
-        ((-                       J Q X                  ) V ENG)
+        ((-                       J Q X                  ) V ENG)))
 
-        ((- H) M nil t)
-        ((- H) '("@" "@") nil t)
-        ((-  ) N nil t)))
+       (mapcar (lambda (s) (its-defoutput (car s) (nth 1 s)))
+              (list B P M F D T N L G K H J Q X))
 
-       (its-defrule (concat (car N) 2) (concat (nth 1 N) "\e(0B\e(B"))
-       (its-defrule (concat (car N) 3) (concat (nth 1 N) "\e(0C\e(B"))
-       (its-defrule (concat (car N) 4) (concat (nth 1 N) "\e(0D\e(B")))))
+       (its-defrule (concat (car N) 2) (concat (nth 1 N) "\e(0B\e(B"))
+       (its-defrule (concat (car N) 3) (concat (nth 1 N) "\e(0C\e(B"))
+       (its-defrule (concat (car N) 4) (concat (nth 1 N) "\e(0D\e(B")))))
 
 (define-its-state-machine its-zhuyin-cn-map
-  "zhuyin-cn" "\e$AW"\e(BG" 'Chinese-GB
+  "zhuyin-cn" "\e$AW"\e(BG" Chinese-GB
   "Map for Zhuyin input. (Chinese-GB)"
 
   (defconst its-quanjiao-escape "Z")
     (its-defrule "?" "\e$A!"\e(B"))
 
 (define-its-state-machine its-zhuyin-tw-map
-  "zhuyin-tw" "\e$(GNC\e(BC" 'Chinese-CNS
+  "zhuyin-tw" "\e$(GNC\e(BC" Chinese-CNS
   "Map for Zhuyin input."
 
   (defconst its-quanjiao-escape "Z")
        (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"`\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"))
     (progn
       (its-defrule "#"  "#")  (its-defrule "$"  "$")
        (its-defrule "("  "\e$(G!>\e(B")  (its-defrule ")"  "\e$(G!?\e(B")
        (its-defrule "~"  "\e$(G"D\e(B")
        (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"^\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"))
     (progn
       (its-defrule "#"  "#")  (its-defrule "$"  "$")