X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=mule-caesar.el;h=e03fa2058bce92f1a6fc3f38a60dd04c50ed31e6;hb=329b62714dec924ad4ea1e664f4b0e90391bc513;hp=06020d0d431faac069d6bdf2621ed58c980d2954;hpb=f514b6d1370cc43ee8aca5d91f2cc8583841f203;p=elisp%2Fapel.git diff --git a/mule-caesar.el b/mule-caesar.el index 06020d0..e03fa20 100644 --- a/mule-caesar.el +++ b/mule-caesar.el @@ -24,26 +24,10 @@ ;;; Code: -;; avoid bug of XEmacs -(or (integerp (cdr (split-char ?a))) - (defun split-char (char) - "Return list of charset and one or two position-codes of CHAR." - (let ((charset (char-charset char))) - (if (eq charset 'ascii) - (list charset (char-int char)) - (let ((i 0) - (len (charset-dimension charset)) - (code (if (integerp char) - char - (char-int char))) - dest) - (while (< i len) - (setq dest (cons (logand code 127) dest) - code (lsh code -7) - i (1+ i))) - (cons charset dest) - )))) - ) +(require 'emu) ; for backward compatibility. +(require 'poe) ; char-after. +(require 'poem) ; charset-chars, char-charset, + ; and split-char. (defun mule-caesar-region (start end &optional stride-ascii) "Caesar rotation of current region. @@ -60,43 +44,43 @@ for 96 or 96x96 graphic character set)." (narrow-to-region start end) (goto-char start) (while (< (point)(point-max)) - (let* ((chr (char-after (point))) - (charset (char-charset chr)) - ) - (if (eq charset 'ascii) - (cond ((and (<= ?A chr) (<= chr ?Z)) - (setq chr (+ chr stride-ascii)) - (if (> chr ?Z) - (setq chr (- chr 26)) - ) - (delete-char 1) - (insert chr) - ) - ((and (<= ?a chr) (<= chr ?z)) - (setq chr (+ chr stride-ascii)) - (if (> chr ?z) - (setq chr (- chr 26)) - ) - (delete-char 1) - (insert chr) - ) - (t - (forward-char) - )) - (let* ((stride (lsh (charset-chars charset) -1)) - (ret (mapcar (function - (lambda (octet) - (if (< octet 80) - (+ octet stride) - (- octet stride) - ))) - (cdr (split-char chr))))) - (delete-char 1) - (insert (make-char (char-charset chr) - (car ret)(car (cdr ret)))) - ))))))) - + (let* ((chr (char-after (point)))) + (cond ((and (<= ?A chr) (<= chr ?Z)) + (setq chr (+ chr stride-ascii)) + (if (> chr ?Z) + (setq chr (- chr 26)) + ) + (delete-char 1) + (insert chr) + ) + ((and (<= ?a chr) (<= chr ?z)) + (setq chr (+ chr stride-ascii)) + (if (> chr ?z) + (setq chr (- chr 26)) + ) + (delete-char 1) + (insert chr) + ) + ((<= chr ?\x9f) + (forward-char) + ) + (t + (let* ((stride (lsh (charset-chars (char-charset chr)) -1)) + (ret (mapcar (function + (lambda (octet) + (if (< octet 80) + (+ octet stride) + (- octet stride) + ))) + (cdr (split-char chr))))) + (delete-char 1) + (insert (make-char (char-charset chr) + (car ret)(car (cdr ret)))) + ))) + ))))) -(provide 'mule-caesar) + +(require 'product) +(product-provide (provide 'mule-caesar) (require 'apel-ver)) ;;; mule-caesar.el ends here