bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


From: Aaron S. Hawley
Subject: bug#2288: [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  <aaron.s.hawley@gmail.com>

        * play/morse.el (nato-alphabet): New variable for converting text
        to NATO phonetic alphabet by Aaron S. Hawley
        <aaron.s.hawley@gmail.com>.
        (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

Attachment: nato.txt
Description: Text document

Attachment: morse.el-nato.diff
Description: Binary data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]