[orca] Call language logic in default script's sayLine()



commit 77b2c6aca5b9f57d9b7ebb64d313e2257452b301
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Fri Jan 7 16:43:34 2022 +0100

    Call language logic in default script's sayLine()
    
    This is another change that should not impact the end-user experience.
    It is a precursor to implementing support for on-the-fly language
    switching.
    
    Also add a debugging line so we can identify any apps or toolkits for
    which getting text attributes is non-performant.

 src/orca/script_utilities.py |  4 ++++
 src/orca/scripts/default.py  | 20 +++++++++++++-------
 2 files changed, 17 insertions(+), 7 deletions(-)
---
diff --git a/src/orca/script_utilities.py b/src/orca/script_utilities.py
index 881383a4e..3c84d4371 100644
--- a/src/orca/script_utilities.py
+++ b/src/orca/script_utilities.py
@@ -3158,6 +3158,7 @@ class Utilities:
 
         msg = "INFO: Getting text attributes for %s (chars: %i-%i)" % (obj, startOffset, endOffset)
         debug.println(debug.LEVEL_INFO, msg, True)
+        startTime = time.time()
 
         rv = []
         offset = startOffset
@@ -3170,6 +3171,9 @@ class Utilities:
             rv.append((max(start, offset), end, attrDict))
             offset = max(end, offset + 1)
 
+        endTime = time.time()
+        msg = "INFO: %i attribute ranges found in %.4fs" % (len(rv), endTime - startTime)
+        debug.println(debug.LEVEL_INFO, msg, True)
         return rv
 
     def textAttributes(self, acc, offset=None, get_defaults=False):
diff --git a/src/orca/scripts/default.py b/src/orca/scripts/default.py
index 4257505ba..d17b6cc82 100644
--- a/src/orca/scripts/default.py
+++ b/src/orca/scripts/default.py
@@ -3431,14 +3431,20 @@ class Script(script.Script):
             endOffset = startOffset + len(line)
             orca.emitRegionChanged(obj, startOffset, endOffset, orca.CARET_TRACKING)
 
-            voice = self.speechGenerator.voice(obj=obj, string=line)
-            line = self.utilities.adjustForLinks(obj, line, startOffset)
-            line = self.utilities.adjustForRepeats(line)
-            if self.utilities.shouldVerbalizeAllPunctuation(obj):
-                line = self.utilities.verbalizeAllPunctuation(line)
+            utterance = []
+            split = self.utilities.splitSubstringByLanguage(obj, startOffset, endOffset)
+            for start, end, string, language, dialect in split:
+                if not string:
+                    continue
 
-            utterance = [line]
-            utterance.extend(voice)
+                voice = self.speechGenerator.voice(obj=obj, string=string)
+                string = self.utilities.adjustForLinks(obj, string, start)
+                string = self.utilities.adjustForRepeats(string)
+                if self.utilities.shouldVerbalizeAllPunctuation(obj):
+                    string = self.utilities.verbalizeAllPunctuation(string)
+                result = [string]
+                result.extend(voice)
+                utterance.append(result)
             speech.speak(utterance)
         else:
             # Speak blank line if appropriate.


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