Mini Shell

Direktori : /usr/lib/python3.6/site-packages/orca/__pycache__/
Upload File :
Current File : //usr/lib/python3.6/site-packages/orca/__pycache__/speechdispatcherfactory.cpython-36.pyc

3

�2[�R�@s6dZdZdZdZdZdZdZddlmZdd	l	Z	dd	l
Z
d
dlmZd
dlm
Z
d
d
lmZd
dlmZd
dlmZd
dlmZd
dlmZd
dlmZd
dlmZd
dlmZej�Zydd	lZWndZYn4XdZyeed�Wnek
�rdZYnXdZe	jde	j�Z e	jd�Z!Gdd�dej"�Z"d	S)z=Provides an Orca speech server for Speech Dispatcher backend.z$Id$z
$Revision$z$Date$z Tomas Cerha <cerha@brailcom.org>z(Copyright (c) 2006-2008 Brailcom, o.p.s.ZLGPL�)�GLibN�)�chnames)�debug)�	guilabels)�messages)�speechserver)�settings)�
orca_state)�punctuation_settings)�settings_manager)�ACSSFT�CallbackTypez[^\w\s]u"(…|(?<!\.)\.{3,4}(?=(\s|\Z)))cs�eZdZiZdZeejiZedd��Z	edd��Z
edd��ZedZd	d
��Z
edd��Z�fd
d�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd[d"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd\d/d0�Zd]d1d2�Z d^d3d4�Z!d5d6�Z"d7d8�Z#d_d:d;�Z$d`d<d=�Z%d>d?�Z&dad@dA�Z'dbdBdC�Z(dcdEdF�Z)dddGdH�Z*dedJdK�Z+dfdLdM�Z,dgdNdO�Z-dhdPdQ�Z.dRdS�Z/dTdU�Z0didVdW�Z1dXdY�Z2�Z3S)j�SpeechServer�defaultcCstjS)N)rZSPEECH_DISPATCHER�rr�-/usr/lib/python3.6/speechdispatcherfactory.py�getFactoryNameOszSpeechServer.getFactoryNamecCsHg}tjtj�}|dk	rD|j|�x |j�D]}|jtj|��q,W|S)N)r�_getSpeechServer�DEFAULT_SERVER_ID�append�list_output_modules)�serversr�modulerrr�getSpeechServersSs
zSpeechServer.getSpeechServerscCs||jkr||�|jj|�S)z�Return an active server for given id.

        Attempt to create the server if it doesn't exist yet.  Returns None
        when it is not possible to create the server.
        
        )�_active_servers�get)�cls�serverIdrrrr]s
