* bug#2288: [patch] NATO support in morse.el
@ 2009-02-11 14:54 Aaron S. Hawley
2011-03-07 18:22 ` Aaron S. Hawley
0 siblings, 1 reply; 4+ messages in thread
From: Aaron S. Hawley @ 2009-02-11 14:54 UTC (permalink / raw)
To: bug-gnu-emacs
[-- Attachment #1: Type: text/plain, Size: 4925 bytes --]
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 #2: nato.txt --]
[-- Type: text/plain, Size: 374 bytes --]
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
=
?
/
,
.
:
'
-
(
)
@
0
1
2
3
4
5
6
7
8
9
alfa
bravo
charlie
delta
echo
foxtrot
golf
hotel
india
juliett
kilo
lima
mike
november
oscar
papa
quebec
romeo
sierra
tango
uniform
victor
whiskey
xray
yankee
zulu
equals
query
slash
comma
stop
colon
apostrophe
dash
open
close
at
zero
one
two
three
four
five
six
seven
eight
nine
[-- Attachment #3: morse.el-nato.diff --]
[-- Type: application/octet-stream, Size: 3790 bytes --]
--- 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
^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#2288: [patch] NATO support in morse.el
@ 2009-02-11 15:29 Chong Yidong
2011-03-07 7:37 ` Glenn Morris
0 siblings, 1 reply; 4+ messages in thread
From: Chong Yidong @ 2009-02-11 15:29 UTC (permalink / raw)
To: Aaron S. Hawley; +Cc: 2288
> 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 will take a look at it after the release. Thanks.
^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#2288: [patch] NATO support in morse.el
2009-02-11 15:29 bug#2288: [patch] NATO support in morse.el Chong Yidong
@ 2011-03-07 7:37 ` Glenn Morris
0 siblings, 0 replies; 4+ messages in thread
From: Glenn Morris @ 2011-03-07 7:37 UTC (permalink / raw)
To: 2288-done
Version: 24.1
Alfa-Papa-Papa-Lima-India-Echo-Delta;
Tango-Hotel-Alfa-November-Kilo-Sierra-Stop
^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#2288: [patch] NATO support in morse.el
2009-02-11 14:54 Aaron S. Hawley
@ 2011-03-07 18:22 ` Aaron S. Hawley
0 siblings, 0 replies; 4+ messages in thread
From: Aaron S. Hawley @ 2011-03-07 18:22 UTC (permalink / raw)
To: Glenn Morris; +Cc: 2288
On Mon, Mar 7, 2011 at 2:38 AM, GNU bug Tracking System
<help-debbugs@gnu.org> wrote:
> 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 2288@debbugs.gnu.org.
>
> --
> 2288: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=2288
> GNU Bug Tracking System
> Contact help-debbugs@gnu.org with problems
>
>
> ---------- Forwarded message ----------
> From: Glenn Morris <rgm@gnu.org>
> To: 2288-done@debbugs.gnu.org
> Date: Mon, 07 Mar 2011 02:37:40 -0500
> Subject: Re: [patch] NATO support in morse.el
> Version: 24.1
>
> Alfa-Papa-Papa-Lima-India-Echo-Delta;
> Tango-Hotel-Alfa-November-Kilo-Sierra-Stop
That's great! Very funny.
Thanks.
/a
--
In general, we reserve the right to have a poor
memory--the computer, however, is supposed to
remember! Poor computer. -- Guy Lewis Steele Jr.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2011-03-07 18:22 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-02-11 15:29 bug#2288: [patch] NATO support in morse.el Chong Yidong
2011-03-07 7:37 ` Glenn Morris
-- strict thread matches above, loose matches on Subject: below --
2009-02-11 14:54 Aaron S. Hawley
2011-03-07 18:22 ` Aaron S. Hawley
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.