%PDF- %PDF-
| Direktori : /lib/python3/dist-packages/orca/ |
| Current File : //lib/python3/dist-packages/orca/acss.py |
# Orca
#
# Copyright 2005-2008 Google Inc.
# Portions Copyright 2007-2008, Sun Microsystems, Inc.
#
# 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.
#
"""ACSS --- Aural CSS.
Class ACSS defines a simple wrapper for holding ACSS voice
definitions. Speech engines implement the code for converting
ACSS definitions into engine-specific markup codes.
"""
__id__ = "$Id$"
__author__ = "T. V. Raman"
__version__ = "$Revision$"
__date__ = "$Date$"
__copyright__ = "Copyright (c) 2005-2008 Google Inc."
__license__ = "LGPL"
class ACSS(dict):
"""Holds ACSS representation of a voice."""
FAMILY = 'family'
RATE = 'rate'
GAIN = 'gain'
AVERAGE_PITCH = 'average-pitch'
PITCH_RANGE = 'pitch-range'
STRESS = 'stress'
RICHNESS = 'richness'
PUNCTUATIONS = 'punctuations'
# A value of None means use the engine's default value.
#
settings = {
FAMILY : None,
RATE : 50,
GAIN : 10,
AVERAGE_PITCH : 5,
PITCH_RANGE : 5,
STRESS : 5,
RICHNESS : 5,
PUNCTUATIONS : 'all'
}
def __init__(self, props=None):
"""Create and initialize ACSS structure."""
dict.__init__(self)
props = props or {}
if props:
for k in props:
if k == 'established' or k in ACSS.settings:
# Do a 'deep copy' of the family. Otherwise,
# the new ACSS shares the actual data with the
# props passed in. This can cause unexpected
# side effects.
#
if k == ACSS.FAMILY:
self[k] = {}
for j in props[k].keys():
self[k][j] = props[k][j]
else:
self[k] = props[k]
else:
self['established'] = False
def __eq__(self, other):
if not isinstance(other, ACSS):
return False
if self.get(ACSS.FAMILY) != other.get(ACSS.FAMILY):
return False
if self.get(ACSS.RATE) != other.get(ACSS.RATE):
return False
if self.get(ACSS.AVERAGE_PITCH) != other.get(ACSS.AVERAGE_PITCH):
return False
return True
def __setitem__ (self, key, value):
"""Update name when we change values."""
dict.__setitem__(self, key, value)
def __delitem__(self, key):
"""Update name if we delete a key."""
dict.__delitem__(self, key)
def name(self):
_name = 'acss-'
names = list(self.keys())
if names:
names.sort()
for k in names:
_name += f"{k}-{self[k]}:"
_name = _name[:-1]
return _name
def getLocale(self):
family = self.get(ACSS.FAMILY, {})
return family.get('locale')
def getDialect(self):
family = self.get(ACSS.FAMILY, {})
return family.get('dialect')
def update(self, newDict):
family = newDict.get(ACSS.FAMILY)
if isinstance(family, dict) and family.get('name') is None:
newDict.pop(ACSS.FAMILY)
return super().update(newDict)