zSpeechServer._getSpeechServerNcCs |dk	r|dntj}tj|�S)Nr)rrr)�infoZthisIdrrr�getSpeechServerkszSpeechServer.getSpeechServercCs.dd�tjj�D�}x|D]}|j�qWdS)NcSsg|]}|�qSrr)�.0�srrr�
<listcomp>rsz6SpeechServer.shutdownActiveServers.<locals>.<listcomp>)rr�values�shutdown)rZserverrrr�shutdownActiveServersps
z"SpeechServer.shutdownActiveServersc
s8tt|�j�||_d|_i|_tj|jftj	|j
ftj|jftj
|jff|_tsjd}tjtj|d�dSts�d}tjtj|d�dStjtjjtjtjjtjtjjtjtjji|_tj j!t"j#j$tj j%t"j#j&tj j't"j#j(i|_)t*j+||_,y|j-�Wn,tj.tj�d}tjtj|d�YnX|tj/|<d|_0dS)Nz)ERROR: Speech Dispatcher is not availableTz<ERROR: Speech Dispatcher version 0.6.2 or later is required.z2ERROR: Speech Dispatcher service failed to connect)1�superr�__init__�_id�_client�_current_voice_propertiesr
�RATE�	_set_rate�
AVERAGE_PITCH�
_set_pitch�GAIN�_set_volume�FAMILY�_set_family�_acss_manipulators�_speechd_availabler�printlnZ
LEVEL_WARNING�_speechd_version_okr	ZPUNCTUATION_STYLE_ALL�speechdZPunctuationModeZALLZPUNCTUATION_STYLE_MOSTZSOMEZPUNCTUATION_STYLE_SOME�PUNCTUATION_STYLE_NONEZNONE�_PUNCTUATION_MODE_MAPrZBEGINr�
SayAllContext�PROGRESSZCANCELZINTERRUPTEDZEND�	COMPLETED�_CALLBACK_TYPE_MAPrZSPEECH_DEFAULT_VOICE�_default_voice_name�_initZprintExceptionr�_lastKeyEchoTime)�selfr�msg)�	__class__rrr(xs@






zSpeechServer.__init__cCs\tjd|jd�|_}|jtjj�|j|jkr<|j|j�i|_	|j
tj}|j
|�dS)NZOrca)Z	component)r8Z
SSIPClientr)r*Zset_priorityZPriorityZMESSAGErZset_output_moduler+r:r	�verbalizePunctuationStyle�set_punctuation)rBZclient�moderrrr@�szSpeechServer._initcCs8tjtjkrd}ntjtjkr$d}nd}|jj|�dS)z;Updates the capitalization style used by the speech server.ZiconZspellZnoneN)r	ZcapitalizationStyleZCAPITALIZATION_STYLE_ICONZCAPITALIZATION_STYLE_SPELLr*Zset_cap_let_recogn)rB�stylerrr�updateCapitalizationStyle�sz&SpeechServer.updateCapitalizationStylecCs|jtj}|jj|�dS)z6 Punctuation level changed, inform this speechServer. N)r:r	rEr*rF)rBrGrrr�updatePunctuationLevel�sz#SpeechServer.updatePunctuationLevelcOshttd�rZy
|||�Stjk
rLd}tjtj|d�|j�|||�SYqdXn
|||�SdS)N�SSIPCommunicationErrorz8SPEECH DISPATCHER: Connection lost. Trying to reconnect.T)�hasattrr8rKrr6�
LEVEL_INFO�reset)rBZcommand�args�kwargsrCrrr�
_send_command�s


zSpeechServer._send_commandcCs0tdtdtd|��d�}|j|jj|�dS)N�r�c�b)�int�max�minrQr*Zset_rate)rBZ	acss_rate�raterrrr-�szSpeechServer._set_ratecCs0tdtdtd|��d�}|j|jj|�dS)N�r�	�Z)rUrVrWrQr*Z	set_pitch)rBZ
acss_pitch�pitchrrrr/�szSpeechServer._set_pitchcCs0tdtdtd|��d�}|j|jj|�dS)N�rrZ�#)rUrVrWrQr*Z
set_volume)rBZacss_volume�volumerrrr1�szSpeechServer._set_volumecCsl|dkri}|jtjj�}|s2ddl}|j�\}}d\}}|rd|jd�}|d}t|�dkrd|d}||fS)Nr��_rRr)r`r`)rr�VoiceFamily�LOCALE�localeZgetdefaultlocale�split�len)rB�acss_familyZfamilyLocalerd�encodingZlanguage�dialectZlocaleValuesrrr�_get_language_and_dialect�s
z&SpeechServer._get_language_and_dialectcCsj|j|�\}}t|�dkr*|j|jj|�y|jj}Wntk
rJYnX|jtj	j
�}|j||�dS)NrR)rjrfrQr*Zset_language�set_synthesis_voice�AttributeErrorrrrb�NAME)rBrg�langrirk�namerrrr3�szSpeechServer._set_familyr`c	Cs�tjtjkrdSy<|j|jj�}|j|jj�}|j|jj�}|j|jj�}Wnd}}}}YnX|j	j
tj�}|j	}d||j	j
tj
�|j	j
tj�|j	j
tj�|j|�d||||f	}tjtj|d�dS)Nz(exception occurred)zqSPEECH DISPATCHER: %sOrca rate %s, pitch %s, volume %s, language %s; SD rate %s, pitch %s, volume %s, language %srT)rZ
debugLevelrMrQr*Zget_rateZ	get_pitchZ
get_volumeZget_languager+rr
r2r,r.r0rjr6)	rB�prefixZsd_rateZsd_pitchZ	sd_volumeZsd_languageZfamily�currentrCrrr�_debug_sd_values�s,zSpeechServer._debug_sd_valuescCs�|dkrtjtj}|j}x�|jD]�\}}|j|�}|dk	r\|j|�|kr�||�|||<q"|tjkrx|d�d||<q"|tjkr�|d�d||<q"|tj	kr�|d�d||<q"|tj
kr"|i�i||<q"WdS)Ng@�
�2)r	�voices�
DEFAULT_VOICEr+r4rr
r.r0r,r2)rB�acssrqZ
acss_property�method�valuerrr�_apply_acsss*








zSpeechServer._apply_acssc
Cs�tjd�}|tjkr|Stjd}tjt||�}t	tj
t|��}xh|D]`}ytj
|�\}}WnwFYnX|tjkrxqFdtj|�}	|tjkr�|	|7}	tj||	|�}qFWtjr�tjjj|�}|S)a�Depending upon the users verbalized punctuation setting,
        adjust punctuation symbols in the given text to their pronounced
        equivalents. The pronounced text will either replace the
        punctuation symbol or be inserted before it. In the latter case,
        this is to retain spoken prosity.

        Arguments:
        - oldText: text to be parsed for punctuation.

        Returns a text string with the punctuation symbols adjusted accordingly.
        rE� z %s )�_settingsManagerZ
