[orca] Don't flatten MathML expressions when expanding embedded object characters



commit 781a84da58bf43e4127b6fad87087b7541948463
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Wed May 23 17:04:10 2018 -0700

    Don't flatten MathML expressions when expanding embedded object characters

 src/orca/scripts/web/script_utilities.py |   16 +++++++++++++---
 src/orca/speech_generator.py             |   10 ++++++++++
 2 files changed, 23 insertions(+), 3 deletions(-)
---
diff --git a/src/orca/scripts/web/script_utilities.py b/src/orca/scripts/web/script_utilities.py
index 7c3f5cc..8fb6502 100644
--- a/src/orca/scripts/web/script_utilities.py
+++ b/src/orca/scripts/web/script_utilities.py
@@ -726,6 +726,12 @@ class Utilities(script_utilities.Utilities):
 
         return [ext.x, ext.y, ext.width, ext.height]
 
+    def _preserveTree(self, obj):
+        if self.isMathTopLevel(obj):
+            return True
+
+        return False
+
     def expandEOCs(self, obj, startOffset=0, endOffset=-1):
         if not self.inDocumentContent(obj):
             return super().expandEOCs(obj, startOffset, endOffset)
@@ -754,9 +760,13 @@ class Utilities(script_utilities.Utilities):
                     child = obj[i + childOffset]
                 except:
                     continue
-                childText = self.expandEOCs(child)
-                if not childText:
-                    childText = ""
+
+                childText = ""
+                if not self._preserveTree(child):
+                    childText = self.expandEOCs(child)
+                else:
+                    utterances = self._script.speechGenerator.generateSpeech(child)
+                    childText = self._script.speechGenerator.utterancesToString(utterances)
                 toBuild[index] = "%s " % childText
 
             string = "".join(toBuild).strip()
diff --git a/src/orca/speech_generator.py b/src/orca/speech_generator.py
index 050a517..1a74ce3 100644
--- a/src/orca/speech_generator.py
+++ b/src/orca/speech_generator.py
@@ -2552,3 +2552,13 @@ class SpeechGenerator(generator.Generator):
                 voice.update(override)
 
         return [voice]
+
+    def utterancesToString(self, utterances):
+        string = ""
+        for u in utterances:
+            if isinstance(u, str):
+                string += " %s" % u
+            elif isinstance(u, Pause) and string and string[-1].isalnum():
+                string += "."
+
+        return string.strip()


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]