--- Begin Message ---
Subject: |
[patch] NATO support in morse.el |
Date: |
Wed, 11 Feb 2009 09:54:16 -0500 |
I've added support to Emacs to convert text into the NATO phonetic
alphabet. I added it to the existing Morse code converter (morse.el),
using the existing code to complete the task. The commands are M-x
nato-region and M-x denato-region. (M-x unnato-region just wasn't as
fun sounding).
This is all an amusement, but I find this feature helpful to use
occasionally in phone conversations at work. I suppose I'd rather
convert small bits of text at a time, and have the output shown in the
Emacs echo area than converting the region "in place". I predict
people will probably want to try and integrate the functions in
morse.el to avoid duplicating the same code as I have done.
The patch is attached, and the file nato.txt helped me loosely confirm
that the conversion has a one-to-one correspondence.
Thanks for Emacs.
/a
2009-02-11 Aaron S. Hawley <address@hidden>
* play/morse.el (nato-alphabet): New variable for converting text
to NATO phonetic alphabet by Aaron S. Hawley
<address@hidden>.
(morse-region, unmorse-region): Add * to interactive forms.
(nato-region, denato-region): New functions.
--- morse.el 10 Feb 2009 22:43:49 -0500 1.19
+++ morse.el 11 Feb 2009 00:05:37 -0500
@@ -26,6 +26,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" . ".-")
@@ -92,10 +95,64 @@
("@" . ".--.-."))
"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."
- (interactive "r")
+ (interactive "*r")
(if (integerp end)
(setq end (copy-marker end)))
(save-excursion
@@ -118,7 +175,7 @@
;;;###autoload
(defun unmorse-region (beg end)
"Convert morse coded text in region to ordinary ASCII text."
- (interactive "r")
+ (interactive "*r")
(if (integerp end)
(setq end (copy-marker end)))
(save-excursion
@@ -137,6 +194,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)
;; arch-tag: 3331e6c1-9a9e-453f-abfd-163a9c3f93a6
nato.txt
Description: Text document
morse.el-nato.diff
Description: Binary data
--- End Message ---
--- Begin Message ---
Subject: |
Re: [patch] NATO support in morse.el |
Date: |
Mon, 07 Mar 2011 02:37:40 -0500 |
User-agent: |
Gnus (www.gnus.org), GNU Emacs (www.gnu.org/software/emacs/) |
Version: 24.1
Alfa-Papa-Papa-Lima-India-Echo-Delta;
Tango-Hotel-Alfa-November-Kilo-Sierra-Stop
--- End Message ---