getSettingr	r9rZSPOKEN_ELLIPSIS�re�sub�ELLIPSIS�set�findall�PUNCTUATIONrZgetPunctuationInfoZ
LEVEL_NONEr�getCharacterNameZPUNCTUATION_INSERTr
�activeScript�	utilitiesZadjustForDigits)
rBZoldTextrHZspokenEllipsisZnewTextZsymbolsZsymbol�level�actionZcharNamerrrZ__addVerbalizedPunctuation.s(





z'SpeechServer.__addVerbalizedPunctuationcKstt|t�rd}|j|�}tjr,tjjj|�}|jdd�}|jdd�}|j|�|j	d|�|j
|jj|f|�dS)Nr`� r{z
.�
zSpeaking '%s' )
�
isinstancer
�'_SpeechServer__addVerbalizedPunctuationr
r�r��adjustForPronunciation�replacerzrrrQr*�speak)rB�textrwrPrrr�_speakWs


zSpeechServer._speakcs\yt��\�}Wntk
r$Yn4Xd����fdd�	}�j�j||t�jj��d�dS)zLProcess another sayAll chunk.

        Called by the gidle thread.

        Ncsr�j|}|tjjkr0|r&t|��_qD�j�_n|tjjkrD�j�_t	j
��|�|tjjkrnt	j
�j���dS)N)r>rr;r<rUZ
currentOffsetZstartOffsetr=Z	endOffsetr�idle_add�_say_all)ZcallbackTypeZ
index_mark�t)�context�iterator�
orca_callbackrBrr�callbackxs

z'SpeechServer._say_all.<locals>.callback)r�Zevent_typesF)N)�next�
StopIterationr��	utterance�listr>�keys)rBr�r�rwr�r)r�r�r�rBrr�mszSpeechServer._say_allcCs|j|jj�dS)N)rQr*Zcancel)rBrrr�_cancel�szSpeechServer._cancelFcCs�tjtj}||rdpd	}y|tj}Wntk
rBd}YnXtdtd||��|tj<d|}tj	tj
|d�|j|r�tj
p�tj|d�dS)
NrrtrrSz!SPEECH DISPATCHER: Rate set to %dT)rw���r)r	rurvr
r,�KeyErrorrVrWrr6rMr�rZ
SPEECH_SLOWERZ
SPEECH_FASTER)rB�step�decreaserw�deltarXrCrrr�_change_default_speech_rate�s
z(SpeechServer._change_default_speech_ratecCs�tjtj}||rdpd	}y|tj}Wntk
rBd}YnXtdtd||��|tj<d|}tj	tj
|d�|j|r�tj
p�tj|d�dS)
Nr�rrZz"SPEECH DISPATCHER: Pitch set to %dT)rwr�r)r	rurvr
r.r�rVrWrr6rMr�rZSPEECH_LOWERZ
SPEECH_HIGHER)rBr�r�rwr�r\rCrrr�_change_default_speech_pitch�s
z)SpeechServer._change_default_speech_pitchcCs�tjtj}||rdpd	}y|tj}Wntk
rBd}YnXtdtd||��|tj<d|}tj	tj
|d�|j|r�tj
p�tj|d�dS)
NrrsrrZz#SPEECH DISPATCHER: Volume set to %dT)rwr�r)r	rurvr
r0r�rVrWrr6rMr�rZ
SPEECH_SOFTERZ
SPEECH_LOUDER)rBr�r�rwr�r_rCrrr�_change_default_speech_volume�s
z*SpeechServer._change_default_speech_volumecCs|jj|j|j�|jgS)N)�
_SERVER_NAMESrr))rBrrr�getInfo�szSpeechServer.getInfoc	Cs�ddlm}m}||�d}|dks,|dkr6d}d}n|jd�\}}|j|dff}y|jj}Wntk
rrYn"Xy||j|�7}WnYnXdd�|D�}|S)Nr)�	getlocale�LC_MESSAGES�Crac	Ss4g|],\}}}tjtjj|tjj|tjj|i��qSr)rrbrmZDIALECTrc)r!rornrirrrr#�sz1SpeechServer.getVoiceFamilies.<locals>.<listcomp>)	rdr�r�rer?r*�list_synthesis_voicesrlrQ)	rBr�r�rdrnrirur�Zfamiliesrrr�getVoiceFamilies�s$zSpeechServer.getVoiceFamiliesTcCs0|jr|otj�|jdk}|r,|j||�dS)Ng�?)rA�timer�)rBr�rw�	interruptrrrr��szSpeechServer.speakcCs"x|D]}|r|j||�qWdS)N)r�)rBZ
utteranceListrwr�r�rrr�speakUtterances�s
zSpeechServer.speakUtterancescCstj|j||�dS)N)rr�r�)rBZutteranceIteratorZprogressCallbackrrr�sayAll�szSpeechServer.sayAllcCsl|j|�|dkr&|j|jjd�dStj|�}|sH|j|jj|�dStjr\tjj	j
|�}|j||�dS)Nr�zend-of-line)rzrQr*Z
sound_iconrr��charr
r�r�r�r�)rB�	characterrwrorrr�speakCharacter�s

zSpeechServer.speakCharactercCsL|j�}tjrtjjj|�}|j�}d||f}|j||d�tj�|_dS)Nz%s %s)rw)	Z
getKeyNamer
r�r�r�ZgetLockingStateStringr�r�rA)rBZeventrwZevent_stringZlockingStateStringrrr�
speakKeyEvent�szSpeechServer.speakKeyEventr�cCs|j|�dS)N)r�)rBr�rrr�increaseSpeechRateszSpeechServer.increaseSpeechRatecCs|j|dd�dS)NT)r�)r�)rBr�rrr�decreaseSpeechRateszSpeechServer.decreaseSpeechRate��?cCs|j|�dS)N)r�)rBr�rrr�increaseSpeechPitchsz SpeechServer.increaseSpeechPitchcCs|j|dd�dS)NT)r�)r�)rBr�rrr�decreaseSpeechPitchsz SpeechServer.decreaseSpeechPitchcCs|j|�dS)N)r�)rBr�rrr�increaseSpeechVolumesz!SpeechServer.increaseSpeechVolumecCs|j|dd�dS)NT)r�)r�)rBr�rrr�decreaseSpeechVolumesz!SpeechServer.decreaseSpeechVolumecCs|j�dS)N)r�)rBrrr�stopszSpeechServer.stopcCs|jj�tj|j=dS)N)r*�closerrr))rBrrrr%s
zSpeechServer.shutdowncCs|jj�|j�dS)N)r*r�r@)rBr�rwrrrrN!s
zSpeechServer.resetcCs<y|j|jj�Stk
r"fStjk
r6fSXdS)aYReturn names of available output modules as a tuple of strings.

        This method is not a part of Orca speech API, but is used internally
        by the Speech Dispatcher backend.
        
        The returned tuple can be empty if the information can not be
        obtained (e.g. with an older Speech Dispatcher version).
        
        N)rQr*rrlr8ZSSIPCommandError)rBrrrr%s
z SpeechServer.list_output_modules)N)r`)F)F)F)NNT)NT)N)N)r�)r�)r�)r�)r�)r�)NN)4�__name__�
__module__�__qualname__rrrZDEFAULT_SYNTHESIZERr��staticmethodrr�classmethodrr r&r(r@rIrJrQr-r/r1rjr3rrrzr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r%rNr�
__classcell__rr)rDrrGsZ

/	
)














r)#�__doc__Z__id__�__version__Z__date__�
__author__Z
__copyright__Z__license__Z
gi.repositoryrr}r�r`rrrrrr	r
rrrwr
Z
getManagerr|r8r5�getattrrlr7�compile�UNICODEr�rrrrrr�<module>sB