A user at their keyboard with headphones on, listening to their laptop

Why Don’t Screen Readers Always Read What’s on the Screen? Part 1: Punctuation and Typographic Symbols

a monitor showing the text one plus one equals two, with a screen reader saying only one one twoScreen readers are designed to do one thing: read what’s on the screen. That’s why they call them screen readers, right? You would think that screen reader software would have perfected the art of reading text by now, because that was the whole reason why screen readers were invented. If there’s one thing a screen reader ought to do really well, it’s read what’s on the screen.

Unfortunately, screen readers don’t always read what’s on the screen. Sometimes that’s OK, but sometimes that’s really bad. If a screen reader fails to read important text, the user will fail to understand it. It’s not the user’s fault, and it’s usually not the web developer’s fault either. These are problems with the screen reader software itself. It’s high time for screen reader programmers to fix these problems, and to get some consistency across brands of screen readers, because right now it’s kind of a mess… and I’m just talking about text, typographic symbols, and static HTML here: the things that screen readers are supposed to excel at reading.

  • Part 1 of this series focuses on the way screen readers read (or don’t read) punctuation and typographic symbols.
  • Part 2 will focus on the problems with inline semantic markup.
  • Part 3 will focus on problems with pronunciation, including common content — like telephone numbers, dates, and abbreviations — as well as uncommon or new words, or words with more than one possible pronunciation.

You Can’t Count on Screen Readers to Read Most Punctuation or Typographic Symbols

The way screen readers treat punctuation is incredibly inconsistent from one screen reader to another, and there isn’t a single screen reader on the market that can reliably handle the full set of punctuation marks and typographical symbols that you might want to use. If you type an HTML document using all the punctuation marks available on your keyboard and listen to a screen reader read the document in a web browser, you’ll hear only some of the punctuation and characters read aloud to you. If you use HTML entities or other special characters, you’ll hear even less.

This is partly (but not entirely) by design. Screen reader manufacturers have understandably decided that most users don’t need to hear every comma, period, and apostrophe in a document. Screen readers will pause at commas rather than say “comma,” and screen readers will say “don’t” rather than say “don apostrophe t.” Those are reasonable decisions. But every screen reader has major flaws in reading some aspect of typographical symbols.

Here’s a sample of some of the problems:

  • The NVDA screen reader, for instance, doesn’t read hardly any typographical symbols at all in its default configuration, making common symbols like asterisks and plus symbols essentially useless to NVDA users. This means web developers can’t use an asterisk to denote a required field on a form, unless they supplement the asterisk with some other NVDA-friendly method.
  • Similarly, NVDA ignores the plus and equals symbols. It says “five two seven” when it should say “five plus two equals seven,” making it hard — or impossible — to write basic math expressions.
  • JAWS reads the plus symbol correctly, but not the minus symbol. Jaws incorrectly says “five dash two” when it should say “five minus two,” even when using the HTML entity − (not a regular dash) to specify the minus symbol.
  • JAWS also reads the “less than or equal to” symbol incorrectly. JAWS says “equals,” which is wrong. Between NVDA and JAWS, web authors who want to write even the most basic of arithmetic expressions — one plus one, or one minus one, for example — can’t count on screen readers to read them right. That’s a serious limitation.
  • On the Mac side, VoiceOver doesn’t inform users about quotation marks, parentheses, or dashes, making it so users don’t know when quotation or parenthetical phrases begin or end. To its credit, VoiceOver does pause briefly for these elements, but users won’t know the difference between a dash, parentheses, or a quotation, because all pauses sound the same, even though the reasons for the pauses are all different, and should convey different semantic meanings.

These are just some of the examples of where things can go wrong when trying to use basic punctuation or typographic symbols to communicate on the web. These are significant flaws in the most basic of screen reader functions: reading what’s on the screen. There is too much potential for screen readers to miss out on the information that is right there in front of them. I’m not talking about anything complicated here. I’m talking about the text and symbols right there on your keyboard, and the ones available in HTML entities and other standard character sets.

It’s time for screen reader manufacturers to step up to the plate and design software that does a better job of actually reading what’s on the screen

User Verbosity Preferences versus Default Settings

Screen readers have verbosity settings that let users choose how much punctuation to hear. I’m not saying to take away user preferences. Let users choose their own verbosity level, but the default level needs to be high enough for average users to get the information communicated in typical web content by the authors. Authors need to know that they can trust screen readers to read the text that the authors write, and right now, author’s can’t trust screen readers to do that.

There are certainly reasons for users to ignore some kinds of punctuation under some circumstances. It would be annoying to most users to hear every single comma or period in every sentence sentence, for example. And sometimes users would rather hear a pause than hear every opening and closing parenthesis. That’s understandable. By pausing instead of reading all punctuation, screen readers sound more natural and human-like, and that can be a good thing.

But when the punctuation or typographic symbols convey important meaning, users need to be able to hear the punctuation and symbols, or the meaning will be lost. At the extreme end, blind web developers probably need to hear all the punctuation when reading HTML or JavaScript code, for example. They may want to toggle the verbosity setting to “all punctuation” when reading code, and use a less verbose mode for reading prose. There’s no need to force a high verbosity level on all users.

Even so, the verbosity probably should not be set so low by default that the screen reader can’t even read a URL correctly (for example, by not reading the colon or slashes), or convey even the most basic punctuation to readers. NVDA’s settings, in particular, are so sparse that users hear almost no punctuation or symbols at all. That doesn’t seem right, and it leaves authors with a no-win choice of either stripping the document of nearly all punctuation for all users, or writing out everything in words instead of punctuation (like “1 plus 1 equals 2” instead of “1+1=2”), or simply saying “I don’t care what the screen reader does. It should read the text, but it doesn’t. It’s not my fault. I’m not responsible, because I did my part by putting the text in there.”

Screen Reader Flaws Breed Apathy

Screen reader flaws breed apathy among web developers and content writers. Such apathy is counter-productive to the goal of creating an accessible web. Too many people will just assume that screen readers are always a little bit broken, and not bother to investigate workarounds, especially for the simplest tasks, like reading the text and punctuation on the screen. No one should have to wonder if a screen reader will read text.

Testing How Screen Readers Read Typographical Symbols

I knew that screen readers were inconsistent in the way they handled typographical symbols, but I didn’t know all of the intricate details of exactly what they did or didn’t read, so I set up some tests.

Versions Tested:

  • NVDA 2013.3, tested with Firefox 26.0 on Windows 7
  • JAWS 15.0.4203, tested with Internet Explorer 9.0.23 on Windows 7 and Internet Explorer 11 on Windows 8
  • VoiceOver OSX 10.9.1, tested with Safari 7.0 (9537.71)

In all cases, the screen reader language was set to English. The doctype was HTML 5. The character encoding was UTF-8.

I didn’t test every possible typographical character possible; not even close. I chose from among the more common characters; characters that most English-speaking authors would expect screen readers to get right. A more comprehensive test would involve different languages, all the characters in UTF-8, and all the HTML entities. I’m not going to be that thorough. I admit I sympathize with screen reader manufacturers when considering the scale of the task once you consider all possible character sets, but with just this limited set of common characters, the results are still disappointing.

Findings:

JAWS Bugs

First of all, it’s time to fix the bugs, in JAWS in particular. How is it that there are still bugs in screen reader software for reading basic text and typographical symbols? That’s something screen readers should have perfected long, long ago.

JAWS Bugs:
Symbol Markup JAWS says JAWS should say
− “dash” minus
? ≤ “equals” less than or equal to
? ≥ “equals” greater than or equal to
~ ≈ “tilde” approximately equals
? ≠ “question mark” not equals

