From e6ebbfe18adb615d3ad399d6d3f75f6796f7d814 Mon Sep 17 00:00:00 2001 From: tomo Date: Wed, 31 Jul 2002 10:18:43 +0000 Subject: [PATCH] Move emacs-lisp/mule-caesar.el to mail/. --- mail/mule-caesar.el | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 mail/mule-caesar.el diff --git a/mail/mule-caesar.el b/mail/mule-caesar.el new file mode 100644 index 0000000..7f58584 --- /dev/null +++ b/mail/mule-caesar.el @@ -0,0 +1,81 @@ +;;; mule-caesar.el --- ROT 13-47 Caesar rotation utility + +;; Copyright (C) 1997,1998 Free Software Foundation, Inc. + +;; Author: MORIOKA Tomohiko +;; Keywords: ROT 13-47, caesar, mail, news, text/x-rot13-47 + +;; This file is part of APEL (A Portable Emacs Library). + +;; 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, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Code: + +(defun mule-caesar-region (start end &optional stride-ascii) + "Caesar rotation of current region. +Optional argument STRIDE-ASCII is rotation-size for Latin alphabet +\(A-Z and a-z). For non-ASCII text, ROT-N/2 will be performed in any +case (N=charset-chars; 94 for 94 or 94x94 graphic character set; 96 +for 96 or 96x96 graphic character set)." + (interactive "r\nP") + (setq stride-ascii (if stride-ascii + (mod stride-ascii 26) + 13)) + (save-excursion + (save-restriction + (narrow-to-region start end) + (goto-char start) + (while (< (point)(point-max)) + (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)))) + ))) + ))))) + + +(require 'product) +(product-provide (provide 'mule-caesar) (require 'apel-ver)) + +;;; mule-caesar.el ends here -- 1.7.10.4