nvda
d9c0393e - Report background and highlighted text in MS Word (#14610)

Commit
2 years ago
Report background and highlighted text in MS Word (#14610) Fixes #5866, fixes #7396, fixes #12101 Summary of the issue: In these years, Microsoft Word users working without UIA had no feedback about background and highlighting colors, often used by colleagues, teachers and students. UIA has provided a partial solution when available, but its support for these features is far from perfect (see later). Description of user facing changes Assuming UIA is not available/forcibly enabled: when color reporting is enabled in formatting preferences, users will hear background colors too; when marked/highlighted text reporting is enabled in formatting preferences, users will hear highlighting colors ("highlighted in {color}" and "no highlighting"), regardless of color reporting. Description of development approach It was very difficult to find a way, so I'll add some details. Initially, I used VBA objects approach, querying Paragraph.Shading.BackgroundPatternColor and Range.HighlightColorIndex over a winwordDocument.Range to calculate each time, so it was very slow. Then I found this document and, after having understood what I needed and how to find the required wdDISPID_ constants, I was able to move all work on the C++ component of nvdaHelperRemote related to winword, that appears very much faster. In window/winword.py, to take advantage of winwordColorToNVDAColor work, I added also a dict that collects indexes from wdColorIndex and decimal values from wdColor. About speech, I had to introduce a new format field, highlight-color. Now, UIA: sure, it already covers background and highlight colors, but expose them as the same attribute, via UIA_BackgroundColorAttributeId (and no, I asked, even visually they are distinct). There is an AnnotationType_Highlighted identifier, but it seems to not be used in this scenario. Locally I have a possible workaround, based on the fact that, as you see in Word Home menu, highlighting color is applied to characters, background color to paragraphs; so, if textRange has a background-color, I compare it to that retrieved from paragraph and, if I receive IUnknown/MixedAttributeValue, I assume the initial one is an highlighting color and try to get the real background color from "\r" EOL. But I'm not totally convinced, so I not included it in this PR for now.
Author
Parents
Loading