Safe Characters (all screen readers read the characters out loud):

If you need the typographical symbols to be read out loud explicitly, of the 91 symbols tested, the only “safe” symbols to use across all screen readers tested in their default configurations are these 17:

  • @ (the at symbol)
  • & (ampersand, written either as & or & in the markup)
  • / (slash)
  • © (copyright, written as ©)
  • ® (registered, written as ®)
  • ™ (trademark, written as ™)
  • ¶ (paragraph, written as ¶)
  • • (bullet, written as •)
  • $ (dollar)
  • € (Euro, written as €)
  • £ (British pound, written as £)
  • ¥ (Yen, written as ¥)
  • % (percent)
  • ½ (one half, written as ½)
  • ¼ (one fourth, written as ¼)
  • ¾ (three fourths, written as ¾)
  • ° (degrees, written as °)

Everything else fails in at least one of the three screen readers tested. When I say it “fails,” I mean that the symbol itself isn’t read out loud. Sometimes that’s OK, but often it is not OK.

Safe, But Sometimes Unspoken Characters (often accompanied by a pause or voice inflection)

Just to be clear: just because a screen reader doesn’t read something out loud doesn’t always mean you can’t use it. It just means that the meaning of that symbol will not be communicated explicitly. If the meaning of the symbol is essential to your message, be very cautious in how you use the symbols. If the meaning of a symbol is only tangential or not essential to the message, you have a bit more freedom.

You can use such punctuation as periods, commas, semi-colons, colons, parentheses, brackets, quotation marks, dashes, exclamation points, question marks and some others. JAWS is the most likely of the screen readers to read these kinds of punctuation marks. NVDA is the least likely. Across all three screen readers, most of these punctuation marks will generate pauses, or voice inflections in the case of exclamation marks and question marks. Just don’t expect the screen reader to actually read most of these punctuation marks themselves out loud unless the user pauses and listens character by character, or unless the user changes the default settings of the screen reader.

To give a specific example, if you’re OK with the user simply hearing a pause at the beginning and end of a quotation, you’ll be fine. But if you need the user to know that the reason for the pause is because there are quotation marks, you’re out of luck in all screen readers except JAWS.

