__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
# Copyright 2006, 2007, 2008, 2009 Brailcom, o.p.s. # Copyright © 2024 GNOME Foundation Inc. # # Author: Andy Holmes <[email protected]> # Contributor: Tomas Cerha <[email protected]> # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the # Free Software Foundation, Inc., Franklin Street, Fifth Floor, # Boston MA 02110-1301 USA. """SSML --- XML-based markup language for speech synthesis. Class SSML defines a simple wrapper for holding and converting text to SSML, suitable to be sent to a speech server. Services can pass flags to control the elements and attributes used. """ __id__ = "$Id$" __version__ = "$Revision$" __date__ = "$Date$" __author__ = "<[email protected]>" __copyright__ = "Copyright © 2024 GNOME Foundation Inc. " __license__ = "LGPL" from enum import Enum, auto from . import debug from . import script_manager class SSMLCapabilities(Enum): """Enumeration of SSML capabilities.""" SAY_AS_DATE = auto() SAY_AS_TIME = auto() SAY_AS_TELEPHONE = auto() SAY_AS_CHARACTERS = auto() SAY_AS_CHARACTERS_GLYPHS = auto() SAY_AS_CARDINAL = auto() SAY_AS_ORDINAL = auto() SAY_AS_CURRENCY = auto() BREAK = auto() SUB = auto() PHONEME = auto() EMPHASIS = auto() PROSODY = auto() MARK = auto() SENTENCE_PARAGRAPH = auto() TOKEN = auto() ALL = auto() class SSML(dict): """Holds SSML representation of an utterance.""" def __init__(self, text="", features=SSMLCapabilities.ALL): """Create and initialize ACSS structure.""" dict.__init__(self) self['text'] = text or "" self['features'] = SSMLCapabilities(features) def __eq__(self, other): if not isinstance(other, SSML): return False if self.get('text') != other.get('text'): return False if self.get('features') != other.get('features'): return False return True @staticmethod def _mark_words(text): """Mark the word offsets of text for later formatting.""" # Mark beginning of words with U+E000 (private use) and record the # string offsets # Note: we need to do this before disturbing the text offsets # Note2: we assume that subsequent text mangling leaves U+E000 untouched marked = "" offsets = [] last_begin = None is_numeric = None for i in range(len(text)): c = text[i] if c == '\ue000': # Original text already contains U+E000. But syntheses will not # know what to do with it anyway, so discard it continue if not c.isspace() and last_begin is None: # Word begin marked += '\ue000' last_begin = i is_numeric = c.isnumeric() elif c.isspace() and last_begin is not None: # Word end if is_numeric: # We had a wholy numeric word, possibly next word is as well. # Skip to next word for j in range(i+1, len(text)): if not text[j].isspace(): break else: is_numeric = False # Check next word while is_numeric and j < len(text) and not text[j].isspace(): if not text[j].isnumeric(): is_numeric = False j += 1 if not is_numeric: # add a mark offsets.append((last_begin, i)) last_begin = None is_numeric = None elif is_numeric and not c.isnumeric(): is_numeric = False marked += c if last_begin is not None: # Finished with a word offsets.append((last_begin, i + 1)) return (marked, offsets) @staticmethod def markupText(text, features=SSMLCapabilities.ALL): """Converts plain text to SSML markup. If features is 0, the text will be returned unmodified. Arguments: - text: optional text to add to the queue before speaking - features: ssml.SSMLCapabilities flags. Currently, the only supported element is SSMLCapabilities.MARK. Returns: - The SSML markup of the text, per the supported features. """ text = text or "" if features == 0: return text # Annotate the text with U+E000 (private use) and record the offsets (text, offsets) = SSML._mark_words(text) # Apply scripted formatting (must not change the U+E000 marks!) script = script_manager.get_manager().get_active_script() if script is not None: text = script.utilities.adjustForPronunciation(text) # Transcribe to SSML, translating U+E000 into marks # Note: we need to do this after all mangling otherwise the ssml markup # would get mangled too ssml = "<speak>" i = 0 for c in text: if c == '\ue000': if i >= len(offsets): # This is really not supposed to happen msg = f"{i}th U+E000 does not have corresponding index" debug.print_message(debug.LEVEL_WARNING, msg, True) else: ssml += '<mark name="%u:%u"/>' % offsets[i] i += 1 # Disable for now, until speech dispatcher properly parses them (version 0.8.9 or later) #elif c == '"': # ssml += '"' #elif c == "'": # ssml += ''' elif c == '<': ssml += '<' elif c == '>': ssml += '>' elif c == '&': ssml += '&' else: ssml += c ssml += "</speak>" return ssml def getMarkup(self): """Return the text content as SSML, per the supported features""" return SSML.markupText(self['text'], self['features']) def getText(self): return self['text']
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| __pycache__ | Folder | 0755 |
|
|
| backends | Folder | 0755 |
|
|
| scripts | Folder | 0755 |
|
|
| __init__.py | File | 115 B | 0644 |
|
| acss.py | File | 3.85 KB | 0644 |
|
| action_presenter.py | File | 8.65 KB | 0644 |
|
| ax_collection.py | File | 6.16 KB | 0644 |
|
| ax_component.py | File | 14.93 KB | 0644 |
|
| ax_document.py | File | 9.36 KB | 0644 |
|
| ax_event_synthesizer.py | File | 17.39 KB | 0644 |
|
| ax_hypertext.py | File | 8.36 KB | 0644 |
|
| ax_object.py | File | 47.84 KB | 0644 |
|
| ax_selection.py | File | 4.54 KB | 0644 |
|
| ax_table.py | File | 47.98 KB | 0644 |
|
| ax_text.py | File | 45.13 KB | 0644 |
|
| ax_utilities.py | File | 28.24 KB | 0644 |
|
| ax_utilities_application.py | File | 7.17 KB | 0644 |
|
| ax_utilities_collection.py | File | 86.79 KB | 0644 |
|
| ax_utilities_debugging.py | File | 10.12 KB | 0644 |
|
| ax_utilities_event.py | File | 32.78 KB | 0644 |
|
| ax_utilities_relation.py | File | 15.2 KB | 0644 |
|
| ax_utilities_role.py | File | 91.79 KB | 0644 |
|
| ax_utilities_state.py | File | 11.63 KB | 0644 |
|
| ax_value.py | File | 6.83 KB | 0644 |
|
| bookmarks.py | File | 11.95 KB | 0644 |
|
| braille.py | File | 74.03 KB | 0644 |
|
| braille_generator.py | File | 55.79 KB | 0644 |
|
| braille_rolenames.py | File | 10.23 KB | 0644 |
|
| brlmon.py | File | 6.53 KB | 0644 |
|
| brltablenames.py | File | 7.3 KB | 0644 |
|
| bypass_mode_manager.py | File | 4.79 KB | 0644 |
|
| caret_navigation.py | File | 19.51 KB | 0644 |
|
| chat.py | File | 32.03 KB | 0644 |
|
| clipboard.py | File | 20.45 KB | 0644 |
|
| cmdnames.py | File | 61.77 KB | 0644 |
|
| colornames.py | File | 39.22 KB | 0644 |
|
| debug.py | File | 3.95 KB | 0644 |
|
| debugging_tools_manager.py | File | 10.69 KB | 0644 |
|
| event_manager.py | File | 36.07 KB | 0644 |
|
| flat_review.py | File | 48.89 KB | 0644 |
|
| flat_review_finder.py | File | 20.2 KB | 0644 |
|
| flat_review_presenter.py | File | 45.94 KB | 0644 |
|
| focus_manager.py | File | 11.52 KB | 0644 |
|
| generator.py | File | 67.07 KB | 0644 |
|
| guilabels.py | File | 56.38 KB | 0644 |
|
| highlighter.py | File | 6.95 KB | 0644 |
|
| input_event.py | File | 30.05 KB | 0644 |
|
| input_event_manager.py | File | 35.66 KB | 0644 |
|
| keybindings.py | File | 24.87 KB | 0644 |
|
| keynames.py | File | 9.55 KB | 0644 |
|
| label_inference.py | File | 19.77 KB | 0644 |
|
| learn_mode_presenter.py | File | 14.72 KB | 0644 |
|
| liveregions.py | File | 25.77 KB | 0644 |
|
| mathsymbols.py | File | 88.65 KB | 0644 |
|
| messages.py | File | 152.28 KB | 0644 |
|
| mouse_review.py | File | 23.34 KB | 0644 |
|
| notification_presenter.py | File | 14.17 KB | 0644 |
|
| object_navigator.py | File | 13.24 KB | 0644 |
|
| object_properties.py | File | 33.86 KB | 0644 |
|
| orca.py | File | 9.83 KB | 0644 |
|
| orca_gtkbuilder.py | File | 5.42 KB | 0644 |
|
| orca_gui_navlist.py | File | 6.51 KB | 0644 |
|
| orca_gui_prefs.py | File | 141.9 KB | 0644 |
|
| orca_gui_profile.py | File | 3.98 KB | 0644 |
|
| orca_i18n.py | File | 3.13 KB | 0644 |
|
| orca_modifier_manager.py | File | 13.76 KB | 0644 |
|
| orca_platform.py | File | 1.43 KB | 0644 |
|
| phonnames.py | File | 2.76 KB | 0644 |
|
| pronunciation_dict.py | File | 2.55 KB | 0644 |
|
| script.py | File | 11.11 KB | 0644 |
|
| script_manager.py | File | 14.68 KB | 0644 |
|
| script_utilities.py | File | 64.21 KB | 0644 |
|
| settings.py | File | 10.66 KB | 0644 |
|
| settings_manager.py | File | 27.13 KB | 0644 |
|
| sleep_mode_manager.py | File | 5.04 KB | 0644 |
|
| sound.py | File | 5.51 KB | 0644 |
|
| sound_generator.py | File | 48.88 KB | 0644 |
|
| speech.py | File | 8.87 KB | 0644 |
|
| speech_and_verbosity_manager.py | File | 27.71 KB | 0644 |
|
| speech_generator.py | File | 163.53 KB | 0644 |
|
| speechdispatcherfactory.py | File | 24.68 KB | 0644 |
|
| speechserver.py | File | 8 KB | 0644 |
|
| spellcheck.py | File | 18.11 KB | 0644 |
|
| spiel.py | File | 25.59 KB | 0644 |
|
| ssml.py | File | 6.71 KB | 0644 |
|
| structural_navigation.py | File | 77.63 KB | 0644 |
|
| system_information_presenter.py | File | 7.44 KB | 0644 |
|
| table_navigator.py | File | 29.78 KB | 0644 |
|
| text_attribute_names.py | File | 27.31 KB | 0644 |
|
| where_am_i_presenter.py | File | 21.59 KB | 0644 |
|