Mercurial > emacs
annotate lisp/play/morse.el @ 37678:ebec0594dece
(compile-files): Redirect output of chmod to
/dev/null.
| author | Gerd Moellmann <gerd@gnu.org> |
|---|---|
| date | Fri, 11 May 2001 10:53:56 +0000 |
| parents | f3d3118f2946 |
| children | c6e12c6b1498 |
| rev | line source |
|---|---|
| 13651 | 1 ;;; morse.el --- Convert text to morse code and back. |
| 2 | |
| 3 ;; Copyright (C) 1995 Free Software Foundation, Inc. | |
| 4 | |
| 5 ;; Author: Rick Farnbach <rick_farnbach@MENTORG.COM> | |
|
32298
f3d3118f2946
(morse-region, unmorse-region): Add autoload
Dave Love <fx@gnu.org>
parents:
14169
diff
changeset
|
6 ;; Keywords: games |
| 13651 | 7 |
| 8 ;; This file is part of GNU Emacs. | |
| 9 | |
| 10 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
| 11 ;; it under the terms of the GNU General Public License as published by | |
| 12 ;; the Free Software Foundation; either version 2, or (at your option) | |
| 13 ;; any later version. | |
| 14 | |
| 15 ;; GNU Emacs is distributed in the hope that it will be useful, | |
| 16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 18 ;; GNU General Public License for more details. | |
| 19 | |
| 20 ;; You should have received a copy of the GNU General Public License | |
| 14169 | 21 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
| 22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| 23 ;; Boston, MA 02111-1307, USA. | |
| 13651 | 24 |
|
32298
f3d3118f2946
(morse-region, unmorse-region): Add autoload
Dave Love <fx@gnu.org>
parents:
14169
diff
changeset
|
25 ;;; Commentary: |
|
f3d3118f2946
(morse-region, unmorse-region): Add autoload
Dave Love <fx@gnu.org>
parents:
14169
diff
changeset
|
26 |
|
f3d3118f2946
(morse-region, unmorse-region): Add autoload
Dave Love <fx@gnu.org>
parents:
14169
diff
changeset
|
27 ;; Converts text to Morse code and back with M-x morese-region and |
|
f3d3118f2946
(morse-region, unmorse-region): Add autoload
Dave Love <fx@gnu.org>
parents:
14169
diff
changeset
|
28 ;; M-x unmorse-region (though Morse code is no longer official :-(). |
|
f3d3118f2946
(morse-region, unmorse-region): Add autoload
Dave Love <fx@gnu.org>
parents:
14169
diff
changeset
|
29 |
| 13651 | 30 ;;; Code: |
| 31 | |
| 32 (defvar morse-code '(("a" . ".-") | |
| 33 ("b" . "-...") | |
| 34 ("c" . "-.-.") | |
| 35 ("d" . "-..") | |
| 36 ("e" . ".") | |
| 37 ("f" . "..-.") | |
| 38 ("g" . "--.") | |
| 39 ("h" . "....") | |
| 40 ("i" . "..") | |
| 41 ("j" . ".---") | |
| 42 ("k" . "-.-") | |
| 43 ("l" . ".-..") | |
| 44 ("m" . "--") | |
| 45 ("n" . "-.") | |
| 46 ("o" . "---") | |
| 47 ("p" . ".--.") | |
| 48 ("q" . "--.-") | |
| 49 ("r" . ".-.") | |
| 50 ("s" . "...") | |
| 51 ("t" . "-") | |
| 52 ("u" . "..-") | |
| 53 ("v" . "...-") | |
| 54 ("w" . ".--") | |
| 55 ("x" . "-..-") | |
| 56 ("y" . "-.--") | |
| 57 ("z" . "--..") | |
| 58 ;; Punctuation | |
| 59 ("=" . "-...-") | |
| 60 ("?" . "..--..") | |
| 61 ("/" . "-..-.") | |
| 62 ("," . "--..--") | |
| 63 ("." . ".-.-.-") | |
| 64 (":" . "---...") | |
| 65 ("'" . ".----.") | |
| 66 ("-" . "-....-") | |
| 67 ("(" . "-.--.-") | |
| 68 (")" . "-.--.-") | |
| 69 ;; Numbers | |
| 70 ("0" . "-----") | |
| 71 ("1" . ".----") | |
| 72 ("2" . "..---") | |
| 73 ("3" . "...--") | |
| 74 ("4" . "....-") | |
| 75 ("5" . ".....") | |
| 76 ("6" . "-....") | |
| 77 ("7" . "--...") | |
| 78 ("8" . "---..") | |
| 79 ("9" . "----.")) | |
| 80 "Morse code character set.") | |
| 81 | |
|
32298
f3d3118f2946
(morse-region, unmorse-region): Add autoload
Dave Love <fx@gnu.org>
parents:
14169
diff
changeset
|
82 ;;;###autoload |
| 13651 | 83 (defun morse-region (beg end) |
| 84 "Convert all text in a given region to morse code." | |
| 85 (interactive "r") | |
| 86 (if (integerp end) | |
| 87 (setq end (copy-marker end))) | |
| 88 (save-excursion | |
| 89 (let ((sep "") | |
| 90 str morse) | |
| 91 (goto-char beg) | |
| 92 (while (< (point) end) | |
| 93 (setq str (downcase (buffer-substring (point) (1+ (point))))) | |
| 94 (cond ((looking-at "\\s-+") | |
| 95 (goto-char (match-end 0)) | |
| 96 (setq sep "")) | |
| 97 ((setq morse (assoc str morse-code)) | |
| 98 (delete-char 1) | |
| 99 (insert sep (cdr morse)) | |
| 100 (setq sep "/")) | |
| 101 (t | |
| 102 (forward-char 1) | |
| 103 (setq sep ""))))))) | |
| 104 | |
|
32298
f3d3118f2946
(morse-region, unmorse-region): Add autoload
Dave Love <fx@gnu.org>
parents:
14169
diff
changeset
|
105 ;;;###autoload |
| 13651 | 106 (defun unmorse-region (beg end) |
| 107 "Convert morse coded text in region to ordinary ASCII text." | |
| 108 (interactive "r") | |
| 109 (if (integerp end) | |
| 110 (setq end (copy-marker end))) | |
| 111 (save-excursion | |
| 112 (let (str paren morse) | |
| 113 (goto-char beg) | |
| 114 (while (< (point) end) | |
| 115 (if (null (looking-at "[-.]+")) | |
| 116 (forward-char 1) | |
| 117 (setq str (buffer-substring (match-beginning 0) (match-end 0))) | |
| 118 (if (null (setq morse (rassoc str morse-code))) | |
| 119 (goto-char (match-end 0)) | |
| 120 (replace-match | |
| 121 (if (string-equal "(" (car morse)) | |
| 122 (if (setq paren (null paren)) "(" ")") | |
| 123 (car morse)) t) | |
| 124 (if (looking-at "/") | |
| 125 (delete-char 1)))))))) | |
| 126 | |
| 127 (provide 'morse) | |
| 128 | |
| 129 ;;; morse.el ends here |
