diff lisp/egg/egg-jisx0201.el @ 70:131b0175ea99 r20-0b30

Import from CVS: tag r20-0b30
author cvs
date Mon, 13 Aug 2007 09:02:59 +0200
parents
children 8619ce7e4c50
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/egg/egg-jisx0201.el	Mon Aug 13 09:02:59 2007 +0200
@@ -0,0 +1,284 @@
+;; Utility for HankakuKana (jisx0201)
+
+;; This file is part of Egg on Mule (Japanese Environment)
+
+;; Egg is distributed in the forms of patches to GNU
+;; Emacs under the terms of the GNU EMACS GENERAL PUBLIC
+;; LICENSE which is distributed along with GNU Emacs by the
+;; Free Software Foundation.
+
+;; Egg 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 EMACS GENERAL PUBLIC LICENSE for
+;; more details.
+
+;; You should have received a copy of the GNU EMACS GENERAL
+;; PUBLIC LICENSE along with Nemacs; see the file COPYING.
+;; If not, write to the Free Software Foundation, 675 Mass
+;; Ave, Cambridge, MA 02139, USA.
+
+;;; 92.9.24  created for Mule Ver.0.9.6 by K.Shibata <shibata@sgi.co.jp>
+;;; 93.8.3   modified for Mule Ver.1.1 by K.Handa <handa@etl.go.jp>
+;;;	Not to define regexp of Japanese word in this file.
+
+(provide 'jisx0201)
+
+(defvar *katakana-alist*
+  '(( 161 . "(I'(B" )
+    ( 162 . "(I1(B" )
+    ( 163 . "(I((B" )
+    ( 164 . "(I2(B" )
+    ( 165 . "(I)(B" )
+    ( 166 . "(I3(B" )
+    ( 167 . "(I*(B" )
+    ( 168 . "(I4(B" )
+    ( 169 . "(I+(B" )
+    ( 170 . "(I5(B" )
+    ( 171 . "(I6(B" )
+    ( 172 . "(I6^(B" )
+    ( 173 . "(I7(B" )
+    ( 174 . "(I7^(B" )
+    ( 175 . "(I8(B" )
+    ( 176 . "(I8^(B" )
+    ( 177 . "(I9(B" )
+    ( 178 . "(I9^(B" )
+    ( 179 . "(I:(B" )
+    ( 180 . "(I:^(B" )
+    ( 181 . "(I;(B" )
+    ( 182 . "(I;^(B" )
+    ( 183 . "(I<(B" )
+    ( 184 . "(I<^(B" )
+    ( 185 . "(I=(B" )
+    ( 186 . "(I=^(B" )
+    ( 187 . "(I>(B" )
+    ( 188 . "(I>^(B" )
+    ( 189 . "(I?(B" )
+    ( 190 . "(I?^(B" )
+    ( 191 . "(I@(B" )
+    ( 192 . "(I@^(B" )
+    ( 193 . "(IA(B" )
+    ( 194 . "(IA^(B" )
+    ( 195 . "(I/(B" )
+    ( 196 . "(IB(B" )
+    ( 197 . "(IB^(B" )
+    ( 198 . "(IC(B" )
+    ( 199 . "(IC^(B" )
+    ( 200 . "(ID(B" )
+    ( 201 . "(ID^(B" )
+    ( 202 . "(IE(B" )
+    ( 203 . "(IF(B" )
+    ( 204 . "(IG(B" )
+    ( 205 . "(IH(B" )
+    ( 206 . "(II(B" )
+    ( 207 . "(IJ(B" )
+    ( 208 . "(IJ^(B" )
+    ( 209 . "(IJ_(B" )
+    ( 210 . "(IK(B" )
+    ( 211 . "(IK^(B" )
+    ( 212 . "(IK_(B" )
+    ( 213 . "(IL(B" )
+    ( 214 . "(IL^(B" )
+    ( 215 . "(IL_(B" )
+    ( 216 . "(IM(B" )
+    ( 217 . "(IM^(B" )
+    ( 218 . "(IM_(B" )
+    ( 219 . "(IN(B" )
+    ( 220 . "(IN^(B" )
+    ( 221 . "(IN_(B" )
+    ( 222 . "(IO(B" )
+    ( 223 . "(IP(B" )
+    ( 224 . "(IQ(B" )
+    ( 225 . "(IR(B" )
+    ( 226 . "(IS(B" )
+    ( 227 . "(I,(B" )
+    ( 228 . "(IT(B" )
+    ( 229 . "(I-(B" )
+    ( 230 . "(IU(B" )
+    ( 231 . "(I.(B" )
+    ( 232 . "(IV(B" )
+    ( 233 . "(IW(B" )
+    ( 234 . "(IX(B" )
+    ( 235 . "(IY(B" )
+    ( 236 . "(IZ(B" )
+    ( 237 . "(I[(B" )
+    ( 239 . "(I\(B" ) ; (I\(B -> $B%o(B $B$KJQ49$9$k$h$&$K(B
+    ( 238 . "(I\(B" ) ; $B%o$H%n$N=gHV$,8r49$7$F$"$k!#(B
+    ( 240 . "(I((B" )
+    ( 241 . "(I*(B" )
+    ( 242 . "(I&(B" )
+    ( 243 . "(I](B" )
+    ( 244 . "(I3^(B" )
+    ( 245 . "(I6(B" )
+    ( 246 . "(I9(B" )))
+
+(defvar *katakana-kigou-alist*
+  '(( 162 . "(I$(B" )
+    ( 163 . "(I!(B" )
+    ( 166 . "(I%(B" )
+    ( 171 . "(I^(B" )
+    ( 172 . "(I_(B" )
+    ( 188 . "(I0(B" )
+    ( 214 . "(I"(B" )
+    ( 215 . "(I#(B" )))
+
+(defvar *dakuon-list*
+  '( ?$B%+(B ?$B%-(B ?$B%/(B ?$B%1(B ?$B%3(B
+     ?$B%5(B ?$B%7(B ?$B%9(B ?$B%;(B ?$B%=(B
+     ?$B%?(B ?$B%A(B ?$B%D(B ?$B%F(B ?$B%H(B
+     ?$B%O(B ?$B%R(B ?$B%U(B ?$B%X(B ?$B%[(B))
+
+(defvar *handakuon-list* (memq ?$B%O(B *dakuon-list*))
+
+;;;
+;;; $BH>3QJQ49(B
+;;; 
+
+(defun hankaku-katakana-region (start end &optional arg)
+  (interactive "r\nP")
+  (save-restriction
+    (narrow-to-region start end)
+    (goto-char (point-min))
+    (let ((regexp (if arg "\\cS\\|\\cK\\|\\cH" "\\cS\\|\\cK")))
+      (while (re-search-forward regexp (point-max) (point-max))
+	(let* ((ch (preceding-char))
+	       (ch1 (char-component ch 1))
+	       (ch2 (char-component ch 2)))
+	  (cond ((= ?\241 ch1)
+		 (let ((val (cdr (assq ch2 *katakana-kigou-alist*))))
+		   (if val (progn
+			     (delete-char -1)
+			     (insert val)))))
+		((or (= ?\242 ch1) (= ?\250 ch1))
+		 nil)
+		(t
+		 (let ((val (cdr (assq ch2 *katakana-alist*))))
+		   (if val (progn
+			     (delete-char -1)
+			     (insert val)))))))))))
+
+(defun hankaku-katakana-paragraph ()
+  "hankaku-katakana paragraph at or after point."
+  (interactive )
+  (save-excursion
+    (forward-paragraph)
+    (let ((end (point)))
+      (backward-paragraph)
+      (hankaku-katakana-region (point) end ))))
+
+(defun hankaku-katakana-sentence ()
+  "hankaku-katanaka sentence at or after point."
+  (interactive )
+  (save-excursion
+    (forward-sentence)
+    (let ((end (point)))
+      (backward-sentence)
+      (hankaku-katakana-region (point) end ))))
+
+(defun hankaku-katakana-word (arg)
+  (interactive "p")
+  (let ((start (point)))
+    (forward-word arg)
+    (hankaku-katakana-region start (point))))
+
+;;;
+;;; $BA43QJQ49(B
+;;;
+(defun search-henkan-alist (ch list)
+  (let ((ptr list)
+	(result nil))
+    (while ptr
+      (if (string= ch (cdr (car ptr)))
+	  (progn
+	    (setq result (car (car ptr)))
+	    (setq ptr nil))
+	(setq ptr (cdr ptr))))
+    result))
+
+(defun zenkaku-katakana-region (start end)
+  (interactive "r")
+  (save-restriction
+    (narrow-to-region start end)
+    (goto-char (point-min))
+    (while (re-search-forward "\\ck" (point-max) (point-max))
+      (let ((ch (preceding-char))
+	    (wk nil))
+	(cond
+	 ((= ch ?(I^(B)
+	  (save-excursion
+	    (backward-char 1)
+	    (setq wk (preceding-char)))
+	  (cond ((= wk ?$B%&(B)
+		 (delete-char -2)
+		 (insert "$B%t(B"))
+		((setq wk (memq wk *dakuon-list*))
+		 (delete-char -2)
+		 (insert (1+ (car wk))))
+		(t
+		 (delete-char -1)
+		 (insert "$B!+(B"))))
+	 ((= ch ?(I_(B)
+	  (save-excursion
+	    (backward-char 1)
+	    (setq wk (preceding-char)))
+	  (if (setq wk (memq wk *handakuon-list*))
+	      (progn
+		(delete-char -2)
+		(insert (+ 2 (car wk))))
+	    (progn
+	      (delete-char -1)
+	      (insert "$B!,(B"))))
+	 ((setq wk (search-henkan-alist
+		    (char-to-string ch) *katakana-alist*))
+	  (progn
+	    (delete-char -1)
+	    (insert (make-char 'japanese-jisx0208 ?\045 wk))))
+	 ((setq wk (search-henkan-alist
+		    (char-to-string ch) *katakana-kigou-alist*))
+	  (progn
+	    (delete-char -1)
+	    (insert (make-char 'japanese-jisx0208 ?\041 wk)))))))))
+
+(defun zenkaku-katakana-paragraph ()
+  "zenkaku-katakana paragraph at or after point."
+  (interactive )
+  (save-excursion
+    (forward-paragraph)
+    (let ((end (point)))
+      (backward-paragraph)
+      (zenkaku-katakana-region (point) end ))))
+
+(defun zenkaku-katakana-sentence ()
+  "zenkaku-katakana sentence at or after point."
+  (interactive )
+  (save-excursion
+    (forward-sentence)
+    (let ((end (point)))
+      (backward-sentence)
+      (zenkaku-katakana-region (point) end ))))
+
+(defun zenkaku-katakana-word (arg)
+  (interactive "p")
+  (let ((start (point)))
+    (forward-word arg)
+    (zenkaku-katakana-region start (point))))
+
+;;;
+;;;  JISX 0201 fence mode
+;;;
+
+(defun fence-hankaku-katakana  ()
+  (interactive)
+  (hankaku-katakana-region egg:*region-start* egg:*region-end* t))
+
+(defun fence-katakana  ()
+  (interactive)
+  (zenkaku-katakana-region egg:*region-start* egg:*region-end* )
+  (katakana-region egg:*region-start* egg:*region-end*))
+
+(defun fence-hiragana  ()
+  (interactive)
+  (zenkaku-katakana-region egg:*region-start* egg:*region-end*)
+  (hiragana-region egg:*region-start* egg:*region-end*))
+
+(define-key fence-mode-map "\ex"  'fence-hankaku-katakana)