summaryrefslogtreecommitdiff
path: root/lisp/play/morse.el
diff options
context:
space:
mode:
authorAaron S. Hawley <aaron.s.hawley@gmail.com>2011-03-06 23:33:11 -0800
committerGlenn Morris <rgm@gnu.org>2011-03-06 23:33:11 -0800
commit16130297d04ceb76a8c1f6649863560bd234697e (patch)
treea7bfd12405fbbc282461e461f55c5a76f2a3c727 /lisp/play/morse.el
parentef272f1fc10a4f8464c886ccc02ea67b2c3b2769 (diff)
downloademacs-16130297d04ceb76a8c1f6649863560bd234697e.tar.gz
morse.el additions from bug#2288.
* lisp/play/morse.el (nato-alphabet, nato-region, denato-region): New variable and functions.
Diffstat (limited to 'lisp/play/morse.el')
-rw-r--r--lisp/play/morse.el104
1 files changed, 104 insertions, 0 deletions
diff --git a/lisp/play/morse.el b/lisp/play/morse.el
index d4a0224ede5..ca7d8ef5496 100644
--- a/lisp/play/morse.el
+++ b/lisp/play/morse.el
@@ -25,6 +25,9 @@
;; Converts text to Morse code and back with M-x morse-region and
;; M-x unmorse-region (though Morse code is no longer official :-().
+;; Converts text to NATO phonetic alphabet and back with M-x
+;; nato-region and M-x denato-region.
+
;;; Code:
(defvar morse-code '(("a" . ".-")
@@ -91,6 +94,60 @@
("@" . ".--.-."))
"Morse code character set.")
+(defvar nato-alphabet '(("a" . "Alfa")
+ ("b" . "Bravo")
+ ("c" . "Charlie")
+ ("d" . "Delta")
+ ("e" . "Echo")
+ ("f" . "Foxtrot")
+ ("g" . "Golf")
+ ("h" . "Hotel")
+ ("i" . "India")
+ ("j" . "Juliett")
+ ("k" . "Kilo")
+ ("l" . "Lima")
+ ("m" . "Mike")
+ ("n" . "November")
+ ("o" . "Oscar")
+ ("p" . "Papa")
+ ("q" . "Quebec")
+ ("r" . "Romeo")
+ ("s" . "Sierra")
+ ("t" . "Tango")
+ ("u" . "Uniform")
+ ("v" . "Victor")
+ ("w" . "Whiskey")
+ ("x" . "Xray")
+ ("y" . "Yankee")
+ ("z" . "Zulu")
+ ;; Numbers
+ ("0" . "Zero")
+ ("1" . "One")
+ ("2" . "Two")
+ ("3" . "Three")
+ ("4" . "Four")
+ ("5" . "Five")
+ ("6" . "Six")
+ ("7" . "Seven")
+ ("8" . "Eight")
+ ("9" . "Niner")
+ ;; Punctuation is not part of standard
+ ("=" . "Equals")
+ ("?" . "Query")
+ ("/" . "Slash")
+ ("," . "Comma")
+ ("." . "Stop")
+ (":" . "Colon")
+ ("'" . "Apostrophe")
+ ("-" . "Dash")
+ ("(" . "Open")
+ (")" . "Close")
+ ("@" . "At"))
+ "NATO phonetic alphabet.
+See ''International Code of Signals'' (INTERCO), United States
+Edition, 1969 Edition (Revised 2003) available from National
+Geospatial-Intelligence Agency at http://www.nga.mil/")
+
;;;###autoload
(defun morse-region (beg end)
"Convert all text in a given region to morse code."
@@ -136,6 +193,53 @@
(if (looking-at "/")
(delete-char 1))))))))
+;;;###autoload
+(defun nato-region (beg end)
+ "Convert all text in a given region to NATO phonetic alphabet."
+ ;; Copied from morse-region. -- ashawley 2009-02-10
+ (interactive "*r")
+ (if (integerp end)
+ (setq end (copy-marker end)))
+ (save-excursion
+ (let ((sep "")
+ str nato)
+ (goto-char beg)
+ (while (< (point) end)
+ (setq str (downcase (buffer-substring (point) (1+ (point)))))
+ (cond ((looking-at "\\s-+")
+ (goto-char (match-end 0))
+ (setq sep ""))
+ ((setq nato (assoc str nato-alphabet))
+ (delete-char 1)
+ (insert sep (cdr nato))
+ (setq sep "-"))
+ (t
+ (forward-char 1)
+ (setq sep "")))))))
+
+;;;###autoload
+(defun denato-region (beg end)
+ "Convert NATO phonetic alphabet in region to ordinary ASCII text."
+ ;; Copied from unmorse-region. -- ashawley 2009-02-10
+ (interactive "*r")
+ (if (integerp end)
+ (setq end (copy-marker end)))
+ (save-excursion
+ (let (str paren nato)
+ (goto-char beg)
+ (while (< (point) end)
+ (if (null (looking-at "[a-z]+"))
+ (forward-char 1)
+ (setq str (buffer-substring (match-beginning 0) (match-end 0)))
+ (if (null (setq nato (rassoc str nato-alphabet)))
+ (goto-char (match-end 0))
+ (replace-match
+ (if (string-equal "(" (car nato))
+ (if (setq paren (null paren)) "(" ")")
+ (car nato)) t)
+ (if (looking-at "-")
+ (delete-char 1))))))))
+
(provide 'morse)
;;; morse.el ends here