Mercurial > emacs
annotate lisp/play/morse.el @ 59061:a7985894de81
Comment change.
| author | Richard M. Stallman <rms@gnu.org> |
|---|---|
| date | Tue, 21 Dec 2004 11:50:52 +0000 |
| parents | 58125578390a |
| children | eaa9acd9122c |
| rev | line source |
|---|---|
|
48494
f07e2528571d
(morse-code): Add non-ASCII characters, according
Simon Josefsson <jas@extundo.com>
parents:
38425
diff
changeset
|
1 ;;; morse.el --- convert text to morse code and back -*- coding: utf-8 -*- |
| 13651 | 2 |
| 54081 | 3 ;; Copyright (C) 1995, 2002, 2004 Free Software Foundation, Inc. |
| 13651 | 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 |
| 54081 | 27 ;; Converts text to Morse code and back with M-x morse-region and |
|
32298
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" . "---..") | |
|
48494
f07e2528571d
(morse-code): Add non-ASCII characters, according
Simon Josefsson <jas@extundo.com>
parents:
38425
diff
changeset
|
79 ("9" . "----.") |
|
f07e2528571d
(morse-code): Add non-ASCII characters, according
Simon Josefsson <jas@extundo.com>
parents:
38425
diff
changeset
|
80 ;; Non-ASCII |
|
f07e2528571d
(morse-code): Add non-ASCII characters, according
Simon Josefsson <jas@extundo.com>
parents:
38425
diff
changeset
|
81 ("Ä" . ".-.-") |
|
48496
07981d5d6992
(morse-code): Add Norwegian non-ASCII characters.
Simon Josefsson <jas@extundo.com>
parents:
48494
diff
changeset
|
82 ("Æ" . ".-.-") |
|
48494
f07e2528571d
(morse-code): Add non-ASCII characters, according
Simon Josefsson <jas@extundo.com>
parents:
38425
diff
changeset
|
83 ("Á" . ".--.-") |
|
f07e2528571d
(morse-code): Add non-ASCII characters, according
Simon Josefsson <jas@extundo.com>
parents:
38425
diff
changeset
|
84 ("Å" . ".--.-") |
|
f07e2528571d
(morse-code): Add non-ASCII characters, according
Simon Josefsson <jas@extundo.com>
parents:
38425
diff
changeset
|
85 ;; ligature character?? ("Ch" . "----") |
|
f07e2528571d
(morse-code): Add non-ASCII characters, according
Simon Josefsson <jas@extundo.com>
parents:
38425
diff
changeset
|
86 ("ß" . ".../...") |
|
f07e2528571d
(morse-code): Add non-ASCII characters, according
Simon Josefsson <jas@extundo.com>
parents:
38425
diff
changeset
|
87 ("É" . "..-..") |
|
f07e2528571d
(morse-code): Add non-ASCII characters, according
Simon Josefsson <jas@extundo.com>
parents:
38425
diff
changeset
|
88 ("Ñ" . "--.--") |
|
f07e2528571d
(morse-code): Add non-ASCII characters, according
Simon Josefsson <jas@extundo.com>
parents:
38425
diff
changeset
|
89 ("Ö" . "---.") |
|
48496
07981d5d6992
(morse-code): Add Norwegian non-ASCII characters.
Simon Josefsson <jas@extundo.com>
parents:
48494
diff
changeset
|
90 ("Ø" . "---.") |
| 54081 | 91 ("Ü" . "..--") |
| 92 ;; Recently standardized | |
| 93 ("@" . ".--.-.")) | |
| 13651 | 94 "Morse code character set.") |
| 95 | |
|
32298
f3d3118f2946
(morse-region, unmorse-region): Add autoload
Dave Love <fx@gnu.org>
parents:
14169
diff
changeset
|
96 ;;;###autoload |
| 13651 | 97 (defun morse-region (beg end) |
| 98 "Convert all text in a given region to morse code." | |
| 99 (interactive "r") | |
| 100 (if (integerp end) | |
| 101 (setq end (copy-marker end))) | |
| 102 (save-excursion | |
| 103 (let ((sep "") | |
| 104 str morse) | |
| 105 (goto-char beg) | |
| 106 (while (< (point) end) | |
| 107 (setq str (downcase (buffer-substring (point) (1+ (point))))) | |
| 108 (cond ((looking-at "\\s-+") | |
| 109 (goto-char (match-end 0)) | |
| 110 (setq sep "")) | |
| 111 ((setq morse (assoc str morse-code)) | |
| 112 (delete-char 1) | |
| 113 (insert sep (cdr morse)) | |
| 114 (setq sep "/")) | |
| 115 (t | |
| 116 (forward-char 1) | |
| 117 (setq sep ""))))))) | |
| 118 | |
|
32298
f3d3118f2946
(morse-region, unmorse-region): Add autoload
Dave Love <fx@gnu.org>
parents:
14169
diff
changeset
|
119 ;;;###autoload |
| 13651 | 120 (defun unmorse-region (beg end) |
| 121 "Convert morse coded text in region to ordinary ASCII text." | |
| 122 (interactive "r") | |
| 123 (if (integerp end) | |
| 124 (setq end (copy-marker end))) | |
| 125 (save-excursion | |
| 126 (let (str paren morse) | |
| 127 (goto-char beg) | |
| 128 (while (< (point) end) | |
| 129 (if (null (looking-at "[-.]+")) | |
| 130 (forward-char 1) | |
| 131 (setq str (buffer-substring (match-beginning 0) (match-end 0))) | |
| 132 (if (null (setq morse (rassoc str morse-code))) | |
| 133 (goto-char (match-end 0)) | |
| 134 (replace-match | |
| 135 (if (string-equal "(" (car morse)) | |
| 136 (if (setq paren (null paren)) "(" ")") | |
| 137 (car morse)) t) | |
| 138 (if (looking-at "/") | |
| 139 (delete-char 1)))))))) | |
| 140 | |
| 141 (provide 'morse) | |
| 142 | |
| 52401 | 143 ;;; arch-tag: 3331e6c1-9a9e-453f-abfd-163a9c3f93a6 |
| 13651 | 144 ;;; morse.el ends here |
