Make soft hyphen (, u+00AD) pronounced only in "all" level and send it to synth "only below symbol level"
Is your feature request related to a problem? Please describe.
In a blog I frequent, specifically https://ralsina.me/ if you must know, soft hyphens are used after each syllable, probably to aid with hyphenation. These characters are not rendered in some fonts, because that (to separate lines properly) is their sole purpose. Currently, NVDA says "soft hyphen" when each occurs, in all punctuation levels except none.
Describe the solution you'd like
As these characters are not visible and their purpose is clear, I would move the pronunciation level of them to "char" from, I suppose, some.
Describe alternatives you've considered
Additional context
Seems that it is in "most" by default. Still, my point stands, the hyphens are not visible.
Worse: even when setting to Some or None, the unspoken punctuation still breaks up the pronunciation of each word so much as to make the blog undesirable to read.
I think you should complain to the author of this blog about his inaccessible site. It is probably the fault of a Wordpress theme or the like, he may not even know he's doing it. I have never run into this before, I suspect it is not commonly used to solve the problem of word folding.
Which synthesizer are you using? I am using Espeak NG.
I have its pronunciation set to character, and the "send the symbol to synthesizer" to "only below symbol level".
Weirdly, if I use IBMTTS it seems that the symbol gets sent to the synthesizer regardless of that setting, so that might be your problem. I don't know if it's a problem of NVDA or the driver.
cc @davidacm
More important than the symbol level, your request is to set "send the symbol to synthesizer" to "only below symbol level". which is the only way to get the synth driver handle it correctly. Else, if it is on "Never", the text is split in two parts even at symbol level "None". Do you agree with this analysis?
If I change the parameter "send the symbol to synthesizer" to "only below symbol level" and if I set symbol level to None, I have the following status in French:
- eSpeak: OK; It does not seem to be handled in the driver so it is probably managed in the synth itself.
- SAPI5: NOK
- OneCore: NOK
- IBMTTS: NOK
The character could probably be removed before the text is passed to the synth since IMO this character has no sense for a synthesizer. There are two options:
- Option 1: NVDA removes the character after symbol processing and before the text is passed to the synth driver. This is the easiest way because the changes need to be done at one place only. This is valid only if it is confirmed that there is no use case to have this character passed to the synth.
- Option 2: The character is removed in each synth driver; for NVDA drivers (OneCore, SAPI5) this can be done immediately. For external synth drivers:
- Either the synthmaker/ maintainer provides a new driver handling this case
- Or meanwhile, the user sets "send the symbol to synthesizer" to "Never" as it is today.
Regarding the punctuation level, I would set it to "all" instead of "character". Indeed, if you look here, you will see that its usage is not always standardized in all context. For example in MS Word, this character is always visible and is not used as a hint to indicate where a word can be split. But since the HTML use case is probably the most common use case of this character the level "All" is more adapted that "Most" in my opinion.
What do you think?
Good call, if I set it to "never" it also breaks words. I don't understand your second option's second bullet:
Or meanwhile, the user sets "send the symbol to synthesizer" to "Never" as it is today.
I have tried this with IBMTTS, and the result seems to be the same as with "only below symbol level".
So yes, I agree that changing the "send to synthesizer" to "only below symbol level" and symbol level to "all" is a good compromise.
Good call, if I set it to "never" it also breaks words. I don't understand your second option's second bullet:
Or meanwhile, the user sets "send the symbol to synthesizer" to "Never" as it is today.
I have tried this with IBMTTS, and the result seems to be the same as with "only below symbol level".
Yes, my bad. This does not fix anything for synthesizers which do not support soft hyphen.
see also #9343
I actually think this is a duplicate of #9343, that is, it is suggesting a specific fix for #9343 that doesn't cover all cases I'm afraid. Therefore, let's continu the discussion in #9343