From 16130297d04ceb76a8c1f6649863560bd234697e Mon Sep 17 00:00:00 2001 From: "Aaron S. Hawley" Date: Sun, 6 Mar 2011 23:33:11 -0800 Subject: [PATCH] morse.el additions from bug#2288. * lisp/play/morse.el (nato-alphabet, nato-region, denato-region): New variable and functions. --- lisp/ChangeLog | 5 +++ lisp/play/morse.el | 104 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 6b7768fe93..673f8a456f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2011-03-07 Aaron S. Hawley + + * play/morse.el (nato-alphabet, nato-region, denato-region): + New variable and functions. (Bug#2288) + 2011-03-06 Stefan Monnier * progmodes/gud.el (gdb-script-syntax-propertize-function): diff --git a/lisp/play/morse.el b/lisp/play/morse.el index d4a0224ede..ca7d8ef549 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 -- 2.20.1