X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/dcd12c89db5fd376f80a878759c1a6dff18dfcb3..937640a621a4ce2e5e56eaecca37a2a28a584318:/lisp/rot13.el diff --git a/lisp/rot13.el b/lisp/rot13.el index 9c83132070..bcf4252d14 100644 --- a/lisp/rot13.el +++ b/lisp/rot13.el @@ -1,8 +1,8 @@ -;;; rot13.el --- display a buffer in rot13. +;;; rot13.el --- display a buffer in rot13 -;; Copyright (C) 1988 Free Software Foundation, Inc. +;; Copyright (C) 1988,2002 Free Software Foundation, Inc. -;; Author: Howard Gayle: +;; Author: Howard Gayle ;; Maintainer: FSF ;; This file is part of GNU Emacs. @@ -18,19 +18,24 @@ ;; 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, 675 Mass Ave, Cambridge, MA 02139, USA. +;; 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. ;;; Commentary: -;; The single entry point, `rot13-other-window', performs a Caesar cipher -;; encrypt/decrypt on the current buffer and displays the result in another +;; The entry point, `rot13-other-window', performs a Caesar cipher +;; encrypt/decrypt on the current buffer and displays the result in another ;; window. Rot13 encryption is sometimes used on USENET as a read-at-your- ;; own-risk wrapper for material some might consider offensive, such as ;; ethnic humor. ;; ;; Written by Howard Gayle. ;; This hack is mainly to show off the char table stuff. +;; +;; New entry points, `rot13', `rot13-string', and `rot13-region' that +;; performs Ceasar cipher encrypt/decrypt on buffers and strings, was +;; added by Simon Josefsson. ;;; Code: @@ -44,10 +49,52 @@ table) "Char table for rot 13 display.") +(defvar rot13-translate-table + (let ((str (make-string 127 0)) + (i 0)) + (while (< i 127) + (aset str i i) + (setq i (1+ i))) + (setq i 0) + (while (< i 26) + (aset str (+ i ?a) (+ (% (+ i 13) 26) ?a)) + (aset str (+ i ?A) (+ (% (+ i 13) 26) ?A)) + (setq i (1+ i))) + str) + "String table for rot 13 translation.") + +;;;###autoload +(defun rot13 (object &optional start end) + "Return Rot13 encryption of OBJECT, a buffer or string." + (if (bufferp object) + (with-current-buffer object + (rot13-region start end)) + (rot13-string object))) + +;;;###autoload +(defun rot13-string (string) + "Return Rot13 encryption of STRING." + (with-temp-buffer + (insert string) + (rot13-region (point-min) (point-max)) + (buffer-string))) + +;;;###autoload +(defun rot13-region (start end) + "Rot13 encrypt the region between START and END in current buffer." + (interactive "r") + (translate-region start end rot13-translate-table)) + ;;;###autoload (defun rot13-other-window () "Display current buffer in rot 13 in another window. -To terminate the rot13 display, delete that window." +The text itself is not modified, only the way it is displayed is affected. + +To terminate the rot13 display, delete that window. As long as that window +is not deleted, any buffer displayed in it will become instantly encoded +in rot 13. + +See also `toggle-rot13-mode'." (interactive) (let ((w (display-buffer (current-buffer) t))) (set-window-display-table w rot13-display-table))) @@ -63,4 +110,5 @@ To terminate the rot13 display, delete that window." (provide 'rot13) +;;; arch-tag: ad5b9ca8-946c-4414-996f-e9b1bf9ec79f ;;; rot13.el ends here