This document is a work in progress meant to explore some of the common use cases that a read aloud implementation based on Guided Navigation will have to deal with.
<section role="doc-chapter" epub:type="chapter">
<h1>Title of the chapter</h1>
</section>
{
"role": ["section", "chapter"],
"children": [
{
"role": ["heading"],
"level": 1,
"text": "Title of the chapter"
}
]
}
<p>It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife.</p>
{
"role": ["paragraph"],
"text": "It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife."
}
<p>This job requires a certain <em xml:lang="fr">savoir faire</em> that can only be acquired over time.</p>
Using SSML
{
"role": ["paragraph"],
"text": {
"ssml": "<speak xml:lang=\"en\">This job requires a certain <voice xml:lang=\"fr\">savoir faire</voice> that can only be acquired over time.</speak>"
}
}
Using multiple text elements
{
"role": ["paragraph"],
"children": [
{
"text": {
"plain": "This job requires a certain",
"language": "en"
}
},
{
"text": {
"plain": "savoir faire",
"language": "fr"
}
},
{
"text": {
"plain": "that can only be acquired over time.",
"language": "en"
}
}
]
}
<img src="image1.avif" alt="Alternative text using the alt attribute" />
<span role="img" aria-label="Rating: 4 out of 5 stars">
<span>★</span>
<span>★</span>
<span>★</span>
<span>★</span>
<span>☆</span>
</span>
<figure role="img" aria-labelledby="cat-caption">
<pre>
/\_/\
( o.o )
> ^ <
</pre>
<figcaption id="cat-caption">
ASCII Art of a cat face
</figcaption>
</figure>
{
"guided": [
{
"role": ["image"],
"imgref": "image1.avif",
"description": "Alternative text using the alt attribute"
},
{
"role": ["image"],
"description": "Rating: 4 out of 5 stars"
},
{
"role": ["figure", "image"],
"description": "ASCII Art of a cat face"
}
]
}
This is an experimental approach based on templated text where
{pagebreak}
can be substituted by the reading system based on user preferences.
<span id="pg04" role="doc-pagebreak" epub:type="pagebreak" title="4"/>
<p>And the next pagebreak is in the middle <span id="pg05" role="doc-pagebreak" epub:type="pagebreak" title="4"/> of a sentence.</p>
{
"guided": [
{
"role": ["pagebreak"],
"text": "4"
},
{
"role": ["paragraph"],
"text": "And the next pagebreak is in the middle {pagebreak} of a sentence.",
"children": [
{
"role": ["pagebreak"],
"text": "5"
}
]
}
]
}
User preference set to read pagebreaks at the end of the text
User preference set to read pagebreaks in the middle of the text
User preference set to skip pagebreaks
<ul>
<li>First item</li>
<li>Second item</li>
<li>Third item</li>
</ul>
{
"role": ["list"],
"children": [
{
"role": ["listItem"],
"text": "First item"
},
{
"role": ["listItem"],
"text": "Second item"
},
{
"role": ["listItem"],
"text": "Third item"
}
]
}
This is an experimental approach based on templated text where
{noteref}
can be substituted by the reading system based on user preferences.
<p>This text has a footnote in the same resource <a href="#note1" epub:type="noteref" role="doc-noteref">[1]</a> and an endnote <a href="endnote.xhtml#note2" epub:type="noteref" role="doc-noteref">[2]</a>.</p>
<p>This is a paragraph without a footnote.</p>
<aside id="note1" epub:type="footnote" role="doc-footnote">Text of the footnote</aside>
{
"guided": [
{
"role": ["paragraph"],
"text": "This text has a footnote in the same resource {noteref} and an endnote {noteref}.",
"children": [
{
"role": ["noteref"],
"text": "[1]",
"children": [
{
"role": ["footnote", "aside"],
"text": "Text of the footnote"
}
]
},
{
"role": ["noteref"],
"text": "[2]",
"children": [
{
"textref": "endnote.xhtml#note2"
}
]
}
]
},
{
"role": ["paragraph"],
"text": "This is a paragraph without a footnote."
}
]
}
User preference set to read notes at the end of the text
User preference set to read notes in the middle of the text
User preference set to skip notes