Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support mathematical alphanumeric symbols #11570

Closed
sukiletxe opened this issue Sep 7, 2020 · 28 comments · Fixed by #16584
Closed

Support mathematical alphanumeric symbols #11570

sukiletxe opened this issue Sep 7, 2020 · 28 comments · Fixed by #16584
Assignees
Labels
close/worksforme feature/math p4 https://github.com/nvaccess/nvda/blob/master/projectDocs/issues/triage.md#priority triaged Has been triaged, issue is waiting for implementation.
Milestone

Comments

@sukiletxe
Copy link

Is your feature request related to a problem? Please describe.

Currently, mathematical alphanumeric symbols are gaining traction, both in social media (in nicknames for example), and when viewing LaTeX documents converted to docx (I have encountered this twice).

Describe the solution you'd like

It would be useful to have the Mathematical alphanumeric symbols included in NVDA.

Describe alternatives you've considered

This could go to eSpeak NG too, like they do with cyrillic letters. I'm currently considdering both options as equally valid, but I'm biased towards eSpeak NG mainly because that is the only synth I use, so OneCore users wouldn't benefit from this.

Additional context

Unfortunately I do not know how many of these symbols are widely used (I believe not all of them are, but I don't have any evidence for or against it). Also, to make matters worse, they work on similarity. In this Agora discussion thread it says that "Judicial Jocularity Act" is "𝒥𝓊𝒹𝒾𝒸𝒾𝒶𝓁 𝒥𝑜𝒸𝓊𝓁𝒶𝓇𝒾𝓉𝓎 𝒜𝒸𝓉" are in fact the same, but I find some letter missmatches with the Character Information Addon. I believe, however, that just putting the characters here, in eSpeak NG or wherever will improve the situation greatly.

@sukiletxe
Copy link
Author

Any opinions on this? How would one tackle this? Would it be necessary (and enough) to edit symbols.dic and then let the translators translate it? I'm asking because there have been complaints about other screen readers spelling them (because of its misuse as decorative symbols, other screen readers pronounce "math bold / italic / whatever" before each symbol and spell them, just like EspeakNG does with cyrillic letters). In my opinion however spelling them is better than letting the synth choose (most of the time, silence or unicode representation), as NVDA does.

@sukiletxe
Copy link
Author

I've solved this with an addon which uses Unidecode. Here is the addon, I hope I can submit it for review for the official addons soon.

I don't know if I should close this now.

@LeonarddeR
Copy link
Collaborator

I'm not sure whether the symbol dictionary would work for this, likely the speech dictionary might be better here.
Having said that, I really acknowledge this problem, so great to see you're looking into this.

@sukiletxe
Copy link
Author

I don't know how the speech dictionary would work in this case. Can we create an entry for each letter? How would that be different from a symbols dictionary?

Also, I believe the addon solution is more elegant now. Sure, you have to install an addon, select or copy the text which contains the symbols and press a keystroke, but at least it's less verbose than other screen readers which read the symbols one by one with their attributes.

@atnbueno
Copy link

atnbueno commented Jun 15, 2022

Hi. I just found out about NVDA, but I'm familiar with the issue of abusing Math symbols.

Wouldn't it be better to detect this kind of "Unicode abuse" at a word-level instead of character by character? I'm sure there's all kinds of "fake font" texts, and probably more than mathematical ones, but in my experience the mathematical ones use these characters isolated. Would it be possible/enough to treat them as a "fake font" if there is a sequence of them? A lonely "𝕴" may be a Lie algebra, but "𝕴 𝖆𝖒 𝕲𝖗𝖔𝖔𝖙" is clearly not Math 😅

Unfortunately I don't have the programming chops nor the time to do a PR to the NVDA repo, but if I can help in any other way...

@seanbudd seanbudd added the triaged Has been triaged, issue is waiting for implementation. label Jul 28, 2022
@seanbudd
Copy link
Member

As a start, these symbols should be being reported with their Mathematical names by adding them to the Symbols.dic.

We could eventually add an option to read them as how they are presented visually e.g. "𝕴 𝖆𝖒 𝕲𝖗𝖔𝖔𝖙" as "I am Groot" (in a cursive font).

@seanbudd seanbudd added the p4 https://github.com/nvaccess/nvda/blob/master/projectDocs/issues/triage.md#priority label Jul 28, 2022
@seanbudd
Copy link
Member

@atnbueno I don't think a sequence is sufficient to differentiate between how these symbols should reported. For example, a sequence of legitimate math would not be announced in a useful way. Do you have an alternative mechanism for deciding how these should be reported?

@ultrasound1372
Copy link

I think the fake font would be the best way, although it would cause issues in systems where a font doesn't exist, and would make browse mode handling difficult to do. Presumably renderers are calling up some font to handle these symbols anyway as math writing looks very specific. If someone doesn't have font reporting on, the characters would be converted to their unmodified letter equivalents transparently, whereas if they have font reporting on it would say some dummy font name like that from the character "mathematical italic" but only when entering the block, at least in browse mode and perhaps review cursor. Sukil's add-on solution works well enough but to my knowledge is using a bigger hammer than necessary, also downconverting, say, Greek and Cyrillic letters that may look like Latin letters. This has massive ramifications for people who actually read in those languages. My proposal would be based on the information available in unicodedata, which you already ship with and make use of. If the character is within this block, extract the font specifying part of the name for the fake font, and then perform a lookup for the corresponding unmodified character. For example 𝑥 (MATHEMATICAL ITALIC SMALL X) would correspond to x (LATIN SMALL LETTER X). There would be some conditional branching and perhaps regular expression substitution involved, so this might be used to build up an internal dictionary which is used for performance reasons, but it seems like a viable approach for these blocks in particular. There's not much we can do about people using Cyrillic and Greek letters that look kind of like Latin ones for decorative purposes without alienating anyone actually needing to read that, and the language of the synth can't really be relied on either as some synths might internally be able to handle multilingual text in different scripts, see vocalizer's unicode-based automatic language detection. And these blocks contain Greek letters as well which should be converted to their corresponding unmodified Greek counterparts, not similar-looking Latin equivalents! This would also keep equation reading intact for the most part, it might only get slightly odd when people stick multiple letters side by side to indicate a series of multiplication. I think at that point it's better to manually read by character anyway, and you can't automatically break series up because of functions.

@HiEv
Copy link

HiEv commented Jan 30, 2024

It looks like the solution would involve two things:

  1. Add an option to prefer reading mathematical and other symbols as if they were the closest standard alphabetical character or characters. This way, people who are far more likely to encounter these symbols' use as fancy text, will be able to get NVDA to read those characters as though they're normal letters, instead of merely skipping them or misinterpreting them. Unless you're a mathematician, you're unlikely to need the mathematical symbol names, but adding a way to toggle this option via keyboard would probably also be good. (Perhaps add an optional tone to denote when this is happening?)
  2. Add a new dictionary type for each language to translate these special characters into the language's standard characters. This way, any language can have their own translation dictionary from a special symbol or group of symbols into a character or group of characters. This dictionary would allow you to add a symbol like U+2469 (⑩; the number 10 inside of a circle) and have that character be translated as "10". Any characters that are not in this symbol translation dictionary would fall back to their pronunciation in any of the other given dictionaries.

Additionally, I'll note the following website as an example which translates standard ASCII characters into these special symbols:
https://yaytext.com/bold-italic/

If I could assist with this, please let me know.

@Adriani90
Copy link
Collaborator

See #14781. I've created a template that we can use to integrate the symbols in the symbols.dic along with the way they should be pronounced to make equations readable, then we would only need a way to retrieve the full unicode name on demand if needed with either nvda+comma or by pressing nvda+dot four times.
We could call the unicode name from the CLDR data base or the unicodedata database but the unicodedata database does not have localizations.
However, I think it would be a big step forward to have the english unicode names on demand first and then think on how to retrieve localizations. There is I think a localized unicode data base in Windows itself, so there should be a way to get the unicode names according to Windows locale.

@HiEv
Copy link

HiEv commented Feb 6, 2024

@Adriani90 , just to be clear, this particular issue is not about making equations readable. This is about uses of mathematical symbols that look like alphanumeric characters for things other than equations, such as for creating fancy looking text in social media posts, and making NVDA able to read them as though the text is made up of the equivalent standard uppercase and lowercase letters for whatever standard alphabet is appropriate for the user's particular language settings.

As such, the symbols.dic won't help with this, as far as I've been able to determine.

@Adriani90
Copy link
Collaborator

Adriani90 commented Feb 6, 2024 via email

@zstanecic
Copy link
Contributor

zstanecic commented Feb 6, 2024 via email

@HiEv
Copy link

HiEv commented Feb 6, 2024

The problem is that it should be set up so that, out of the box, you can choose to defaulting reading those symbols either as mathematical symbols or as though they're regular letters within words. If you think that this can be done using the symbols dictionary, please explain, but I don't think that that's currently doable with NVDA as-is.

@zstanecic
Copy link
Contributor

zstanecic commented Feb 6, 2024 via email

@Adriani90
Copy link
Collaborator

@HiEv this will be possible as soon as NVDA can report the unicode name of characters on demand by pressing e.g. numpad 2 four times or what ever keystroke will be implemented. Currently we can retrieve on ly the html and the unicode entity syntax but not the actual name. If the unicode names will be implemeented, you don't need to change between letter and unicode name because you hear the letter and if you know the context, you can retrieve the full unicode name on demand. This does no refer to mathematics only, musical symbols for example would e impacted as well.

So I will add these symbols to the symbols.dic as soon as the coresponding feature is implemented in NVDA. There are already data bases providing the full unicode names in several languages, even Windows seems to have one native unicode name database which delivers the full names in the current Windows locale.

For more details, see #14781 and the coresponding comments.

@HiEv
Copy link

HiEv commented Feb 6, 2024

@Adriani90 - Again, just to be clear, but are you saying that it will be possible for NVDA to read the string "𝒕𝒉𝒊𝒔 𝒊𝒔 𝒂 𝒕𝒆𝒔𝒕", which is a string made up of only Unicode symbols that merely look like standard letters, so that it's pronounced exactly same as the string "this is a test", a string which is made up purely of standard English ASCII letters? Because it sounds like you're saying it would be read as the names of those characters, like "T-symbol H-symbol I-symbol S-symbol, etc..." instead, when that's not what we're talking about here.

We don't want the names of each of those symbols, as if they're being used in some sort of equation, instead we want an option so that those symbols can be treated as if they're identical to the letters that they visually look like.

Issue #14781 is about mathematical equations; this issue is not about mathematical equations. This issue is about using those mathematical symbols as though they're regular letters in standard text.

@ultrasound1372
Copy link

His proposal sounds like a replacement for the character information add-on which might indeed be useful, although there are many cases where CLDR fails to have a description for that symbol so the unicodedata thing has to be used.

@CyrilleB79
Copy link
Collaborator

@Adriani90 wrote:

@HiEv this will be possible as soon as NVDA can report the unicode name of characters on demand by pressing e.g. numpad 2 four times or what ever keystroke will be implemented.

Please have a look to Character Information V3.0, released a few days ago, if it fits your needs. Anyway, this is quite off-topic for this issue.

@Adriani90
Copy link
Collaborator

Adriani90 commented Feb 25, 2024

@CyrilleB79 thank you very much for this great work, this really opens up some possibilities. I get some errors while testing as you can read below.

Test results with Charinfo addon and NVDA with my adjusted symbols.dic where I added all mathematical alphanumeric symbols.
Remember action during character navigation is disabled in the addon.

Using left and right arrow or ctrl+left and right or whatever on the alphanumeric characters in this issue description:
• NvDA reports “Judicial Jocularity Act” as expected character by character, word by word or it reads it out as if the letters were usual letters during the reading flow.

Retrieving the detailed character name via the addon with numpad 2 twice:

  1. Report CLDR local character name gives following error
IO - inputCore.InputManager.executeGesture (16:49:59.601) - winInputHook (7216):
Input: kb(laptop):leftArrow
DEBUG - editableText.EditableText._hasCaretMoved (16:49:59.616) - MainThread (1924):
Caret move detected using event. Elapsed 0 sec, retries 0
IO - speech.speech.speak (16:49:59.655) - MainThread (1924):
Speaking [CharacterModeCommand(True), '𝒸', EndUtteranceCommand()]
IO - inputCore.InputManager.executeGesture (16:49:59.808) - winInputHook (7216):
Input: kb(laptop):leftArrow
DEBUG - editableText.EditableText._hasCaretMoved (16:49:59.824) - MainThread (1924):
Caret move detected using event. Elapsed 0 sec, retries 0
IO - speech.speech.speak (16:49:59.846) - MainThread (1924):
Speaking [CharacterModeCommand(True)DEBUG - watchdog._waitUntilNormalCoreAliveTimeout (16:50:04.142) - watchdog (21076):
Potential freeze, waiting up to 10 seconds.
INFO - watchdog.waitForFreezeRecovery (16:50:05.143) - watchdog (21076):
Starting freeze recovery after 1.5007532000017818 seconds.
DEBUGWARNING - watchdog.waitForFreezeRecovery (16:50:05.143) - watchdog (21076):
Listing stacks for Python threads:
Python stack for thread 17228 (synthDrivers._espeak.BgThread):
  File "threading.pyc", line 1002, in _bootstrap
  File "threading.pyc", line 1045, in _bootstrap_inner
  File "synthDrivers\_espeak.pyc", line 201, in run
  File "queue.pyc", line 171, in get
  File "threading.pyc", line 327, in wait

Python stack for thread 16076 (watchdog.CancellableCallThread.execute(<CFunctionType object at 0x05DDF468>)):
  File "threading.pyc", line 1002, in _bootstrap
  File "threading.pyc", line 1045, in _bootstrap_inner
  File "watchdog.pyc", line 382, in run
  File "threading.pyc", line 629, in wait
  File "threading.pyc", line 327, in wait

Python stack for thread 10128 (visionEnhancementProviders.NVDAHighlighter.NVDAHighlighter):
  File "threading.pyc", line 1002, in _bootstrap
  File "threading.pyc", line 1045, in _bootstrap_inner
  File "threading.pyc", line 982, in run
  File "visionEnhancementProviders\NVDAHighlighter.pyc", line 454, in _run
  File "windowUtils.pyc", line 274, in _rawWindowProc
  File "visionEnhancementProviders\NVDAHighlighter.pyc", line 139, in windowProc
  File "visionEnhancementProviders\NVDAHighlighter.pyc", line 177, in _paint
  File "contextlib.pyc", line 137, in __enter__
  File "winUser.pyc", line 762, in paint
  File "windowUtils.pyc", line 279, in _rawWindowProc

Python stack for thread 21076 (watchdog):
  File "threading.pyc", line 1002, in _bootstrap
  File "threading.pyc", line 1045, in _bootstrap_inner
  File "threading.pyc", line 982, in run
  File "watchdog.pyc", line 159, in _watcher
  File "watchdog.pyc", line 166, in waitForFreezeRecovery
  File "logHandler.pyc", line 64, in getFormattedStacksForAllThreads

Python stack for thread 7216 (winInputHook):
  File "threading.pyc", line 1002, in _bootstrap
  File "threading.pyc", line 1045, in _bootstrap_inner
  File "threading.pyc", line 982, in run
  File "winInputHook.pyc", line 81, in hookThreadFunc

Python stack for thread 23196 (UIAHandler.UIAHandler.MTAThread):
  File "threading.pyc", line 1002, in _bootstrap
  File "threading.pyc", line 1045, in _bootstrap_inner
  File "threading.pyc", line 982, in run
  File "UIAHandler\__init__.pyc", line 534, in MTAThreadFunc
  File "queue.pyc", line 171, in get
  File "threading.pyc", line 327, in wait

Python stack for thread 10096 (ThreadPoolExecutor-0_0):
  File "threading.pyc", line 1002, in _bootstrap
  File "threading.pyc", line 1045, in _bootstrap_inner
  File "threading.pyc", line 982, in run
  File "concurrent\futures\thread.pyc", line 81, in _worker

Python stack for thread 7040 (hwIo.ioThread.IoThread):
  File "threading.pyc", line 1002, in _bootstrap
  File "threading.pyc", line 1045, in _bootstrap_inner
  File "hwIo\ioThread.pyc", line 258, in run

Python stack for thread 1924 (MainThread):
  File "nvda.pyw", line 399, in <module>
  File "core.pyc", line 892, in main
  File "wx\core.pyc", line 2262, in MainLoop
  File "wx\core.pyc", line 3427, in <lambda>
  File "core.pyc", line 822, in processRequest
  File "core.pyc", line 838, in Notify
  File "queueHandler.pyc", line 97, in pumpAll
  File "queueHandler.pyc", line 64, in flushQueue
  File "scriptHandler.pyc", line 243, in _queueScriptCallback
  File "keyboardHandler.pyc", line 571, in executeScript
  File "inputCore.pyc", line 222, in executeScript
  File "scriptHandler.pyc", line 295, in executeScript
  File "gui\blockAction.pyc", line 72, in funcWrapper
  File "globalCommands.pyc", line 2858, in script_navigatorObject_devInfo
  File "logging\__init__.pyc", line 1489, in info
  File "logHandler.pyc", line 237, in _log
  1. Report the CLDR English name of the character gives following error:
Input: kb(laptop):rightArrow
DEBUG - editableText.EditableText._hasCaretMoved (16:51:41.406) - MainThread (1924):
Caret move detected using bookmarks. Elapsed 0 sec, retries 0
IO - speech.speech.speak (16:51:41.437) - MainThread (1924):
Speaking [CharacterModeCommand(True), '𝑜', EndUtteranceCommand()]
IO - inputCore.InputManager.executeGesture (16:51:41.693) - winInputHook (7216):
Input: kb(laptop):rightArrow
DEBUG - editableText.EditableText._hasCaretMoved (16:51:41.701) - MainThread (1924):
Caret move detected using event. Elapsed 0 sec, retries 0
IO - speech.speech.speak (16:51:41.725) - MainThread (1924):
Speaking [CharacterModeCommand(True), '𝒸', EndUtteranceCommand()]
IO - inputCore.InputManager.executeGesture (16:51:43.142) - winInputHook (7216):
Input: kb(laptop):NVDA+.
IO - speech.speech.speak (16:51:43.240) - MainThread (1924):
Speaking [CharacterModeCommand(True), '𝒸', EndUtteranceCommand()]
IO - inputCore.InputManager.executeGesture (16:51:43.292) - winInputHook (7216):
Input: kb(laptop):NVDA+.
ERROR - scriptHandler.executeScript (16:51:43.295) - MainThread (1924):
error executing script: <bound method GlobalPlugin.script_review_currentCharacter of GlobalPlugin ('globalPlugins.charinfo')> with gesture 'NVDA+.'
Traceback (most recent call last):
  File "C:\Users\adria\AppData\Roaming\nvda\addons\charInfo\globalPlugins\charinfo\__init__.py", line 598, in getCldrNameValue
    return data.symbols[self.text].replacement
           ~~~~~~~~~~~~^^^^^^^^^^^
KeyError: '𝒸'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "scriptHandler.pyc", line 295, in executeScript
  File "C:\Users\adria\AppData\Roaming\nvda\addons\charInfo\globalPlugins\charinfo\__init__.py", line 1249, in script_review_currentCharacter
    reportFunction(info)
  File "C:\Users\adria\AppData\Roaming\nvda\addons\charInfo\globalPlugins\charinfo\__init__.py", line 1139, in speakCLDREnglishName
    speakCLDRName(info, lang='en')
  File "C:\Users\adria\AppData\Roaming\nvda\addons\charInfo\globalPlugins\charinfo\__init__.py", line 1134, in speakCLDRName
    ', '.join(c.getCldrNameValue(lang=lang, fallbackToEnglish=True) for c in allChars.charList)
  File "C:\Users\adria\AppData\Roaming\nvda\addons\charInfo\globalPlugins\charinfo\__init__.py", line 1134, in <genexpr>
    ', '.join(c.getCldrNameValue(lang=lang, fallbackToEnglish=True) for c in allChars.charList)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\adria\AppData\Roaming\nvda\addons\charInfo\globalPlugins\charinfo\__init__.py", line 600, in getCldrNameValue
    raise NoValueError(f'text={self.text}; lang={lang}')
globalPlugins.charinfo.NoValueError: text=𝒸; lang=en
IO - inputCore.InputManager.executeGesture (16:51:46.196) - winInputHook (7216):INFO - globalCommands.script_navigatorObject_devInfo (16:51:46.255) - MainThread (1924):
  1. Report the Unicodedata local name of character gives following error:
IO - inputCore.InputManager.executeGesture (16:53:54.480) - winInputHook (7216):
Input: kb(laptop):rightArrow
DEBUG - editableText.EditableText._hasCaretMoved (16:53:54.485) - MainThread (1924):
Caret move detected using bookmarks. Elapsed 0 sec, retries 0
IO - speech.speech.speak (16:53:54.506) - MainThread (1924):
Speaking [CharacterModeCommand(True), '𝑜', EndUtteranceCommand()]
DEBUG - UIAHandler.shouldUseUIAInMSWord (16:53:54.540) - MainThread (1924):
User does not want UIA in MS Word unless necessary
IO - inputCore.InputManager.executeGesture (16:53:55.636) - winInputHook (7216):
Input: kb(laptop):NVDA+.
IO - speech.speech.speak (16:53:55.715) - MainThread (1924):
Speaking [CharacterModeCommand(True), '𝑜', EndUtteranceCommand()]
IO - inputCore.InputManager.executeGesture (16:53:55.766) - winInputHook (7216):
Input: kb(laptop):NVDA+.
ERROR - scriptHandler.executeScript (16:53:55.775) - MainThread (1924):
error executing script: <bound method GlobalPlugin.script_review_currentCharacter of GlobalPlugin ('globalPlugins.charinfo')> with gesture 'NVDA+.'
Traceback (most recent call last):
  File "scriptHandler.pyc", line 295, in executeScript
  File "C:\Users\adria\AppData\Roaming\nvda\addons\charInfo\globalPlugins\charinfo\__init__.py", line 1249, in script_review_currentCharacter
    reportFunction(info)
  File "C:\Users\adria\AppData\Roaming\nvda\addons\charInfo\globalPlugins\charinfo\__init__.py", line 1128, in speakCharacterLocaleName
    speakCharacterName(info, lang=languageHandler.getLanguage())
  File "C:\Users\adria\AppData\Roaming\nvda\addons\charInfo\globalPlugins\charinfo\__init__.py", line 1120, in speakCharacterName
    speech.speakMessage(', '.join(c.getNameValue(lang=lang, fallbackToEnglish=True) for c in allChars.charList))
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: sequence item 0: expected str instance, NoneType found
IO - inputCore.InputManager.executeGesture (16:53:57.397) - winInputHook (7216INFO - globalCommands.script_navigatorObject_devInfo (16:53:57.465) - MainThread (1924):
  1. Report the Unicodedata english name of the character works as expected, NVDA reports i.e. “mathematical script capital j”

  2. Report Microsoft proprietary font character (name, font, equivalent Unicode name) does not work. NVDA reports just the character as defined in the symbols.dic (in my case “J” for 𝒥)

In this case I think it is still a huge progress to implement the alphanumeric symbols in the symbols.dic file with the way they should be pronounced in the reading flow and advise users to use the character info addon for detailed character information mentioning that this detailed information is still available only in english.

However, at least in the mathematical world I have never heard a person pronouncing i.e. 𝒥 as "mathematical script capial j". So this full unicode name might be relevant for some people, but definitely not for people that just want to read text where these symbols appear.

@CyrilleB79 in case you are able to solve the errors and you can succeed in retrieving the full unicode name of the character in local language, this would be a huge improvement but even only with the english character name we can start the right path.

@Adriani90
Copy link
Collaborator

@seanbudd would NV Access accept a PR with the mathematical alphanumeric symbols implemented as I suggested, advising users in the userguide that they should use the character info addon in case they need the full name of the character?

@HiEv
Copy link

HiEv commented Feb 25, 2024

@Adriani90 As explained to you by both CyrilleB79 and myself, your comments continue to be off-topic in this issue. This issue is NOT about the symbols being used for mathematics. This is about the symbols being used as normal text.

If you have an issue to discuss other than that one, please discuss it in an existing relevant issue or create a new issue.

Thank you.

@Adriani90
Copy link
Collaborator

Adriani90 commented Feb 25, 2024 via email

@HiEv
Copy link

HiEv commented Feb 25, 2024

@Adriani90 wrote:

To be honnest I don‘t get you exactly. Please tell us what exactly is your expected behavior. Do you want these. Characters to be read as letters or not? If yes, then I think you didn‘t understand my comments, maybe it is too technical.

We want the option for the characters to be able to be treated as their standard alphanumeric equivalent so they can be read as if they were a part of normal text. I've seen you talk about these symbols use and pronunciation in mathematics and also about merely speaking the letters several times, so perhaps I'm misinterpreting things, but neither of those are particularly relevant to what is needed to solve this issue.

For example, you talked about "the way [the symbols] should be pronounced to make equations readable." These aren't equations, so that's not the issue. In the message I'm replying to, you asked about whether this is about the "characters to be read as letters," which sounds like you're talking about naming each letter, rather than interpreting them as though they're standard characters in a string of text.

It's possible there's a language issue here, as it appears that you're a native German speaker, so if I'm understanding you incorrectly, I do apologize, but your comments have been, at best, unclear if you were talking about what this issue is actually related to, and at worst, seemed to be about another thing altogether.

@Adriani90
Copy link
Collaborator

@HiEv I think you totally missunderstood me.
Let me try to explain:

  • mathematical alphanumeric symbols are mostly used in natural science, but many places do have these character just as part of the text as you did in your issue description.
  • When people read mathematical related texts, these characters are contained and sometimes people will need the full character name from unicode to understand the context (i.e. mathematical script capital j)
  • When reading a text that is not mathematical but contains these characters, people do not need the full description of the character name, so hearing just J instead of "mathematical script capital j" is the expected behavior.
  • Symbols.dic defines how character are pronounced no matterwhether it is in mathematical context, social media context or where ever text is displayed
  • My solution would make these alphanumeric symbols to be pronounced as if they are normal letters or number as part of the text.
  • People who need the contextual info for mathematical, chemical or any other scientific stuff, they can use the character info addon by Cyrille to have the full character name spoken on demand.
    But even in scientific context people read text like a normal text even though the alphanumeric letter j looks a bit different than the normal j.
    However, this solution can work only jointly, because people will need the full character name in different use cases.

I hope I could make me more understandable, but you will understand this if you read my comment above carefully.

@HiEv
Copy link

HiEv commented Feb 25, 2024

@Adriani90 OK, I think we are talking about the same issue then, it's just that A) you brought up things irrelevant to the topic (such as the first two points above) and B) the phrasing you used was often unclear (such as the examples I gave previously), which threw me off.

Anyways, glad we're on the same page and apologies for my misunderstandings.

@Adriani90
Copy link
Collaborator

This is now fixed in #16521. @LeonarddeR it would be great if you enable that by default and make it a checkbox.

@LeonarddeR
Copy link
Collaborator

As long as this is not the default, I wouldn't consider this fixed. Also note that this is not listed in the change log nor in the documentation.

@LeonarddeR LeonarddeR reopened this May 22, 2024
@LeonarddeR LeonarddeR self-assigned this May 22, 2024
@LeonarddeR LeonarddeR added this to the 2024.3 milestone May 22, 2024
LeonarddeR added a commit to LeonarddeR/nvda that referenced this issue May 22, 2024
LeonarddeR added a commit to LeonarddeR/nvda that referenced this issue May 23, 2024
seanbudd pushed a commit that referenced this issue May 27, 2024
Fixup of #16521
Fixes #11570
Partial fix for #4631

Summary of the issue:
It turns out that rawTextTypeforms on a region may be None, this was an oversight on my end.
cursorPos may also be None.
@burmancomp reported a zero division error in case a string ended with a non breaking space and a space.
Description of user facing changes
No longer errors in the log when getting flash messages in Thunderbird and/or reading messages in WhatsApp UWP.

Description of development approach
Explicitly check for None typeforms and cursorPos, thereby improving readability as well.
Improve the calculateOffsets method in textUtils to ensure it can handle the case as reported by @burmancomp
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
close/worksforme feature/math p4 https://github.com/nvaccess/nvda/blob/master/projectDocs/issues/triage.md#priority triaged Has been triaged, issue is waiting for implementation.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

10 participants