Mercurial > emacs
annotate lisp/rot13.el @ 94472:ca8b29b92087
*** empty log message ***
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Tue, 29 Apr 2008 07:10:55 +0000 |
parents | 1e3a407766b9 |
children | ee5932bf781d |
rev | line source |
---|---|
74262
1ef61f432321
(rot13-display-table, rot13-translate-table, rot13, rot13-string, rot13-region,
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
1 ;;; rot13.el --- display a buffer in ROT13 |
658
7cbd4fcd8b0f
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
583
diff
changeset
|
2 |
74442 | 3 ;; Copyright (C) 1988, 2001, 2002, 2003, 2004, 2005, |
79721 | 4 ;; 2006, 2007, 2008 Free Software Foundation, Inc. |
845 | 5 |
38412
253f761ad37b
Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents:
38038
diff
changeset
|
6 ;; Author: Howard Gayle |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
658
diff
changeset
|
7 ;; Maintainer: FSF |
583 | 8 |
9 ;; This file is part of GNU Emacs. | |
10 | |
11 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
12 ;; it under the terms of the GNU General Public License as published by | |
78236
9355f9b7bbff
Switch license to GPLv3 or later.
Glenn Morris <rgm@gnu.org>
parents:
75347
diff
changeset
|
13 ;; the Free Software Foundation; either version 3, or (at your option) |
583 | 14 ;; any later version. |
15 | |
16 ;; GNU Emacs is distributed in the hope that it will be useful, | |
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 ;; GNU General Public License for more details. | |
20 | |
21 ;; You should have received a copy of the GNU General Public License | |
14169 | 22 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
64091 | 23 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
24 ;; Boston, MA 02110-1301, USA. | |
583 | 25 |
7942 | 26 ;;; Commentary: |
583 | 27 |
45514
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
28 ;; The entry point, `rot13-other-window', performs a Caesar cipher |
49597
e88404e8f2cf
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
45514
diff
changeset
|
29 ;; encrypt/decrypt on the current buffer and displays the result in another |
74262
1ef61f432321
(rot13-display-table, rot13-translate-table, rot13, rot13-string, rot13-region,
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
30 ;; window. ROT13 encryption is sometimes used on USENET as a read-at-your- |
2315
9e7ec92a4fdf
Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
845
diff
changeset
|
31 ;; own-risk wrapper for material some might consider offensive, such as |
9e7ec92a4fdf
Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
845
diff
changeset
|
32 ;; ethnic humor. |
9e7ec92a4fdf
Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
845
diff
changeset
|
33 ;; |
3769 | 34 ;; Written by Howard Gayle. |
583 | 35 ;; This hack is mainly to show off the char table stuff. |
45514
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
36 ;; |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
37 ;; New entry points, `rot13', `rot13-string', and `rot13-region' that |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
38 ;; performs Ceasar cipher encrypt/decrypt on buffers and strings, was |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
39 ;; added by Simon Josefsson. |
583 | 40 |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
658
diff
changeset
|
41 ;;; Code: |
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
658
diff
changeset
|
42 |
583 | 43 (defvar rot13-display-table |
44 (let ((table (make-display-table)) | |
45 (i 0)) | |
46 (while (< i 26) | |
2524
d026367ad08e
(rot13-display-table): Use `vector', not `make-rope'.
Richard M. Stallman <rms@gnu.org>
parents:
2522
diff
changeset
|
47 (aset table (+ i ?a) (vector (+ (% (+ i 13) 26) ?a))) |
d026367ad08e
(rot13-display-table): Use `vector', not `make-rope'.
Richard M. Stallman <rms@gnu.org>
parents:
2522
diff
changeset
|
48 (aset table (+ i ?A) (vector (+ (% (+ i 13) 26) ?A))) |
583 | 49 (setq i (1+ i))) |
50 table) | |
74262
1ef61f432321
(rot13-display-table, rot13-translate-table, rot13, rot13-string, rot13-region,
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
51 "Char table for ROT13 display.") |
583 | 52 |
45514
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
53 (defvar rot13-translate-table |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
54 (let ((str (make-string 127 0)) |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
55 (i 0)) |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
56 (while (< i 127) |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
57 (aset str i i) |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
58 (setq i (1+ i))) |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
59 (setq i 0) |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
60 (while (< i 26) |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
61 (aset str (+ i ?a) (+ (% (+ i 13) 26) ?a)) |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
62 (aset str (+ i ?A) (+ (% (+ i 13) 26) ?A)) |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
63 (setq i (1+ i))) |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
64 str) |
74262
1ef61f432321
(rot13-display-table, rot13-translate-table, rot13, rot13-string, rot13-region,
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
65 "String table for ROT13 translation.") |
45514
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
66 |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
67 ;;;###autoload |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
68 (defun rot13 (object &optional start end) |
74262
1ef61f432321
(rot13-display-table, rot13-translate-table, rot13, rot13-string, rot13-region,
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
69 "Return ROT13 encryption of OBJECT, a buffer or string." |
45514
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
70 (if (bufferp object) |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
71 (with-current-buffer object |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
72 (rot13-region start end)) |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
73 (rot13-string object))) |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
74 |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
75 ;;;###autoload |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
76 (defun rot13-string (string) |
74262
1ef61f432321
(rot13-display-table, rot13-translate-table, rot13, rot13-string, rot13-region,
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
77 "Return ROT13 encryption of STRING." |
45514
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
78 (with-temp-buffer |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
79 (insert string) |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
80 (rot13-region (point-min) (point-max)) |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
81 (buffer-string))) |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
82 |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
83 ;;;###autoload |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
84 (defun rot13-region (start end) |
74262
1ef61f432321
(rot13-display-table, rot13-translate-table, rot13, rot13-string, rot13-region,
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
85 "ROT13 encrypt the region between START and END in current buffer." |
45514
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
86 (interactive "r") |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
87 (translate-region start end rot13-translate-table)) |
a7fc02accfb3
(rot13-translate-table): New variable.
Simon Josefsson <jas@extundo.com>
parents:
38412
diff
changeset
|
88 |
2522
c93900809245
(rot13-other-window): Add autoload.
Richard M. Stallman <rms@gnu.org>
parents:
2315
diff
changeset
|
89 ;;;###autoload |
583 | 90 (defun rot13-other-window () |
74262
1ef61f432321
(rot13-display-table, rot13-translate-table, rot13, rot13-string, rot13-region,
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
91 "Display current buffer in ROT13 in another window. |
38038
f874bc96a6a5
(rot13-other-window): Some more doc fix.
Eli Zaretskii <eliz@gnu.org>
parents:
38034
diff
changeset
|
92 The text itself is not modified, only the way it is displayed is affected. |
f874bc96a6a5
(rot13-other-window): Some more doc fix.
Eli Zaretskii <eliz@gnu.org>
parents:
38034
diff
changeset
|
93 |
74262
1ef61f432321
(rot13-display-table, rot13-translate-table, rot13, rot13-string, rot13-region,
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
94 To terminate the ROT13 display, delete that window. As long as that window |
38038
f874bc96a6a5
(rot13-other-window): Some more doc fix.
Eli Zaretskii <eliz@gnu.org>
parents:
38034
diff
changeset
|
95 is not deleted, any buffer displayed in it will become instantly encoded |
74262
1ef61f432321
(rot13-display-table, rot13-translate-table, rot13, rot13-string, rot13-region,
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
96 in ROT13. |
38038
f874bc96a6a5
(rot13-other-window): Some more doc fix.
Eli Zaretskii <eliz@gnu.org>
parents:
38034
diff
changeset
|
97 |
38034
ddb7488bec81
(rot13-other-window): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents:
14169
diff
changeset
|
98 See also `toggle-rot13-mode'." |
583 | 99 (interactive) |
100 (let ((w (display-buffer (current-buffer) t))) | |
101 (set-window-display-table w rot13-display-table))) | |
102 | |
8626
fe49c4bb99d4
(toggle-rot13-mode): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8568
diff
changeset
|
103 ;;;###autoload |
fe49c4bb99d4
(toggle-rot13-mode): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8568
diff
changeset
|
104 (defun toggle-rot13-mode () |
74262
1ef61f432321
(rot13-display-table, rot13-translate-table, rot13, rot13-string, rot13-region,
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
105 "Toggle the use of ROT13 encoding for the current window." |
8626
fe49c4bb99d4
(toggle-rot13-mode): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8568
diff
changeset
|
106 (interactive) |
fe49c4bb99d4
(toggle-rot13-mode): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8568
diff
changeset
|
107 (if (eq (window-display-table (selected-window)) rot13-display-table) |
fe49c4bb99d4
(toggle-rot13-mode): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8568
diff
changeset
|
108 (set-window-display-table (selected-window) nil) |
fe49c4bb99d4
(toggle-rot13-mode): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8568
diff
changeset
|
109 (if (null (window-display-table (selected-window))) |
fe49c4bb99d4
(toggle-rot13-mode): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8568
diff
changeset
|
110 (set-window-display-table (selected-window) rot13-display-table)))) |
fe49c4bb99d4
(toggle-rot13-mode): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8568
diff
changeset
|
111 |
583 | 112 (provide 'rot13) |
658
7cbd4fcd8b0f
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
583
diff
changeset
|
113 |
93975
1e3a407766b9
Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
79721
diff
changeset
|
114 ;; arch-tag: ad5b9ca8-946c-4414-996f-e9b1bf9ec79f |
658
7cbd4fcd8b0f
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
583
diff
changeset
|
115 ;;; rot13.el ends here |