Spoken Punctuation

2002-01-24 : Trying to tell someone what to type into a computer is always a pain in the butt, because punctuation is important to a computer, but it is always implicit when speaking out loud. You are then forced to say the long names of the special characters so that the typist can understand. This can quickly become a toungue twister.

Voice recognition has come a long ways. It might almost be usable soon. :) However, it would still be difficult to use for writing programs because so much of the content of a program consists of puctiation characters. There's no way you could speak a program to a computer if you had to say the full names of all these characters.

Well, computer users have been coming up with short names for punctuation characters for a long time: bang, star, dot, whack, etc. I was wondering how well this could be extended to the full range of punctuation? I thought I'd give it a shot. Here's my first attempt.

I tried to stick to one sylable words, because the alternates names that are already popular are all one sylable words. They are easy and quick to say. I also tried to use existing names where possible, though there may be some good names already in use that I don't know about.

The key ones were '{' and '}', which don't have any short names that I know of. For '(' I've heard "paren" a lot, but it doesn't lend itself well to indicating open or close. "close paren" is still three sylables. I suppose "bra" and "ket" are names that have been used before to identify a matched set of opening and closing symbols, but they don't extend well to other names. Plus, as I recall, '<' is a "bra", while programmers call '[' a bracket. I've always liked the pair "while" - "whend", so I decided to see if I could adapt that pattern to my punctuation problem. I chose an initial sound ("k" for curly brace, "sk" for square bracket, "p" for parenthesis) and appended it to the final sound ("o" for open, "end" for close or end).

I've heard the name "whack" use for slash and I like it a lot. However, as I heard it used, it was up to the typist to infer whether it was a forward or backward slash (just like the name "slash"). This, of course, won't do. I thought "whick" "whack" make a nice pair, so perhaps I could use them. I chose backslash for "whack" because it's the slash that moves in the English reading direction (left to right, top to bottom). I suppose you could also blame it on the fact that I'm a windows user at heart. :) After choosing tick for ', tock for ` followed naturally.

Actually, coming up with short names for a lot of the symbols was hard. The ones that are in common usage sound good, the rest mostly sound forced. Anyway, here's my first stab at it.

\n endl
\t tab
' ' sep
{ ko (koe)
} kend
[ sko (skoe)
] skend
( po (poe)
) pend
| bar
\ wack
/ wick
? qwem
" qwo (qwoe)
' tick
` tock
: con
; sem or sema
, com or coma
. dot
~ tilda
! bang
@ at
# hash
$ doll
% mod
^ hat
& and
* star or times
- dash or minus
_ ubar (oobar)
= eq (eek)
+ plus
> gray or great
< less

After I thought about it some more, I realized that capitalization is also imporant and hard to convey. I added phrases to act like the shift and capslock keys on the keyboad. They actually sound very good. I also found that a repetition modifier made things easier. Finally, I needed a phrase to escape to normal text since not all of the punctiation names are nonsense sylables. I chose "nip" because it is close to "not punctuation" but is not "nop" which usually means "no operation" to computer people. :)

When using my system for spoken punctuation, all utterances are spelled out in lowercase letters unless indicated otherwise. Any utterance that is one of the punctuation names listed above should be converted to punctuation unles it has been escaped. Otherwise an utterance should produce a letter or whole word. Also, smart indenting is usually assumed.

cap next letter is capitalized
capo (cappo) all letters capitalized until end of identifier
capend (cappend) revert to lowercase
rep <number> <token> repeat <token> <number> times
nip escape next token to be literal and not punctuation

But the real question is, does it work? Well, it's actually not bad, though I've never tried to use it for real. Here are some examples. See what you think. I was usually able to speak each code fragment out loud fairly easily (after a little practice). I also had Microsoft Narrator read the spoken version back to me and thought I understood it pretty well. (The translations with funny spellings were written so Narrator would pronounce them better.)


            if (null!=sLine.match(/(?:^\s*$)|(?:^\s*#)/)) {
                continue;
            }
  • if sep po null bang eq s cap line dot match po wick po qwem con hat wack s star doll pend bar po qwem con hat wack s star hash pend wick pend pend sep ko endl
  • continue sema endl
  • kend endl
                if ("main"!=sMode && "jars"!=sMode && "properties"!=sMode) {
                    throw new Error(-1, "Unknown section type \""+sMode+"\" at line "+nLine+".");
                }
    
  • if sepp, p'hoe, qwo, main, qwo, bang eek, s cap mode, sepp, and and, sepp, qwo, jars, qwo, bang eek, s cap mode, sepp, and and, sepp, qwo, properties, qwo, bang eek, s cap mode, p'hend, sepp, k'hoe, endl
  • throw, sepp, new, sepp, cap error, p'hoe, minus one, comma, sepp, qwo, cap, unknown, sepp, section, sepp, type, sepp, wack, qwo, qwo, plus, s cap mode, plus, qwo, wack, qwo, sepp, nip, at, sepp, line, sepp, qwo, plus, n cap line, plus, qwo, dot, qwo, p'hend, semma, endl
  • k'hend, endl
                WScript.Echo("DCM WebStart version \""+g_sVersion+"\" - OK.");
    
  • cap w cap script dot cap echo, p'hoe, qwo, cap'o d c m, sepp, cap web cap start, sepp, version, sepp, wack, qwo, qwo, plus, g oobar s cap Version, plus, qwo, wack, qwo, sepp, dash, sepp, cap'o O K, dot, qwo, p'hend, sehma, endl
                rgMatch=sLine.match(/\[(\w+)\]/);
    
  • r g cap match, eek, s cap line dot match, p'hoe, wick, wack, sko, p'hoe, wack, w, plus, p'hend, wack, skend, wick, p'hend, sehma, endl
                if (++nIndex>=WScript.Arguments.length) {
    
    if sepp, p'hoe, plus plus, n cap index, gray, eek, cap W cap script dot cap arguments dot length, p'hend, sepp, k'hoe, endl
                +"         [/java <full_path_to_java.exe>]\n"
    
  • plus, qwo, rep nine sepp, sko, wick, java, sepp, less, full, oobar path, oobar to, oobar java dot exe, gray, skend, wack, n, qwo, endl
                <HTML></HTML>
                <BR/>
    
  • less cap'o h t m l gray, less wick cap'o html gray endl
  • less, cap'o, b r, wick, gray
                I like the color gray.
    
  • cap i, sepp, like, sepp, the , sepp, color, sepp, nip gray, dot
    C o m m e n t s :    
    (nothing yet)
    Edit