Extract navigation state out of SSML <marker>s.
 
Fix markers misserialization.
 
Ensure marker counters are incremented.
 
Propagate local attrs through to output.
 
Read <progress> as a percentage, that's more international.
eSpeak can trivially localize this to it's various locales.
 
Extend MIMEtype dispatch to support alternative stylesheets.
 
Catch more cases of consecutive breaks.
 
Collapse consecutive breaks again.
FIXME: Collapse when one <break> is inside another tag.
 
Implement :target pseudoclass.
Defaults to <main> to further avoid excess clutter from pages.
 
Implement new -rhaps-marker property for controlling user interaction.
 
Extensively refactor to use the CSS engine's counters implementation.
 
Take advantage of new Haskell Stylist assets & pseudoclass filters.
 
Refactor Rhapsode to use new HURL APIs and more leniantly handle MIMEtypes.
 
Serve link.wav with correct MIMEtype.
I converted it to audio/vnd.wav but without updating the metadata
another check concluded eSpeak-NG wouldn't be able to play it.
 
update Accepts header for CSS assets.
 
Output audio cues in live speech.
Turned out I was overcomplicating things, all I needed to do was use file paths not URIs.
eSpeak NG handled it from there.
 
Don't delete downloads, was happening before use.