Subject: bug#2288: closed (Re: [patch] NATO support in morse.el)

From: [email-masked] (GNU bug Tracking System)
Date: Mon, 07 Mar 2011 07:38:07 +0000

Your bug report

#2288: [patch] NATO support in morse.el

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
2288: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=2288
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: [patch] NATO support in morse.el
From: Glenn Morris <[email-masked]>
To: [email-masked]
Date: Mon, 07 Mar 2011 02:37:40 -0500
List-Id: <debbugs-submit.debbugs.gnu.org>

Version: 24.1

Alfa-Papa-Papa-Lima-India-Echo-Delta;
Tango-Hotel-Alfa-November-Kilo-Sierra-Stop

Subject: [patch] NATO support in morse.el
From: "Aaron S. Hawley" <[email-masked]>
To: [email-masked]
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  <[email-masked]>

	* play/morse.el (nato-alphabet): New variable for converting text
	to NATO phonetic alphabet by Aaron S. Hawley
	<[email-masked]>.
	(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