Unread Characters (meaning that at least one screen reader will not read the character out loud):

  • ~ (tilde)
  • ‘ (backtick)
  • ! (exclamation mark)
  • ¡ (inverted exclamation mark, written as ¡)
  • # (pound sign)
  • ^ (caret)
  • * (asterisk)
  • ( (left parenthesis)
  • ) (right parenthesis)
  • – (dash)
  • — (m dash, written as —)
  • — (double dash)
  • – (n dash, written as –)
  • _ (underscore)
  • , (comma)
  • . (period)
  • … (pseudo ellipses, three periods)
  • … (ellipses, written as …)
  • \ (backslash)
  • | (vertical bar)
  • ? (question mark)
  • ¿ (inverted question mark, written as ¿)
  • ; (semi-colon)
  • : (colon)
  • ” (quotation mark)
  • ” (quotation mark, written as ")
  • ” (left double quotation mark, written as “)
  • “ (right double quotation mark, written as ”)
  • « (left double angle bracket, written as «)
  • »; (right double angle bracket, written as »)
  • ‹ (left single angle bracket, written as ‹)
  • › (right single angle bracket, written as ›)
  • ‘ (single quote, or apostrophe)
  • ’ (right single quote, written as ’)
  • ‘ (left single quote, written as ‘)
  • { (left brace)
  • } (right brace)
  • [ (left bracket)
  • ] (right bracket)
  • § (section, written as §)
  • · (small bullet, written as ·)
  • † (dagger, written as †)
  • ‡ (double dagger, written as ‡)
  • ? (right arrow, written as →)
  • ? (left arrow, written as ←)
  • ? (up arrow, written as ↑)
  • ? (down arrow, written as ↓)
  • ? (horizontal arrow, written as ↔)
  • ? (left double arrow, written as ⇐)
  • ? (right double arrow, written as ⇒)
  • ? (up double arrow, written as ⇑)
  • ? (down double arrow, written as ⇓)
  • ? (horizontal double arrow, written as ⇔)
  • ? (spades, written as ♠)
  • ? (clubs, written as ♣)
  • ? (hearts, written as ♥)
  • ? (diamonds, written as ♦)
  • + (plus)
  • – (minus, written as −)
  • ± (plus or minus, written as ±)
  • ÷ (divided by, written as ÷)
  • × (multiplied by, written as ×)
  • = (equals)
  • ? (not equals, written as ≠)
  • ? (approximately equals, written as ≈)
  • ‰ (per mil, written as ‰)
  • < (less than, written as &lt;)
  • > (greater than, written as &gt;)
  • ? (less than or equal to, written as &le;)
  • ? (greater than or equal to, written as &ge;)
  • ? (prime, written as &prime;)
  • ? (double prime, written as &Prime;)
  • ? (sum, written as &sum;)

The least verbose of the screen readers tested was NVDA, by a large margin. If not for NVDA, the number of characters read out loud would be much higher. JAWS and VoiceOver have problems of their own though.

Here are the detailed tables showing which symbols were, or weren’t read by which screen readers.

Grammatical Punctuation Marks
Symbol The character by itself In Context JAWS 15 NVDA VoiceOver
tilde ~ https:// www.website.com/ ~user By itself: yes

 

“tilde”

In context: yes

 

“H T T P colon slash slash website dot com slash tilde user”

By itself: No

 

nothing

In context: No

 

“H T T P slash slash website dot com slash user”

(NVDA does NOT mention the tilde or the colon.)

By itself: yes

 

“tilde”

In context: yes

 

“H T T P slash slash website dot com slash tilde user”

(VoiceOver reads the tilde, but not the colon)

backtick mark ` &id=?1? By itself: yes

 

“grave” (the “a” is pronounced with an “ah” sound, like the “a” in “bravo”)

In context: yes

 

“and I D equals grave one grave”

By itself: No

 

nothing

In context: No

“and I D one”

(NVDA does NOT pronounce the tick mark or the equals sign.)

By itself: yes

 

“accent”

In context: No

 

“and I D equals one”

(VoiceOver does NOT read the backtick.)

exclamation mark ! This is exciting!

This is exciting.

By itself: yes

 

“exclaim”

In context: No

 

JAWS does not change voice inflection at all.

By itself: No

 

nothing

In context: yes

 

NVDA changes the inflection very slightly (almost imperceptibly) when there is an exclamation mark at the end of a sentence.

By itself: yes

 

“exclaim”

In context: No

 

Nothing. VoiceOver does not change voice inflection at all when a sentence ends in an exclamation mark.

inverted exclamation mark, typed as &iexcl; ¡ Intersante. ¡Ay caramba!

Intersante. Ay caramba.

By itself: yes

 

“inverted exclaim”

In context: yes

 

JAWS changes the inflection of the last word, but does not mention the inverted exclamation mark at the beginning.

By itself: No

 

nothing

In context: yes

 

NVDA reads the exclamation with a different inflection, but does not mention the inverted exclamation mark at the beginning.

By itself: yes

 

“inverted exclamation mark”

In context: No

 

VoiceOver does NOT change voice inflection. (It also does NOT change language, even though lang=”es” is added to the td tag.

at symbol @ I have a message for @paul By itself: yes

 

“at”

In context: yes

 

“I have a message for at Paul” (But JAWS slurs the “at” and “Paul” together, so people might easily miss the “at”)

By itself: yes

 

“at”

In context: yes

 

“I have a message for at Paul”

By itself: yes

 

“at”

In context: yes

 

“I have a message for at Paul”

pound/hash/number sign # I live at apartment #40 By itself: yes

 

“number”

In context: yes

 

I live at apartment number 40″

By itself: No

 

nothing

In context: No

 

“I live at apartment 40” (NVDA does NOT read the number sign)

By itself: yes

“number”

In context: yes

 

I live at apartment number 4 zero”

caret ^ This is ^not the worst I’ve seen By itself: yes

 

“caret”

In context: yes

 

“This is caret not the worst I’ve seen”

By itself: No

 

nothing

In context: No

 

“This is not the worst I’ve seen

(NVDA does NOT read the caret)

By itself: yes

 

“caret”

In context: yes

 

“This is caret not the worst I’ve seen”

ampersand, typed as &amp; & M&Ms

BB&T

black & white

By itself: yes

 

“and”

In context: yes

  • “M and M S,”
  • “B B and T,”
  • “black and white”
By itself: yes

 

“and”

In context: yes

  • “M and M S,”
  • “B B and T,”
  • “black and white”
By itself: yes

“and”

In context: yes

  • “M and M S,”
  • “B B and T,”
  • “black and white”
ampersand & M&Ms

BB&T

black & white

By itself: yes

 

“and”

In context: yes

  • “M and M S,”
  • “B B and T,”
  • “black and white”
By itself: yes

 

“and”

In context: yes

  • “M and M S,”
  • “B B and T,”
  • “black and white”
By itself: yes

 

“and”

In context: yes

  • “M and M S,”
  • “B B and T,”
  • “black and white”
asterisk * Fields marked with * are required.

Name*

By itself: yes

“star”

In context: yes

  • “Fields marked with star are required”
  • “Name star”
By itself: No

nothing

In context: No

  • “Fields marked with are required” (NVDA does NOT say “star”)
  • “Name” (NVDA does NOT say “star”)
By itself: “star” yes

In context: yes

  • “Fields marked with star are required”
  • “Name star”
left parenthesis ( I am (understandably) excited. By itself: yes

 

“left paren”

In context: yes

 

“I am left paren understandably right paren excited”

By itself: No

 

nothing

In context: No

 

NVDA does not say anything, nor does it pause; it reads straight through

By itself: yes

 

“left paren”

In context: No

 

VoiceOver pauses briefly for the opening and closing parentheses, but does not say anything.

right parenthesis ) I am (understandably) excited. By itself: yes

 

“right paren”

In context: yes

 

“I am left paren understandably right paren excited”

By itself: No

 

nothing

In context: No

 

NVDA does not say anything, nor does it pause; it reads straight through

By itself: yes

 

“right paren”

In context: No

 

VoiceOver pauses briefly for the opening and closing parentheses, but does not say anything.

dash blue-green.

This is — not unexpectedly — a parenthetical clause.

By itself: yes

 

“dash”

In context: yes

 

“blue dash green”

“This is m dash not unexpectedly m dash a parenthetical clause.”

By itself: No

 

nothing

In context: No

 

NVDA does not say anything, nor does it pause; it reads straight through

By itself: yes

 

“dash”

In context: No

 

“blue green”. VoiceOver does not read the dash.

m dash, typed as &mdash; This is also—not unexpectedly—a parenthetical clause. By itself: yes

 

“m dash”

In context: yes

 

“This is also m dash not unexpectedly m dash a parenthetical clause.”

By itself: No

 

nothing

In context: No

 

NVDA does not say anything, nor does it pause; it reads straight through

By itself: yes

 

“m dash”

In context: No

 

VoiceOver pauses briefly for each of the m dashes, but does not say anything.

n dash, typed as &ndash; This is another – not unexpectedly – parenthetical clause.

This is another–not unexpectedly–parenthetical clause.

By itself: yes

 

“n dash”

In context: yes

 

“This is another n dash not unexpectedly n dash parenthetical clause.”

By itself: No

 

nothing

In context: No

 

NVDA does not say anything, nor does it pause; it reads straight through

By itself: yes

 

“n dash”

In context: No

 

VoiceOver pauses briefly for each of the m dashes, without saying anything, but ONLY IF there are spaces between the words and the dashes. Without spaces, VoiceOver does not pause at all.

underscore _ my_file_name.jpg By itself: yes

 

“underline”

In context: yes

 

“my underline file underline name dot J P G”

By itself: No

 

nothing

In context:

“my file name dot J P G” (NVDA does not say “underline”)

By itself: yes

 

“underline”

In context: yes

 

“my underline file underline name dot jaypeg”

comma , The house is green, red, and orange. By itself: yes

 

comma

In context: No

JAWS pauses briefly, but does not say “comma”

By itself: No

nothing

In context: No

 

NVDA pauses briefly, but does not say “comma”

By itself: yes

 

“comma”

In context: No

 

VoiceOver pauses briefly, but does not say “comma”

period . I like cheese. By itself: yes

“period”

In context: No

JAWS pauses, but does not say “period”

By itself: yes

“dot”

In context: No

NVDA pauses, but does not say “period”

By itself: yes

“period”

In context: No

VoiceOver pauses, but does not say “period”

three periods (pseudo ellipses) This sentence trails off… And here is another sentence. By itself: yes

 

“dot dot dot”

In context: yes

 

“This sentence trails off dot dot dot and here is another sentence”

By itself: No

 

nothing

In context: No

NVDA pauses briefly, but does not read the periods

By itself: No

 

nothing

In context: No

VoiceOver does not say “ellipses,” but it does pause longer than normal.

ellipses typed as &#8230; This sentence trails off… And here is another sentence. By itself: yes

 

“ellipses”

In context: No

 

JAWS does not say “ellipses,” but it does pause longer than normal.

By itself: No

 

nothing

In context: No

 

NVDA pauses briefly, but does not read the ellipses

By itself: yes

 

“ellipses”

In context: No

VoiceOver does not say “ellipses,” but it does pause longer than normal.

forward slash / home/products/widgets

Give him/her a prize.

https://www.deque.com

By itself: yes

 

“slash”

In context: yes

  • “home slash products slash widgets”
  • “Give him slash her a prize”
  • H T T P colon slash slash deque dot com”
By itself: yes

 

“slash”

In context: yes

  • “home slash products slash widgets”
  • “Give him slash her a prize”
  • “H T T P slash slash deque dot com”
By itself: yes

 

“slash”

In context: yes

  • “home slash products slash widgets”
  • “Give him slash her a prize”
  • H T T P slash slash deque dot com”
backslash \ c:\folder\file.docx By itself: yes

 

“backslash”

In context: yes

 

“c colon backslash folder backslash file dot docx”

By itself: No

 

nothing

In context: No

 

nothing

By itself: yes

 

“backslash”

In context: yes

 

“c backslash folder backslash file dot docx”

vertical bar | Products | Our web site By itself: yes

 

“vertical bar”

In context: yes

 

“Products vertical bar our web site”

By itself: No

 

nothing

In context: No

 

nothing

By itself: No

 

nothing

In context: yes

 

“Products vertical line our web site”

question mark ? What do you mean?

Are you crazy??

Are you still crazy?!?

By itself: yes

“question?”

In context: yes

  • JAWS changes the voice inflection of the last word in a sentence if the sentence ends in a question mark, to make it sound like someone asking a question.
  • Two question marks, or question marks mixed with exclamation marks are read the same as a single question mark.
By itself: No

 

nothing

In context: yes

  • NVDA changes the voice inflection of the last word in a sentence if the sentence ends in a question mark, to make it sound like someone is asking a question
  • Two question marks, or question marks mixed with exclamation marks are read the same as a single question mark.
By itself: yes

 

“question”

In context: yes

  • VoiceOver changes the voice inflection of the last word in a sentence if the sentence ends in a question mark, to make it sound like someone asking a question.
  • Two question marks, or question marks mixed with exclamation marks are read the same as a single question mark.
inverted question mark, typed as &iquest; ¿ No estoy seguro. ¿Quién soy?

No estoy seguro. Quién soy.

By itself: yes

 

“inverted question”

In context: No

 

JAWS changes the inflection for the question, but does not mention the inverted question mark at the beginning.

By itself: No

 

nothing

In context: No

 

NVDA changes the voice inflection for the question, but does not mention the inverted question mark at the beginning

By itself: yes

 

“inverted question mark”

In context: No

 

VoiceOver does NOT change inflection (and it ignores the lang=”es” set on the td tag)

semi-colon ; The sentence paused; but not for long. By itself: yes

 

“semi-colon”

In context: yes

 

“The sentence paused semi-colon but not for long”

By itself: No

 

nothing

In context: No

 

NVDA pauses briefly, but does NOT read the semi-colon

By itself: yes

 

“semi-colon”

In context: No

 

VoiceOver pauses briefly, but does NOT say “semi-colon”

colon : Gaseous: having the properties of a gas.

https://www.deque.com

By itself: yes

 

“colon”

In context: yes

 

  • “Gaseous colon having the properties of a gas”
  • “H T T P colon slash slash deque dot com”
By itself: No

 

nothing

In context: No

NVDA pauses briefly, but does NOT read the colon

By itself: yes

 

“colon”

In context: No

VoiceOver pauses briefly, but does NOT say “colon”

double quotation mark I feel “fine,” she said, sarcastically. By itself: yes

 

“quote”

In context: yes

 

“I feel quote fine quote she said sarcastically”

By itself: No

 

nothing

In context: No

nothing

By itself: yes

 

“quote”

In context: No

VoiceOver pauses briefly but does NOT say “quote”

double quotation mark, typed as &quot; I feel “fine,” she said, sarcastically. By itself: yes

 

“quote”

In context: yes

 

“I feel quote fine quote she said sarcastically”

By itself: No

 

nothing

In context: No

 

nothing

By itself: yes

 

“quote”

In context: No

 

VoiceOver pauses briefly but does NOT say “quote”

right double quotation mark I feel “fine,” she said, sarcastically. By itself: yes

 

“right quote”

In context: yes

 

“I feel left quote fine right quote she said sarcastically”

By itself: No

nothing

In context: No

 

“I feel fine, she said, sarcastically”

By itself: yes

 

“right double quotation mark”

In context: No

 

VoiceOver pauses briefly but does NOT say anything

left double quotation mark I feel “fine,” she said, sarcastically. By itself: yes

 

“left quote”

In context: yes

“I feel left quote fine right quote she said sarcastically”

By itself: No

nothing

In context: No

 

“I feel fine, she said, sarcastically”

By itself: yes

 

“left double quotation mark”

In context: No

 

VoiceOver pauses briefly but does NOT say anything

left double angle bracket, typed as &laquot; « This is a «word» surrounded by angle brackets. By itself: yes

 

“left double angle bracket”

In context: yes

 

“This is a left double angle bracket word right double angle bracket surrounded by angle brackets”

By itself: No

 

nothing

In context: No

 

“This is a word surrounded by angle brackets”

By itself: yes

 

“left pointing double arrow”

In context: No

 

VoiceOver pauses briefly, but does not pronounce the angle bracket.

right double angle bracket, typed as &raquot; » Home » Products By itself: yes

 

“right double angle bracket”

In context: yes

 

“Home double angle bracket products”

By itself: No

 

nothing

In context: No

 

“Home products”

By itself: yes

 

“right pointing double arrow”

In context: No

 

VoiceOver pauses briefly, but does not pronounce the angle bracket.

(written as &#8249;) This is a ‹word› surrounded by angle brackets. By itself: No

nothing

In context: No

 

“This is a word surrounded by angle brackets”

By itself: No

 

nothing

In context: No

 

“This is a word surrounded by angle brackets”

By itself: yes

 

“left pointing [unintelligible] quotation mark

In context: No

 

VoiceOver pauses briefly, but does not pronounce the angle bracket.

(written as &#8250;) Home › Products By itself: No

 

nothing

In context: No

 

“Home products”

By itself: No

 

nothing

In context: No

“Home products”

By itself: yes

 

“right pointing [unintelligible] quotation mark”

In context: No

 

VoiceOver pauses briefly, but does not pronounce the angle bracket.

single quotation mark, or apostrophe Don’t rock the boat.

This is Mary’s.

This is a ‘quotation’ of sorts.

By itself: yes

 

“apostrophe”

In context:

  • “Don’t rock the boat”
  • “This is Mary’s”
  • No “This is a quotation of sorts” (JAWS does NOT say “apostrophe” here)
By itself: No

 

nothing

In context: No

  • “Don’t rock the boat”
  • “This is Mary’s”
  • “This is a quotation of sorts”
By itself: yes

 

“apostrophe”

In context:

  • “Don’t rock the boat”
  • “This is Mary’s”
  • No “This is a quotation of sorts” (VoiceOver pauses briefly, but does NOT say “apostrophe” here)

 

right single quotation mark, or right apostrophe, typed as &rsquo; Don’t rock the boat.

This is Mary’s

This is a ‘quotation’ of sorts.

By itself: yes

 

“apostrophe”

In context: yes

 

  • “Don’t rock the boat”
  • “This is Mary’s”
  • This is a apostrophe quotation apostrophe of sorts”
By itself: No

nothing

In context: No

  • “Don’t rock the boat”
  • “This is Mary’s”
  • “This is a quotation of sorts”

 

By itself: yes

“apostrophe”

In context:

  • “Don’t rock the boat”
  • “This is Mary’s”
  • No “This is a quotation of sorts” (VoiceOver pauses briefly, but does NOT say anything here)
left single quotation mark, or left apostrophe, typed as &lsquo; This is a ‘quotation’ of sorts. By itself: yes

 

“apostrophe”

In context: yes

 

“This is a apostrophe quotation apostrophe of sorts”

By itself: No

 

nothing

In context: No

 

nothing

By itself: yes

 

“right single quotation mark”

In context: No

 

“This is a quotation of sorts”

(VoiceOver pauses briefly, but does NOT say anything here)

left brace { You should {brace} yourself. By itself: yes

“left brace”

In context: yes

“You should left brace brace right brace yourself”

By itself: No

nothingIn context: No

nothing

“By itself: yes

left brace”

In context: yes

“You should left brace brace right brace yourself”

right brace } You should {brace} yourself. By itself: yes

 

“right brace”

In context: yes

 

“You should left brace brace right brace yourself”

By itself: No

 

nothing

In context: No

 

nothing

By itself: yes

 

“right brace”

In context: yes

 

“You should left brace brace right brace yourself”

left bracket [ You should [bracket] your words. By itself: yes

 

“left bracket”

In context: yes

 

“You should left bracket bracket right bracket your words”

By itself: No

 

nothing

In context: No

 

nothing

By itself: yes

 

“left bracket”

In context: No

 

“You should bracket your words” (VoiceOver pauses briefly, but does NOT say “bracket”)

right bracket ] You should [bracket] your words. By itself: yes

 

“right bracket”

In context: yes

 

“You should left bracket bracket right bracket your words”

By itself: No

 

nothing

In context: No

 

nothing

By itself: yes

 

“right bracket”

In context: No

 

“You should bracket your words”

(VoiceOver pauses briefly, but does NOT say “bracket”)

Typographical Symbols
Symbol The character by itself In Context JAWS 15 NVDA VoiceOver
copyright, written as &copy; © This content © Deque. By itself: yes

 

“copyright”

In context: yes

 

“This content copyright Deque”

By itself: yes

 

“copyright”

In context: yes

 

“This content copyright Deque”

By itself: yes

 

“copyright sign”

In context: yes

 

“This content copyright sign Deque”

registered trademark symbol, written as &reg; ® Spam® By itself: yes

 

“registered”

In context: yes

 

“Spam registered”

By itself: yes

 

“registered”

In context: yes

“Spam registered”

By itself: yes

 

“registered sign”

In context: yes

 

“Spam registered sign”

trademark symbol, TM, written as &trade; Fits like a glove™ By itself: yes

“trademark”In context:yes

“Fits like a glove trademark”

By itself: yes

“trademark”

In context: yes

“Fits like a glove trademark”

By itself: yes

“trademark”In context: yes

“Fits like a glove trademark”

section, written as &sect; § Be sure to read §24.1. By itself: yes

 

“section”

In context: yes

 

“Be sure to read section twenty four point one”

By itself: No

nothing

In context: No

 

“Be sure to read twenty four point one” (NVDA does NOT read the section symbol)

By itself: yes

 

“section symbol”

In context: yes

 

“Be sure to read section symbol two four point one”

paragraph symbol, written as &para; Have you seen ¶3 on page 3? By itself: yes

“paragraph”In context: yes

“Have you seen paragraph three on page three?”

By itself: yes

“paragraph”

In context: yes

“Have you seen paragraph three on page three?”

By itself: yes

I think VoiceOver says “para emoji” but it is really hard to understand.In context: yes

“Have you seen para emoji three on page 3?”

small bullet, written as &middot; · · A phrase · and another phrase By itself: yes

 

“dot”

In context: yes

 

“dot a phrase dot and another phrase”

By itself: No

 

nothing

In context: No

 

“A phrase and another phrase” (NVDA does NOT read the small bullet)

By itself: No

 

nothing

In context: No

 

Voice over does not read the dot or pause at all.

medium bullet, written as &#8226; • A phrase • and another phrase

 

By itself: yes

 

“bullet”

In context: yes

“bullet a phrase bullet and another phrase”

By itself: yes

 

“bullet”

In context: yes

 

“Bullet a new phrase bullet and another phrase”

By itself: yes

 

“bullet”

In context: yes

 

“Bullet a new phrase bullet and another phrase”

dagger, written as &dagger; Read the footnote† By itself: yes

“single dagger”

In context: yes

“Read the footnote single dagger”

By itself: No

 

nothing

In context: No

 

“Read the footnote” (NVDA does NOT read the dagger)

By itself: No

 

nothing

In context: No

 

VoiceOver does NOT read the dagger

double dagger, written as &Dagger; Read the other footnote‡ By itself: yes

 

“double dagger”

In context: yes

 

“Read the other footnote double dagger”

By itself: No

 

nothing

In context: No

 

“Read the other footnote”

(NVDA does NOT read the double dagger)

By itself: No

 

nothing

In context: No

 

VoiceOver does NOT read the double dagger

right arrow, written as &rarr; ? Press the ? key By itself: No

nothing

In context: No

 

“Press the [slight pause] key”

(JAWS pauses, but does not read the character)

By itself: yes

 

“right arrow”

In context: yes

 

“Press the right arrow key”

By itself: yes

 

“right arrow”

In context: yes

 

“Press the right arrow key”

left arrow, written as &lrarr; ? Press the ? key By itself: No

 

nothing

In context: No

 

“Press the [slight pause] key” (JAWS pauses, but does not read the character)

By itself: yes

 

“left arrow”

In context: yes

 

“Press the left arrow key”

By itself: yes

 

“left arrow”

In context: yes

 

“Press the left arrow key”

up arrow, written as &uarr; ? Press the ? key By itself: No

nothing

In context: No

 

“Press the [slight pause] key” (JAWS pauses, but does not read the character)

By itself: No

 

nothing

In context: No

“Press the key” (NVDA does NOT read the up arrow symbol)

By itself: yes

 

“up arrow”

In context: yes

 

“Press the up arrow key”

down arrow, written as &darr; ? Press the ? key By itself: No

 

nothing

In context: No

 

“Press the [slight pause] key” (JAWS pauses, but does not read the character)

By itself: No

 

nothing

In context: No

 

“Press the key” (NVDA does NOT read the down arrow symbol)

By itself: yes

 

“down arrow”

In context: yes

 

“Press the down arrow key”

horizontal arrow, written as &harr; ? Move ? horizontally. By itself: No

 

nothing

In context: No

“Press the [slight pause] key”

(JAWS pauses, but does not read the character)

By itself: No

 

nothing

In context: No

 

“Press the key”

(NVDA does NOT read the horizontal arrow symbol)

By itself: yes

 

“left right arrow”

In context: yes

 

“Move left right arrow horizontally”

double right arrow, written as &rArr; ? Look over there ? at that shark. By itself: No

 

nothing

In context: No

 

“Press the [slight pause] key”

(JAWS pauses, but does not read the character)

By itself: No

 

nothing

In context: No

 

“Press the key”

(NVDA does NOT read the double right arrow symbol)

By itself: No

 

nothing

In context: No

 

Voiceover does NOT read the double arrow, and does NOT pause.

double left arrow, written as &lAarr; ? Look over there ? at that dolphin. By itself: No

 

nothing

In context: No

 

“Press the [slight pause] key” (JAWS pauses, but does not read the character)

By itself: No

 

nothing

In context: No

 

“Press the key” (NVDA does NOT read the double left arrow symbol)

By itself: No

 

nothing

In context: No

 

Voiceover does NOT read the double arrow, and does NOT pause.

double up arrow, written as &uArr; ? Look up there ? at that platypus. By itself: No

nothing

In context: No

 

“Press the [slight pause] key”

(JAWS pauses, but does not read the character)

By itself: No

 

nothing

In context: No

 

“Press the key” (NVDA does NOT read the double up arrow symbol)

By itself: No

 

nothing

In context: No

 

Voiceover does NOT read the double arrow, and does NOT pause.

double down arrow, written as &dArr; ? Look down there ? at that echidna. By itself: No

 

nothing

In context: No

 

“Press the [slight pause] key” (JAWS pauses, but does not read the character)

By itself: No

 

nothing

In context: No

 

“Press the key” (NVDA does NOT read the double down arrow symbol)

By itself: No

 

nothing

In context: No

 

Voiceover does NOT read the double arrow, and does NOT pause.

double horizontal arrow, written as &hArr; ? I’m ? confused. By itself: No

 

nothing

In context: No

 

“Press the [slight pause] key”

(JAWS pauses, but does not read the character)

By itself: No

 

nothing

In context: No

 

“Press the key”

(NVDA does NOT read the horizontal double arrow symbol)

By itself: No

 

nothing

In context: No

 

Voiceover does NOT read the double arrow, and does NOT pause.

playing cards: spades, written as &spades; ? Let’s call a ? a ?. By itself: No

 

nothing

In context: No

 

“Let’s call a a.”

By itself: No

 

nothing

In context: No

 

“Let’s call a a” (NVDA does NOT read the spade symbol)

By itself: yes

 

“spades suit emoji”

In context:yes

 

“Let’s call a spades suit emoji a spades suit emoji”

playing cards: clubs, written as &clubs; ? I found a ?. Today is my lucky day. By itself: No

 

nothing

In context: No

 

“I found a. Today is my lucky day”

By itself: No

 

nothing

In context: No

 

“I found a.

Today is my lucky day.” (NVDA does NOT read the club symbol)

By itself: yes

 

“clubs suit emoji”

In context: yes

 

“I found a spades suit emoji. Today is my lucky day.”

playing cards: hearts, written as &hearts; ? I ? you. By itself: No

 

nothing

In context: No

 

“I you”

By itself: No

 

nothing

In context: No

 

“I you” (NVDA does NOT read the heart symbol)

By itself: yes

 

“hearts suit emoji”

In context: yes

 

“I hearts suit emoji you”

playing cards: diamonds, written as &diams; ? Someone once said a ? is a girl’s best friend. By itself: yes

 

“black diamond suit”

In context: yes

 

“Someone once said a black diamond suit is a girl’s best friend”

By itself: No

 

nothing

In context: No

 

“Someone once said a is a girl’s best friend” (NVDA does NOT read the diamond symbol)

By itself: yes

 

“diamonds suit emoji”

In context: yes

 

“Someone once said a diamonds suit emoji is a girl’s best friend.

 

Currency
Symbol The character by itself In Context JAWS 14 NVDA VoiceOver
dollar symbol $ $21 By itself: yes

 

“dollar”

In context: yes

 

“dollar twenty one”

By itself: yes

 

“Dollar”

In context: yes

 

“Dollar twenty one”

By itself: yes

 

“Dollar”

In context: yes

 

“Dollar two one”

Euro symbol, written as &#8364; €21 By itself: yes

 

“euros”

In context: yes

 

“Twenty one Euros”

By itself: yes

 

“Euros”

In context: yes

 

“Euros twenty one”

By itself: yes

 

“Euro two one”

In context: yes

 

“Euro two one”

Yen symbol, written as &yen; ¥ ¥500 By itself: yes

 

“yen”

In context: yes

 

“Yen five hundred”

By itself: yes

 

“Yen”

In context: yes

 

“Yen five hundred”

By itself: yes

 

“Yen”

In context: yes

 

“Yen five zero zero”

Pound symbol, written as &pound; £ £10 By itself: yes

 

“pounds”

In context: yes

 

“ten pounds”

By itself: yes

 

“Pound”

In context: yes

 

“Pound ten”

By itself: yes

 

“Pound”

In context: yes

 

“Pound one zero”

Mathematical Symbols
Symbol The character by itself In Context JAWS 15 NVDA VoiceOver
plus + 5+2 By itself: yes

 

“plus”

In context: yes

 

“5 plus 2”

By itself: No

 

nothing

In context: No

 

“five two”

(NVDA does NOT read the plus symbol)

By itself: yes

 

“plus”

In context: yes

 

“five plus two”

minus, written as &minus; ? 5?2 By itself: No

 

nothing

In context: No

 

“5 dash 2”

(Note that this is the incorrect interpretation of this symbol)

By itself: yes

 

“minus”

In context: yes

 

“five minus two”

By itself: yes

 

“minus”

In context: yes

 

“five minus two”

plus or minus, written as &plusmn; ± 5±2 By itself: yes

 

“plus or minus”

In context: yes

 

“5 plus or minus 2”

By itself: No

 

nothing

In context: No

 

“five two”

(NVDA does NOT read the plus or minus symbol)

By itself: yes

 

“plus or minus”

In context: yes

 

“five plus or minus two”

divided by, written as &divide; ÷ 5÷2 By itself: yes

 

“divided by”

In context: yes

 

“5 divided by 2”

By itself: No

 

nothing

In context: No

 

“five two”

(NVDA does NOT read the divided by symbol)

By itself: yes

 

“divided by”

In context: yes

 

“five divided by two”

multiplied by, written as &times; × 5×2 By itself: yes

 

“times”

In context: yes

 

“5 times 2”

By itself: No

nothing

In context: No

 

“five two”

(NVDA does NOT read the times symbol)

By itself: yes

 

“times”

In context: yes

 

“five times two”

equal sign = 5=3+2 By itself: yes

 

“equals”

In context: yes

 

“5 equals 3 plus 2”

By itself: No

 

nothing

In context: No

 

“five three two”

(NVDA does NOT read equals or plus)

By itself: yes

 

“equals”

In context: yes

 

“Five equals three plus two”

not equal, written as &ne; ? 5?2 By itself: No

 

nothing

In context: No

 

“5 question mark 2”

(Note that this is the incorrect interpretation of this symbol)

By itself: yes

 

“not equal to”

In context: yes

 

“five not equal to two”

By itself: yes

 

“not equals”

In context: yes

 

“five not equals two”

approximately equal, written as &asymp; ? 5?4.999

5 ? 4.999

By itself: No

 

“tilde”

(Note: this is the wrong interpretation of this symbol)

In context: No

 

“5 tilde 4.999”

(Note: this is the wrong interpretation of this symbol)

By itself: No

 

nothing

In context: No

 

“five four point nine nine nine”

(NVDA does not read the approximately equal symbol)

By itself: yes

 

“Almost equal to”

In context: No

 

VoiceOver does NOT read the symbol at all, whether surrounded by spaces or not. VoiceOver says “five four point nine nine nine.”

percent % 5% By itself: yes

 

“percent”

In context: yes

 

“5 percent”

By itself: yes

 

“percent”

In context: yes

 

“5 percent”

By itself: yes

 

“percent”

In context: yes

 

“five percent”

percent with 2-digit denominator, written as &permil; 5‰ By itself: No

 

nothing

In context: No

 

“five”

(JAWS does not read the symbol at all)

By itself: No

 

nothing

In context: No

 

“five”

(NVDA does not read the per mil symbol)

By itself: yes

“per mil sign”In context: yes

“five per mil”

fraction: half, written as &frac12; ½ ½ cup By itself: yes

“one half”In context: yes

“one half cup”

By itself: yes

“a half”

In context: yes

“a half cup”

By itself: yes

“one half”

In context: yes

“one half cup”

fraction: one quarter, written as &frac14; ¼ ¼ liter By itself: yes

 

“one fourth”

In context: yes

 

“one fourth liter”

By itself: yes

 

“a quarter”

In context: yes

 

“a quarter liter”

By itself: yes

 

“one fourth”

In context: yes

 

“one fourth liter”

fraction: three quarters, written as &frac34; ¾ ¾ kilometer By itself: yes

 

“three fourths”

In context: yes

 

“three fourths kilometer”

By itself: yes

 

“three quarter”

In context: yes

 

“three quarter kilometer”

By itself: yes

 

“three fourths”

In context: yes

 

“three fourths kilometer”

less than, written as &lt; < 5<6 By itself: yes

 

“less”

In context: yes

 

“5 less 6”

By itself: No

 

nothing

In context: No

 

“five six”

By itself: yes

 

“less”

In context: yes

 

“five less than six”

greater than, written as &gt; > 5>4 By itself: yes

 

greater

In context: yes

 

“5 greater 4”

By itself: No

 

nothing

In context: No

 

“five four”

By itself: yes

 

“greater”

In context: yes

 

“five greater than four”

less than or equal, written as &le; ? 5?x By itself: No

 

“equals”

(Note: This is NOT the correct meaning of this symbol)

In context: No

 

“5 equals x”

(Note that this is the incorrect interpretation of this symbol)

By itself: No

 

nothing

In context: No

 

“five x”

(NVDA does NOT read the less than or equal to symbol)

By itself: yes

 

“less than or equal to”

In context: yes

 

“five less than or equal to x”

greater than or equal, written as &ge; ? 5?y By itself: No

 

“equals” (Note: This is NOT the correct meaning of this symbol)

In context: No

 

“5 equals y” (Note that this is the incorrect interpretation of this symbol)

By itself: No

 

nothing

In context: No

 

“five y” (NVDA does NOT read the greater than or equal to symbol)

By itself: yes

 

“greater than or equal to”

In context: yes

 

“five greater than or equal to y”

prime, written as &prime; ? 1? By itself: No

 

nothing

In context: No

 

JAWS does NOT read the symbol at all

By itself: No

 

nothing

In context: No

 

“one”

(NVDA does NOT read the prime symbol)

By itself: yes

 

“prime”

In context: yes

 

“one prime”

double prime, written as &Prime; ? 1? By itself: No

 

nothing

In context: No

 

JAWS does NOT read the symbol at all

By itself: No

 

nothing

In context: No

 

“one” (NVDA does NOT read the double prime symbol)

By itself: yes

 

“double prime”

In context: yes

 

“one double prime”

degree, written as &deg; ° 90° By itself: yes

 

“degrees”

In context: yes

 

“ninety degrees”

By itself: yes

 

“degrees”

In context: yes

 

“ninety degrees”

By itself: yes

 

“degrees”

In context: yes

 

“nine zero degrees”

sum, written as &sum; ? ?i=x+y By itself: No

 

nothing

In context: No

 

“i equals x plus y”

(JAWS does not read the sum symbol at all)

By itself: No

 

nothing

In context: No

“i x y”

(NVDA does NOT read the sum symbol or the equals sign or the plus sign)

By itself: yes (sort of)

 

It’s hard to understand but it sounds like it might be saying “summation,” preceded by some other sounds

In context: No

 

I’m not sure what this is actually saying, but it sounds like “bi equals x plus y”

microns, written as &micro; µ By itself: yes

 

“mu” (sounds like “myoo”)

In context: yes

 

“5 mu”

By itself: yes

 

“micro”

In context: yes

 

“five mu”

By itself: yes

“Greek small letter mu” (sounds like “myoo”)

In context: No

 

VoiceOver does NOT read the character. It simply says “five”

Photo of Paul Bohman

About Paul Bohman

Paul Bohman, PhD, is the Director of Training at Deque. He created Deque University – both the platform and the web accessibility courses within it – and continues to expand Deque University features with the help of a talented team. Paul travels frequently to provide highly-rated accessibility workshops at client sites, at conferences, and at other events. He is also the Chair of the Certification Committee in the International Association of Accessibility Professionals (IAAP). Paul’s accessibility career started in 1999 and has included teaching graduate university classes in web accessibility. For his doctoral dissertation, Paul researched and wrote case studies about curriculum programs teaching web accessibility at the master's level in the US, London, and Austria.
update selasa

Comments 12 responses

  1. There are definitely improvements that the TTS engines used by screen readers could make in terms of punctuation. A couple of thoughts on the rest…

    For new screen reader users, too much punctuation can be overwhelming. It adds to the “noise” of the page, and can actually make it harder to understand content.

    The default punctuation settings are only used when reading content in chunks (page, paragraph, sentence etc.). If someone wants to know what punctuation is being used, they can navigate the content by character to find out.

    In my experience, the reaction from web developers is always strongest when there is too much punctuation being announced. It’s completely unexpected because most sighted people assume a screen reader will talk like someone reading aloud. The inevitable result is that (with every goodintention) developers stop using punctuation properly.

  2. I’m one of the lead developers of NVDA. While I certainly understand your concern, this is a great deal more complicated than your post suggests.

    If I had my way, the punctuation/symbol level would be set to all by default. It’s true that I’m a coder, but I actually have my punctuation set to all for everything I read except books for leisure. This is simply because, as you’ve suggested, I don’t want to miss any information, no matter how small. I also have friends that are by no means coders who also do this. Unfortunately, the majority of users would not accept this.

    Most users seem to want their text read the way it would be spoken for the most part. This becomes rather controversial because, as you say, certain symbols communicate information for which a pause isn’t sufficient; e.g. quotes. However, when someone speaks text, they usually don’t speak quotes. The same is true for colons and dashes. This controversy is even evident in a contradiction in your post. You state, “And sometimes users would rather hear a pause than hear every opening and closing parenthesis,” but later, you note, “VoiceOver doesn’t inform users about quotation marks, parentheses, or dashes.”

    To make this even trickier, symbols are sometimes used for unintended purposes. For example, a border or line might be created using multiple +, -, * or = signs. This annoys users. Of course, in an ideal world, we shouldn’t see this kind of thing; it should be communicated semantically using something like the HTML hr tag. However, in the real world, the web isn’t the only thing users use, and even on the web, despite wishing to the contrary, you can find this kind of thing. We have to serve users in the real world, not an ideal one.

    For cases where symbols need to be spoken differently depending on context, this can sometimes be detected and handled appropriately. For example, NVDA knows the difference between a full stop at the end of a sentence and a dot in the middle of a word or number; e.g. NVDA says “e dot g” for “e.g.” by default, but doesn’t speak full stops at the end of sentences. Perhaps something similar could be achieved for URLs if users want the colon to be silent by default. The caveat is that any such algorithm needs to be extremely efficient, as a screen reader encounters a great deal of text and response needs to be near instantaneous.

    Given the general purpose nature of a screen reader and because we don’t live in a perfect world, I think it’s reasonable to expect that users have at least some awareness of their product’s behaviour and options. If the user suspects they might be missing some information in a particular context, it is extremely simple for them to check. They could move through the text character by character or they could change the punctuation/symbol level and read the text again. (You can change the symbol level with one key press in NVDA.) There are other cases where this is necessary as well. For example, if information is being communicated using font, bold, italic, etc., the user might need to check or turn this on, because most users don’t want it read by default. It should also be noted that the user can customise the symbols in each level if they wish.

    All of this said, we’re certainly open to improvements that could be made in NVDA, assuming our users are happy with them. For NVDA 2014.1, asterisks are now spoken by default as requested by users. Users have also requested that we pause for certain dashes, so we’re looking into this as well. It’s worth noting that we rarely receive any requests from users regarding this, which is why we’ve done little about it. Users are always welcome to make requests via our issue tracker.

  3. Thank you Leonie for your comment, and I’m very thankful, James that you have commented here, since you are a lead developer of NVDA.

    I hear what you’re saying and I understand the conundrum. My comments are critical, but the criticism is meant to be constructive, so I hope they are taken that way.

    I’m very encouraged to hear that asterisks are read by default in NVDA 2014.1. That was definitely one of my biggest concerns. Asterisks are used frequently as a way to designate required form fields, among other things. Some of the other top items on my list would be the pound or hash symbol (#), and all of the basic math symbols: plus, minus, equals, greater than, less than, greater than or equal to, etc. I think it’s pretty safe to assume that when people type math symbols they want them to be read. Yes, I know they can be abused to make horizontal lines or other ASCII art, but I think those are very much the exceptions. And if users do come to a series of dashes or plus symbols, they can jump ahead if necessary. Most people use plus to mean plus and equals to mean equals, and if the math symbols are not read aloud, the meaning is lost.

    I do wonder why NVDA in its default configuration says so little in comparison to other screen readers in their default configuration.

    I also would guess that one of the reasons that you don’t hear more people ask to hear more punctuation is that they don’t know what they’re missing. A screen reader sounds very authoritative when it says “one one two,” as if that’s all there is to hear, but users don’t realize that the text actually said “one plus one equals two.” Users may wonder why the page says “one one two,” but in most situations they probably won’t stick around long enough to figure out what it meant. They’ll just assume it was some numbers that weren’t relevant to what they were reading.

    My biggest concern is that web developers and content writers need to be able to trust screen readers to read what they write. As soon as I tell them that some of the most common symbols aren’t read by screen readers, and that they may have to type out the words “one plus one equals two,” they look at me like I’m crazy. They’re not going to type out those words, and they shouldn’t have to.

    P.S. Not only do I use NVDA, but I’ve contributed at least a little bit to it financially, because I believe in what you do. I just want it to keep improving!

  4. Hi Paul.

    I’ve been a screen reader user for over 20 years and think you may have missed some of the complexities in this area. As James says it’s not always entirely strait forward. For example the way in which something is read out depends on the semantic context in which its used. Take for example the humble full stop. Americans call this a period. In the UK it’s called a full stop. If it’s found in the context of a web address it’s called a dot. If it’s found in the context of a number it’s a point. These are just the variations that I can think of for one single character.

    I will also second Léonie’s point regarding new comers to screen readers. Often they are new to computers, have recently lost their sight or are young and in the first couple of months need the minimum amount of extra data. More experienced users will normally change their default settings. The various jobs my screen readers do for me range from read and writing code, I’m a software engineer, reading and writing technical documents. Editing audio, casually reading books to relax and so on. A different level of punctuation announcement is required for many of these tasks. When I’m coding for example I’ll have my punctuation at “say all”. When reading the latest best seller then I’ll have it at a much lower setting.

    My final point is that the screen reader I prefer, Supernova, has variable punctuation depending on the type of GUI element it’s in and what it’s doing. So if I’m in continuous read mode then I get a different level of punctuation then when I’m reading the same text line by line. Which is a different level to when I’m navigating menus. This means that once I’ve got the settings to my personal preference I get exactly the level of punctuation spoken without me even needing to think about it very much.

    In conclusion, it’s a very complex area which I think the screen reader makers have got just about write and in the end they leave the user to customise what they want spoken.

  5. I am a frequent user of JAWS and NVDA and find that they are both entirely customisable when it comes to the reading of punctuation. I find this blog post is entirely misleading and incorrect. It is possible for the users of many screen readers to decide how much punctuation is read aloud and how different bits of punctuation are represented by pauses or sounds. even voice over on the iPhone, a mobile device, can do this along with talkback for android.

  6. Thank you Nick and Kelsey for the comments. My post is from the perspective of a person creating web content who wants to make sure that all of the meaning is communicated to the audience. I purposely limited my test results to the default settings of the screen readers because, well, those are the default settings, and should be considered as the starting point or the lowest common denominator for ensuring that all meaning is communicated to the audience.

    My post does downplay the complexities of verbosity levels and personal preferences, and that’s on purpose, because as web content creators, we don’t know what settings the person is using. We have to assume that a large number of people are using the default settings.

    I suppose we could alert the user before every important punctuation: hey turn on a higher verbosity level here for this part! But that’s not reasonable. No one is going to do that. As content authors, we need to be able to just write our content and trust that it will be conveyed correctly to readers.

    I’m not saying that it’s always a simple thing to fix. But just because some parts are complex doesn’t mean that all of it is complex. Speak the plus symbol. Easy. Speak the pound sign. Easy. Speak the dash? That’s harder and much more complex because it might be a dash, it might be a minus, and so on. But just because dash is hard doesn’t mean we should ignore pluses, minuses, equals signs, greater than, less than, and so on.

  7. Hi Paul.

    In the end I’d suggest that screen reader manufacturors put punctuation configuration in so that users can have text read as they wish. Surely leaving that choice with the user is the right way to go. The statement that most users don’t know what they are missing is inaccurate.

    As someone who has created and consumed the sort of content I strongly recamend that as long as you’ve made the content of your message clear you let the user choose how they receive that message. I see this as a parallel to allowing the user to choose the different colours they read in. What works for one won’t work for all so leave it in the hands of those that know best, the individual reading the content.

  8. Nick, I fully agree with you that users need to be given the freedom to choose their own verbosity level. No disagreement at all from me on that point.

    When I say users don’t know what they’re missing, that comment is partly in anticipation of part 2 of this series, where I’ll talk about inline semantics. Let me give you an example of what I’m talking about:

    If I write 1+1=2, and if you’re using NVDA with its *DEFAULT* settings, what you’ll hear is “one one two,” which isn’t what the expression actually means.

    Now, take another look at the sentence above. I’ve included not only a statement about the math expression, but a few other items of punctuation. I wrote the word “default” in all capital letters, and I surrounded that with asterisks to emphasize it. In internet terms, I shouted the word. But with NVDA, you didn’t a hear a shout. You didn’t hear capital letters. You didn’t hear asterisks (unless you were using 2014.1, which, according to James, reads the asterisks, thank goodness). Similarly, you didn’t know that I put quotation marks around “one one two.” You also didn’t know that I emphasized the word “means” by surrounding it with <em> tags. And, as I explained all of this, you didn’t hear which words and phrases I put in quotation marks either. If you’re using NVDA, you didn’t know you missed these things. You did hear the text, and it was read just fine, but you missed the nuances of my expression, and those nuances do mean something. Now, in this example, those nuances may be less critical than, say, in reading code or reading poetry or some other kind of text requiring careful attention to detail, but you still missed the nuances.

    And I’m not meaning to pick on NVDA only. You would similarly miss the capital letters and emphasis tags with all of the other screen readers, and would miss the quotation marks with VoiceOver.

  9. One of the points I’m trying to make is that the default verbosity levels of the different screen reader brands are wildly inconsistent. Let users choose their verbosity, yes, of course. Give them that freedom. But can’t we come to some kind of agreement that users do need to hear important characters by default? If users then make the personal choice to decrease the verbosity, then by all means, let them. I realize that the word "important" is subjective, but I would call plus, minus, pound (or hash tag), tilde, and many other characters important. I would let screen readers continue to simply pause at commas, periods and other less critical punctuation marks when used in the middle of prose.

    As web developers, we need to have some reasonable level of confidence in screen readers to read what we write, and right now, I don’t think we have that.

  10. I think you have missed the point of punctuation profiles. If you feel the default punctuation level should be “most” rather than “some”, that’s fine, however the solution you seem to be advocating is adding extra punctuation levels to “some,” thereby making it useless. In your example from a comment above, I in fact heard every character you said I didn’t hear with NVDA (accept for the less-than and greater-than signs… because they weren’t there.) I, a practitioner of screenreader voodoo, changed the setting so it would be more verbose. Deciding what a user’s screenreader reads to the user is between the user and the screenreader; to insinuate a web developer must write out “plus” drastically misrepresents the state of access technology’s interactions with content, as one unfamiliar with such solutions would not understand the fix is a simple combo box away. they could be super helpful and put a tip on the page to change verbosity, but that should be the extent of it. Frankly, given the amount of serious accessibility hurtles on the web such as “dialog” UI elements with no tab order or audio/video browser controls that don’t read at all, it surprises me that so much coverage was given to an issue with a solution while more technically complex problems are left unaddressed.

  11. Hi Drew. Thanks for the feedback. Even though it may seem that I’ve missed the point of punctuation profiles, I don’t think that I have. I’m merely stating that I think the default punctuation level needs to be verbose enough to convey the types of things that people write. I would include asterisks and equals signs and other characters in that category. If I write a sentence like:

    Happiness = a good book and a cozy nook

    I want people to understand what I’m saying. People use all kinds of symbols in all kinds of places, and if you’re a web developer, you need to know that people are going to get that information… unless they’ve turned the verbosity down a notch, in which case that’s the user’s choice. The default shouldn’t be so low that web developers have to worry about ever using symbols of any kind. If a user chooses to reduce the verbosity, that’s fine. That’s their choice. But the trouble is that if the default level is too low, less informed users won’t always know that they’re missing anything at all. That’s a problem.

    And no, I’m not going to claim that this is the most important issue out there. There are bigger issues to solve. But just because there are bigger issues doesn’t mean we can’t talk about this issue too. This was simply an issue that has been bothering me for a very long time, and it seems overdue to be fixed.

Comments are closed.