%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /usr/lib/python3/dist-packages/orca/scripts/web/__pycache__/
Upload File :
Create Path :
Current File : //usr/lib/python3/dist-packages/orca/scripts/web/__pycache__/script_utilities.cpython-312.pyc

�

g
f����P�dZdZdZdZdZddlZejdd�dd	lmZddl	Z	ddl
Z
ddlZddlZdd
l
mZddl
mZddl
mZdd
l
mZddl
mZddl
mZddl
mZddl
mZddlmZddlmZddlmZddlmZddlmZddl m!Z!ddl"m#Z#Gd�dejH�Z$y)z$Id$z
$Revision$z$Date$zGCopyright (c) 2010 Joanmarie Diggs.Copyright (c) 2014-2015 Igalia, S.L.�LGPL�N�Atspiz2.0)r)�debug)�
focus_manager)�input_event)�messages)�
orca_state)�script_utilities)�script_manager)�settings_manager)�AXComponent)�
AXDocument)�AXHypertext)�AXObject)�AXTable)�AXText)�AXUtilitiesc��
��eZdZ�fd�Zd�Z�dOd�Zd�Zd�Z�dPd�Z�dQd�Z	d�Z
d	�Z�dQd
�Z�dQd�Z
d�Z�dQd
�Zd�Zd�Z�dRd�Z�fd�Zd�Z�fd�Zd�Zd�Zd�Zd�Zd�Zd�Z�dQ�fd�	Zd�Zd�Zd�Z�fd�Z d�Z!d �Z"�dSd!�Z#�dSd"�Z$d#�Z%d$�Z&e'�dTd%��Z(d&�Z)d'�Z*�dU�fd(�	Z+�fd)�Z,�dO�fd*�	Z-�fd+�Z.d,�Z/�dU�fd-�	Z0�dRd.�Z1�fd/�Z2�fd0�Z3d1�Z4�dPd2�Z5d3�Z6d4�Z7�dQd5�Z8d6�Z9d7�Z:d8�Z;�dPd9�Z<�dPd:�Z=�dPd;�Z>�dPd<�Z?�dPd=�Z@�dPd>�ZA�dVd?�ZB�dVd@�ZCdA�ZD�dWdB�ZEdC�ZF�dXdD�ZG�dXdE�ZH�dYdF�ZI�dYdG�ZJ�fdH�ZK�dPdI�ZLdJ�ZMdK�ZN�dP�fdL�	ZO�dQdM�ZPdN�ZQdO�ZRdP�ZSdQ�ZT�fdR�ZU�dZ�fdS�	ZVdT�ZWdU�ZXdV�ZYdW�ZZ�dQ�fdX�	Z[dY�Z\�dQdZ�Z]d[�Z^�fd\�Z_�fd]�Z`�fd^�Za�fd_�Zb�fd`�Zc�fda�Zd�fdb�Zedc�Zfdd�Zgde�Zhdf�Zidg�Zjdh�Zkdi�Zldj�Zm�dQdk�Zndl�Zodm�Zpdn�Zqdo�Zrdp�Zsdq�Ztdr�Zuds�Zvdt�Zwdu�Zxdv�Zydw�Zzdx�Z{dy�Z|dz�Z}d{�Z~d|�Zd}�Z�d~�Z�d�Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z��dQd��Z��dRd��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z��fd��Z��fd��Z��dQ�fd��	Z�d��Z�d��Z�d��Z�d��Z��fd��Z�d��Z�d��Z�d��Z�d��Z��fd��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z��dQd��Z�d��Z�d��Z�d��Z�d��Z�d��Z�gfd��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z��fd��Zˆfd��ZÈfd��ZĈfd„ZňfdÄZƈfdĄZLjfdńZȈfdƄZɈfdDŽZ�dȄZ�dɄZ�dʄZ�d˄Z�d̄Z�d̈́Z�d΄Z�dτZ�dЄZ�dфZ�d҄Z�dӄZ�dԄZ�dՄZ�dքZ�dׄZ�d؄Z�dلZ�dڄZ�dۄZ�d܄Z�d݄Z�dބZ�d߄Z�d�Z�d�Z�d�Z�d�Z�d�Z�d�Z�d�Z�d�Z�d�Z�d�Z�d�Z�d�Z�d�Z�d�Z�d�Z�fd�Z�d�Z�d�Z�d�Z�d�Z�d�Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d���Zd���Zd���Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z	�d��Z
�d��Z�d	��Z�f�d
��Z
�d��Z�d��Z�d
��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�f�d��Z�f�d��Z�d��Z�f�d��Z�d��Z�d��Z�d��Z�d��Z�f�d��Z�f�d��Z �d��Z!�d��Z"�d ��Z#�d!��Z$�dQ�d"��Z%�d#��Z&�d$��Z'�d%��Z(�d&��Z)�d'��Z*�d(��Z+�d)��Z,�d*��Z-�d+��Z.�d,��Z/�dQ�d-��Z0�dQ�d.��Z1�d/��Z2�d0��Z3�d1��Z4�f�d2��Z5�d3��Z6�d4��Z7gf�d5��Z8�d6��Z9�d7��Z:�d8��Z;�d9��Z<�d[�d:��Z=�dQ�d;��Z>�dQ�d<��Z?�d=��Z@�d>��ZA�d?��ZB�d\�d@��ZC�dQ�dA��ZD�dB��ZE�d]�dC��ZF�dD��ZG�dE��ZH�d^�dF��ZI�d^�dG��ZJ�d^�dH��ZK�d^�dI��ZL�dJ��ZM�dK��ZN�f�dL��ZO�dM��ZP�f�dN��ZQ�x�ZRS(_�	Utilitiesc�^��t�|�|�i|_i|_i|_i|_i|_i|_i|_i|_	i|_
i|_i|_i|_
i|_i|_i|_i|_i|_i|_i|_i|_i|_i|_i|_i|_i|_i|_i|_i|_i|_i|_i|_ i|_!i|_"i|_#i|_$i|_%i|_&i|_'i|_(i|_)i|_*i|_+i|_,i|_-i|_.i|_/i|_0i|_1i|_2i|_3i|_4i|_5i|_6i|_7i|_8i|_9i|_:i|_;i|_<i|_=i|_>i|_?d|_@d|_Ad|_Bd|_Cd|_Dd|_Ed|_Ft�j�j�t�j�j�gi|_Ky�N)L�super�__init__�_currentTextAttrs�_caretContexts�_priorContexts�_canHaveCaretContextDecision�_contextPathsRolesAndNames�_paths�_inDocumentContent�_inTopLevelWebApp�_isTextBlockElement�%_isContentEditableWithEmbeddedObjects�_isCodeDescendant�_isEntryDescendant�_hasGridDescendant�_isGridDescendant�_isLabelDescendant�_isModalDialogDescendant�_isMenuDescendant�_isNavigableToolTipDescendant�_isToolBarDescendant�_isWebAppDescendant�
_isLayoutOnly�_isFocusableWithMathChild�_mathNestingLevel�_isOffScreenLabel�_labelIsAncestorOfLabelled�_elementLinesAreSingleChars�_elementLinesAreSingleWords�_hasLongDesc�_hasVisibleCaption�_hasDetails�
_isDetails�$_isNonInteractiveDescendantOfControl�_isClickableElement�	_isAnchor�_isEditableComboBox�_isErrorMessage�_isInlineIframeDescendant�_isInlineListItem�_isInlineListDescendant�_isLandmark�_isLink�_isListDescendant�_isNonNavigablePopup�_isNonEntryTextWidget�_isCustomImage�_isUselessImage�_isRedundantSVG�_isUselessEmptyElement�$_hasNameAndActionAndNoUsefulChildren�_isNonNavigableEmbeddedDocument�_isParentOfNullChild�_inferredLabels�_labelsForObject�
_labelTargets�_descriptionListTerms�_valuesForTerm�_displayedLabelText�_preferDescriptionOverName�
_shouldFilter�_shouldInferLabelFor�_treatAsTextObject�_treatAsDiv�_currentObjectContents�_currentSentenceContents�_currentLineContents�_currentWordContents�_currentCharacterContents�_lastQueuedLiveRegionEvent�_findContainerr�Role�LIST�	LIST_ITEM�_validChildRoles)�self�script�	__class__s  ��C/usr/lib/python3/dist-packages/orca/scripts/web/script_utilities.pyrzUtilities.__init__8sV���
���� �!#��� ��� ���,.��)�*,��'����"$���!#���#%�� �57��2�!#���"$���"$���!#���"$���(*��%�!#���-/��*�$&��!�#%�� ����)+��&�!#���!#���*,��'�*,��(�*,��(����"$���������46��1�#%�� ����#%�� �!���)+��&�!#���')��$�������!#���$&��!�%'��"� ���!���!���&(��#�46��1�/1��,�$&��!�!��� "������%'��"� ���#%�� �*,��'����$&��!�"$������&*��#�(,��%�$(��!�$(��!�)-��&�*.��'�"���!&�����5�:�:�3G�3G�2H� I���c���g}|jj�D]/\}\}}tj|�r�|j	|��1|D]}|jj|d�� yr)r�itemsr�is_valid�append�pop)rc�toRemove�key�obj�offsets     rf�_cleanupContextszUtilities._cleanupContexts�so����"&�"5�"5�";�";�"=�	%��C��#�v��$�$�S�)�����$�	%��	/�C����#�#�C��.�	/rgc	�T�tj|�s|j�}tj|�}|jjt
|��}d|d|d|dd|dg}tjtj|d�|jjj|�|j|�|j�|rM|rJd|dd|dg}tjtj|d�||jt
|�<yyy)	Nz!WEB: Clearing all cached info forzPreserving context:zContext:r�,�TzWEB: Preserving context of)rrj�
documentFrame�
get_parentr�get�hashr�printTokens�
LEVEL_INFO�_script�structuralNavigation�
clearCache�clearCaretContext�clearCachedObjects)rcru�preserveContext�documentFrameParent�context�tokenss      rf�	dumpCachezUtilities.dumpCache�s��� � ��/� �.�.�0�M�&�1�1�-�@���%�%�)�)�$�/B�*C�D��5�}�'��*�g�a�j�RU�W^�_`�Wa�c��
���%�*�*�F�D�9����)�)�4�4�]�C����}�-����!��w�2�G�A�J��W�Q�Z�P�F����e�.�.���=�=D�D����%8� 9�:� '�?rgc���tjtjdd�i|_i|_i|_i|_i|_i|_i|_	i|_
i|_i|_i|_
i|_i|_i|_i|_i|_i|_i|_i|_i|_i|_i|_i|_i|_i|_i|_i|_i|_i|_i|_ i|_!i|_"i|_#i|_$i|_%i|_&i|_'i|_(i|_)i|_*i|_+i|_,i|_-i|_.i|_/i|_0i|_1i|_2i|_3i|_4i|_5i|_6i|_7i|_8i|_9i|_:i|_;i|_<i|_=|j}�i|_?d|_@d|_Ay)NzWEB: cleaning up cached objectsT)Br�printMessagerzr r!r"r#r$r%r&r'r(r*r)r+r,r-r.r/r0r1r2r3r4r5r6r7r8r9r:r;r<r=r>r?r@rArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrrrrqrr]r^�rcs rfrzUtilities.clearCachedObjects�s��
���5�+�+�-N�PT�U�"$���!#���#%�� �57��2�!#���"$���"$���!#���"$���!#���(*��%�-/��*�$&��!�#%�� ����)+��&�!#���!#���*,��'�*,��(�*,��(����"$���������46��1�#%�� ����#%�� �!���)+��&�!#���')��$�������!#���$&��!�%'��"� ���!���!���&(��#�46��1�/1��,�$&��!�!��� "������%'��"� ���#%�� �*,��'����$&��!�"$���������*,��'�,.��)����� ���*.��'�"��rgc�X�d|_d|_d|_d|_d|_i|_yr)rXrYrZr[r\rr�s rf�clearContentCachezUtilities.clearContentCache�s2��&*��#�(,��%�$(��!�$(��!�)-��&�!#��rgc��tj|�stj|�ry|stj|�Sy�NTF)r�is_document_web�is_embedded�is_document_frame)rcro�excludeDocumentFrames   rf�
isDocumentzUtilities.isDocument�s7���&�&�s�+�{�/F�/F�s�/K��#��0�0��5�5�rgc��|s"tj�j�}|j|�ry|jjt
|��}|�|S|j|�}|du}||jt
|�<|S�NT)r�
getManager�get_locus_of_focusr�r rwrx�getDocumentForObject�rcro�rv�documents    rf�inDocumentContentzUtilities.inDocumentContent�s�����*�*�,�?�?�A�C��?�?�3���
�
$�
$�
(�
(��c��
3��
�>��I��,�,�S�1��
�T�
!��-/�����S�	�*��	rgc�t�tj|tjj|j
�Sr)r�get_relation_targetsr�RelationType�EMBEDSr�)rc�frames  rf�_getDocumentsEmbeddedByz!Utilities._getDocumentsEmbeddedBys'���,�,�U�E�4F�4F�4M�4M�t���_�_rgc�f�|jj}tj�j	�}tj|�|k(ryd|d|g}tjtj|d�	tj�j||�}d|g}tjtj|d�t|t|j��rk|j�}|j�D]G\}}d|d|g}tjtj|d�t!|j||��I	tj�j'|�}tj(|�|j_d|jjg}tjtj|d�tj�j+|�y#t"$r*d}tj$tj|d�Y��wxYw)	NTzWARNING:zis not child ofz WEB: Script for active Window iszWEB: Setting�toz1ERROR: Exception getting script for active windowzWEB: updating script's app to)r{�apprr��get_active_windowrrvrryrzr�	getScript�
isinstance�type�getTransferableAttributesri�setattr�	Exceptionr��find_active_window�get_application�set_active_window)	rcr��windowr�rd�attrs�attr�value�msgs	         rf�sanityCheckActiveWindowz!Utilities.sanityCheckActiveWindows����l�l�����)�)�+�=�=�?�����v�&�#�-���f�&7��=��
���%�*�*�F�D�9�
	7�#�.�.�0�:�:�3��G�F�8�&�A�F����e�.�.���=�
�&�$�t�|�|�"4�5��8�8�:��#(�;�;�=�7�K�D�%�,�d�D�%�@�F��%�%�e�&6�&6���E��D�L�L�$��6�7�
�)�)�+�>�>�s�C��#�3�3�F�;�����1�4�<�<�3C�3C�D��
���%�*�*�F�D�9�� � �"�4�4�V�<���!�	<�E�C����u�/�/��d�;�	<�s�>A
G=�=0H0�/H0c���|xs"tj�j�}|j|�}t	ttj|��}t|�dk(r|dSy�Nrtr)	rr�r�r��list�filterr�
is_showing�len)rcr��	documentss   rf�activeDocumentzUtilities.activeDocument&s^���I�=�3�3�5�G�G�I���0�0��8�	���� 6� 6�	�B�C�	��y�>�Q���Q�<��rgc��|s$|j�r|j�}|r|S|j|xs"tj�j��Sr)r�r�r�rr�r�)rcror�s   rfruzUtilities.documentFrame.sN���t�3�3�5��*�*�,�H�����(�(��)_�
�0H�0H�0J�0]�0]�0_�`�`rgc�r�tj|�rytj|�r&tj|tj
�duStj|�r=tj|�dk(r%|jtj|d��Stj|�S)NFrtr)r�is_entry�is_imager�
find_ancestor�is_link�
is_heading�get_child_count�isLink�	get_child�is_focusable�rcros  rf�grabFocusWhenSettingCaretz#Utilities.grabFocusWhenSettingCaret6s�������$������$��)�)�#�{�/B�/B�C�4�O�O��!�!�#�&�8�+C�+C�C�+H�A�+M��;�;�x�1�1�#�q�9�:�:��'�'��,�,rgc�\�|jjj�r$|jjj�|j	|�}|j||�\}}|j
|||�|jj�rytj�j�}tj|�tj�jd|d��|rtj|�tj ||�|jj#||�|jj%�k7r|jj'd�|rtj(|dd�|jj+|�y)NF)�
notify_scriptzSet caret in object.)r{�flatReviewPresenter�	is_active�quitr��findFirstCaretContext�setCaretContext�focusModeIsStickyrr�r�r�clear_all_selected_text�set_locus_of_focusr�
grab_focus�set_caret_offset�useFocusMode�inFocusMode�togglePresentationMode�clear_cache�_saveFocusedObjectInfo)rcrorpru�	grabFocus�oldFocuss      rf�setCaretPositionzUtilities.setCaretPositionCsA���<�<�+�+�5�5�7��L�L�,�,�1�1�3��2�2�3�7�	��0�0��f�=���V����S�&�-�8��<�<�)�)�+�� �+�+�-�@�@�B���&�&�x�0�� � �"�5�5�d�C�u�5�U������$�����V�,��<�<�$�$�S�(�3�t�|�|�7O�7O�7Q�Q��L�L�/�/��5��� � ��e�-C�D�	
���+�+�C�0rgc��|sytj|tjj�}|r|jd�S||k(rJ|j
|�\}}tj|�D]}tj|�|kDs�|cStj|�rtj|d�S|r;||k7r6tj|�}|r|Stj|�}|r||k7r�6y�Nr)r�get_relationrr��FLOWS_TO�
get_target�getCaretContext�
iter_childrenr�get_character_offset_in_parentr�r��get_next_siblingrv)rcroru�relationrp�child�nextObjs       rf�getNextObjectInDocumentz!Utilities.getNextObjectInDocument^s������(�(��e�.@�.@�.I�.I�J����&�&�q�)�)��-���.�.�}�=�K�C��!�/�/�
�>�
!���=�=�e�D�v�M� �L�
!��#�#�C�(��%�%�c�1�-�-��c�]�*��/�/��4�G�����%�%�c�*�C�	�c�]�*�rgc�,�tj|�Sr)r�find_deepest_descendant)rcrus  rf�getLastObjectInDocumentz!Utilities.getLastObjectInDocumentws���/�/�
�>�>rgc�|�tj|�}|jdd�}|r|jd|�}|S)N�roledescription��brailleroledescription�r�get_attributes_dictrw)rcro�	isBrailler�r�s     rf�getRoleDescriptionzUtilities.getRoleDescriptionzs<���,�,�S�1��
�Y�Y�(�"�
-������3�R�8�B��	rgc���|r|j|�st�|�	|�Sd}|j|�sHt	j
|�s3t
j|�}t|jdd��dz
}|S)N����levelrrt)
r�r�	nodeLevel�inMenurr�rr��intrw)rcror�r�res    �rfr�zUtilities.nodeLevel�sp�����.�.�s�3��7�$�S�)�)�
�����C� �K�$:�$:�3�$?��0�0��5�E��U�Y�Y�w��*�+�Q�.�B��	rgc��yr��r�s  rf�"_shouldCalculatePositionAndSetSizez,Utilities._shouldCalculatePositionAndSetSize�s��rgc���|j|�}|j|�}|�	|�|dz
|fS|j|�rt�|�|fi|��Sy)Nrt)r�r�)�getPositionInSet�
getSetSizer�r�getPositionAndSetSize)rcro�args�posinset�setsizeres     �rfrzUtilities.getPositionAndSetSize�sa����(�(��-���/�/�#�&����G�$7��a�<��(�(��2�2�3�7��7�0��=��=�=�rgc��tj|d�}|jd�}|�t|�St	j
|�r~|jd�}|�^tj|�rItj|tj�}tj|d�jd�}|�t|�Sy)NFr�rowindex)	rr�rwr�r�is_table_rowr��find_descendant�is_table_cell_or_header)rcror��positionr�cells      rfr�zUtilities.getPositionInSet�s����,�,�S�%�8���9�9�Z�(�����x�=� ��#�#�C�(��y�y��,�H���H�$<�$<�S�$A��/�/��[�5X�5X�Y��#�7�7��e�D�H�H��T���#��8�}�$�rgc���tj|d�}|jd�}|�t|�St	j
|�r/t
jt
j|��}|dk7r|Sy)NFrr�)	rr�rwr�rrr�
get_row_count�	get_table)rcror�r�rowss     rfr�zUtilities.getSetSize�sj���,�,�S�%�8���)�)�I�&�����w�<���#�#�C�(��(�(��):�):�3�)?�@�D��r�z���rgc�N�tj|�}|jd�S)N�idr��rcror�s   rf�_getIDzUtilities._getID�s ���,�,�S�1���y�y���rgc�P�tj|�}|jdd�S)N�displayr�r�rs   rf�_getDisplayStylezUtilities._getDisplayStyle�s#���,�,�S�1���y�y��B�'�'rgc�N�tj|�}|jd�S)N�tagr�rs   rf�_getTagzUtilities._getTag�s!���,�,�S�1���y�y���rgc�l�tj|�}|jdd�j�S)Nz	xml-rolesr�)rr�rw�splitrs   rf�_getXMLRoleszUtilities._getXMLRoles�s,���,�,�S�1���y�y��b�)�/�/�1�1rgc���|s"tj�j�}|j|�ryt�|�|�S�NF)rr�r�r�r�inFindContainer�rcrores  �rfrzUtilities.inFindContainer�s>�����*�*�,�?�?�A�C��!�!�#�&���w�&�s�+�+rgc�x�|j|�sytj|�ry|j|d�Sr)�isTextBlockElementr�get_name�treatAsTextObjectr�s  rf�isEmptyzUtilities.isEmpty�s:���&�&�s�+�����S�!���)�)�#�u�5�5�5rgc�R�tj|d�}|jdd�S)NF�hiddenr�rs   rf�isHiddenzUtilities.isHidden�s%���,�,�S�%�8���y�y��5�)�)rgc�L��|r�sy|�k(rytj|�fd��S)NFTc���|�k(Srr�)�x�parents �rf�<lambda>z%Utilities._isOrIsIn.<locals>.<lambda>�s���q�F�{�rg�rr�)rcr�r+s  `rf�	_isOrIsInzUtilities._isOrIsIn�s)����&���F�?���%�%�e�-B�C�Crgc���|j|�st�|�	|�S|j|�ryt	j
|�r+t	j|�rtj|�sytj|�|j�vr'|j|�}t	j|�ryt�|�	|�S�NFT)r�r�
isTextArear�r�is_combo_box�is_editablerr��get_role�_textBlockElementRolesr�)rcror�res   �rfr1zUtilities.isTextArea�s�����%�%�c�*��7�%�c�*�*��;�;�s����#�#�C�(��&�&�s�+��+�+�C�0�����S�!�T�%@�%@�%B�B��0�0��5�H��&�&�x�0���w�!�#�&�&rgc��tj|�sytj|�rytj|�xrtj|�Sr0)rr��is_read_onlyr�r3r�s  rf�isReadOnlyTextAreazUtilities.isReadOnlyTextArea�sH���#�#�C�(���#�#�C�(���'�'��,�Q�[�5L�5L�S�5Q�1Q�Qrgc�^�|j||�|jj|�yr)r�r{�
updateBraille)rcro�characterOffsets   rf�setCaretOffsetzUtilities.setCaretOffsets$�����c�?�3����"�"�3�'rgc�*�|s|j�\}}|j||�\}}|rdtj||�dj	�r=|j||�\}}tj||�dj	�r�=||fSr�)r��findNextCaretInOrderr�get_character_at_offset�isspace)rcrorp�	skipSpace�nextobj�
nextoffsets      rf�nextContextzUtilities.nextContexts�����.�.�0�K�C��"�7�7��V�D������0�0��*�E�a�H�P�P�R�&*�&?�&?���&T�#����0�0��*�E�a�H�P�P�R��
�"�"rgc�*�|s|j�\}}|j||�\}}|rdtj||�dj	�r=|j||�\}}tj||�dj	�r�=||fSr�)r��findPreviousCaretInOrderrr?r@)rcrorprA�prevobj�
prevoffsets      rf�previousContextzUtilities.previousContexts�����.�.�0�K�C��"�;�;�C��H������0�0��*�E�a�H�P�P�R�&*�&C�&C�G�Z�&X�#����0�0��*�E�a�H�P�P�R��
�"�"rgc����d}|j��rtj��dz
}�fd�}�}|r+|j||�\}}|r||�s	||fS||}}|r�+||fS)Nrrtc�D��|�k(xstj|�fd��S)Nc���|�k(Srr�)r*�roots �rfr,z:Utilities.lastContext.<locals>._isInRoot.<locals>.<lambda>'s���A��I�rgr-)�orMs �rf�	_isInRootz(Utilities.lastContext.<locals>._isInRoot&s �����9�N�� 6� 6�q�:M� N�Nrg)r#r�get_character_countrD)rcrMrprOro�lastobj�
lastoffsets `     rf�lastContextzUtilities.lastContext!s�������!�!�$�'��/�/��5��9�F�	O����"&�"2�"2�3��"?��G�Z��	�'� 2���F�{��"�:��C�	��F�{�rgc��||k(ry|\}}|\}}|j|||dz�}|j|||dz�}|j||�S)NTrt��
getExtents�extentsAreOnSameLine)	rc�a�b�aObj�aOffset�bObj�bOffset�aExtents�bExtentss	         rf�contextsAreOnSameLinezUtilities.contextsAreOnSameLine2s]����6���
��g��
��g��?�?�4��'�A�+�>���?�?�4��'�A�+�>���(�(��8�<�<rgc�,�||k(ry|\}}}}|\}}}	}
|dk(r|dk(r||cxkxr||
zkScS|	dk(r|
dk(r||cxkxr||zkScSt||z||
z�}t||�}||k\ry||dzz}
||
dzz}t|
|z
�|kDryy)NTrF�)�min�max�abs)rXrY�
pixelDelta�aX�aY�aWidth�aHeight�bX�bY�bWidth�bHeight�
highestBottom�	lowestTop�aMiddle�bMiddles               rfrWzUtilities.extentsAreOnSameLine<s�����6��"#���B���"#���B����Q�;�7�a�<���+�r�G�|�+�+�+�+��Q�;�7�a�<���+�r�G�|�+�+�+�+��B��L�"�w�,�7�
���B�K�	��
�%���w��{�"���w��{�"���w�� �!�J�.��rgc�D�|sgd�Sgd�}|j|�r�d|cxkr|kr�nn�tj|||�}|j|j|j
|jg}|drj|dre|ddk(r]|ddk(rUtj|||�j�r0d|d|d|d	|g}tjtj|d
�n|Stj|�}tj|�stj |�r@tj"|�stj$|�rt'j(|�}nt'j(|�}|j|j|j
|jgS)N)rrrrrrtrb�z&WEB: Suspected bogus range extents forz(chars:rsz):T)r#r�get_range_rectr*�y�width�height�
get_substring�striprryrzrrvr�is_menu�is_list_itemr2�is_list_boxr
�get_rect)	rcro�startOffset�	endOffset�result�rectr�r+�exts	         rfrVzUtilities.getExtentsUsT��������!�!�#�&�1��+G�i�+G��(�(��k�9�E�D��f�f�d�f�f�d�j�j�$�+�+�>�F��a�y�V�A�Y�6�!�9��>�f�Q�i�1�n��'�'��[�)�D�J�J�L�B��y�+�s�I�t�V�U���!�!�%�"2�"2�F�D�A��
��$�$�S�)������$��(@�(@��(E��)�)�&�1�[�5L�5L�V�5T��&�&�v�.�C��&�&�s�+�C����s�u�u�c�i�i����4�4rgc�X�|rtj|�sy|j|�ryyr0)rr��isMathTopLevelr�s  rf�
_preserveTreezUtilities._preserveTreens)����0�0��5�����s�#��rgc����|j|�st�|�	|||�S|j|�r+d|dg}t	j
tj|d�y|j|�sy|j|�rJ|jjj|�}|jjj|�St�|�	|||�j�S)NzWEB: not expanding EOCs:zhas grid descendantTr�)r�r�
expandEOCs�hasGridDescendantrryrzr#r�r{�speechGenerator�generateSpeech�utterancesToStringrz)rcrorr�r��
utterancesres      �rfr�zUtilities.expandEOCsws�����%�%�c�*��7�%�c�;�	�B�B��!�!�#�&�0�#�7L�M�F����e�.�.���=���%�%�c�*�����c�"����5�5�D�D�S�I�J��<�<�/�/�B�B�:�N�N��w�!�#�{�I�>�D�D�F�Frgc���|j|�st�|�	|||�S|j|�rt	j
|||�Sy)Nr�)r�r�	substringr#rry)rcrorr�res    �rfr�zUtilities.substring�sK����%�%�c�*��7�$�S�+�y�A�A��!�!�#�&��'�'��[�)�D�D�rgc���|jjt|��xsi}||vr|j|�St�	|�|||�}tj|d�}|jjj�D]}|j|�}|��||d|<� ||i|jt|�<|S�NFr)
rrwrxr�textAttributesrr�r{�attributeNamesDict�keys)
rc�accrp�get_defaults�attrsForObjr��
objAttributesrnr�res
         �rfr�zUtilities.textAttributes�s�����,�,�0�0��c��;�A�r���[� ��?�?�6�*�*���&�s�F�L�A�� �4�4�S�%�@�
��<�<�2�2�7�7�9�	&�C�!�%�%�c�*�E�� � %��a���
�	&�
.4�E�N����t�C�y�)��rgc�<��|dk(r|dk(rd}t�|�||�S)N�
justification�justify�fill)r�localizeTextAttribute)rcrnr�res   �rfr�zUtilities.localizeTextAttribute�s)����/�!�e�y�&8��E��w�,�S�%�8�8rgc��g}|D]9}|j|dd�}|D] \}}}}}	|j|d|||g��"�;|S)Nrrt)�splitSubstringByLanguagerk)
rc�contentsr��contentr�start�end�string�language�dialects
          rf�adjustContentsForLanguagez#Utilities.adjustContentsForLanguage�sh��
���	<�G�1�D�1�1�7�1�Q�<�@�E�9>�
<�5��s�F�H�g��	�	�7�1�:�u�c�6�:�;�
<�	<�
�	rgc�4��t�
|�|||�}|s|�|Stj|�}|�|j	|�s|Stj|�}tj|�}|j|||�\}}	|jdd||	f�|S�Nrrt)
r�'getLanguageAndDialectFromTextAttributesrrvr�r�get_link_start_offset�get_link_end_offset�!getLanguageAndDialectForSubstringrk)rcrorr�r�r+r�r�r�r�res          �rfr�z1Utilities.getLanguageAndDialectFromTextAttributes�s����
�W�
<�S�+�y�
Y��
����I��$�$�S�)���>��!7�!7��!?��I��1�1�#�6���-�-�c�2�� �B�B�6�5�RU�V���'�
�	�	�1�a��7�+�,��	rgc�l�|r|sytd|�}|D�cgc]
}|d|k(s�|��}}|D�cgc]}|d|cxkr	|dks�nn|��}}|r |dr|d|vr|j|d�S|s:|D�cgc]
}||dk(s�|��}}|r |dr|d|vr|j|d�S|j|�sytj||�}|rK|j|�s:|D�cgc]
}|d|k(s�|��}}t|�dk(r|j|d�Sycc}wcc}wcc}wcc}w)Nr�rrtrb)rd�indexr!r�get_child_at_offsetr�)	rcrorpr��
usingCacher*�matches�matchr�s	         rf�findObjectInContentszUtilities.findObjectInContents�sK���(���Q����&�6��!�A�$�#�+�1�6��6�#�=�q�q��t�v�'<��!��'<��=��=��U�1�X�%��(�h�"6��>�>�%��(�+�+�� '�:�1�6�Q�q�T�>�Q�:�E�:���q��e�A�h�(�&:��~�~�e�A�h�/�/��&�&�s�+���/�/��V�<����0�0��7�"*�<�Q�a��d�e�m�q�<�G�<��7�|�q� ��~�~�g�a�j�1�1���%7��=��;��=s-�
D"�D"�D'�D'�6
D,�D,�+
D1�9D1c���t�|�|�}|r|j|�s|S|r|j|�sy|j|�|j|�k7ryd|d|dg}t	j
tj|d�|S)NzWEB: Previous object for�is�.T)r�findPreviousObjectr��getTopLevelDocumentForObjectrryrz�rcror�r�res    �rfr�zUtilities.findPreviousObject�s������+�C�0����.�.�s�3��M��4�1�1�&�9���,�,�V�4��8Y�8Y�Z]�8^�^��,�c�4���E��
���%�*�*�F�D�9��
rgc���t�|�|�}|r|j|�s|S|r|j|�sy|j|�|j|�k7ryd|d|dg}t	j
tj|d�|S)NzWEB: Next object forr�r�T)r�findNextObjectr�r�rryrzr�s    �rfr�zUtilities.findNextObject�s������'��,����.�.�s�3��M��4�1�1�&�9���,�,�V�4��8Y�8Y�Z]�8^�^��(�#�t�V�S�A��
���%�*�*�F�D�9��
rgc	��|jjt|��}|�|Stjj
tjjtjjtjjtjjtjjtjjtjjtjjg	}tj|�}||vrd}n�|tjj k(r*t#j$tj&|��}nG|tjj(k(r*t#j*|�rd}n|j-|�}||jt|�<|Sr�)rErwrxrr_�	CHECK_BOX�CHECK_MENU_ITEM�MENU�	MENU_ITEM�PAGE_TAB�RADIO_MENU_ITEM�RADIO_BUTTON�PUSH_BUTTON�
TOGGLE_BUTTONrr4rar�is_listrv�
TABLE_CELLr3r!)rcror��roles�roles     rf�isNonEntryTextWidgetzUtilities.isNonEntryTextWidget�s?��
�
'�
'�
+�
+�D��I�
6��
�>��I����%�%����+�+���������%�%����$�$����+�+����(�(����'�'����)�)�+��� � ��%���5�=��B�
�U�Z�Z�)�)�
)� �(�(��)<�)<�S�)A�B�B�B�
�U�Z�Z�*�*�
*��&�&�s�+����0�0��5�5��02��"�"�4��9�-��	rgc�t�|rtj|�ry|jjt	|��}|�|Stj
|�sy|j
|�r|jj�rytj|�dkDxstj|�}|rf|j|d�rTtj|�r?|j|�s.d|dg}t!j"t j$|d�d}�n�|�r�|j'|��sqt(j*j,g}tj.|�}|r0||vr,d|dg}t!j"t j$|d�d}|r?|r=|j1|�r,d|dg}t!j"t j$|d�d}|rN|j3|�s|j5|�r,d|d	g}t!j"t j$|d�d}|r=|j7|�r,d|d
g}t!j"t j$|d�d}|r=|j9|�r,d|dg}t!j"t j$|d�d}||jt	|�<|S)NFTrr�z
WEB: Treatingz+as non-text: named object treated as whole.zas non-text due to role.z&as non-text: is non-entry text widget.z+as non-text: is hidden or off-screen label.z0as non-text: is non-navigable embedded document.z+as non-text: is fake placeholder for entry.)r�is_deadrVrwrx�
supports_textr�r{�browseModeIsStickyrrPrr3�_treatObjectAsWholer"�isCellWithNameFromHeaderrryrz�isLiveRegionrr_�LIST_BOXr4r�r'�isOffScreenLabel�isNonNavigableEmbeddedDocument�isFakePlaceholderForEntry)rcro�excludeNonEntryTextWidgetsr�r��
doNotQueryr�s       rfr#zUtilities.treatAsTextObjects[���h�&�&�s�+��
�
$�
$�
(�
(��c��
3��
�>��I��%�%�c�*���%�%�c�*�d�l�l�.M�.M�.O��
�
'�
'��
,�q�
0�
P�K�4K�4K�C�4P��
�$�*�*�3��3��8I�8I�#�8N��1�1�#�6�%�s�,Y�Z�F����e�.�.���=��B�
��)�)�#�.��*�*�-�-�.�J��$�$�S�)�D��d�j�(�)�3�0J�K���!�!�%�"2�"2�F�D�A����0�T�5N�5N�s�5S�)�3�0X�Y���!�!�%�"2�"2�F�D�A����t�}�}�S�)�T�-B�-B�3�-G�)�3�0]�^���!�!�%�"2�"2�F�D�A����d�9�9�#�>�)�3�0b�c���!�!�%�"2�"2�F�D�A����d�4�4�S�9�)�3�0]�^���!�!�%�"2�"2�F�D�A���-/�����S�	�*��	rgc���|r|j|�sy|jjt|��}|�|Sd}|j	|�rUtj|�r@tj|�D]&}|j|�r|j|�s�&nd}|r*d|dg}tjtj|d�||jt|�<|S)NFT�WEB:z*has name and action and no useful children)
r�rJrwrx�hasExplicitNamer�supports_actionr��isUselessEmptyElement�isUselessImagerryrz)rcror�r�r�s     rf�#hasNameAndActionAndNoUsefulChildrenz-Utilities.hasNameAndActionAndNoUsefulChildrenFs�����.�.�s�3��
�
6�
6�
:�
:�4��9�
E��
�>��I�
������$��)A�)A�#�)F�!�/�/��4�
���1�1�%�8�D�<O�<O�PU�<V��
���
��c�#O�P�F����e�.�.���=�?A��1�1�$�s�)�<��	rgc	���|r|j|�sy|jjt|��}|�|St	j
|�}d}|j
�}|jtjjtjjg�||v�rtj|�s�tjjtjjtjj tjj"tjj$tjj&tjj(tjj*tjj,g	�t	j.|�fd��}||jt|�<|S)NFc�2��tj|��vSr�rr4)r*�controlss �rfr,z?Utilities.isNonInteractiveDescendantOfControl.<locals>.<lambda>ss���x�7H�7H��7K�x�7W�rg)r�r9rwrxrr4r5�extendrr_�IMAGE�CANVASrr�r�r�r�r�r�r�r�r��	TREE_ITEMr�)rcror�r�r�r�s     @rf�#isNonInteractiveDescendantOfControlz-Utilities.isNonInteractiveDescendantOfControl]s@�����.�.�s�3��
�
6�
6�
:�
:�4��9�
E��
�>��I�� � ��%��
���+�+�-��
���e�j�j�&�&��
�
�(9�(9�:�;��5�=��!9�!9�#�!>��
�
�,�,��
�
�2�2��
�
�+�+��
�
�,�,��
�
�2�2��
�
�/�/��
�
�.�.��
�
�0�0��
�
�,�,�.�H��'�'��-W�X�B�?A��1�1�$�s�)�<��	rgc	��tjjtjjtjjtjj
tjjtjjtjjtjjtjjg	}tjjtjjtjjtjjg}tj |�}||vry||vr |j"j%�ry|dk(S|tjj&k(r?tj(|�dk(r&|j+tj,|d��ryyt/j0|�ry|tjj2k(r>|j5|�r|j"j7�S|j9|�ry|tjj:tjj<fvr|j?|�ry|tjj@k(ry|tjjBtjjDtjjFfvr|j"j7�S|tjjHk(r$|j?|�xs|jK|�S|jM|�ry|j+|�ry|jO|�ry||jQ�vrTt/jR|�r?|j?|�r.tjT|�D]}|jW|�r�yyy)NTr�rtrF),rr_r�r�r�r�r�r�r�r�r�r��MENU_BAR�TOOL_BARr�rr4r{r��ENTRYr�r�r�rr3r��isFocusModeWidgetr�r��
COLUMN_HEADER�
ROW_HEADERr��	COMBO_BOX�EMBEDDED�TREE�
TREE_TABLE�LINK�hasUselessCanvasDescendantr��
isCustomImager5r�r�r�)rcrorp�always�descendabler�r�s       rfr�zUtilities._treatObjectAsWholexs����*�*�&�&��*�*�,�,��*�*�%�%��*�*�&�&��*�*�%�%��*�*�,�,��*�*�)�)��*�*�(�(��*�*�*�*�,���z�z����z�z�*�*��z�z�*�*��z�z�+�+�-��
� � ��%���6�>���;���|�|�'�'�)���R�<���5�:�:�#�#�#��'�'��,��1��0�0��1C�1C�C��1K�L����"�"�3�'���5�:�:�(�(�(��%�%�c�*��<�<�:�:�<�<�<��7�7��<���E�J�J�,�,�e�j�j�.C�.C�D�D��#�#�C�(���5�:�:�'�'�'���E�J�J�'�'������%�*�*�:O�:O�P�P��|�|�6�6�8�8�8��5�:�:�?�?�"��'�'��,�T��0O�0O�PS�0T�T��.�.�s�3���)�)�#�.�����c�"���4�.�.�0�0�[�5M�5M�c�5R��#�#�C�(�!�/�/��4�
!���1�1�%�8� �
!��rgc��tj|�}tjd|�D�cgc]}|j	���}}dt|�}}|D]%}|d|cxkr	|dks�n�|d|ddz}}n|||||fScc}w)Nz)\S*[^\.\?\!]+((?<!\w)[\.\?\!]+(?!\w)|\S*)rrt)r�get_all_text�re�finditer�spanr�)	rcrorp�text�m�spans�
rangeStart�rangeEndr�s	         rf�__findSentencezUtilities.__findSentence�s����"�"�3�'��#%�;�;�/[�]a�#b�c�a�����c��c� �#�d�)�H�
��	�D��A�w�&�+�D��G�+�'+�A�w��Q��!��H�
��	��J�x�(�*�h�>�>��
ds�Bc�,���fd�}|s2d|�d�|d|ddg}tjtj|d�y�j|�s2d|�d�|d|dd	g}tjtj|d�y
t	j
|�}|�W|dt
|�}	}}||�}
d|�d�|d|dd|
�d
|�d|	�d�g}tjtj|d�|||	fS|tjjk(r�tj|�s�tj|�tjjtjj fvs't#j$d|�r�j'|�sW|dt
|�}	}}||�}
d|�d�|d|dd|
�d
|�d|	�d�g}tjtj|d�|||	fS|tjj(k(rC�j+||�r1|dz}d|d|dg}tjtj|d�t-d|�}|tjj(k(rt	j.||�\}}}	n�|tjjk(rt	j0||�\}}}	n�|tjj2k(rt	j4||�\}}}	nR|tjj6k(rt	j8||�\}}}	nt	j.||�\}}}	||�}
d|�d�|d|dd|
�d
|�d|	�d�g}tjtj|d�|tjjk(xr|xr|||	fdk(}|rV�j;||�\}}
}||�}
dd|
�d
|
�d|�d�g}tjtj|d�||
|fS|||	fS)Nc�\��|j�jd�jdd�S)Nz[OBJ]�
�\n)�replace�EMBEDDED_OBJECT_CHARACTER�r*rcs �rf�stringForDebugz2Utilities._getTextAtOffset.<locals>.stringForDebug�s(����9�9�T�;�;�W�E�M�M�d�TY�Z�ZrgzWEB: Text at offset z for�using�:z#'', Start: 0, End: 0. (obj is None)T)r�rrz:'', Start: 0, End: 1. (treatAsTextObject() returned False))r�rrtr�'z
', Start: z, End: r�z\wrtzWEB: Line sought forz#at end of text. Adjusting offset toz7HACK: Attempting to recover from above failure. Result:)rryrzr#rr�r�r�TextBoundaryType�SENTENCE_STARTrr3rr4r_ra�HEADINGr��searchr!�
LINE_START�treatAsEndOfLinerd�get_line_at_offset�get_sentence_at_offset�
WORD_START�get_word_at_offset�CHARr?�_Utilities__findSentence)rcrorp�boundaryrr��allTextr�r�r��s�needSadHack�	sadString�sadStart�sadEnds`              rf�_getTextAtOffsetzUtilities._getTextAtOffset�s5���	[��,�V�H�D�9�3���SV�;�=�F����e�.�.���=���%�%�c�*�,�V�H�D�9�3���SV�R�T�F����e�.�.���=���%�%�c�*����!(�!�S��\�3�E�F��v�&�A�,�V�H�D�9�3���SV��!��J�u�g�W�S�E��;�=�F����e�.�.���=��5�#�%�%��u�-�-�<�<�<�[�E\�E\�]`�Ea�� � ��%�%�*�*�*>�*>��
�
�@R�@R�)S�S��y�y���0�T�5L�5L�S�5Q�%,�a��W��s���"�6�*��0����=�s�G�X�WZ��a�S�
�5�'����Q�?�A���!�!�%�"2�"2�F�D�A��u�c�)�)��u�-�-�8�8�8�T�=R�=R�SV�X^�=_��a�K�F�,�c�3X��c�#�F����e�.�.���=��Q�����u�-�-�8�8�8�!'�!:�!:�3��!G��F�E�3�
��/�/�>�>�
>�!'�!>�!>�s�F�!K��F�E�3�
��/�/�:�:�
:�!'�!:�!:�3��!G��F�E�3�
��/�/�4�4�
4�!'�!?�!?��V�!L��F�E�3�!'�!:�!:�3��!G��F�E�3��6�"��(����5�s�G�X�s��a�S�
�5�'����Q�7�9��
���%�*�*�F�D�9��%�"8�"8�"G�"G�G�2�G�2���s�#�z�1�	��*.�*=�*=�c�6�*J�'�I�x���y�)�A�O��!��J�x�j���x�q�A�C�F����e�.�.���=��h��.�.��u�c�!�!rgc�,��d||g}tjtj|d�|sgS|tjj
k(r8|j
|�r'tj|�}|r|dt|�|ggS|tjjk(�r�|j|�r,|j|�r|}n|j|�}|dddggS|j|�}|j|�r�t!j"|�rY|rWd|dg}tjtj|d�|dtj$|�t!j"|�ggSd|dg}tjtj|d�d}|j'|�r�t!j"|�rY|rWd|d	g}tjtj|d�|dtj$|�t!j"|�ggSd|d	g}tjtj|d�d}t)j*|�r?t!j,|�dk(r'|j/t!j0|d�d|�S|j3|||�\}}}	|s|||	|ggS||z
�	|�}
|
|j4k(r+t7j8||�}|r|j/|d|�St?j@d
|�D�cgc]}|jC���}}tEtG�fd�|��}t|�dk(r |d\}}||z
}|||}|t|�z}	|tjjHtjjJfvr|||	|ggS|jM|||	|gg�S#t:$r;}d
��d|�d|��}
tj<tj|
d�Yd}~��	d}~wwxYwcc}w)Nz#WEB: Attempting to get contents forTrrtr�z#WEB: Returning name as contents forz(single-char lines)z'WEB: Returning all text as contents forz(single-word lines)zWEB: Could not get char z for 'z': u[^]+c�0��|d�cxkxr|dkScSr�r�)r*�stringOffsets �rfr,z.Utilities._getContentsForObj.<locals>.<lambda>Vs����!���(D��!��(D��(D�rg)'rryrzrrr�isTimerr�r�r�isMathr��getMathAncestorr#�elementLinesAreSingleCharsrr"rP�elementLinesAreSingleWordsr�is_internal_framer��_getContentsForObjr�r"r	rr�r�r�r�r�r�r�r�rrr�)rcrorprr�r��math�treatAsTextr�r��charr��errorr�r��ranges�stringsrrr%s                   @rfr,zUtilities._getContentsForObjs����7��h�G��
���%�*�*�F�D�9���I��u�-�-�<�<�<����S�AQ��(�(��-�F���a��V��f�5�6�6��u�-�-�8�8�8��{�{�3���&�&�s�+��D��/�/��4�D��q�!�R�(�)�)��0�0��5�K��.�.�s�3��$�$�S�)�k�C�S�J_�`�F��%�%�e�&6�&6���E� �!�V�%?�%?��%D�h�FW�FW�X[�F\�]�^�^�C�S�J_�`���!�!�%�"2�"2�F�D�A����.�.�s�3��$�$�S�)�k�C�S�J_�`�F��%�%�e�&6�&6���E� �!�V�%?�%?��%D�h�FW�FW�X[�F\�]�^�^�C�S�J_�`���!�!�%�"2�"2�F�D�A����(�(��-�(�2J�2J�3�2O�ST�2T��*�*�8�+=�+=�c�1�+E�q�(�S�S�!�2�2�3���I����s���%��f�-�.�.���~��		G��,�'�D�
�t�5�5�5�#�7�7��V�D����2�2�5�!�X�F�F�$&�K�K��f�$E�F�q�!�&�&�(�F��F��v�D�f�M�N���w�<�1��#*�1�:� �J���Z��E��J�x�0�F��#�f�+�%�C���.�.�9�9�5�;Q�;Q�;V�;V�W�W��%��f�-�.�.��-�-��U�C��/H�.I�J�J��)�	<�,�\�N�&����E�7�S�C����u�/�/��d�;�;��	<��Gs�O
�P�
	P�0P	�	Pc�H�i|_|j|||�}i|_|Sr)r�_getSentenceContentsAtOffset�rcrorp�useCacher�s     rf�getSentenceContentsAtOffsetz%Utilities.getSentenceContentsAtOffsetbs+��,.��)�
�
.�
.�s�F�H�
E��,.��)��	rgc�F���|sgStd|�}|r.�j||�jd��dk7r�jStjj
}�j
|||��tj|�r*tj|�r�S�j|�r�S�fd�}�d\}}}}	|r�|	rމj|�r|dk(r>nljjtj|��rtj|�dk(rn��j!||�\}
}�j
|
||�}t#t%�fd�|��}t#t%||��}
|
r|j'|
d�}||dzd}|sn|�dd�d\}}}}	|r|	r��|�d�sm�d\}}}}�j)||dz
�\}}�j
|||�}t#t%�fd�|��}|sn�j+|�|�d�s�m|r��_�S)	NrT�r�r�c�,��|\}}}}�j|�sy�j|�r dtj|�cxkr|kryd|cxkrdkr%nn"dj	|j�dd�}t
jd|�}|duS)NFrT�� rtz\S[\.\!\?]+(\s|\Z))r!r#rrP�joinrr�r)r*�xObj�xStart�xEnd�xStringr�rcs      �rf�_treatAsSentenceEndzCUtilities._getSentenceContentsAtOffset.<locals>._treatAsSentenceEnd{s����*+�'�D�&�$���*�*�4�0���%�%�d�+��F�4N�4N�t�4T�0\�X\�0\��1]��F��a���(�(�7�=�=�?�1�2�#6�7���I�I�3�W�=�E���$�$rgc���|�vSrr��r*�objectss �rfr,z8Utilities._getSentenceContentsAtOffset.<locals>.<lambda>�s���1�G�+;�rgrtc���|�vSrr�rDs �rfr,z8Utilities._getSentenceContentsAtOffset.<locals>.<lambda>�s���A�W�,<�rg)rdr�rYrrrr,rr3�
is_focused�$isContentEditableWithEmbeddedObjectsr!rrvrr�rFr�r�r�r>r�)rcrorpr6rrB�firstObj�
firstStart�firstEnd�firstString�prevObj�pOffset�onLeft�
endsOnLeft�i�lastObj�	lastStart�lastEnd�
lastStringr��nOffset�onRightrEs`                     @rfr4z&Utilities._getSentenceContentsAtOffseths?�����I��Q������(�(����!>�!>�4�)�Q�TV�W��4�4�4��)�)�8�8���)�)�#�v�x�@���"�"�3�'��%�%�c�*����8�8��=���	%�7>�a�j�3��*�h���;��&�&�x�0���?���(�(��)<�)<�X�)F�G��=�=�h�G�1�L��#�<�<�X�z�R��G�W��,�,�W�g�x�H�F��&�!;�V�D�E�F��f�%8�&�A�B�J���L�L��B��0����!�������!�G�A�a�L�:A�!�*�7�H�j�(�K�)�;�.&�g�b�k�2�6=�b�k�3�G�Y���#�8�8��'�A�+�N��G�W��-�-�g�w��I�G��6�"<�g�F�G�G����N�N�7�#�&�g�b�k�2��,3�D�)��rgc�H�i|_|j|||�}i|_|Sr)r�_getCharacterContentsAtOffsetr5s     rf�getCharacterContentsAtOffsetz&Utilities.getCharacterContentsAtOffset�s+��,.��)�
�
/�
/��V�X�
F��,.��)��	rgc���|sgStd|�}|r.|j|||jd��dk7r|jStjj
}|j
|||�}|r||_|S)NrTr9r�)rdr�r\rrrr,)rcrorpr6rrEs      rfrYz'Utilities._getCharacterContentsAtOffset�s�����I��Q������(�(����!?�!?�D�)�R�UW�X��5�5�5��)�)�.�.���)�)�#�v�x�@���-4�D�*��rgc�H�i|_|j|||�}i|_|Sr)r�_getWordContentsAtOffsetr5s     rf�getWordContentsAtOffsetz!Utilities.getWordContentsAtOffset�s+��,.��)�
�
*�
*�3���
A��,.��)��	rgc�����|sgStd|�}|rL�j||�jd��dk7r*�j||�jd��jStj
j}�j|||���j|||dz�����fd�}�d\}}}}	�j||�\}
}|
r�|	r�|
|k7r�tj|
|�d}|r|j�rn��j|
||�}
tt||
��}
|
snW�j�d|
d�r�j!d�|
�dd�d\}}}}	�j||�\}
}|
r|	r|
|k7r���d\}}}}|r�|r�|dj�s��j#||dz
�\}}||k(rn}�j|||�}|r�j�d|d�r|dd}tt||��}|sn3�j%|��d\}}}}|r|r|dj�s���d\}}}}	|dk(rt'j(|�r�dg�|r��_�j||�d��S)	NrTr9r�z
Word (cached)rtc�|��|�vry|\}}}}||k(s|sy�j|||dz�}�j�|�S)NFrtrU)	r*r>r?r@rA�xExtents�extentsrErcs	      ���rf�_includez4Utilities._getWordContentsAtOffset.<locals>._include�sP����G�|��*+�'�D�&�$����~�W�����t�V�V�a�Z�@�H��,�,�W�h�?�?rgzWord (not cached))rdr�r[�_debugContentsInforrrr,rVrFrr?r@r�r��_contentIsSubsetOfrlr>r�rr|)rcrorpr6rrcrIrJrKrLrMrNr/rOrRrSrTrUr�rVrWrbrEs`                    @@rfr]z"Utilities._getWordContentsAtOffset�s������I��Q������(�(����!:�!:�t�)�M�PR�S��'�'��V�T�5N�5N�P_�`��0�0�0��)�)�4�4���)�)�#�v�x�@���/�/�#�v�v��z�:��		@�7>�a�j�3��*�h���8�8��:�N�����+�'�X�*=��1�1�'�7�C�A�F�D��4�<�<�>���,�,�W�g�x�H�F��&��6�2�3�F����&�&�w�q�z�6�"�:�>����A��!�G�A�a�L�:A�!�*�7�H�j�(�K�#�<�<�X�z�R��G�W��+�'�X�*=�$3:�"�+�/���G�Z��*�Z��^�-C�-C�-E�#�8�8��'�A�+�N��G�W��'�!���-�-�g�w��I�G��4�2�2�7�1�:�w�r�{�K�!�!�B�-���6�(�G�4�5�G����N�N�7�#�6=�b�k�3�G�Y����*�Z��^�-C�-C�-E�"7>�a�j�3��*�h����?�{�7�7��A��q�z�l�G��(/�D�%�����V�W�6I�J��rgc�H�i|_|j|||�}i|_|Sr)r�_getObjectContentsAtOffsetr5s     rf�getObjectContentsAtOffsetz#Utilities.getObjectContentsAtOffsets+��,.��)�
�
,�
,�S�&�(�
C��,.��)��	rgc�`�������sgStj��r)d}tjtj|d�gStd|�}|rL�j
�|�jd��dk7r*�j�|�jd��jS�j�����fd�������fd�}�j�|d���s/d	�d
|��g}tjtj|d�gS�d\}}}	}
�j||	dz
�\}}|rg�j||d�}
tt||
��}
|
sn<�j|
��dd�dd}	}�j||	dz
�\}}|r�g|r��_�j�|�d
��S)Nz<ERROR: Cannot get object contents at offset for dead object.Trr9r�zObject (cached)c�L��|sy|�k(ry�tj|��Sr0)rrv)r*�_isInObjectros ��rfrkz9Utilities._getObjectContentsAtOffset.<locals>._isInObject5s)������C�x���x�2�2�1�5�6�6rgc�j��|�vry|\}}}}||k(ry�r�	j|�r�|k7ry�|�Sr)�
isLandmark)
r*r>r?r@rArkro�
objIsLandmarkrErcs
     �����rfrcz6Utilities._getObjectContentsAtOffset.<locals>._include<sG����G�|��*+�'�D�&�$����~�������!6�3�$�;���t�$�$rgz%ERROR: Cannot get object contents forz
at offset rtrbzObject (not cached))rr�rr�rzrdr�rXrdrmr,ryr>r�r�r�)rcrorpr6r�rcr�rRrSrTrUr�rVrWrkrnrEs``            @@@rfrgz$Utilities._getObjectContentsAtOffset!s������I����C� �P�C����u�/�/��d�;��I��Q������(�(����!<�!<��)�O�RT�U��'�'����!<�!<�>O�Q��2�2�2�����,�
�	7�	%�	%��)�)�#�v�t�<���=�s�j�QW�PX�DY�Z�F����e�.�.���=��I�29�"�+�/���G�Z��4�4�W�g��k�J������-�-�g�w��E�G��6�(�G�4�5�G����N�N�7�#�&�r�{�1�~�w�r�{�1�~�W�G�#�8�8��'�A�+�N��G�W���*1�D�'�����V�W�6K�L��rgc��|\}}}}|\}}}	}
||k(r;tt||��}tt||	��}|j|�Syr)�set�range�issubset)
rc�contentA�contentB�objA�startA�endA�stringA�objB�startB�endB�stringB�setA�setBs
             rfrezUtilities._contentIsSubsetOfasY��&.�#��f�d�G�&.�#��f�d�G��4�<��u�V�T�*�+�D��u�V�T�*�+�D��=�=��&�&�rgc��tjtjkryd|d|d|dg}tjtj|d�d}t	|�D]}\}\}}	}
}	|j||	|
�}d	|�d
|	�d|
�d|�d
|�d�}|tjtj||�z
}tjtj|d��y#t$r}
d|
�d�}Yd}
~
�vd}
~
wwxYw)N�WEB: �for�	at offsetr
Tz        z(exception: �)z     z	. chars: �-z: 'z
' extents=r)	rrz�
debugLevelry�	enumeraterVr��getAccessibleDetailsr�)rcrorpr��contentsMsgr��indentrQr�r�r�r�rbr0r�s               rfrdzUtilities._debugContentsInfoks�����e�.�.�.���;��s�K���M��
���%�*�*�F�D�9���,5�h�,?�	<�(�A�(��U�C��
2��/�/�#�u�c�:���!��I�e�W�A�c�U�#�f�X�Z��y�PR�S�C��5�-�-�e�.>�.>��V�L�L�C����u�/�/��d�;�	<���
2�(���q�1���
2�s�*C�	C8�(C3�3C8c�4�|j|�sytj|�sy|j|�ry|t	j
|�k(r-d|d|dg}t
jtj|d�yt	j||�d}||jk(rq|j||dz
|�}|j|||dz�}|j||�}d|d|d|d	|g}t
jtj|d�|Sy)
NFr�rpz(is end of line: offset is characterCountTrrtzis [obj]. Same line: zIs end of line: )
rHrr�r�rrPrryrzr?r	rVrW)rcrorpr�r/�prevExtents�thisExtents�sameLines        rfrzUtilities.treatAsEndOfLine|s���8�8��=���%�%�c�*���?�?�3����V�/�/��4�4��s�H�f�6`�a�F����e�.�.���=���-�-�c�6�:�1�=���4�1�1�1��/�/�#�v��z�6�B�K��/�/�#�v�v��z�B�K��0�0��k�J�H��s�H�f�6M�� 2��L�B�F����e�.�.���=��<��rgc�J�i|_|j||||�}i|_|Sr)r�_getLineContentsAtOffset)rcrorp�
layoutModer6r�s      rf�getLineContentsAtOffsetz!Utilities.getLineContentsAtOffset�s-��,.��)�
�
*�
*�3��
�H�
M��,.��)��	rgc�h
��� �!�"�tj�}�sgStj��r)d}tjtj
|d�gSt
d|�}tj��stj��r-�j��stj�|�}|r|�d}|rL�j�|�jd��dk7r*�j�|�jd��jS|�?t!j"�j%d�xs�j&j)�}g�"|dkDr)�j+�|�r�j-�|dz
|�� n�j-�||dz�� �j/��r&�j1��}|r�j-|dd�� tj2��j4��!� ��!�"�fd	�}	t6j8j:}
�j=�||
��"|s|r�"�_�j�|�"d
��"S�"r�"ds+d�g}tj>tj
|d�gS�"d\}}
}}� ddk(r� d
dk(s�jA|�r�j-||
|�� �"d\}}}}�jC|�r�jE|�\}}|dz
}�jG��}�jI||
�\}}�jK||dz
�\}}tj�}|�r�jG|�|k(r�tMjN||�d}|jQ�r�jI||�\}}tMjN||�d}|dk(r||k(rn��j=|||
�}tStU|	|��}|snj�jW�"d|d�r�"jYd�|�"dd�"dd�"dd}
}�jI||
�\}}|r�jG|�|k(r��tj�}d||z
d�d�}tjtj
|d�tj�}|�r<�jG|�|k(�r'tMjN||�d}|jQ�r�jK||�\}}tMjN||�d}|dk(r||k(rnʼnj=|||
�}|r�jW�"d|d�r|dd}tStU|	|��}|sn{�"j[|��"dd�"dd}}�jC|�r�jE|�\}}|dz
}�jK||dz
�\}}|r�jG|�|k(r��'tj�}d||z
d�d�}tjtj
|d��"d\}}
}}|dk(rt]�"�dkDr�"jYd�|r�"�_dtj�|z
d�d�}tjtj
|d��j�|�"d�i�_/�"S)Nz:ERROR: Cannot get line contents at offset for dead object.Trr9r�z
Line (cached)r�rtc����|�vry|\}}}}||k(ry�j|||dz�}�	|k7�rC�j�	�r�j|�ry�j�	�rj�j|�rYtj|�j
�}�
s|r�
|k7ryt
�d|dz
�dkr�t
�d|dz
�dkr�y�j�	��j|�k7rytj�	�rtj|�rytj�	�rtj�	�rytj|�rtj|�ry�j|�s�j�	�r�j�|�d�}|S�j!|�r�j�||d�}|S�j�|�}|S)NFrtrrt)rVrmr�rr��isLandmarkBannerre�isBlockListDescendantr�is_tree_relatedr�r
�has_no_sizer�r'rW�isTextSubscriptOrSuperscript)
r*r>r?r@rAra�
xObjBanner�
onSameLinerbro�	objBannerrErcs
        �����rfrcz4Utilities._getLineContentsAtOffset.<locals>._include�s�����G�|��*+�'�D�&�$����~�����t�V�V�a�Z�@�H��d�{��?�?�3�'�D�O�O�D�,A� ��;�;�s�#����D�(9�!)�!7�!7��d�>S�>S�!T�J�!�Z�Y�*�5L�$��7�1�:����3�4��9�c�'�!�*�x�XY�{�BZ�>[�_`�>`�$��/�/��4��8R�8R�SW�8X�X� � �0�0��5�+�:U�:U�VZ�:[� � �+�+�C�0�[�5L�5L�S�5Q� � �+�+�D�1�k�6M�6M�d�6S� ��"�"�4�(�D�K�K��,<�!�6�6�w��'�RS�*�U�
�
��	�2�2�4�8�!�6�6�w��(�ST�+�V�
���"�6�6�w��I�
��rgzLine (not layout mode)z WEB: Error. No objects found forrbrtrz)INFO: Time to get line contents on left: �.4frz*INFO: Time to get line contents on right: z!INFO: Time to get line contents: zLine (layout mode))0�timerr�rr�rzrdr�is_tool_bar�is_menu_barr�rr�r�rZrdrr��
getSettingr{r�rrV�isInlineListDescendant�listForInlineListDescendantr�r�rrrr,ryr'r�rSr�rFr>rr?r@r�r�rerlr�r�r)#rcrorpr�r6�	startTimer�r��	containerrcrr�rIrJrKrLrRrSrTrUr�rMrNr�rV�
prevStartTimer/rO�prevEndTime�
nextStartTimerW�nextEndTimerbr�rEs#``                              @@@rfr�z"Utilities._getLineContentsAtOffset�s�����I�I�K�	���I����C� �N�C����u�/�/��d�;��I��Q�����#�#�C�(�K�,C�,C�C�,H��0�0��5��3�3�C��@�E��������(�(����!:�!:�t�)�M�PR�S��'�'����!:�!:�O�M��0�0�0���)�4�4�6�A�A�,�O�.��<�<�+�+�-�
����A�:�$�/�/��V�<��o�o�c�6�A�:�v�>�G��o�o�c�6�6�A�:�>�G��&�&�s�+��8�8��=�I���/�/�)�Q��:���*�*�3��0E�0E�F�	�#	�#	�J�)�)�4�4���)�)�#�v�x�@����,3��)��#�#�C���:R�S��N��G�A�J�8�#�>�F����e�.�.���=��I�6=�a�j�3��*�h���A�J�!�O���
�a��D�K�K��4I��o�o�h�
�H�E�G�29�"�+�/���G�Z����w�'�#�/�/��8��G�W��q�L�G��,�,�S�1���8�8��:�N�����4�4�W�g��k�J�����	�	��
��$�3�3�G�<��H��1�1�'�7�C�A�F�D��|�|�~�#'�#@�#@��'�#R� ����1�1�'�7�C�A�F�D��t�|��G� 3���,�,�W�g�x�H�F��&��6�2�3�F����&�&�w�q�z�6�"�:�>����A��!�G�A�a�L�#*�1�:�a�=�'�!�*�Q�-�j�H�#�<�<�X�z�R��G�W�'�$�3�3�G�<��H�*�i�i�k��9�+�
�:U�VY�9Z�Z[�\��
���5�+�+�S�$�7��	�	��
��$�3�3�G�<��H��1�1�'�7�C�A�F�D��|�|�~�#'�#<�#<�W�g�#N� ����1�1�'�7�C�A�F�D��t�|��7� 2���-�-�g�w��I�G��4�2�2�7�1�:�w�r�{�K�!�!�B�-���6�(�G�4�5�G����N�N�7�#�&�r�{�1�~�w�r�{�1�~�W�G��"�"�7�+�#'�#3�#3�G�#<� ����1���#�8�8��'�A�+�N��G�W�/�$�3�3�G�<��H�2�i�i�k��:�;��;V�WZ�:[�[\�]��
���5�+�+�S�$�7�6=�a�j�3��*�h���$��3�w�<�!�#3��K�K��N��(/�D�%�1�$�)�)�+�	�2I�#�1N�a�P��
���5�+�+�S�$�7�����V�W�6J�K�,.��)��rgc�8�|�|j�\}}d|d|g}tjtj|d�t	j
|�sxd|dg}tjtj|d�|j
�|j�\}}d|d|g}tjtj|d�|j||||�}|r|dsgS|dd|dd}}d	|d|g}tjtj|d�|j|�}	|j|||	�\}}|sT|rRd
|d|dg}tjtj|d�|j
�|j|||	�\}}d
|d|g}tjtj|d�|j||||�}
|
s-d|d|g}tjtj|d�gS||
k(rU|j||d�\}}d
|d|g}tjtj|d�|j||||�}
||
k(r�tj|�}tjtj|d�|dk\rjt	j|�}|j||d�\}}d|d|g}tjtj|d�|j||||�}
|
S)N�WEB: Current context is: �, T�WEB: Current context obj�is not valid. Clearing cache.�WEB: Now Current context is: rrtzWEB: First context on line is: zWEB: Previous context is: �. Trying again.�%WEB: Could not get line contents for �&WEB: Got same line. Trying again with �WEB: Trying again with)
r�rryrzrrjrr��elementIsPreformattedTextrIrr�rv)
rcrorpr�r6r��linerI�firstOffsetrAr�r�r+s
             rf�getPreviousLineContentsz!Utilities.getPreviousLineContentsUs����;��.�.�0�K�C��-�s�D�&�A��
���%�*�*�F�D�9�� � ��%�0�#�7V�W�F����e�.�.���=��#�#�%��.�.�0�K�C��5�s�D�&�I�F����e�.�.���=��+�+�C���X�N����a���I� $�Q���
�D��G�A�J�+��3�X�t�[�Q��
���%�*�*�F�D�9��6�6�x�@�@�	��*�*�8�[�)�L���V��x�2�C��v�GX�Y�F����e�.�.���=��#�#�%��.�.�x��i�P�K�C��.��T�6�B��
���%�*�*�F�D�9��/�/��V�Z��R���=�s�D�&�Q�F����e�.�.���=��I��8���.�.�s�F�D�A�K�C��>��T�6�R�F����e�.�.���=��3�3�C���X�V�H��8���5�5�c�:�E����e�.�.���=���z�!�,�,�S�1��"�2�2�6�5�$�G���V�2�C��v�F���!�!�%�"2�"2�F�D�A��7�7��V�Z�QY�Z���rgc�B�|�|j�\}}d|d|g}tjtj|d�t	j
|�sxd|dg}tjtj|d�|j
�|j�\}}d|d|g}tjtj|d�|j||||�}|r|dsgS|dd|dd	d
z
}}|j|�}	|	r|j|	�\}}d|d|g}tjtj|d�|j|�}
|j|||
�\}}|sT|rRd|d|d
g}tjtj|d�|j
�|j|||
�\}}d|d|g}tjtj|d�|j||||�}||k(rU|j||d�\}}d|d|g}tjtj|d�|j||||�}||k(r�tj|�}|dk\rjt	j|�}
|j|
|d�\}}d|d|g}tjtj|d�|j||||�}|s-d|d|g}tjtj|d�gS|S)Nr�r�Tr�r�r�rr�rbrtzWEB: Last context on line is: zWEB: Next context is: r�r�r�r�)r�rryrzrrjrr�r(rSr�rDrr�rv)rcrorpr�r6r�r�rR�
lastOffsetr-rAr�r�r+s              rf�getNextLineContentszUtilities.getNextLineContents�s���;��.�.�0�K�C��-�s�D�&�A��
���%�*�*�F�D�9�� � ��%�0�#�7V�W�F����e�.�.���=��#�#�%��.�.�0�K�C��5�s�D�&�I�F����e�.�.���=��+�+�C���X�N����a���I�"�2�h�q�k�4��8�A�;��?����#�#�G�,���"&�"2�"2�4�"8��G�Z�2�G�T�:�N��
���%�*�*�F�D�9��6�6�w�?�?�	��&�&�w�
�I�F���V��w�.��T�6�CT�U�F����e�.�.���=��#�#�%��*�*�7�J�	�J�K�C��*�C��v�>��
���%�*�*�F�D�9��/�/��V�Z��R���8���*�*�3���=�K�C��>��T�6�R�F����e�.�.���=��3�3�C���X�V�H��8���1�1�#�6�C��a�x�!�,�,�S�1��"�.�.�v�s�D�A���V�2�C��v�F���!�!�%�"2�"2�F�D�A��7�7��V�Z�QY�Z���=�s�D�&�Q�F����e�.�.���=��I��rgc���|j|�st�|�	|�y|j|�rt�|�	|�yyr)r�r�updateCachedTextSelection�hasPresentableTextrs  �rfr�z#Utilities.updateCachedTextSelection�sA����%�%�c�*��G�-�c�2���"�"�3�'��G�-�c�2�(rgc�l�tj|�d}|sy|r|j|j�s|S|s|j	|j�s|Stt
tj|���}|s|j�|D]}|j|||�}|s�|cSyr�)r�get_selected_text�
startswithr	�endswithr�rqrr��reverse�_findSelectionBoundaryObject)rcrM�	findStartr��indicesrQr�s       rfr�z&Utilities._findSelectionBoundaryObject�s����)�)�$�/��2�����V�.�.�t�/M�/M�N��K������1O�1O�!P��K��u�X�5�5�d�;�<�=����O�O���	�A��6�6�t�A�w�	�J�F���
�	�
rgc�R�|j|d�}|j|d�}||fSr�)r�)rcrM�obj1�obj2s    rf�_getSelectionAnchorAndFocusz%Utilities._getSelectionAnchorAndFocus�s0���0�0��t�<���0�0��u�=���T�z�rgc�j��|r|sgStj|�r)d}tjtj|d�gSd�}�fd�}g}tj
|�}t
tj|�tj|��D]c}tj||�}	�j|	�r�+|j|	�|j�j|	||��||vs�cn||k(r|S||vr3|j|�|j�j|||��tj
|�}
tj|�}tj|
|dz�xs|}	|j|�}
||k(r|
dz
}
|d|
}|S#t$rY|SwxYw)Nz/INFO: Cannot get subtree: Start object is dead.Tc�
�|duSrr��r*s rfrcz'Utilities._getSubtree.<locals>._include�s���D�=� rgc�&���j|�Sr)�isStaticTextLeafr
s �rf�_excludez'Utilities._getSubtree.<locals>._exclude�s����(�(��+�+rgrt)rr�rr�rzrvrq�get_index_in_parentr�r�r�rkr��findAllDescendantsr��
ValueError)rc�startObj�endObjr�rcr��subtree�startObjParentrQr��endObjParent�endObjIndexrR�endIndexs`             rf�_getSubtreezUtilities._getSubtree�s�����V��I����H�%�C�C����u�/�/��d�;��I�	!�	,���!�,�,�X�6���x�3�3�H�=� �0�0��@�B�	�A��&�&�~�q�9�E��$�$�U�+���N�N�5�!��N�N�4�2�2�5�(�H�M�N��� ��	��X���N��� ��N�N�6�"��N�N�4�2�2�6�8�X�N�O��*�*�6�2���2�2�6�:���$�$�\�;��?�C�M�v��	)��}�}�W�-�H��&� ��A�
���i�x�(�G�����	����	�s�F%�%	F2�1F2c�l�����j|�st���	|�S�jjjdd�\}}�j
|�\}}||f�jjd<�fd�}�j||�}||k(r||k(r|�nJ�j||�}	tt|�j|	�tj|�����sy�D]C}
|
||||fvr)tj|
�fd��rt���=|
��4t���	|
|��Ey)N�selectionAnchorAndFocus)NNc�t���jtj|�tj|��Sr)�pathComparisonr�get_path)r�r�rcs  �rf�_cmpz1Utilities.handleTextSelectionChange.<locals>._cmp+s-����&�&�x�'8�'8��'>��@Q�@Q�RV�@W�X�Xrg)rnFc���|�vSrr�)r*�descendantss �rfr,z5Utilities.handleTextSelectionChange.<locals>.<lambda>:s����[�@P�rgT)r�r�handleTextSelectionChanger{�pointOfReferencerwr�r��sortedrp�union�	functools�
cmp_to_keyrr�r�)
rcro�speakMessage�oldStart�oldEndr�r�r��
oldSubtree�
newSubtree�
descendantr�res
`          @�rfr�z#Utilities.handleTextSelectionChange"s4����%�%�c�*��7�4�S�9�9�
�L�L�)�)�-�-�.G��V�	��&��5�5�c�:�
��s�DI�3�<����%�%�&?�@�	Y��%�%�h��7�
��H�����$�K��)�)�%��5�J� ��Z��!6�!6�z�!B�	�H\�H\�]a�Hb�c�K���%�	L�J��(�F�E�3�!?�?��)�)�*�6P�Q���1�*�=���1�*�l�K�	L�rgc�<�|s"tj�j�}|jj	t|��}|�|S|j
|�}|s|j|�r|}|j|�}||jt|�<|Sr)	rr�r�r!rwrxr�r��isTopLevelWebAppr�s    rf�inTopLevelWebAppzUtilities.inTopLevelWebAppAs�����*�*�,�?�?�A�C�
�
#�
#�
'�
'��S�	�
2��
�>��I��,�,�S�1���D�O�O�C�0��H�
�
"�
"�8�
,��,.����t�C�y�)��	rgc�<�tj|�r�|jtj|��sctj|�}t|xr|jd��}d|d|d|dg}tjtj|d�|Sy)N�httpr�zis top-level web application:z(URI:r�TF)rr�r�rrvr�get_uri�boolr�rryrz)rcro�urir�r�s     rfr�zUtilities.isTopLevelWebAppQs����"�"�3�'��,�,�X�-@�-@��-E�F��$�$�S�)�C��c�4�c�n�n�V�4�5�B��c�#B�B��QT�VY�Z�F����e�.�.���=��I�rgc���|j|�sytj|�rtj|�Stj|�r|j|�Syr)�isWebAppDescendantr�is_tool_tiprGr�r�r�s  rf�"forceBrowseModeForWebAppDescendantz,Utilities.forceBrowseModeForWebAppDescendant\sW���&�&�s�+���"�"�3�'��)�)�#�.�.��&�&�s�+��-�-�c�2�2�2�rgc�
�tj|�r+d|dg}tjtj|d�ytj
|�rUtj|�r@tj|�s+d|dg}tjtj|d�ytjjtjjtjjtjjtjjtjjtjj tjj"tjj$tjj&tjj(tjj*tjj,tjj.tjj0tjj2g}t5j6|�}||vr+d|dg}tjtj|d�y|tjj8tjj:fvrSt=j>t=j@|��r+d|dg}tjtj|d�ytjB|�rRt5jD|tjF�}|r*d|dg}tjtj|d�|S|jI|�r+d|d	g}tjtj|d�ytjjJtjj8tjj:g}||vrp|jM|�s_|jO|�sNtQjR|jU��s+d|d
g}tjtj|d�y|jW|�r+d|dg}tjtj|d�y|jY|�r+d|dg}tjtj|d�y|j[|�r+d|d
g}tjtj|d�y|j]|�r+d|dg}tjtj|d�yy)Nr�z*is focus mode widget because it's editableTz:is focus mode widget because it's expandable and focusablez$is focus mode widget due to its rolez1is not focus mode widget because it's layout onlyFz6is focus mode widget because it's a listbox descendantz5is focus mode widget because it's a button with popupz4is focus mode widget based on presumed functionalityz3is focus mode widget because it's a grid descendantz3is focus mode widget because it's a menu descendantz6is focus mode widget because it's a toolbar descendantz2is focus mode widget because it's content editable)/rr3rryrz�
is_expandabler�r�rr_r�r�r�r�r�r�r�r��
PASSWORD_TEXT�PROGRESS_BAR�SLIDER�SPIN_BUTTONr�r�r�r�rr4r��TABLEr�is_layout_tabler
r|r�r}�isButtonWithPopupr�r!r�r�is_pdfru�isGridDescendant�isMenuDescendant�isToolBarDescendantrH)rcror��alwaysFocusModeRolesr�r��focusModeRoless       rfr�zUtilities.isFocusModeWidgeths����"�"�3�'��c�#O�P�F����e�.�.���=���$�$�S�)�k�.F�.F�s�.K��&�&�s�+��c�#_�`�F����e�.�.���=�� %�
�
� 4� 4� %�
�
� 0� 0� %�
�
� 3� 3� %�
�
��� %�
�
� 4� 4� %�
�
� :� :� %�
�
� :� :� %�
�
� 3� 3� %�
�
� 8� 8� %�
�
� 7� 7� %�
�
� 1� 1� %�
�
� 6� 6� %�
�
� 3� 3� %�
�
� 4� 4� %�
�
� 5� 5� %�
�
��� 1��"� � ��%���'�'��c�#I�J�F����e�.�.���=���E�J�J�)�)�5�:�:�+;�+;�<�<��&�&�w�'8�'8��'=�>��c�#V�W�F����e�.�.���=���#�#�C�(��'�'��[�-D�-D�E�B�� �#�'_�`���!�!�%�"2�"2�F�D�A��I��!�!�#�&��c�#Z�[�F����e�.�.���=���*�*�-�-��*�*�/�/��*�*�*�*�,���>�!��*�*�3�/��;�;�C�@��$�$�T�%7�%7�%9�:��c�#Y�Z�F����e�.�.���=��� � ��%��c�#X�Y�F����e�.�.���=��� � ��%��c�#X�Y�F����e�.�.���=���#�#�C�(��c�#[�\�F����e�.�.���=���4�4�S�9��c�#W�X�F����e�.�.���=��rgc��tjjtjjtjjtjj
tjjtjjtjjtjjtjjtjjtjjtjjtjjtjjtjj tjj"tjj$tjj&tjj(tjj*tjj,g}	|j/tjj0�|j/tjj2�	|j/tjj6�|j/tjj8�|S#t4$rY�`wxYw#t4$rY|SwxYwr)rr_�ARTICLE�CAPTIONr��COMMENT�
DEFINITION�DESCRIPTION_LIST�DESCRIPTION_TERM�DESCRIPTION_VALUE�DOCUMENT_FRAME�DOCUMENT_WEB�FOOTER�FORMrr`ra�	PARAGRAPHr��SECTION�STATIC�TEXTr�rk�CONTENT_DELETION�CONTENT_INSERTIONr��MARK�
SUGGESTION)rcr�s  rfr5z Utilities._textBlockElementRoles�s������#�#����#�#����)�)����#�#����&�&����,�,����,�,����-�-����*�*����(�(����"�"���������#�#���������%�%����%�%����&�&����#�#����"�"���������&�&�)(��.	��L�L����4�4�5��L�L����5�5�6�
	��L�L������)��L�L����.�.�/�����	��	���	����	�s&�AJ8�$AK�8	K�K�	K�Kc�>��tj|�}td�|jdd�j	d��}td�t|j
|��}ddj
|�dg}ttd�|��r|St�|�)|�S)Nc�&�|jdd�S)N�+r<�rr�s rfr,z7Utilities.mnemonicShortcutAccelerator.<locals>.<lambda>����Q�Y�Y�s�C�0�rg�keyshortcutsr�r<c�&�|jdd�S)Nr<rr r�s rfr,z7Utilities.mnemonicShortcutAccelerator.<locals>.<lambda>�r!rgc��|Srr�r�s rfr,z7Utilities.mnemonicShortcutAccelerator.<locals>.<lambda>�s���rg)rr��maprwr�labelFromKeySequencer=r�r�r�mnemonicShortcutAccelerator)rcror�r�r�res     �rfr'z%Utilities.mnemonicShortcutAccelerator�s�����,�,�S�1���0�%�)�)�N�B�2O�2U�2U�VY�2Z�[���0�#�d�6O�6O�QU�2V�W���#�(�(�4�.�"�
%����{�B�'�(��I��w�2�3�7�7rgc�P��|r|j|�st�|�	|||�SgSr)r�r�unrelatedLabels)rcrM�onlyShowing�minimumWordsres    �rfr)zUtilities.unrelatedLabels�s,�����/�/��5��7�*�4��l�K�K��	rgc�N�|r|j|�sy|jjt|��}|�|Sd}t	j
|�r9|j
|�s(tj||j�D]}d}n||jt|�<|Sr0)
r�r/rwrxrr�r�rr�r��rcror�r�s    rf�isFocusableWithMathChildz"Utilities.isFocusableWithMathChild�s�����.�.�s�3��
�
+�
+�
/�
/��S�	�
:��
�>��I�
���#�#�C�(��O�O�C�(�!�/�/��T�5H�5H�I�
�����
�57��&�&�t�C�y�1��	rgc�P�|j|�sytj|�Sr)r.rrGr�s  rf�isFocusedWithMathChildz Utilities.isFocusedWithMathChilds$���,�,�S�1���%�%�c�*�*rgc�:�|r|j|�sy|jjt|��}|�|St	j
|�}|j
�}||vrd}n�t	j|�sd}n�tj|�rd}nj|j|�rd}nVtj|�rd}n>|j|�rd}n*tj|�s|j|�}nd}||jt|�<|Sr0)r�r"rwrxrr4r5r�rr3�
isGridCell�is_documentr�r�r�)rcror�r��textBlockElementss     rfr!zUtilities.isTextBlockElement
s����.�.�s�3��
�
%�
%�
)�
)�$�s�)�
4��
�>��I�� � ��%�� �7�7�9���(�(��B��'�'��,��B�
�
$�
$�S�
)��B�
�_�_�S�
!��B�
�
$�
$�S�
)��B�
�
�
��
$��B��)�)�#�.��=�=�c�B�B�B��B�.0�� � ��c��+��	rgc��tj|�r6|j|�s%|jjj�Syr�)r�
is_table_cellr#r{�caretNavigation�'last_input_event_was_navigation_commandr�s  rf�_advanceCaretInEmptyObjectz$Utilities._advanceCaretInEmptyObject+s<���$�$�S�)�$�2H�2H��2M��|�|�3�3�[�[�]�]�]�rgc����|�tjj}t�	|�||||�\}}}||j
k(r,t
j||�}|r|j	||||�S|||fSr)rrrr�textAtPointr	rr�)
rcror*rvrr�r�r�r�res
         �rfr;zUtilities.textAtPoint1s}������-�-�8�8�H�"�W�0��a��H�E����s��T�3�3�3��3�3�C��?�E���'�'��q�!�X�>�>��u�c�!�!rgc��yrr�r�s rf�_treatAlertsAsDialogszUtilities._treatAlertsAsDialogs=���rgc�Z�
�|r|j|�sy|j|�rytj|�r*|�(|j	|||dz�}|r||j
k7ryt
j|�}tj|�r|sy|jjt|��}|�|S|jjt
j|���
�
r7|sd}n2�
fd�}tt
j||�D�cgc]}|��c}�}|sdt
j |�}|jj|��
�
r2�
fd�}	tt
j||	�D�cgc]}|��c}�}||jt|�<|Scc}wcc}w)NFrtTc�>��|duxrtj|��vSrr��r*�
validRoless �rf�pred1z#Utilities.treatAsDiv.<locals>.pred1Y�"����D�=�S�X�->�->�q�-A��-S�Srgc�>��|duxrtj|��vSrr�rAs �rf�pred2z#Utilities.treatAsDiv.<locals>.pred2brDrg)r��isDescriptionListrr�r�r	rr��is_panelrWrwrxrbr4r�r�rv)rcrorpr��
childCountr�rCr*r+rFrBs          @rf�
treatAsDivzUtilities.treatAsDiv@s{�����.�.�s�3���!�!�#�&�����s�#��(:��^�^�C���!��<�F��&�D�$B�$B�B���-�-�c�2�
�����$�Z��
�
�
�
!�
!�$�s�)�
,��
�>��I��*�*�.�.�x�/@�/@��/E�F�
�����T��h�&<�&<�S�%�&H�I��1�I�J����(�(��-�F��.�.�2�2�6�:�J��T��h�&<�&<�V�U�&K�L��1�L�M��&(�����c��#��	��J��Ms�	F#�9	F(c�(�d|j|�vS)N�alert�rr�s  rf�isAriaAlertzUtilities.isAriaAlertjs���$�+�+�C�0�0�0rgc�L��t�|�|�ry|j|�dk(S)NT�
blockquote)r�isBlockquoterrs  �rfrQzUtilities.isBlockquotems'����7���$���|�|�C� �L�0�0rgc���|r|j|�st�|�	|�Stj|�ryd|j|�vS)NT�comment)r�r�	isCommentr�
is_commentrrs  �rfrTzUtilities.isCommentssJ�����.�.�s�3��7�$�S�)�)��!�!�#�&���D�-�-�c�2�2�2rgc����|r|j|�st�|�	|�Stj|�ryd|j|�vxsd|j
|�k(S)NT�deletion�del)r�r�isContentDeletionr�is_content_deletionrrrs  �rfrYzUtilities.isContentDeletion|s]�����.�.�s�3��7�,�S�1�1��*�*�3�/���T�.�.�s�3�3�Q�u����S�@Q�7Q�Qrgc���|r|j|�st�|�	|�Stj|�|j�vryt
j|�Sr)r�r�isContentErrorrr4r5r�is_invalid_entryrs  �rfr\zUtilities.isContentError�sS�����.�.�s�3��7�)�#�.�.����S�!��)D�)D�)F�F���+�+�C�0�0rgc����|r|j|�st�|�	|�Stj|�ryd|j|�vxsd|j
|�k(S)NT�	insertion�ins)r�r�isContentInsertionr�is_content_insertionrrrs  �rfrazUtilities.isContentInsertion�s]�����.�.�s�3��7�-�c�2�2��+�+�C�0���d�/�/��4�4�R�����c�AR�8R�Rrgc����|r|j|�st�|�	|�Stj|�ryd|j|�vxsd|j
|�k(S)NT�mark)r�r�isContentMarkedr�is_markrrrs  �rfrezUtilities.isContentMarked�s]�����.�.�s�3��7�*�3�/�/����s�#����*�*�3�/�/�N�6�T�\�\�#�=N�3N�Nrgc���|r|j|�st�|�	|�Stj|�ryd|j|�vS)NT�
suggestion)r�r�isContentSuggestionr�
is_suggestionrrs  �rfrizUtilities.isContentSuggestion�sJ�����.�.�s�3��7�.�s�3�3��$�$�S�)���t�0�0��5�5�5rgc�4�|j|�}|xrd|vS)Nr��r)rcrors   rf�isCustomElementzUtilities.isCustomElement�s���l�l�3����!�s�c�z�!rgc��tj|�sy|j|�}d|vry|j|�duS�NF�inline)rr+rr��rcro�displayStyles   rf�isInlineIframezUtilities.isInlineIframe�sD���,�,�S�1���,�,�S�1���<�'���(�(��-�T�9�9rgc���|sy|jjt|��}|�|Stj||j
�}|du}||jt|�<|Sr)r>rwrxrr�rs�rcror��ancestors    rf�isInlineIframeDescendantz"Utilities.isInlineIframeDescendant�sg����
�
+�
+�
/�
/��S�	�
:��
�>��I��)�)�#�t�/B�/B�C��
�T�
!��46��&�&�t�C�y�1��	rgc�P�|j|�sy|j|�}d|vSro)rirrqs   rf�isInlineSuggestionzUtilities.isInlineSuggestion�s.���'�'��,���,�,�S�1���<�'�'rgc�*�d|j|�k(S)N�svgrlr�s  rf�isSVGzUtilities.isSVG�s������S�)�)�)rgc�|�tj|�rytj|�r|j|�Syr�)r�
is_text_inputr2�isEditableComboBoxr�s  rf�isTextFieldzUtilities.isTextField�s5���$�$�S�)���#�#�C�(��*�*�3�/�/�rgc��tj||j�}|rtj|�sy|d|k(Sr��rr�ryr��rcrorhs   rf�$isFirstItemInInlineContentSuggestionz.Utilities.isFirstItemInInlineContentSuggestion�s<���+�+�C��1H�1H�I�
��x�7�7�
�C���!�}��#�#rgc��tj||j�}|rtj|�sy|d|k(S)NFr�r�r�s   rf�#isLastItemInInlineContentSuggestionz-Utilities.isLastItemInInlineContentSuggestion�s<���+�+�C��1H�1H�I�
��x�7�7�
�C���"�~��$�$rgc�p�|xs"tj�j�}|j|�Sr)rr�r�r'r�s  rf�speakMathSymbolNameszUtilities.speakMathSymbolNames�s-���D�]�-�-�/�B�B�D���{�{�3��rgc�d�|jtj�j��Sr)r'rr�r�r�s rf�isInMathzUtilities.isInMath�s#���{�{�=�3�3�5�H�H�J�K�Krgc�0�|j|�}|dv}|S)N)(r-�maction�maligngroup�
malignmark�menclose�merror�mfenced�mfrac�mglyph�mi�
mlabeledtr�mlongdiv�
mmultiscripts�mn�mo�mover�mpadded�mphantom�mprescripts�mroot�mrow�ms�	mscarries�mscarry�msgroup�msline�mspace�msqrt�msrow�mstack�mstyle�msub�msup�msubsup�mtable�mtd�mtext�mtr�munder�
munderoverrl)rcrorr�s    rfr'zUtilities.isMath�s'���l�l�3���
�'#�'#��R�	rgc�*�|j|�dk(S)N�nonerlr�s  rf�
isNoneElementzUtilities.isNoneElement	����|�|�C� �F�*�*rgc�(�|j|�dvS)N)r�r�r�r�rlr�s  rf�isMathLayoutOnlyzUtilities.isMathLayoutOnly	s���|�|�C� �$K�K�Krgc�(�|j|�dvS)N)r�r�r�rlr�s  rf�isMathMultilinezUtilities.isMathMultiline	s���|�|�C� �$D�D�Drgc�*�|j|�dk(S)Nr�rlr�s  rf�
isMathEnclosezUtilities.isMathEnclose"	����|�|�C� �J�.�.rgc�*�|j|�dk(S)Nr�rlr�s  rf�isMathFencedzUtilities.isMathFenced%	����|�|�C� �I�-�-rgc��tj|�sytj|�}|j	d�}|sy|D]}|j�s�|dk7s�yy)NF�
linethickness�0T)r�is_math_fractionrr�rw�	isnumeric)rcror�r�r/s     rf�isMathFractionWithoutBarz"Utilities.isMathFractionWithoutBar(	s^���+�+�C�0���,�,�S�1���	�	�/�2�
���!�	�D��~�~��D�C�K��	�rgc�*�|j|�dk(S)Nr�rlr�s  rf�
isMathPhantomzUtilities.isMathPhantom7	r�rgc�*�|j|�dk(S)Nr�rlr�s  rf�isMathMultiScriptzUtilities.isMathMultiScript:	s���|�|�C� �O�3�3rgc�*�|j|�dk(S)Nr�rlr�s  rf�_isMathPrePostScriptSeparatorz'Utilities._isMathPrePostScriptSeparator=	s���|�|�C� �M�1�1rgc�(�|j|�dvS)N)r�r�r�rlr�s  rf�isMathSubOrSuperScriptz Utilities.isMathSubOrSuperScript@	s���|�|�C� �$?�?�?rgc�*�|j|�dk(S)Nr�rlr�s  rf�isMathTablezUtilities.isMathTableC	����|�|�C� �H�,�,rgc�(�|j|�dvS)N)r�r�rlr�s  rf�isMathTableRowzUtilities.isMathTableRowF	s���|�|�C� �$9�9�9rgc�*�|j|�dk(S)Nr�rlr�s  rf�isMathTableCellzUtilities.isMathTableCellI	s���|�|�C� �E�)�)rgc�(�|j|�dvS)N)r�r�r�rlr�s  rf�isMathUnderOrOverScriptz!Utilities.isMathUnderOrOverScriptL	s���|�|�C� �$E�E�Ergc�*�|j|�dk(S)Nr�rlr�s  rf�_isMathSubElementzUtilities._isMathSubElementO	r�rgc�*�|j|�dk(S)Nr�rlr�s  rf�_isMathSupElementzUtilities._isMathSupElementR	r�rgc�*�|j|�dk(S)Nr�rlr�s  rf�_isMathSubsupElementzUtilities._isMathSubsupElementU	r�rgc�*�|j|�dk(S)Nr�rlr�s  rf�_isMathUnderElementzUtilities._isMathUnderElementX	r�rgc�*�|j|�dk(S)Nr�rlr�s  rf�_isMathOverElementzUtilities._isMathOverElement[	����|�|�C� �G�+�+rgc�*�|j|�dk(S)Nr�rlr�s  rf�_isMathUnderOverElementz!Utilities._isMathUnderOverElement^	s���|�|�C� �L�0�0rgc�*�|j|�dk(S)Nr�rlr�s  rf�isMathSquareRootzUtilities.isMathSquareRoota	r�rgc�(�|j|�dvS)N)r�r�r�r�r�r�rlr�s  rf�isMathTokenzUtilities.isMathTokend	s���|�|�C� �$O�O�Orgc�,�tj|�Sr)r�is_mathr�s  rfr�zUtilities.isMathTopLevelg	s���"�"�3�'�'rgc��|j|�sy|j|�r|Stj||j�Sr)r'r�rr�r�s  rfr(zUtilities.getMathAncestorj	s=���{�{�3������s�#��J��%�%�c�4�+>�+>�?�?rgc�.�tj|d�S�Nrt�rr�r�s  rf�getMathDenominatorzUtilities.getMathDenominators	����!�!�#�q�)�)rgc�.�tj|d�Sr�r�r�s  rf�getMathNumeratorzUtilities.getMathNumeratorv	r�rgc�T�|j|�r|Stj|d�Sr�)r�rr�r�s  rf�getMathRootBasezUtilities.getMathRootBasey	s(��� � ��%��J��!�!�#�q�)�)rgc�.�tj|d�Sr�r�r�s  rf�getMathRootIndexzUtilities.getMathRootIndex	r�rgc��|j|�s"|j|�s|j|�rtj|d�Syr�)r�r�r�rr�r�s  rf�getMathScriptBasezUtilities.getMathScriptBase�	sB���&�&�s�+��*�*�3�/��$�$�S�)��%�%�c�1�-�-�rgc�t�|j|�s|j|�rtj|d�Syr�)r�r�rr�r�s  rf�getMathScriptSubscriptz Utilities.getMathScriptSubscript�	s3���!�!�#�&�$�*C�*C�C�*H��%�%�c�1�-�-�rgc��|j|�rtj|d�S|j|�rtj|d�Sy�Nrtrb)r�rr�r�r�s  rf�getMathScriptSuperscriptz"Utilities.getMathScriptSuperscript�	sG���!�!�#�&��%�%�c�1�-�-��$�$�S�)��%�%�c�1�-�-�rgc�t�|j|�s|j|�rtj|d�Syr�)r�r�rr�r�s  rf�getMathScriptUnderscriptz"Utilities.getMathScriptUnderscript�	s3���#�#�C�(�D�,H�,H��,M��%�%�c�1�-�-�rgc��|j|�rtj|d�S|j|�rtj|d�Syr�)r�rr�r�r�s  rf�getMathScriptOverscriptz!Utilities.getMathScriptOverscript�	sG���"�"�3�'��%�%�c�1�-�-��'�'��,��%�%�c�1�-�-�rgc�b�tj|�D]}|j|�s�|cSyr)rr�r�)rcror�s   rf�_getMathPrePostScriptSeparatorz(Utilities._getMathPrePostScriptSeparator�	s4���+�+�C�0�	�E��1�1�%�8���	�rgc��|j|�}|sgSg}tj|�}|r)|j|�tj|�}|r�)|Sr)rrr�rk�rcro�	separator�childrenr�s     rf�getMathPrescriptszUtilities.getMathPrescripts�	sZ���7�7��<�	���I����)�)�)�4����O�O�E�"��-�-�e�4�E���rgc���|j|�}g}tj|d�}|r3||k7r.|j|�tj|�}|r||k7r�.|Sr�)rrr�rkr�rs     rf�getMathPostscriptszUtilities.getMathPostscripts�	sb���7�7��<�	����"�"�3��*�����*��O�O�E�"��-�-�e�4�E����*��rgc��|j|�sgStj|�}|jdd�j	�S)N�notation�longdiv)r�rr�rwrrs   rf�getMathEnclosureszUtilities.getMathEnclosures�	s?���!�!�#�&��I��,�,�S�1���y�y��Y�/�5�5�7�7rgc��|j|�sdgStj|�}t|j	dd��S)Nr��
separatorsrs)r�rr�r�rwrs   rf�getMathFencedSeparatorsz!Utilities.getMathFencedSeparators�	s=��� � ��%��4�K��,�,�S�1���E�I�I�l�C�0�1�1rgc��|j|�sddgStj|�}|jdd�|jdd�gS)Nr��open�(�closer�)r�rr�rwrs   rf�
getMathFenceszUtilities.getMathFences�	sJ��� � ��%���8�O��,�,�S�1���	�	�&�#�&��	�	�'�3�(?�@�@rgc�������jjt���}|�|S���fd�}d}�}|rtj||�}|dz
}|r�|�jt��<|S)Nc�^�����|�S�j|��j��k(Srrl)r*rorc�tests ���rf�predz+Utilities.getMathNestingLevel.<locals>.pred�	s.������A�w���<�<��?�d�l�l�3�&7�7�7rgr�rt)r0rwrxrr�)rcrorr�rrvs```   rf�getMathNestingLevelzUtilities.getMathNestingLevel�	sv���
�
#�
#�
'�
'��S�	�
2��
�>��I�	8�
������-�-�h��=�H��!�G�B��-/����t�C�y�)��	rgc�r�������fd�}t��dk(r�Stt|���}i�_|S)Nc���|\}}}}|rtj|�ry�jjt	|��}|�|S|xstj
|�}d}�j
|�s�j|�r|r��j|�r|j�r�j|�sntj|�r|rW�j|�sF�j|�s5�j|�s$�j!|�	�s�j#|�	�rd}n�t%j&|�r�j)|�}nc�j+|�	�}t,j.j0t,j.j2g}|r�
stj4|�|vrd}|�jt	|�<|Sr0)rr�rTrwrxr"r!r�rHrz�
isEmptyAnchorr
r�r'r�r��isErrorForContents�isLabellingContentsrrr��isInferredLabelForContentsrr_r�r�r4)r*ror�r�r�r��
displayedText�widget�alwaysFilterr��inferLabelsrcs         ���rfrcz9Utilities.filterContentsForPresentation.<locals>._include�	s����&'�#�C���V��(�*�*�3�/���#�#�'�'��S�	�2�B��~��	�"�<�h�&7�&7��&<�M��B��(�(��-����S�1A�=��<�<�S�A�&�,�,�.��$�$�S�)��*�*�3�/�
��-�-��$��'�'��,��%�%�c�*��)�)�#�x�8��*�*�3��9����)�)�#�.��)�)�#�.���8�8��H�E�� %�
�
� 7� 7����9M�9M�N���{�h�.?�.?��.G�<�.W��B�,.�D���t�C�y�)��Irgrt)r�r�r�rT)rcr�r%rcr�s```  rf�filterContentsForPresentationz'Utilities.filterContentsForPresentation�	s:���	�@�x�=�A���O�
�&��8�,�
-������	rgc��|j�s|j�rygd�}gd�}||vs||vry||vs||vry|j�S)NF)r�[�{�<)
r��?�!r
rs�;r��]�}�>T)r@�isalnum)rc�lastChar�nextChar�openingPunctuation�closingPunctuations     rf�needsSeparatorzUtilities.needsSeparator
s_�������!1�!1�!3��1��O���)�)�X�9K�-K���)�)�X�9K�-K�����!�!rgc�Z�tj|�xrtj|�Sr)r�supports_table�supports_selectionr�s  rf�supportsSelectionAndTablez#Utilities.supportsSelectionAndTable#
s#���&�&�s�+�P��0K�0K�C�0P�Prgc�V�|sy|jjt|��}|�|Stj|�sd}n+|j|�}||k7r|j
|�}|sd}|� tj|�}t|�}||jt|�<|Sr)
r&rwrxrr�rur�r�find_all_gridsr�)rcror�r��document_has_grids�gridss      rfr�zUtilities.hasGridDescendant&
s�����
�
$�
$�
(�
(��c��
3��
�>��I��'�'��,��B��)�)�#�.�H��h��%)�%;�%;�H�%E�"�)��B�
�:��.�.�s�3�E��e��B�-/�����S�	�*��	rgc���|sy|jjt|��}|�|Stj||j
�du}||jt|�<|Sr)r'rwrxrr�r:�rcror�s   rfrzUtilities.isGridDescendant>
sc����
�
#�
#�
'�
'��S�	�
2��
�>��I�
�
#�
#�C��)G�)G�
H�PT�
T��,.����t�C�y�)��	rgc�T�tj|d�}|jd�dvS)NF�sort)r�Nr�rs   rf�isSortedzUtilities.isSortedJ
s(���,�,�S�%�8���y�y�� ��6�6rgc�V�tj|d�}|jd�dk(S)NFrB�	ascendingr�rs   rf�isAscendingzUtilities.isAscendingN
s(���,�,�S�%�8���y�y�� �K�/�/rgc�V�tj|d�}|jd�dk(S)NFrB�
descendingr�rs   rf�isDescendingzUtilities.isDescendingR
s(���,�,�S�%�8���y�y�� �L�0�0rgc�8�tj|�sytj|�}|syt	j
|�}|D]}tj|�|k(s�yt	j|�}|D]}tj|�|k(s�yyr0)rr6rr"r�get_column_headers�get_row_headers)rcro�name�headers�headers     rfr�z"Utilities.isCellWithNameFromHeaderV
s����(�(��-��� � ��%�����,�,�S�1���	�F�� � ��(�D�0��	��)�)�#�.���	�F�� � ��(�D�0��	�rgc�v��t�|�|�rytj|�}|j	d�dk(S)NTr�-1)r�setSizeUnknownrr�rw�rcror�res   �rfrRzUtilities.setSizeUnknownj
s7����7�!�#�&���,�,�S�1���y�y��#�t�+�+rgc���t�|�|�rytj|�}|j	d�dk(xs|j	d�dk(S)NT�rowcountrQ�colcount)r�rowOrColumnCountUnknownrr�rwrSs   �rfrWz!Utilities.rowOrColumnCountUnknownq
sJ����7�*�3�/���,�,�S�1���y�y��$��,�M��	�	�*�0E��0M�Mrgc�
��|r|j|�st�|�	||�St�|�	||�sy|j|�r|jj�S|j
�ry|j�ryyr0)r�r�shouldReadFullRowrr{r��lastInputEventWasLineNav�lastInputEventWasMouseButton)rcrorMres   �rfrYzUtilities.shouldReadFullRowx
s|�����.�.�s�3��7�,�S�'�:�:��w�(��g�6��� � ��%��|�|�/�/�1�1�1��(�(�*���,�,�.��rgc���|sy|jjt|��}|�|Stj|t
j�du}||jt|�<|Sr)r%rwrxrr�rr�r@s   rf�isEntryDescendantzUtilities.isEntryDescendant�
sb����
�
$�
$�
(�
(��c��
3��
�>��I�
�
#�
#�C��)=�)=�
>�d�
J��-/�����S�	�*��	rgc���|sy|jjt|��}|�|Stj|t
j�du}||jt|�<|Sr)r(rwrxrr�r�is_label_or_captionr@s   rf�isLabelDescendantzUtilities.isLabelDescendant�
sc����
�
$�
$�
(�
(��c��
3��
�>��I�
�
#�
#�C��)H�)H�
I�QU�
U��-/�����S�	�*��	rgc��yrr�r�s  rf�isMenuInCollapsedSelectElementz(Utilities.isMenuInCollapsedSelectElement�
r>rgc���|sy|jjt|��}|�|Stj|t
j�du}||jt|�<|Sr)r*rwrxrr�rr{r@s   rfrzUtilities.isMenuDescendant�
sb����
�
#�
#�
'�
'��S�	�
2��
�>��I�
�
#�
#�C��)<�)<�
=�T�
I��,.����t�C�y�)��	rgc���|sy|jjt|��}|�|St�|�|�}||jt|�<|Sr)r)rwrxr�isModalDialogDescendant�rcror�res   �rfrez!Utilities.isModalDialogDescendant�
sU�����
�
*�
*�
.�
.�t�C�y�
9��
�>��I�
�W�
,�S�
1��35��%�%�d�3�i�0��	rgc�0�|sy|jjt|��}|�|Stj|�r|}n$tj|tj�}|xr|j|�}||jt|�<|Sr)r+rwrxrr�rr��isNonNavigablePopuprus    rf�isNavigableToolTipDescendantz&Utilities.isNavigableToolTipDescendant�
s�����
�
/�
/�
3�
3�D��I�
>��
�>��I��"�"�3�'��H��-�-�c�;�3J�3J�K�H�
�
@�d�6�6�x�@�@��8:��*�*�4��9�5��	rgc�T�d|j|�vxsd|j|�k(S)Nr��rrr�s  rfr&zUtilities.isTime�
s+����*�*�3�/�/�N�6�T�\�\�#�=N�3N�Nrgc���|sy|jjt|��}|�|Stj|t
j�du}||jt|�<|Sr)r,rwrxrr�rr�r@s   rfrzUtilities.isToolBarDescendant�
sb����
�
&�
&�
*�
*�4��9�
5��
�>��I�
�
#�
#�C��)@�)@�
A��
M��/1��!�!�$�s�)�,��	rgc���|sy|jjt|��}|�|Stj|t
j�du}||jt|�<|Sr)r-rwrxrr�rr�r@s   rfr�zUtilities.isWebAppDescendant�
sb����
�
%�
%�
)�
)�$�s�)�
4��
�>��I�
�
#�
#�C��)@�)@�
A��
M��.0�� � ��c��+��	rgc���|r|j|�st�|�	|�S|jj	t|��}|�.|r*d|dg}t
jtj|d�|Stj|�r|j|�}�n�|j|�rd}�n�|j|�rd}�n�|j|�rd}�n�|j|�rd}�n�|j!|�rd}�n�|j#|�rd}�nm|j%|�rd}�nX|j'|�rd}�nC|j)|�rd}�n.|j+|�rd}�n|j-|�rd}�n|j/|�rd}n�|j1|�rd}n�|j3|�r|j5|�}n�tj6|�rd}n�tj8|�rd}n�tj:|�r|j5|�}n`tj<|�r(tj>|�s|j5|�}n#|jA|�rd}nt�|�	|�}|r*d|dg}t
jtj|d�||jt|�<|S)Nr�zis deemed to be layout onlyTF)!r�r�isLayoutOnlyr.rwrxrryrzrr�rJrG�isDescriptionListTerm�isDescriptionListDescriptionr'rmrYrareri�isDPub�isFeed�isFigure�isGridrsr��is_table_header�is_separatorrHrr�r�)rcror�r�res    �rfrozUtilities.isLayoutOnly�
so�����.�.�s�3��7�'��,�,�
�
�
�
#�
#�D��I�
.��
�>�� �#�'D�E���!�!�%�"2�"2�F�D�A��I����s�#�����%�B�
�
#�
#�C�
(��B�
�
'�
'��
,��B�
�
.�
.�s�
3��B�
�[�[��
��B�
�_�_�S�
!��B�
�
#�
#�C�
(��B�
�
$�
$�S�
)��B�
�
!�
!�#�
&��B�
�
%�
%�c�
*��B�
�[�[��
��B�
�[�[��
��B�
�]�]�3�
��B�
�[�[��
��B�
�
 �
 ��
%��)�)�#�.�.�B�
�
(�
(��
-��B�
�
%�
%�c�
*��B�
�
!�
!�#�
&��)�)�#�.�.�B�
�
%�
%�c�
*�;�3L�3L�S�3Q��)�)�#�.�.�B�
�
�
��
$��B���%�c�*�B�
��c�#@�A�F����e�.�.���=�(*����4��9�%��	rgc�T�|j|�dvryd|j|�vryy)N)�pre�codeTrzF)rrr�s  rfr�z#Utilities.elementIsPreformattedText%s/���<�<����/���T�&�&�s�+�+��rgc	��|r|j|�sy|j|�ry|jjt	|��}|�|Stj|�}|sy|j|�sytj|�}tjd|�}t|�|zdkDrytj|dd�ttd�tj d|���}t#j$|�xrt|�dkD}|rUd}||krNtj&||�\}}}	t|j!��dk7rd}nt)|dz|	�}||kr�N||jt	|�<|S)	NF��333333�?z+Checking if element lines are single words.c��|Srr�r�s rfr,z6Utilities.elementLinesAreSingleWords.<locals>.<lambda>Ms��q�rgz
[\s\ufffc]rtr)r�r�r4rwrxrrPr#r�r��findallr�rr�r�r�rrr3rrd)
rcror��nCharsr��eocsr�rQr�r�s
          rfr*z$Utilities.elementLinesAreSingleWords.sp����.�.�s�3���)�)�#�.��
�
-�
-�
1�
1�$�s�)�
<��
�>��I��+�+�C�0�����%�%�c�*���$�$�S�)���z�z�(�F�+���t�9�V��c�!��	���S�%�)V�W��f�[�"�(�(�=�&�*I�J�K���(�(��-�
-�
A�#�f�+��/��
��A��f�*�%+�%>�%>�s�A�%F�"���s��v�|�|�~�&�!�+��B����!��S�M���f�*�79��(�(��c��3��	rgc���|r|j|�sy|jjt|��}|�|St	j
|�}|sy|j
|�syt	j|�}tjd|�}t|�|zdkDrytj|dd�tj|�}|rwt|�D]i}t	j ||�d}|j#�s|dvr�1t	j$||�d}t|j'��dkDs�gd}n||jt|�<|S)NFr|r}z+Checking if element lines are single chars.r)r|u�rt)r�r3rwrxrrPr#r�r�rr�rr�rr3rqr?r@rrz)rcror�r�r�r�rQr/s        rfr)z$Utilities.elementLinesAreSingleChars^sN����.�.�s�3��
�
-�
-�
1�
1�$�s�)�
<��
�>��I��+�+�C�0�����%�%�c�*���$�$�S�)���z�z�(�F�+���t�9�V��c�!��	���S�%�)V�W��(�(��-�
-��
��6�]�
���5�5�c�1�=�a�@���<�<�>�T�-A�%A���2�2�3��:�1�=���v�|�|�~�&��*��B��
�79��(�(��c��3��	rgc����r|j��sy|jjt���}|�|Sd}|j	��D]}tj|�fd��s�d}n||jt��<|S)NFc���|�k(Srr�)r*ros �rfr,z5Utilities.labelIsAncestorOfLabelled.<locals>.<lambda>�s����S��rgT)r�r2rwrx�targetsForLabelrr�)rcror��targets `  rf�labelIsAncestorOfLabelledz#Utilities.labelIsAncestorOfLabelled�s������.�.�s�3��
�
,�
,�
0�
0��c��
;��
�>��I�
���*�*�3�/�	�F��%�%�f�.@�A����	�
68��'�'��S�	�2��	rgc��|r|j|�sy|jjt|��}|�|S|j	|�ryd}|j|�}|rVt
dtj|��}tj|d|�}|jdks|jdkrd}||jt|�<|S)NFrtrT)r�r1rwrxr��labelTargetsrdrrPrur*rv)rcror��targetsr�r�s      rfr�zUtilities.isOffScreenLabel�s�����.�.�s�3��
�
#�
#�
'�
'��S�	�
2��
�>��I��)�)�#�.��
���#�#�C�(����a��3�3�C�8�9�C��(�(��a��5�D��v�v��z�T�V�V�a�Z���,.����t�C�y�)��	rgc���tj|�rStjtj|��s+d|dg}tjt
j|d�yy)Nr�zis a detached documentTF)rr3rrjrvrryrz)rcror�s   rf�isDetachedDocumentzUtilities.isDetachedDocument�sT���"�"�3�'��0A�0A�(�BU�BU�VY�BZ�0[��c�#;�<�F����e�.�.���=��rgc���|xs|j�}tj|�D]I}tj|�|k(s�d|d|g}tjt
j|d�|cSy)N�WEB: Returningzas iframe parent of detachedT)rur�find_all_internal_framesrrvrryrz)rcrorM�iframer�s     rf�iframeForDetachedDocumentz#Utilities.iframeForDetachedDocument�st���+�t�)�)�+��!�:�:�4�@�	�F��"�"�3�'�6�1�*�F�4R�TW�X���!�!�%�"2�"2�F�D�A��
�		�rgc�^�tj|tjj�Sr)rr�rr��	LABEL_FORr�s  rfr�zUtilities.targetsForLabel�s!���,�,�S�%�2D�2D�2N�2N�O�Orgc��|r|j|�sgS|jjt|��}|�|S|j	|�D�cgc]
}t|���}}||jt|�<|Scc}wr)r�rOrwrxr�)rcror��ts    rfr�zUtilities.labelTargets�s{����.�.�s�3��I�
�
�
�
#�
#�D��I�
.��
�>��I�#�3�3�C�8�
9�!�d�1�g�
9��
9�(*����4��9�%��	��:s�A?c���|j��sy|D]8\}}}}tj|�s�tj|�fd��s�8yy)NFc���|�k(Srr�)r*�links �rfr,z;Utilities.isLinkAncestorOfImageInContents.<locals>.<lambda>�s���Q�$�Y�rgT)r�rr�rr�)rcr�r�ror�r�r�s `     rf�isLinkAncestorOfImageInContentsz)Utilities.isLinkAncestorOfImageInContents�sT����{�{�4� ��'/�	�#�C���V��'�'��,���%�%�c�+>�?��		�rgc
��|\}}}}tt|j|D�cgc]}|d��	c}��}|sy|D]@}	|j|	�\}
}||vs�|
j	�|j	�k(s�>|	cSycc}wr�)r�r��shouldInferLabelFor�
inferLabelForrz)rcr�r�ror�r�r�r*�objsrN�label�sourcess            rfr!z$Utilities.isInferredLabelForContents�s���")���U�C���F�4�3�3�H�5M�q�a��d�5M�N�O�����	�A�!�/�/��2�N�E�7��g�~�%�+�+�-�6�<�<�>�"A���	�
��6Ns�Bc��|jjt|��gk(ry|j|�}|D]}t	j
|�s�yyr0)rOrwrxr�rr�)rcror�r�s    rf�isLabellingInteractiveElementz'Utilities.isLabellingInteractiveElement�sW�����!�!�$�s�)�,��2���&�&�s�+���	�F��'�'��/��	�rgc��|j|�ry|j|�}|st|�xs|j|�S|D]\}}}}t	|�|vs�y|j|�sy|j|�sy|D]Q\}}}}|j|�r|j|�r�+t
j|j||��s�Qyyr0)	r�r�r�r`rxr!rr_�commonAncestor)rcror�r�r�r�r�r�s        rfr zUtilities.isLabellingContents�s����!�!�#�&���#�#�C�(�����=�?�D�$:�$:�3�$?�?�'/�	�#�C���V��C�y�G�#��	��&�&�s�+���%�%�c�*��'/�	�#�C���V��)�)�#�.�$�2I�2I�#�2N���.�.�t�/B�/B�3��/L�M��	�rgc�X�|r|j|�sy|jjt|��}|�|Sd}t	j
|�r>t	j|�s)tj|d�s|j|�sd}||jt|�<|S)NF�jumpT)
r�r;rwrxrr�r�r�
has_actionrr@s   rf�isAnchorzUtilities.isAnchors�����.�.�s�3��
�^�^�
�
��S�	�
*��
�>��I�
�����s�#��+�+�C�0��&�&�s�F�3��$�$�S�)��B�$&����t�C�y�!��	rgc�L�|j|�xr|j|�Sr)r�r#r�s  rfrzUtilities.isEmptyAnchor%s$���}�}�S�!�E�$�*@�*@��*E�&E�Ergc�T�tj|�xr|j|�Sr)rr�r#r�s  rf�isEmptyToolTipzUtilities.isEmptyToolTip(s&���&�&�s�+�O�D�4J�4J�3�4O�0O�Orgc�T�tj|�sy|j|�ryyr0)r�is_alertr�r�s  rf�isBrowserUIAlertzUtilities.isBrowserUIAlert+s'���#�#�C�(���!�!�#�&��rgc���|j|�sytj|�}|r:|j|�r)tj|�}|r|j|�r�)t	j
|�Sr)r�rrvror�is_frame)rcror+s   rf�isTopLevelBrowserUIAlertz"Utilities.isTopLevelBrowserUIAlert4sh���$�$�S�)���$�$�S�)����*�*�6�2��(�(��0�F���*�*�6�2��#�#�F�+�+rgc�n�|r|j|�sy|jjt|��}|�|S|j	|�ry|j|�r+d|dg}t
jtj|d�yd}|j|�sBtj|�stj|d�}ntj|d�}|r�tj|�s�tj|�r�t!j"|�}|j%dd�s-d|d	g}t
jtj|d�d}n=|j'�s-tj(|�xstj*|�}||jt|�<|S)
NFr�z%is not clickable: has grid descendantT�click�click-ancestorr|r�z'is not clickable: its text is just EOCs)r�r:rwrxr�r�rryrzr�rr�rr�r"r�rr�rrz�	is_staticr�)rcror�r�r�s     rf�isClickableElementzUtilities.isClickableElement>sp����.�.�s�3��
�
%�
%�
)�
)�$�s�)�
4��
�>��I��)�)�#�.���!�!�#�&��c�#J�K�F����e�.�.���=��
���%�%�c�*��+�+�C�0��(�(��g�6���(�(��.>�?��
�h�'�'��,��1G�1G��1L��&�&�s�+�D��<�<��"�-� �#�'P�Q���!�!�%�"2�"2�F�D�A����Z�Z�\�%�/�/��4�P��8K�8K�C�8P�Q��.0�� � ��c��+��	rgc���|r|j|�st�|�	|�S|jj	t|��}|�|St
j||j�du}||jt|�<|Sr)	r�r�isCodeDescendantr$rwrxrr��isCoderfs   �rfr�zUtilities.isCodeDescendantas{�����.�.�s�3��7�+�C�0�0�
�
#�
#�
'�
'��S�	�
2��
�>��I�
�
#�
#�C����
5�T�
A��,.����t�C�y�)��	rgc���|r|j|�st�|�	|�S|j|�dk(xsd|j	|�vS)Nrz)r�rr�rrrs  �rfr�zUtilities.isCodemsK�����.�.�s�3��7�>�#�&�&��|�|�C� �F�*�N�f��8I�8I�#�8N�.N�Nrgc�L��t�|�|�ry|j|�dk(S)NT�dl)rrGrrs  �rfrGzUtilities.isDescriptionListss'����7�$�S�)���|�|�C� �D�(�(rgc�L��t�|�|�ry|j|�dk(S)NT�dt)rrprrs  �rfrpzUtilities.isDescriptionListTermys'����7�(��-���|�|�C� �D�(�(rgc�L��t�|�|�ry|j|�dk(S)NT�dd)rrqrrs  �rfrqz&Utilities.isDescriptionListDescriptions'����7�/��4���|�|�C� �D�(�(rgc����|sgS|jjt|��}|�|St�|�|�}|j|�s|S||jt|�<|Sr)rPrwrxr�descriptionListTermsr�rfs   �rfr�zUtilities.descriptionListTerms�sj�����I�
�
'�
'�
+�
+�D��I�
6��
�>��I�
�W�
)�#�
.���%�%�c�*��I�02��"�"�4��9�-��	rgc����|sgS|jjt|��}|�|St�|�|�}|j|�s|S||jt|�<|Sr)rQrwrxr�
valuesForTermr�rfs   �rfr�zUtilities.valuesForTerm�sj�����I�
�
 �
 �
$�
$�T�#�Y�
/��
�>��I�
�W�
"�3�
'���%�%�c�*��I�)+����D��I�&��	rgc�n��tj|d�}|jdt�|�|��S)NF�	valuetext)rr�rwr�getComboBoxValuerSs   �rfr�zUtilities.getComboBoxValue�s0����,�,�S�%�8���y�y��e�g�&>�s�&C�D�Drgc�$��|r|j|�st�|�	|�S|jj	t|��}|�|Sd}t
j|�rt
j|�}||jt|�<|Sr)	r�rrr<rwrxrr2r3rfs   �rfrzUtilities.isEditableComboBox�s������.�.�s�3��7�-�c�2�2�
�
%�
%�
)�
)�$�s�)�
4��
�>��I�
���#�#�C�(��(�(��-�B�.0�� � ��c��+��	rgc�T�tj|�sytj|tj�}|�ytj
|tjj|j�}t|�dk(r|dStj||j�Sr�)rr|rr�r}r�rr��
CONTROLLED_BYrr�)rc�item�listboxr�s    rf�getEditableComboBoxForItemz$Utilities.getEditableComboBoxForItem�s����'�'��-���(�(��{�/F�/F�G���?���/�/��05�0B�0B�0P�0P�04�0G�0G�I���w�<�1���1�:���%�%�g�t�/F�/F�G�Grgc���tj|�sy|j|�sy|j|�|k(}d|d|d|g}t	j
tj|d�|S)NFr�z
is item ofr
T)rr|rr�rryrz)rcr��comboBoxr�r�s     rf�isItemForEditableComboBoxz#Utilities.isItemForEditableComboBox�sh���'�'��-���&�&�x�0��
�
,�
,�T�
2�h�
>���$��h��R�@��
���%�*�*�F�D�9��	rgc��|r|j|�sy|j|�}ttt	d�|���}|S)NFc�$�|jd�S)Nzdoc-)r�r�s rfr,z"Utilities.isDPub.<locals>.<lambda>�s�����V�(<�rg)r�rr�r�r�)rcror�r�s    rfrrzUtilities.isDPub�sA����.�.�s�3���!�!�#�&��
�$�v�<�e�D�E�
F���	rgc�(�d|j|�vS)Nzdoc-abstractrMr�s  rf�isDPubAbstractzUtilities.isDPubAbstract������!2�!2�3�!7�7�7rgc�(�d|j|�vS)Nzdoc-acknowledgmentsrMr�s  rf�isDPubAcknowledgmentszUtilities.isDPubAcknowledgments�s��$��(9�(9�#�(>�>�>rgc�(�d|j|�vS)Nz
doc-afterwordrMr�s  rf�isDPubAfterwordzUtilities.isDPubAfterword�����$�"3�"3�C�"8�8�8rgc�(�d|j|�vS)Nzdoc-appendixrMr�s  rf�isDPubAppendixzUtilities.isDPubAppendix�r�rgc�(�d|j|�vS)Nzdoc-backlinkrMr�s  rf�isDPubBacklinkzUtilities.isDPubBacklink�r�rgc�(�d|j|�vS)Nz
doc-bibliorefrMr�s  rf�isDPubBibliorefzUtilities.isDPubBiblioref�r�rgc�(�d|j|�vS)Nzdoc-bibliographyrMr�s  rf�isDPubBibliographyzUtilities.isDPubBibliography����!�T�%6�%6�s�%;�;�;rgc�(�d|j|�vS)Nzdoc-chapterrMr�s  rf�
isDPubChapterzUtilities.isDPubChapter������ 1� 1�#� 6�6�6rgc�(�d|j|�vS)Nzdoc-colophonrMr�s  rf�isDPubColophonzUtilities.isDPubColophon�r�rgc�(�d|j|�vS)Nzdoc-conclusionrMr�s  rf�isDPubConclusionzUtilities.isDPubConclusion�����4�#4�#4�S�#9�9�9rgc�(�d|j|�vS)Nz	doc-coverrMr�s  rf�isDPubCoverzUtilities.isDPubCover�����d�/�/��4�4�4rgc�(�d|j|�vS)Nz
doc-creditrMr�s  rf�isDPubCreditzUtilities.isDPubCredit�����t�0�0��5�5�5rgc�(�d|j|�vS)Nzdoc-creditsrMr�s  rf�
isDPubCreditszUtilities.isDPubCredits�r�rgc�(�d|j|�vS)Nzdoc-dedicationrMr�s  rf�isDPubDedicationzUtilities.isDPubDedication
r�rgc�(�d|j|�vS)Nzdoc-endnoterMr�s  rf�
isDPubEndnotezUtilities.isDPubEndnote
r�rgc�(�d|j|�vS)Nzdoc-endnotesrMr�s  rf�isDPubEndnoteszUtilities.isDPubEndnotes
r�rgc�(�d|j|�vS)Nzdoc-epigraphrMr�s  rf�isDPubEpigraphzUtilities.isDPubEpigraph	
r�rgc�(�d|j|�vS)Nzdoc-epiloguerMr�s  rf�isDPubEpiloguezUtilities.isDPubEpilogue
r�rgc�(�d|j|�vS)Nz
doc-erratarMr�s  rf�isDPubErratazUtilities.isDPubErrata
r�rgc�(�d|j|�vS)Nzdoc-examplerMr�s  rf�
isDPubExamplezUtilities.isDPubExample
r�rgc�(�d|j|�vS)Nzdoc-footnoterMr�s  rf�isDPubFootnotezUtilities.isDPubFootnote
r�rgc�(�d|j|�vS)Nzdoc-forewordrMr�s  rf�isDPubForewordzUtilities.isDPubForeword
r�rgc�(�d|j|�vS)Nzdoc-glossaryrMr�s  rf�isDPubGlossaryzUtilities.isDPubGlossary
r�rgc�(�d|j|�vS)Nzdoc-glossrefrMr�s  rf�isDPubGlossrefzUtilities.isDPubGlossref
r�rgc�(�d|j|�vS)Nz	doc-indexrMr�s  rf�isDPubIndexzUtilities.isDPubIndex!
r�rgc�(�d|j|�vS)Nzdoc-introductionrMr�s  rf�isDPubIntroductionzUtilities.isDPubIntroduction$
r�rgc�(�d|j|�vS)Nzdoc-noterefrMr�s  rf�
isDPubNoterefzUtilities.isDPubNoteref'
r�rgc�(�d|j|�vS)Nzdoc-pagelistrMr�s  rf�isDPubPagelistzUtilities.isDPubPagelist*
r�rgc�(�d|j|�vS)Nz
doc-pagebreakrMr�s  rf�isDPubPagebreakzUtilities.isDPubPagebreak-
r�rgc�(�d|j|�vS)Nzdoc-partrMr�s  rf�
isDPubPartzUtilities.isDPubPart0
����T�.�.�s�3�3�3rgc�(�d|j|�vS)Nzdoc-prefacerMr�s  rf�
isDPubPrefacezUtilities.isDPubPreface3
r�rgc�(�d|j|�vS)Nzdoc-prologuerMr�s  rf�isDPubProloguezUtilities.isDPubPrologue6
r�rgc�(�d|j|�vS)Nz
doc-pullquoterMr�s  rf�isDPubPullquotezUtilities.isDPubPullquote9
r�rgc�(�d|j|�vS)Nzdoc-qnarMr�s  rf�	isDPubQnazUtilities.isDPubQna<
����D�-�-�c�2�2�2rgc�(�d|j|�vS)Nzdoc-subtitlerMr�s  rf�isDPubSubtitlezUtilities.isDPubSubtitle?
r�rgc�(�d|j|�vS)Nzdoc-tocrMr�s  rf�	isDPubToczUtilities.isDPubTocB
rrgc�(��|r|j|�st�|�	|�S|jj	t|��}|�|St
j|tjj�}||jt|�<|Sr)r�r�isErrorMessager=rwrxr�has_relationrr��	ERROR_FORrfs   �rfr$zUtilities.isErrorMessageE
s~�����.�.�s�3��7�)�#�.�.�
�
!�
!�
%�
%�d�3�i�
0��
�>��I�
�
"�
"�3��(:�(:�(D�(D�
E��*,����T�#�Y�'��	rgc�B��|r&|j|�rtj|�sytj|�rytj
tj|tj����sy�fd�}||�rytj||�duS)NFc���tj|�j�}�|k7rytj|�xstj
|�Sr)rr�rzr�
is_sectionr�)r*r��	entryNames  �rf�_isMatchz5Utilities.isFakePlaceholderForEntry.<locals>._isMatch\
sH����(�(��+�1�1�3�F��F�"���)�)�!�,�H��0E�0E�a�0H�HrgT)	r�rrvrr3r"r�r�r)rcror+r*s   @rfr�z#Utilities.isFakePlaceholderForEntryQ
s������.�.�s�3��8K�8K�C�8P���"�"�3�'���%�%�h�&<�&<�S�+�BV�BV�&W�X�	���	I��C�=���'�'��X�6�d�B�Brgc�(�d|j|�vS)N�gridrMr�s  rfruzUtilities.isGridg
�����*�*�3�/�/�/rgc�(�d|j|�vS)N�gridcellrMr�s  rfr2zUtilities.isGridCellj
rrgc��|r|j|�sy|jjt|��}|�|St	j
|�sd}n|j
|�}|xrd|v}||jt|�<|Sro)r�r?rwrxrr|r)rcror�rrs    rf�isInlineListItemzUtilities.isInlineListItemm
s�����.�.�s�3��
�
#�
#�
'�
'��S�	�
2��
�>��I��'�'��,��B��0�0��5�L��:�(�l�":�B�,.����t�C�y�)��	rgc�J�|j|�sy|j|�Sr)�isListDescendantr�r�s  rfr�zUtilities.isBlockListDescendant~
s'���$�$�S�)���.�.�s�3�3�3rgc��|r|j|�sy|jjt|��}|�|St	j
|tj�}|du}||jt|�<|Sr)r�rCrwrxrr�rr�rus    rfr4zUtilities.isListDescendant�
st����.�.�s�3��
�
#�
#�
'�
'��S�	�
2��
�>��I��)�)�#�{�/B�/B�C��
�T�
!��,.����t�C�y�)��	rgc��|r|j|�sy|jjt|��}|�|S|j	|�rd}n$tj||j�}|du}||jt|�<|Sr0)r�r@rwrxr2rr�rus    rfr�z Utilities.isInlineListDescendant�
s�����.�.�s�3��
�
)�
)�
-�
-�d�3�i�
8��
�>��I�� � ��%��B��-�-�c�4�3H�3H�I�H���%�B�24��$�$�T�#�Y�/��	rgc�n�|j|�sytj|tj�Sr)r�rr�rr�r�s  rfr�z%Utilities.listForInlineListDescendant�
s,���*�*�3�/���%�%�c�;�+>�+>�?�?rgc�(�d|j|�vS)N�feedrMr�s  rfrszUtilities.isFeed�
r.rgc��|r|j|�sytj|�sytj||j
�duSr)r�r�
is_articlerr�rsr�s  rf�
isFeedArticlezUtilities.isFeedArticle�
sB����.�.�s�3���%�%�c�*���%�%�c�4�;�;�7�t�C�Crgc�T�d|j|�vxs|j|�dk(S)N�figurerkr�s  rfrtzUtilities.isFigure�
s+���4�,�,�S�1�1�R�T�\�\�#�5F�(�5R�Rrgc���|r�j|�sy�jjt|��}|�|St	j
|�rd}nb�j
|�rttj|��}n2�j|�}ttt�fd�|���}|�jt|�<|S)NFTc�(��|�j�vSr)�getLandmarkTypesr
s �rfr,z&Utilities.isLandmark.<locals>.<lambda>�
s���A��1F�1F�1H�,H�rg)
r�rArwrxr�is_landmark�isLandmarkRegionr�rr"rr�r�)rcror�r�s`   rfrmzUtilities.isLandmark�
s������.�.�s�3��
�
�
�
!�
!�$�s�)�
,��
�>��I��"�"�3�'��B�
�
"�
"�3�
'��h�'�'��,�-�B��%�%�c�*�E��d�6�"H�%�P�Q�R�B�&(�����c��#��	rgc�*�|j|�}|SrrM)rcror�s   rf�isLandmarkWithoutTypezUtilities.isLandmarkWithoutType�
s���!�!�#�&���y�rgc�(�d|j|�vS)N�bannerrMr�s  rfr�zUtilities.isLandmarkBanner�
����4�,�,�S�1�1�1rgc�(�d|j|�vS)N�
complementaryrMr�s  rf�isLandmarkComplementaryz!Utilities.isLandmarkComplementary�
r�rgc�(�d|j|�vS)N�contentinforMr�s  rf�isLandmarkContentInfozUtilities.isLandmarkContentInfo�
r�rgc�(�d|j|�vS)N�formrMr�s  rf�isLandmarkFormzUtilities.isLandmarkForm�
r.rgc�(�d|j|�vS)N�mainrMr�s  rf�isLandmarkMainzUtilities.isLandmarkMain�
r.rgc�(�d|j|�vS)N�
navigationrMr�s  rf�isLandmarkNavigationzUtilities.isLandmarkNavigation�
r�rgc�(�d|j|�vS)N�regionrMr�s  rfrCzUtilities.isLandmarkRegion�
rHrgc�(�d|j|�vS)NrrMr�s  rf�isLandmarkSearchzUtilities.isLandmarkSearch�
rHrgc�\�|r|j|�sytj|�}d|vS)NFzcontainer-live)r�rr�rs   rfr�zUtilities.isLiveRegion�
s0����.�.�s�3���,�,�S�1���5�(�(rgc��|sy|jjt|��}|�|Stj|�r|j|�sd}nktj|�rTtjtj|��r,tj|tj|��rd}nd}||jt|�<|Sr0)
rBrwrxrr�r�r�rrv�has_same_non_empty_namer@s   rfr�zUtilities.isLink�
s�����
�\�\�
�
�d�3�i�
(��
�>��I����s�#�D�M�M�#�,>��B�
�
"�
"�3�
'��"�"�8�#6�#6�s�#;�<��/�/��X�5H�5H��5M�N��B��B�"$����T�#�Y���	rgc��|r|j|�sy|jjt|��}|�|St	j
|�xrt	j|�}||jt|�<|Sr)r�rDrwrxrr�r�r@s   rfrhzUtilities.isNonNavigablePopups}����.�.�s�3��
�
&�
&�
*�
*�4��9�
5��
�>��I�
�
$�
$�S�
)�2��,�,�S�1�1�	�02��!�!�$�s�)�,��	rgc�Z�ttj||j��dkDSr�)r�r�find_all_canvasesr�r�s  rfr�z$Utilities.hasUselessCanvasDescendants%���;�0�0��d�6I�6I�J�K�a�O�Orgc�P�|j|�rytj|�Sr)r'r�is_subscript_or_superscriptr�s  rfr�z&Utilities.isTextSubscriptOrSuperscripts"���;�;�s����6�6�s�;�;rgc�n��|r|j|�st�|�	|�Sd|j|�vS)N�switch)r�r�isSwitchrrs  �rfrfzUtilities.isSwitchs9�����.�.�s�3��7�#�C�(�(��4�,�,�S�1�1�1rgc�$�|jjt|��}|�|Sd}|j|�r+|j	|�r	tj|�}d|v}||jt|�<|S#t$rd}Y�'wxYw)NF�doubleclickT)rKrwrxr�r�rr"r�)rcror�rMs    rfr�z(Utilities.isNonNavigableEmbeddedDocuments���
�
1�
1�
5�
5�d�3�i�
@��
�>��I�
���?�?�3��D�$=�$=�c�$B�
+��(�(��-��#�d�*��:<��,�,�T�#�Y�7��	��
�
���
�s�B�B�Bc��|j|�r+tjtj|��dk(ry|jjt
|��}|�|Sd}tj|�}tj||j�D�cgc]}|��}}t|�tj|�k(retj|�}||dk7rHtj|�}tj|d�}tj||�}	|	|k(}||jt
|�<|Scc}w)NrtFr�)
r|rr�rvrHrwrxr�r�r
�sort_objects_by_sizer~�get_rect_intersection)
rcror�r+r*r�sortedChildren�
objExtents�largestExtents�intersections
          rf�isRedundantSVGzUtilities.isRedundantSVG/s���z�z�#��(�":�":�8�;N�;N�s�;S�"T�XY�"Y��
�
!�
!�
%�
%�d�3�i�
0��
�>��I�
���$�$�S�)��'�5�5�f�d�j�j�I�J�!�A�J��J��x�=�H�4�4�V�<�<�(�=�=�h�G�N��n�R�(�(�(�1�1�#�6�
�!,�!5�!5�n�R�6H�!I��*�@�@��^�\��!�Z�/��*,����T�#�Y�'��	��Ks�	E
c�&�|r|j|�sy|jjt|��}|�|Sd}|j	|�r�|j|�r�t
j|�r�tj|�rntjdtj|��sEtj|�D]+}t
j|�r�|j!|�r�+nd}||jt|�<|S)NF�[^\s\ufffc]T)r�rFrwrxrmr�rr)rr�r�rrr�r��is_image_or_canvasr|r-s    rfr�zUtilities.isCustomImageEs�����.�.�s�3��
�
 �
 �
$�
$�T�#�Y�
/��
�>��I�
������$��)=�)=�c�)B��%�%�c�*��%�%�c�*��9�9�^�V�-@�-@��-E�F�!�/�/��4�
��#�6�6�u�=����E�AR��
���)+����D��I�&��	rgc��|r|j|�sy|jjt|��}|�|Sd}t	j
|�s|j
|�sd}|r=tj|�s&tj|�s|j|�rd}|r$|j|�r|j|�sd}|rt	j|�rd}|rvt	jtj|��rN|j|�s=t!j"tj|��}|r|j%d�sd}|rstj&|�r^tj(|�rd}nF|j|�s5|j+|�s$tj,|�\}}|dkDr|dkDrd}|r'tj.|�r|j1|�}|rktj2|�rVt5t7tj2|�d��D]+}|j9tj:||��r�)d}n||jt|�<|S)NFT�
javascript��2)r�rGrwrxrrsr|rr"�get_description�hasLongDescr�r�r�r�rvr�get_link_urir��supports_image�get_image_descriptionrp�get_image_sizer�r#r�rqrcr�r�)rcror�r�rwrxrQs       rfr�zUtilities.isUselessImage[s����.�.�s�3��
�
!�
!�
%�
%�d�3�i�
0��
�>��I�
���.�.�s�3�t�z�z�#���B�
�8�$�$�S�)��.�.�s�3��&�&�s�+��B�
�4�*�*�3�/��8L�8L�S�8Q��B�
�+�*�*�3�/��B�
�+�%�%�h�&9�&9�#�&>�?��H\�H\�]`�Ha��*�*�8�+>�+>�s�+C�D�C��3�>�>�,�7���
�(�)�)�#�.��-�-�c�2����)�)�#�.�t�7J�7J�3�7O� (� 7� 7�� <�
��v��2�:�&�2�+��B�
�(�(�(��-��+�+�C�0�0�B�
�(�*�*�3�/��3�x�7�7��<�b�A�B�
���*�*�8�+=�+=�c�1�+E�F��B��
�
+-����T�#�Y�'��	rgc��tj|�}|syt|j��dkDrytj
j
|�}t|�dkDr+d|dg}tjtj|d�yt|�dk(rBt|�tdd�vr+d|d	g}tjtj|d�yy)
NFrtTrb�WEB: name ofzis suspected query string����is in unicode private use area)rr"r�r�urllib�parse�parse_qsrryrz�ordrq)rcrorM�parsedr�s     rf�hasValidNamezUtilities.hasValidName�s���� � ��%�����t�z�z�|��q� �����&�&�t�,���v�;��?�$�c�+F�G�F����e�.�.���=���t�9��>�c�$�i�5���+@�@�$�c�+K�L�F����e�.�.���=��rgc����|r|j|�sy|jjt|��}|�|Stj
jtj
jtj
jtj
jg}tj|�}||vr|j|�sd}n�tj|�rd}n�tj|�rd}n�|j!|�s*tj"|�stj$|�rd}n�t'j(|�r.t'j*|�tj,|�k7rd}nLtj.|�r5tj0|�}gd��t3t5�fd�|��}|}nd}||jt|�<|S)NF)r�zshow-context-menuz
do-defaultc���|�vSrr�)r*�ignores �rfr,z1Utilities.isUselessEmptyElement.<locals>.<lambda>�s���!�6�/�rgT)r�rIrwrxrr_rrr�	TABLE_ROWrr4rNrr�r3r�rxr�rrPr�r"r��get_action_namesr�r�)rcror�r�r��namesr�s      @rfr�zUtilities.isUselessEmptyElement�s������.�.�s�3��
�
(�
(�
,�
,�T�#�Y�
7��
�>��I����%�%����#�#����"�"����%�%�'��� � ��%���u��T�%5�%5�c�%:��B�
�
%�
%�c�
*��B�
�
$�
$�S�
)��B�
�
�
�s�
#��+�+�C�0�H�4L�4L�S�4Q��B�
�
'�
'��
,��1D�1D�S�1I�X�M^�M^�_b�Mc�1c��B�
�
%�
%�c�
*��-�-�c�2�E�J�F��� 9�5�A�B�E���B��B�13��#�#�D��I�.��	rgc�h�|r|j|�sy|jjt|��}|�|Sd}t	j
|�}|rDt	j|d��.d|d|dg}tjtj|d�d}||jt|�<|S)NFrzERROR: �reportsz0children, but AXObject.get_child(obj, 0) is NoneT)
r�rLrwrxrr�r�rryrz)rcror�rIr�s     rf�isParentOfNullChildzUtilities.isParentOfNullChild�s�����.�.�s�3��
�
&�
&�
*�
*�4��9�
5��
�>��I�
���-�-�c�2�
��(�,�,�S�!�4�<���i��H�J�F����e�.�.���=��B�/1��!�!�$�s�)�,��	rgc�|�|r|j|�sytj|�}|jd�dk(S)NFz
explicit-name�true)r�rr�rwrs   rfr�zUtilities.hasExplicitName�s9����.�.�s�3���,�,�S�1���y�y��)�V�3�3rgc���|r|j|�sy|jjt|��}|�|St	j
|d�}||jt|�<|S)NF�showlongdesc)r�r5rwrxrr�r@s   rfryzUtilities.hasLongDesc�sd����.�.�s�3��
�
�
�
"�
"�4��9�
-��
�>��I�
�
 �
 ��n�
5��')����$�s�)�$��	rgc�~��|r|j|�st�|�	|�S|j|�st	j
|�sy|jjt|��}|�|S|j|�}d�}ttt||���}||jt|�<|S)NFc��tj|�xr,tj|�xrtj|�Sr)r�
is_captionr��
is_visibler�s rf�isVisibleCaptionz5Utilities.hasVisibleCaption.<locals>.isVisibleCaption�s>���)�)�!�,�L��*�*�1�-�L�2=�2H�2H��2K�
Lrg)
r�r�hasVisibleCaptionrtrr8r6rwrx�labelsForObjectr�r�r�)rcror��labelsr�res     �rfr�zUtilities.hasVisibleCaption�s������.�.�s�3��7�,�S�1�1��
�
�c�"�h�&=�&=�c�&B��
�
$�
$�
(�
(��c��
3��
�>��I��%�%�c�*��	L��$�v�.��7�8�
9��-/�����S�	�*��	rgc�V��|r|j|�st�|�	|�S|jj	t|��}|�|St
j|tjj�}|xr|j�dkD}||jt|�<|Sr�)r�r�
hasDetailsr7rwrxrr�rr��DETAILS�
get_n_targets�rcror�r�res    �rfr�zUtilities.hasDetails�s������.�.�s�3��7�%�c�*�*�
�
�
�
!�
!�$�s�)�
,��
�>��I��(�(��e�.@�.@�.H�.H�I��
�
6�(�0�0�2�Q�6��&(�����c��#��	rgc��|j|�sgStj|tjj
�Sr)r�rr�rr�r�r�s  rf�	detailsInzUtilities.detailsIns2�����s�#��I��,�,�S�%�2D�2D�2L�2L�M�Mrgc�V��|r|j|�st�|�	|�S|jj	t|��}|�|St
j|tjj�}|xr|j�dkD}||jt|�<|Sr�)r�r�	isDetailsr8rwrxrr�rr��DETAILS_FORr�r�s    �rfr�zUtilities.isDetails
s������.�.�s�3��7�$�S�)�)�
�_�_�
 �
 ��c��
+��
�>��I��(�(��e�.@�.@�.L�.L�M��
�
6�(�0�0�2�Q�6��%'�����S�	�"��	rgc��|j|�sgStj|tjj
�Sr)r�rr�rr�r�r�s  rf�
detailsForzUtilities.detailsFors2���~�~�c�"��I��,�,�S�%�2D�2D�2P�2P�Q�Qrgc��|r|j|�sytj|�}|jdd�j	�S)N�false�haspopup)r�rr�rw�lowerrs   rf�	popupTypezUtilities.popupTypes?����.�.�s�3���,�,�S�1���y�y��W�-�3�3�5�5rgc��|j|�sdgfS|jjt|��}|�|S|jj
j
|d�}||jt|�<|Sr)r�rMrwrxr{�labelInference�inferr@s   rfr�zUtilities.inferLabelFor$sr���'�'��,���8�O�
�
!�
!�
%�
%�d�3�i�
0��
�>��I�
�\�\�
(�
(�
.�
.�s�E�
:��*,����T�#�Y�'��	rgc���|j�r|j|�ry|jjt	|��}|r?|j
jj�s|j
j�S|dur|Stj|�}tj|�}|rd}n�|j|�rd}n�|s�tjjtjj tjj"tjj$tjj&tjj(g}||vxr|j+|�}||jt	|�<|j
jj�r7|tjj(tjjfvry|Sr)r�r�rUrwrxr{r7r8�inSayAllrr4r"rrr_r�r�r�r�r�r��displayedLabel)rcror�r�rMr�s      rfr�zUtilities.shouldInferLabelFor0sv���%�%�'�4�+B�+B�3�+G��
�
&�
&�
*�
*�4��9�
5��
�d�l�l�2�2�Z�Z�\��|�|�,�,�.�.�.�
��;��I�� � ��%��� � ��%����B�
�
�
�s�
#��B���Z�Z�)�)��Z�Z�)�)��Z�Z�%�%��Z�Z�(�(��Z�Z�-�-��Z�Z�,�,�.�E����?�t�':�':�3�'?�#?�B�/1��!�!�$�s�)�,��<�<�'�'�O�O�Q��E�J�J�3�3�U�Z�Z�5I�5I�J�J���	rgc���|r|j|�st�|�	|�S|jj	t|��}|�|S|j
|�}|D�cgc],}|�(tj|�xs|j|���.}}dj|�}||jt|�<|Scc}w)Nr<)r�rr�rRrwrxr�rr"r"r=)rcror�r�r�r2res      �rfr�zUtilities.displayedLabelQs������.�.�s�3��7�)�#�.�.�
�
%�
%�
)�
)�$�s�)�
4��
�>��I��%�%�c�*��=C�Z�49�u�GX��$�$�U�+�0��(�(��/�0�Z��Z�
�X�X�g�
��.0�� � ��c��+��	��Zs�!1B?c����|sgS|jjt|��}|�|St�|�|�}|j|�s|S||jt|�<|Sr)rNrwrxrr�r�rfs   �rfr�zUtilities.labelsForObjectasj�����I�
�
"�
"�
&�
&�t�C�y�
1��
�>��I�
�W�
$�S�
)���%�%�c�*��I�+-����d�3�i�(��	rgc���|j|�sytj|�sytj|�s(tjt	j
|��ryyr0)r�rr3�is_spin_buttonrrvr�s  rf�isSpinnerEntryzUtilities.isSpinnerEntrypsQ���%�%�c�*���&�&�s�+���%�%�c�*�k�.H�.H��I\�I\�]`�Ia�.b��rgc���|j|j�sy|jjd�s|jjd�r|j	�\}}|dvryy)NFzobject:text-changedzobject:text-selection-changed��Down�UpT)r��sourcer�r��lastKeyAndModifiers�rc�event�lastKey�modss    rf�eventIsSpinnerNoisezUtilities.eventIsSpinnerNoise|s]���"�"�5�<�<�0���:�:� � �!6�7��j�j�#�#�$C�D� �4�4�6�M�G�T��.�(��rgc���|jjd�rT|j|j�r9|j	�\}}|dvr"|j�\}}|j|k(Sy)N�object:text-caret-movedr�F)r�r�r�r�r�r�)rcr�r�r�rorps      rf�treatEventAsSpinnerValueChangez(Utilities.treatEventAsSpinnerValueChange�sg���:�:� � �!:�;��@S�@S�TY�T`�T`�@a� �4�4�6�M�G�T��.�(�"�2�2�4���V��|�|�s�*�*�rgc�>�|j|j�ry|jjd�r3|j	|j�r|j�\}}|dk(S|jjd�s|jj
d�ratj|j�xs@tj|j�xstj|j�S|jjd�ryy)NF�object:text-�Returnzaccessible-namezobject:children-changedT)r�r�r�r��isSingleLineAutocompleteEntryr�r�r�
is_status_bar�is_labelr�r�s    rf�eventIsBrowserUINoisezUtilities.eventIsBrowserUINoise�s����!�!�%�,�,�/���:�:� � ��0��1�1�%�,�,�?� �4�4�6�M�G�T��h�&�&��:�:� � ��0�E�J�J�4G�4G�HY�4Z��,�,�U�\�\�:�6�k�>R�>R�SX�S_�S_�>`�6��'�'����5�
6��:�:� � �!:�;��rgc�v�|xs|j|j�}|syd�}d�}d�}tj|j�ro|jjd�rT|j
|�\}}||�s||�ry||jk(r ||�r|j�\}	}
|	dvryy)NFc�R�tjtj|��Sr)rr}rrvr�s rf�
isListBoxItemz9Utilities.eventIsAutocompleteNoise.<locals>.isListBoxItem�s���*�*�8�+>�+>�q�+A�B�Brgc�R�tjtj|��Sr)rr{rrvr�s rf�
isMenuItemz6Utilities.eventIsAutocompleteNoise.<locals>.isMenuItem�s���&�&�x�':�':�1�'=�>�>rgc�R�tjtj|��Sr)rr2rrvr�s rf�isComboBoxItemz:Utilities.eventIsAutocompleteNoise.<locals>.isComboBoxItem�s���+�+�H�,?�,?��,B�C�Crgr�Tr�)r�r�rr3r�r�r�r�)rcr�ru�	inContentr�r�r�rorpr�r�s           rf�eventIsAutocompleteNoisez"Utilities.eventIsAutocompleteNoise�s���!�I�T�%;�%;�E�L�L�%I�	���	C�	?�	D��"�"�5�<�<�0��z�z�$�$�^�4��.�.�}�=�K�C���S�!�Z��_���e�l�l�"�~�c�':� $� 8� 8� :�
����n�,��rgc��|j|j�ry|j|�ry|j|�Sr0)r�r��&_eventIsBrowserUIAutocompleteTextNoise�+_eventIsBrowserUIAutocompleteSelectionNoise�rcr�s  rf�!eventIsBrowserUIAutocompleteNoisez+Utilities.eventIsBrowserUIAutocompleteNoise�s9���!�!�%�,�,�/���6�6�u�=���?�?��F�Frgc�2�ddg}|j|vrytj|j�syt	j
�j
�}tj|�r-tj|�r|j�\}}|dvryy)N�object:selection-changed�object:state-changed:selectedFr�T)
r�r�is_menu_relatedr�rr�r�r�rGr�)rcr��	selection�focusr�r�s      rfr�z5Utilities._eventIsBrowserUIAutocompleteSelectionNoise�s���/�1P�Q�	��:�:�Y�&���*�*�5�<�<�8���(�(�*�=�=�?������&�;�+A�+A�%�+H� �4�4�6�M�G�T��n�,��rgc�d�|jjd�r|j|j�syt	j
�j
�}tj|�sytj|�stj|�r|j�\}}|dvSy)Nr�Fr�)r�r�r�r�rr�r�r�
is_selectable�is_menu_item_of_any_kindr|r�)rcr�r�r�r�s     rfr�z0Utilities._eventIsBrowserUIAutocompleteTextNoise�s����z�z�$�$�^�4��4�4�U�\�\�B���(�(�*�=�=�?���(�(��/���/�/��6��&�&�u�-� �4�4�6�M�G�T��n�,�,�rgc��ddg}|j|vrytj|j�sy|j	|j�ry|j	tj�j��syy)Nr�r�FT)r�r�is_page_tab_list_relatedr�r�rr�r�)rcr�r�s   rf�eventIsBrowserUIPageSwitchz$Utilities.eventIsBrowserUIPageSwitch�sl��/�1P�Q�	��:�:�Y�&���3�3�E�L�L�A���!�!�%�,�,�/���%�%�m�&>�&>�&@�&S�&S�&U�V��rgc�p�tj�j�r,|j�}|j	|j
�}nL|j
tj�j��}|j
|j
�}d|d|dg}tjtj|d�|r|sy||k(rytj|�sPtj|�r;|j�|k(r(d}tjtj|d�yy)NzWEB: Event doc:z. Focus doc:r�TFz,WEB: Treating active doc as locusOfFocus doc)rr��focus_is_active_windowr�r�r�r�r�rryrzrrjr�)rcr�r�r�r�r�s      rf�eventIsFromLocusOfFocusDocumentz)Utilities.eventIsFromLocusOfFocusDocument�s����#�#�%�<�<�>��'�'�)�E��6�6�u�|�|�D�F��-�-�m�.F�.F�.H�.[�.[�.]�^�E��.�.�u�|�|�<�F�#�V�^�U�C�H��
���%�*�*�F�D�9��5���U�?��� � ��'�H�,=�,=�f�,E��"�"�$��.�D���"�"�5�#3�#3�S�$�?��rgc�����jdk7rytj�j�}|s(d}t	j
tj|d�y�j|k(r(d}t	j
tj|d�ytj|�fd��r(d}t	j
tj|d�ytj�j�rHdtj�j�d	g}t	jtj|d�yd
}t	j
tj|d�y)Nr�Fz:WEB: Selection changed event is relevant (no locusOfFocus)Tz:WEB: Selection changed event is relevant (is locusOfFocus)c�"��|�jk(Sr)r��r*r�s �rfr,zBUtilities.eventIsIrrelevantSelectionChangedEvent.<locals>.<lambda>s���1����3D�rgzCWEB: Selection changed event is relevant (ancestor of locusOfFocus)z5WEB: Selection changed event is irrelevant (unrelatedr�zGWEB: Selection changed event is relevant (no reason found to ignore it))r�rr�r�rr�rzr�rr�r�is_page_tab_list�
get_role_namery)rcr�r�r�r�s `   rf�&eventIsIrrelevantSelectionChangedEventz0Utilities.eventIsIrrelevantSelectionChangedEvents����:�:�3�3���(�(�*�=�=�?���N�C����u�/�/��d�;���<�<�5� �N�C����u�/�/��d�;���!�!�%�)D�E�W�C����u�/�/��d�;���'�'����5�M��,�,�U�\�\�:�C�A�F����e�.�.���=��W��
���5�+�+�S�$�7�rgc��|j|j�rtj|j�sy|j	|�s|j|�ryyr0)r�r�rr3� isDeleteCommandTextDeletionEvent�#isBackSpaceCommandTextDeletionEventr�s  rf�textEventIsDueToDeletionz"Utilities.textEventIsDueToDeletion+sK���%�%�e�l�l�3��)�)�%�,�,�7���0�0��7��6�6�u�=��rgc���|jjd�sy|j|j�rt	j
|j�sy|jt
j�j�k7ryttjtj�r3tj}|xr|j�xr
|j Sy�Nr�F)r�r�r�r�rr3rr�r�r�r	�lastInputEventr�
KeyboardEvent�lastNonModifierKeyEvent�isPrintableKey�	modifiers)rcr��
inputEvents   rf�textEventIsDueToInsertionz#Utilities.textEventIsDueToInsertion6s����z�z�$�$�^�4���%�%�e�l�l�3��)�)�%�,�,�7���<�<�=�3�3�5�H�H�J�J���j�/�/��1J�1J�K�#�;�;�J��Z�*�";�";�"=�Z�j�FZ�FZ�BZ�Z�rgc�p�|jjd�sy|j|j�Sr�)r�r�r�r�r�s  rf�$textEventIsForNonNavigableTextObjectz.Utilities.textEventIsForNonNavigableTextObjectGs,���z�z�$�$�^�4���'�'����5�5rgc���|j|j�sy|jjd�r9|j|j
vr!t
jd|j
�Sy)NF�object:text-changed:insertrr)r�r�r�r�r	�any_datar�r�r�s  rf�eventIsEOCAddedzUtilities.eventIsEOCAddedMsW���%�%�e�l�l�3���:�:� � �!=�>��-�-����?��x�x�����?�?�?�rgc���|r|jjd�sy|xs"tj�j	�}|j|�sy|j|j�S)Nr�F)r�r�rr�r�rr�)rcr�r�s   rf�caretMovedOutsideActiveGridz%Utilities.caretMovedOutsideActiveGridWs_���%�*�*�/�/�0I�J���N�}�7�7�9�L�L�N���$�$�X�.���(�(����6�6�6rgc�>�|r|jjd�sytj|j�rytj|j��}|sy|j|j�}|r||k(ry|xs"tj�j�}|j|�r|}n tj||j�}|xr9tj |�tj"|j��k(S)Nr�FT)r�r�rr3r�r�get_document_uri_fragmentrurrr�r�r�rr�rrzr�)rcr�r��fragment�sourceIDr�s      rf�caretMovedToSamePageFragmentz&Utilities.caretMovedToSamePageFragmentas����%�*�*�/�/�0I�J���"�"�5�<�<�0���7�7��8J�8J�8L�M�����;�;�u�|�|�,����H�,���N�}�7�7�9�L�L�N���;�;�x� ��D��)�)�(�D�K�K�@�D��b��0�0��6�*�:L�:L�T�M_�M_�Ma�:b�b�brgc����tj�j|����sy��fd�}tj||�duS)NFc�,���j|��k(Sr)r)r*r	rcs ��rf�isSameFragmentz:Utilities.isChildOfCurrentFragment.<locals>.isSameFragment}s����;�;�q�>�X�-�-rg)rrrurr�)rcrorr	s`  @rf�isChildOfCurrentFragmentz"Utilities.isChildOfCurrentFragmentxsC����7�7��8J�8J�3�8O�P����	.��%�%�c�>�:�$�F�Frgc�
��|r�j|�sy�jjt|��}|�|Sd}�fd�}�j	|�dvrd}n�tj|�rtj||�}ndtj|�r||�xs�j|�}n3�j|�s"�j|�}�j|�}|�jt|�<|S)NFc���tj|��j�vxr&�j|�xr�j	|�Sr)rr4r5r�r�r
s �rf�hasTextBlockRolezHUtilities.isContentEditableWithEmbeddedObjects.<locals>.hasTextBlockRole�sT����$�$�Q�'�4�+F�+F�+H�H�[��6�6�q�9�9�[�BF�BW�BW�XY�BZ�>Z�
[rg)�input�textarea)r�r#rwrxrr�is_multi_line_entryrrr3r�r�r�rH)rcror�rr�s`    rfrHz.Utilities.isContentEditableWithEmbeddedObjects�s������.�.�s�3��
�
7�
7�
;�
;�D��I�
F��
�>��I�
��	[��<�<��� 5�5��B�
�
,�
,�S�
1��)�)�#�/?�@�B�
�
$�
$�S�
)�!�#�&�:�$�+�+�c�*:�B�����%��0�0��5�H��:�:�8�D�B�@B��2�2�4��9�=��	rgc���tj|�}|j|�sytj|�}tj
|�}||t
j|�fS)N)r�r�r)rrvr#rr�r�rrP)rcror+r�r�s     rf�_rangeInParentWithLengthz"Utilities._rangeInParentWithLength�s[���$�$�S�)���%�%�f�-���1�1�#�6���-�-�c�2���c�6�5�5�f�=�=�=rgc�F��|r|j|�st�|�	|�Stj|�sy	|j
j
t|��|j|dd�\}}}|jd�}|dk(ry|dvry|S#t$rY�@wxYw)NFrT�invalidr�)�spelling�grammar)r�r�getErrorrr]rrlrxr�r�rw)rcror�r�r�r0res      �rfrzUtilities.getError�s������.�.�s�3��7�#�C�(�(��+�+�C�0��	��"�"�&�&�t�C�y�1�!�/�/��Q��=���u�c��	�	�)�$���G����/�/������	��	�s�$B�	B �B c���|r|j|�sy|j|�sytj|tj
j�}|r|jd�Syr�)r�rrr�rr��
ERROR_MESSAGEr�)rcror�s   rf�_getErrorMessageContainerz#Utilities._getErrorMessageContainer�sY����.�.�s�3���}�}�S�!���(�(��e�.@�.@�.N�.N�O����&�&�q�)�)�rgc�B�|j|j|��Sr)r�rr�s  rf�getErrorMessagezUtilities.getErrorMessage�s�����t�=�=�c�B�C�Crgc�l�|j|�sy|D]\}}}}|j|�|k(s�yyr0)r$r)rcror�r�r�r�r�s       rfrzUtilities.isErrorForContents�sF���"�"�3�'��'/�	�#�C���V��-�-�c�2�c�9��	�rgc�
�|jjt|��}|�|S|�ytj|�r(d}tjt
j|d�ytj|�s*d|g}tjt
j|d�ytj�}d}tj|�r-d|g}tjt
j|d�d}�n�tj|�r-d|g}tjt
j|d�d}�n�tj|�r-d|g}tjt
j|d�d}�nm|j|�r-d|g}tjt
j|d�d}�n/|j!|�r-d	|g}tjt
j|d�d}�n�|j#|�r-d
|g}tjt
j|d�d}�n�|j%|�r-d|g}tjt
j|d�d}�nu|j'|�r-d|g}tjt
j|d�d}�n7|j)|�r-d
|g}tjt
j|d�d}�n�|j+|�r-d|g}tjt
j|d�d}�n�|j-|�r-d|g}tjt
j|d�d}�n}|j/|�r-d|g}tjt
j|d�d}�n?|j1|�r-d|g}tjt
j|d�d}�n|j3|�r,d|g}tjt
j|d�d}n�|j5|�r,d|g}tjt
j|d�d}n�t7j8|�r,d|g}tjt
j|d�d}nFd|dtj�|z
d�d�g}tjt
j|d�d}||jt|�<dtj�|z
d�d�}tjt
j|d�|S)NFz*WEB: Dead object cannot have caret contextTz-WEB: Invalid object cannot have caret contextz,WEB: Focusable object can have caret contextz+WEB: Editable object can have caret contextz$WEB: Landmark can have caret contextz/WEB: Static text leaf cannot have caret contextz4WEB: Useless empty element cannot have caret contextz/WEB: Off-screen label cannot have caret contextz2WEB: Non-navigable popup cannot have caret contextz,WEB: Useless image cannot have caret contextz+WEB: Empty anchor cannot have caret contextz-WEB: Empty tool tip cannot have caret contextz3WEB: Parent of null child cannot have caret contextz-WEB: Pseudo element cannot have caret contextz9WEB: Fake placeholder for entry cannot have caret contextzDWEB: Non interactive descendant of control cannot have caret contextz,WEB: Hidden object cannot have caret contextz3WEB: Allowing sizeless object to have caret contextr�zcan have caret context. (r��s)z INFO: _canHaveCaretContext took r)rrwrxrr�rr�rzrjryr�rr�r3rBr�r�r�rhr�rr�r��isPseudoElementr�r�r'r
r�)rcror�r�r�r�s      rf�_canHaveCaretContextzUtilities._canHaveCaretContext�s���
�
.�
.�
2�
2�4��9�
=��
�>��I��;�����C� �>�C����u�/�/��d�;��� � ��%�E�s�K�F����e�.�.���=���I�I�K�	�
���#�#�C�(�D�c�J�F����e�.�.���=��B�
�
$�
$�S�
)�C�S�I�F����e�.�.���=��B�
�
$�
$�S�
)�<�c�B�F����e�.�.���=��B�
�
"�
"�3�
'�G��M�F����e�.�.���=��B�
�
'�
'��
,�L�c�R�F����e�.�.���=��B�
�
"�
"�3�
'�G��M�F����e�.�.���=��B�
�
%�
%�c�
*�J�C�P�F����e�.�.���=��B�
�
 �
 ��
%�D�c�J�F����e�.�.���=��B�
�
�
��
$�C�S�I�F����e�.�.���=��B�
�
 �
 ��
%�E�s�K�F����e�.�.���=��B�
�
%�
%�c�
*�K�S�Q�F����e�.�.���=��B�
�
!�
!�#�
&�E�s�K�F����e�.�.���=��B�
�
+�
+�C�
0�Q�SV�W�F����e�.�.���=��B�
�
5�
5�c�
:�\�^a�b�F����e�.�.���=��B�
�]�]�3�
�E�c�J�F����e�.�.���=��B�
�
$�
$�S�
)�K�S�Q�F����e�.�.���=��B��s�&?��	�	��i�@W�X[�?\�\^�$_�`�F����e�.�.���=��B�79��)�)�$�s�)�4�0�����y�1H��0M�Q�O��
���5�+�+�S�$�7��	rgc��yrr�r�s  rfr%zUtilities.isPseudoElement3r>rgc�v�d|g}tjtj|d�|}d\}}|r@tj|�}|dkrd}n ||}}tj||�}|r|}nn|r�@|r0|j|�s|j|td|dz
��S|j|�r|dfSy)Nz#WEB: Searching for caret context inT�Nr�rr�rt)rryrzr�get_caret_offsetrr�r'r>rdr�)rcror�r��
contextObj�
contextOffsetrpr�s        rf�searchForCaretContextzUtilities.searchForCaretContext6s���7��=��
���%�*�*�F�D�9��	�$,�!�
�M���,�,�S�1�F���z���,/��M�
�#�7�7��V�D����C����d�m�m�J�7��,�,�Z��R��QR�AR�9S�T�T��?�?�9�%��a�<��rgc��tj�j�}d}tjtj
|d�|j
|�sytj|�s|dfS|tj|�fS)Nz+WEB: Getting caret context via locusOfFocusTr)r)rr�r�rr�rzr�rr�rr*)rcror�s   rf�_getCaretContextViaLocusOfFocusz)Utilities._getCaretContextViaLocusOfFocusPst���&�&�(�;�;�=��;��
���5�+�+�S�$�7��%�%�c�*���%�%�c�*���6�M��F�+�+�C�0�0�0rgc�|�d|g}tjtj|d�tj|�s9|j�}d|g}tjtj|d�|sm|s(d}tjtj|d�y|j�\}}d|d|dg}tjtj|d�||fS|jjttj|���}|�4d	|d
|dd|dg}tjtj|d�n/d
|dg}tjtj|d�d\}}|r|j|�s?|s(d}tjtj|d�y|j|�\}}n�|s|\}}n�tj|d�sd}tjtj|d�|j�\}}|rH|jtj|��\}	}
|	rtj|	�r
|	|
}}n|\}}d|d
|d|dg}tjtj|d�|j|||�||fS)NzWEB: Getting caret context forTz"WEB: Now getting caret context forz=WEB: Returning None, -1: No document and no search requested.r)r�r�z(from locusOfFocus)zWEB: Cached context ofr�rrtzWEB: No cached context forr�zTWEB: Returning None, -1: No top-level document with context and no search requested.z3WEB: Context is not valid. Searching for replicant.zWEB: Result context of)rryrzrrjrur�r/rrwrxrv�isTopLevelDocumentr-�findContextReplicantr�)rcru�getReplicant�searchIfNeededr�r�rorpr��caretObj�caretOffsets           rfr�zUtilities.getCaretContext\s���2�M�B��
���%�*�*�F�D�9�� � ��/� �.�.�0�M�:�M�J�F����e�.�.���=��!�U���"�"�5�#3�#3�S�$�?���>�>�@�K�C��&��T�6�;P�Q�F����e�.�.���=���;���%�%�)�)�$�x�/B�/B�=�/Q�*R�S����.�
�t�W�Q�Z�QU�W^�_`�Wa�b�F����e�.�.���=�2�M�3�G�F����e�.�.���=�"�K�C���d�5�5�m�D�!�1���"�"�5�#3�#3�S�$�?���4�4�]�C�K�C���!�K�C���"�"�7�1�:�.�G�C����u�/�/��d�;��3�3�5�K�C���(,�(B�(B�8�CV�CV�WZ�C[�(\�%��+��� 1� 1�(� ;�"*�K��C�!�K�C��*�M�4��d�F�TW�X��
���%�*�*�F�D�9����S�&�-�8��F�{�rgc��|xs|j�}|sdgddfS|jjtt	j
|���}|sdgddfS|Sr))rurrwrxrrv)rcrur�s   rf�getCaretContextPathRoleAndNamez(Utilities.getCaretContextPathRoleAndName�sd��%�=��);�);�)=�
���4��t�#�#�
�
,�
,�
0�
0��h�6I�6I�-�6X�1Y�
Z����4��t�#�#��	rgc��|j�|xs|j�}|sytj|�}|jjt
|�d�|jjt
|�d�yr)r�rurrvrrlrxr)rcrur+s   rfr~zUtilities.clearCaretContext�sk����� �%�=��);�);�)=�
����$�$�]�3��������V��d�3�������V��d�3rgc���tj|�r(d}tjtj|d�ytj�j�s(d}tjtj|d�y|j�\}}}tj|�}||k7r,d|d|g}tjtj|d�ytj|�}	||	k7r,d|d|	g}tjtj|d�ytj|�|k7}
|j�}|jjt!tj"|���\}}
d	|
g}tjtj|d�tj�j%|||
�|j'||
|�y)
NzWEB: Context replicant is dead.TFzBWEB: Not event from context replicant, locus of focus is not dead.z+WEB: Not event from context replicant. Pathz != replicant pathz+WEB: Not event from context replicant. Rolez != replicant rolez-WEB: Is event from context replicant. Notify:)rr�rr�rzrr��
focus_is_deadr8r�ryr4r"rurrwrxrvr�r�)rcr��	replicantr��pathr�rM�
replicantPathr��
replicantRole�notifyrurorps              rf�handleEventFromContextReplicantz)Utilities.handleEventFromContextReplicant�s������I�&�3�C����u�/�/��d�;���'�'�)�7�7�9�V�C����u�/�/��d�;���>�>�@���d�D� �)�)�)�4�
��=� �C�T�*�M�;�F����e�.�.���=�� �)�)�)�4�
��=� �C�T�*�M�;�F����e�.�.���=���"�"�9�-��5���*�*�,�
��)�)�-�-�d�8�3F�3F�}�3U�.V�W���V�A�6�J��
���%�*�*�F�D�9�� � �"�5�5�e�Y��O����Y��
�>�rgc��d}tj|j�r
|j}n�tj|j�r
|j}n^t	j
|jtj�xs.t	j
|jtj�}|�(d}t
jtj|d�yd|dg}t
jtj|d�t	j|dd�tj|�}tj|�s8tjs(d}t
jtj|d�y|jjj!di�}|j!t#t%j&�j)���}t	j*|�|k7}d	|d
g}t
jtj|d�t%j&�j-|||�|j/|d�y)NzBWEB: Could not find listbox or tree to recover from removed child.TFz
WEB: Checkingzfor focused child.z,Handling event for removed selectable child.z?WEB: Could not find focused item to recover from removed child.r�z1WEB: Recovered from removed child. New focus is: r�r)rr}r��is_treerr�rr�rzryr��get_focused_objectr|�is_tree_itemr{r�rwrxrr�r�r"r�r�)	rcr�r�r�r�r�r��oldNamer@s	         rf�%_handleEventForRemovedSelectableChildz/Utilities._handleEventForRemovedSelectableChild�s����	��"�"�5�<�<�0����I�
�
 �
 ����
.����I� �.�.�u�|�|�[�=T�=T�U�M��)�)�%�,�,��8K�8K�L�
���V�C����u�/�/��d�;��!�9�.B�C��
���%�*�*�F�D�9�	���Y��/]�^��-�-�i�8���(�(��.�+�2J�2J�S�C����u�/�/��d�;�����-�-�1�1�'�2�>���)�)�D��!9�!9�!;�!N�!N�!P�Q�R���"�"�4�(�G�3��E�t�S�Q��
���%�*�*�F�D�9�� � �"�5�5�e�T�6�J����T�1�%�rgc�~��tj�j�}�j|k(r(d}t	j
tj|d�n�tj|�fd��r(d}t	j
tj|d�n�tj�j�rF|j�j|dd�r(d}t	j
tj|d�n(d}t	j
tj|d�y�jdk(r(d	}t	j
tj|d�y|j��ryd
\}}d}|j�\}}tj�j�}	|dk(�r<�j|	k\rHd}t	j
tj|d�|j!�jd�\}}�n?d
�jdz
cxkr|	krqnnntj"�j�jdz
�}
d|
dg}t	j$tj|d�|j!|
d�\}}�n�|j'�j�}d|dg}t	j$tj|d�|j!|d�\}}�nZ|dk(�rA�jd
k(rHd}t	j
tj|d�|j)�jd�\}}�n�d
�jcxkr|	krynnvtj"�j�j�}
d�j|
dg}t	j$tj|d�|j)|
d�\}}�no|j+�j�}
d|
dg}t	j$tj|d�|j)|
d�\}}�nd}tj,�jdd�|j/�j�\}}|�t1j2�j�}|r�tj�j�r�t1j4|�rx|j6j8j;di�}|j;t=tj�j���}tj>|�|k7}|r?d||fz}tj�jA�||�|jC||�yd�jg}t	j$tj|d�y)Nz%WEB: Removed child is locus of focus.Tc�"��|�jk(Sr)rr�s �rfr,z6Utilities.handleEventForRemovedChild.<locals>.<lambda>�s���Q�%�.�.�5H�rgz1WEB: Removed child is ancestor of locus of focus.z=WEB: Removed child appears to be replicant of locus of focus.zHWEB: Removed child is not locus of focus nor ancestor of locus of focus.Fr�zWEB: Event detail1 is useless.r)r�zAWEB: Last child removed. Getting new location from end of parent.rrtz4WEB: Getting new location from end of previous childr�z>WEB: Getting new location from end of source's previous objectr�zDWEB: First child removed. Getting new location from start of parent.z-WEB: Getting new location from start of childz<WEB: Getting new location from start of source's next objectz!Handling event for removed child.r�z0WEB: Setting locusOfFocus and context to: %s, %iz2WEB: Unable to find context for child removed from)"rr�r�rrr�rzrr�r;�isSameObject�detail1rGr�r�r�rIr�ryr�rDr�r�r-rrDrGr{r�rwrxr"r�r�)rcr�r�r�rorpr@�	keyStringr�rIr�r�rMr�r�rFs `              rf�handleEventForRemovedChildz$Utilities.handleEventForRemovedChild�s�����(�(�*�=�=�?���>�>�U�"�9�C����u�/�/��d�;�
�
#�
#�E�+H�
I�E�C����u�/�/��d�;�
�
%�
%�
'�
5�
5�
7�� � ������d�C�Q�C����u�/�/��d�;�\�C����u�/�/��d�;���=�=�B��2�C����u�/�/��d�;���5�5�e�<�����V����2�2�4��	�4��-�-�e�l�l�;�
�����}�}�
�*�Y���"�"�5�#3�#3�S�$�?�"�2�2�5�<�<��D���V��e�m�m�a�'�4�*�4� �*�*�5�<�<�����9J�K��P�RW�Y\�]���!�!�%�"2�"2�F�D�A�"�2�2�5�"�=���V��1�1�%�,�,�?��Z�!�3�(���!�!�%�"2�"2�F�D�A�"�2�2�7�B�?���V�
�&�
 ��}�}��!�\���"�"�5�#3�#3�S�$�?�"�.�.�u�|�|�R�@���V��U�]�]�/�Z�/� �*�*�5�<�<����G��I�5�=�=���&���!�!�%�"2�"2�F�D�A�"�.�.�u�b�9���V��-�-�e�l�l�;��X�!�3�(���!�!�%�"2�"2�F�D�A�"�.�.�w��;���V��F�
� � ����u�6Y�Z��4�4�U�\�\�B�K�C���{�!�4�4�U�\�\�B���}�/�/�1�?�?�A�k�F\�F\�]`�Fa����5�5�9�9�'�2�F���)�)�D��)A�)A�)C�)V�)V�)X�$Y�Z��!�*�*�3�/�7�:���D��V�}�T�C��$�$�&�9�9�%��f�M�� � ��f�-��F����U��
���%�*�*�F�D�9�rgc�T�|j|�\}}}|j|�}|r|rtj|�|k7rd}|r|rtj|�|k7rd}|sy|j|d�\}}d|d|g}	t
jtj|	d�||fS)Nr)rzWEB: Context replicant isr�T)	r8�getObjectFromPathrr4r"r�rryrz)
rcru�	matchRole�	matchNamer=�oldRolerFrorpr�s
          rfr2zUtilities.findContextReplicantJs���!%�!D�!D�]�!S���g�w��$�$�T�*���9�� � ��%��0����9�� � ��%��0������0�0��a�8���V�-�s�D�&�A��
���%�*�*�F�D�9��F�{�rgc���tj|�s|j�}|r;|jj	ttj|���}|r|Sy)Nr))rrjrurrwrxrv)rcrur�s   rf�getPriorContextzUtilities.getPriorContext[sR��� � ��/� �.�.�0�M���)�)�-�-�d�8�3F�3F�}�3U�.V�W�G����rgc��|jjt|��}|�|Stj|�xsdg}||jt|�<|Sr))rrwrxrr�r@s   rf�_getPathzUtilities._getPathfsP��
�[�[�_�_�T�#�Y�
'��
�>��I�
�
�
�s�
#�
+��t��!#����D��I���	rgc���|xs|j�}|sytj|�}|jj	t|�||f�\}}||f|jt|�<||f|jt|�<|j|�}tj|�}tj|�}	|||	f|jt|�<yr)rurrvrrwrxrrVr4r"r)
rcrorprur+�oldObj�	oldOffsetr=r�rMs
          rfr�zUtilities.setCaretContextos���%�=��);�);�)=�
����$�$�]�3�� �/�/�3�3�D��L�3��-�P���	�,2�I�,=����D��L�)�,/��K����D��L�)��}�}�S�!��� � ��%��� � ��%��8<�d�D�8H��'�'��V��5rgc�F�i|_|j||�}i|_|Sr)r�_findFirstCaretContext)rcrorpr�s    rfr�zUtilities.findFirstCaretContext~s)��,.��)�
�
(�
(��f�
5��,.��)��	rgc�d
�d|d|g}tjtj|d�tj|�}t
jjt
jjt
jjt
jjg}||vrytj|�rd|j||�sRtj|d�}d|dg}tjtj|d�|j|d�S|j|�}|s?|j!|�r.d|dg}tjtj|d�|dfSt#j$|�}|�r
||k\�r|j'|�r�|j)�r�|j+||�\}	}
|	s*d	|g}tjtj|d�no|j'|	�s-d
|	d|dg}tjtj|d�n1d
|d|	d|
g}tjtj|d�|	|
fSd|d|d|d|g}tjtj|d�||fSt-d|�}|r�t#j.|�}|||j0k7s|t
jj2k(r+d}tj4tj|d�||fS|j7|�r+d}tj4tj|d�||fSt9j:||�}
|
s+d}tj4tj|d�||fS|j=|�rl|j?|
�r[d|
d|d|dg}tjtj|d�|dz
}t9j:||�}
|j?|
�r�[|jA|
�r6d|d|dzdg}tjtj|d�||dzfS|jC|
�rH|j+||�\}	}
|	r1d|d|	d|
g}tjtj|d�|	|
fS|j!|
�s1d|
d|d|g}tjtj|d�||fSd|
d|d|g}tjtj|d�|j|
d�S) Nz(WEB: Looking for first caret context forr�TrzWEB: Will look in childzfor first caret contextz0WEB: First caret context for non-text context isr�z3WEB: No next object found at end of contenteditablezWEB: Next objectzfound at end of contenteditablezis not editablez2WEB: First caret context at end of contenteditablezis next contextz"WEB: First caret context at end ofr�z%WEB: First caret context is unchangedzCWEB: EOC in single-char-lines element. Returning context unchanged.z:WEB: Child at offset is null. Returning context unchanged.z
WEB: Child�ofr�zcannot be context.rtz*WEB: First caret context is next offset inr
z!(skipping list item marker child)z/WEB: First caret context at end of empty anchorzcannot be context. ReturningzWEB: Looking in childzfor first caret context for)"rryrzrr4rr_r`�INTERNAL_FRAMErr�r�rJr�r[r#r&rrPrH�lastInputEventWasCharNavrDrdr�r	r�r�r)rr�r�r��isListItemMarkerr)rcrorpr�r��lookInChild�
firstChildr.�lengthr��
nextOffsetrr�r�s              rfr[z Utilities._findFirstCaretContext�s���<�c�4��P��
���%�*�*�F�D�9�� � ��%���z�z����z�z�0�0��z�z�'�'��z�z�+�+�-���;���'�'��,�T�_�_�S�&�5Q�!�+�+�C��3�J�/��=V�W�F����e�.�.���=��.�.�z�1�=�=��,�,�S�1���t�8�8��=�H�#�s�S�F����e�.�.���=���6�M��+�+�C�0���6�V�+��8�8��=�$�B_�B_�Ba�&*�&6�&6�s�F�&C�#����S�UX�Y�F��%�%�e�&6�&6���E��B�B�7�K�0�'�?��FW�Y�F��%�%�e�&6�&6���E�R�TW�/��$�
�L�F��%�%�e�&6�&6���E�"�J�.�.�:�C��v�t��4��)�F����e�.�.���=���;���Q������)�)�#�.�G��v��$�"@�"@�@�D�E�J�J�L\�L\�D\�=���"�"�5�#3�#3�S�$�?��F�{�"��.�.�s�3�[���"�"�5�#3�#3�S�$�?��F�{�"��/�/��V�<���N�C����u�/�/��d�;���;���?�?�3���,�,�U�3�&��t�S�+�v�Oc�d���!�!�%�"2�"2�F�D�A��!���#�7�7��V�D��	�,�,�U�3�� � ��'�B�C���q�j�"E�G�F����e�.�.���=����
�?�"����e�$�"&�"2�"2�3��"?��G�Z��K�S�+�W�d�J�H���!�!�%�"2�"2�F�D�A��
�*�*��(�(��/�"�E�+I�3�PT�V\�]�F����e�.�.���=���;��)�5�2O�QT�VZ�\b�c��
���%�*�*�F�D�9��*�*�5�!�4�4rgc���tj�}|j||�}d|d|d|dd|ddtj�|z
d�d�g	}tjtj|d	�|S)
NzWEB: Next caret in order forr�r
rrtrr�r$T)r��_findNextCaretInOrderrryrz�rcrorpr�r�r�s      rfr>zUtilities.findNextCaretInOrder�sw���I�I�K�	�
�
'�
'��V�
4��0�#�t�V�S��Q�%��r�!�u��$�)�)�+�	�*A�#�)F�b�&I�K��
���%�*�*�F�D�9��	rgc��|s|j�\}}|r|j|�sy|j|��rt|j|�r�t	j
|�}t
|dzt|��D]�}tj||�}|rQ|||jk7r?d|d||jdd�dg}tjtj|d�|j|�r,|j|d	�r|d
fcS|j!|d	�cS|||j|j"fvs��||fcSngt%j&|�r8|j||�s&|j!t%j(|d
�d	�S|d
kr|j+|�s|d
fS|j-|�ry|�r�t%j.|��rt|j1t%j.|��r%|j3t%j.|��}�bt%j.|�}t%j4|�szd}tj6tj|d�|j9|j;�|�}	t%j4|	�r|	}nt%j.|�r|}��	y|j=|�\}
}}|
dz|k(r&d
|
cxkr|cxkr|krnn|j!||
�St%j>|�}|r|j!|d	�S|}|rt%j.|�r��ty)Nr)rt�ERROR: Child�found at offset with char 'rrrTr�rz6WEB: Finding next caret in order. Parent is not valid.) r�r�r&r#rr�rqr�rr�r	rrryrzr�rf�ZERO_WIDTH_NO_BREAK_SPACErr�r�r!r1rvr�r�rjr��
findReplicantrurr��
rcrorprrQr�r�r+r�r<r�r�rcs
             rfrfzUtilities._findNextCaretInOrder�s	����.�.�0�K�C���$�0�0��5���$�$�S�)��%�%�c�*� �-�-�c�2���v��z�3�w�<�8�&�A�'�;�;�C��C�E�����t�/M�/M�!M�"0�%�9V�")�!�*�"4�"4�T�5�"A�3�"H���)�)�%�*:�*:�F�D�I��0�0��7��3�3�E�2�>�#(�!�8�O�#�9�9�%��D�D��q�z� �:�:�D�<Z�<Z�*\�\�"�A�v�
�&��)�)�#�.�t�7O�7O�PS�U[�7\��1�1�(�2D�2D�S�!�2L�b�Q�Q��!��D�$;�$;�C�$@��A�v�
��"�"�3�'���h�)�)�#�.��&�&�x�':�':�3�'?�@��4�4�X�5H�5H��5M�N����(�(��-�F��$�$�V�,�N���"�"�5�#3�#3�S�$�?� �.�.�t�/A�/A�/C�V�L�	��$�$�Y�/�&�F��(�(��0� �C����"&�!>�!>�s�!C��E�3���q�y�C��A��$>��$>��$>��1�1�&�%�@�@��-�-�c�2�E���1�1�%��<�<��C�3�h�)�)�#�.�6rgc���tj�}|j||�}d|d|d|dd|ddtj�|z
d�d�g	}tjtj|d	�|S)
Nz WEB: Previous caret in order forr�r
rrtrr�r$T)r��_findPreviousCaretInOrderrryrzrgs      rfrFz"Utilities.findPreviousCaretInOrder'sw���I�I�K�	�
�
+�
+�C��
8��4�c�4����Q�%��r�!�u��$�)�)�+�	�*A�#�)F�b�&I�K��
���%�*�*�F�D�9��	rgc��|s|j�\}}|r|j|�sy|j|��r�|j|��rt	j
|�}|dk(s|t
|�kDrt
|�}t|dz
dd�D]�}tj||�}|rQ|||jk7r?d|d||jdd�dg}tjtj|d	�|j|�r,|j|d�r|d
fcS|j!|d�cS|||j|j"fvs��||fcSn}t%j&|�rN|j||�s<|j!t%j(|t%j&|�dz
�d�S|d
kr|j+|�s|d
fS|j-|�ry|�r�t%j.|��rt|j1t%j.|��r%|j3t%j.|��}�bt%j.|�}t%j4|�szd}tj6tj|d	�|j9|j;�|�}	t%j4|	�r|	}nt%j.|�r|}��	y|j=|�\}
}}|
dz|k(r&d
|
cxkr|cxkr|krnn|j!||
�St%j>|�}|r|j!|d�S|}|rt%j.|�r��ty)Nr)r�rtrirjrrrTrz:WEB: Finding previous caret in order. Parent is not valid.) r�r�r&r#rr�r�rqrr�r	rrryrzr�rorkrr�r�r!r1rvr�r�rjr�rlrur�get_previous_siblingrms
             rfroz#Utilities._findPreviousCaretInOrder/s:����.�.�0�K�C���$�0�0��5���$�$�S�)��%�%�c�*� �-�-�c�2���R�<�6�C��L�#8� ��\�F��v��z�2�r�2�&�A�'�;�;�C��C�E�����t�/M�/M�!M�"0�%�9V�")�!�*�"4�"4�T�5�"A�3�"H���)�)�%�*:�*:�F�D�I��0�0��7��3�3�E�2�>�#(�!�8�O�#�=�=�e�R�H�H��q�z� �:�:�D�<Z�<Z�*\�\�"�A�v�
�&��)�)�#�.�t�7O�7O�PS�U[�7\��5�5��&�&�s�H�,D�,D�S�,I�A�,M�N�PR�T�T��!��D�$;�$;�C�$@��A�v�
��"�"�3�'���h�)�)�#�.��&�&�x�':�':�3�'?�@��4�4�X�5H�5H��5M�N����(�(��-�F��$�$�V�,�R���"�"�5�#3�#3�S�$�?� �.�.�t�/A�/A�/C�V�L�	��$�$�Y�/�&�F��(�(��0� �C����"&�!>�!>�s�!C��E�3���q�y�C��A��$>��$>��$>��5�5�f�e�D�D��1�1�#�6�E���5�5�e�R�@�@��C�3�h�)�)�#�.�6rgc�
�|j�y|jjjd�r|jjS|jjjd�r|jjSy)Nrzobject:children-changed:add)r]r�r�r�rr�s rf�lastQueuedLiveRegionzUtilities.lastQueuedLiveRegionosn���*�*�2���*�*�/�/�:�:�;W�X��2�2�9�9�9��*�*�/�/�:�:�;X�Y��2�2�;�;�;�rgc��tj�jd�sy|j|j�sytj�jd�sT|j|j�|j
�k7r(d}tjtj|d�y|jjd�r�tj|j|j�}|rJtj |�|jk(r(d}tjtj|d�y|j"rn|j"j|jk(rK|j"j$|j$k(r(d}tjtj|d�yt'|j$t(j*�r�tj,|j$�rQ|j/|j$�d	vr4d
|j$g}tj0tj|d�y|j3�|j$k(rK|j"j|jk7r(d}tjtj|d�y||_y)N�inferLiveRegionsF� presentLiveRegionFromInactiveTabz-WEB: Live region source is not in active tab.Trz6WEB: Focused source will be presented as part of alertz.WEB: Event is believed to be duplicate message)r�N�brz&WEB: Child has unknown role and no tagz?WEB: Event is believed to be redundant live region notification)rr�r�r�r�r�r�rr�rzr�r�rr�rNrrDr]rr�r�
Accessible�is_unknown_or_redundantrryrs)rcr�r�rLr�s     rf�handleAsLiveRegionzUtilities.handleAsLiveRegion{s���*�*�,�7�7�8J�K��� � ����.���*�*�,�7�7�8Z�[��0�0����>�$�BU�BU�BW�W�A�C����u�/�/��d�;���:�:� � �!=�>��*�*�5�<�<��9I�9I�J�E���7�7��>�%�,�,�N�N���"�"�5�#3�#3�S�$�?���.�.��2�2�7�7�5�:�:�E��2�2�;�;�u�~�~�M�F���"�"�5�#3�#3�S�$�?���e�n�n�e�&6�&6�7��2�2�5�>�>�B��<�<����/�3C�C�B�E�N�N�S���!�!�%�"2�"2�F�D�A���(�(�*�e�n�n�<��2�2�7�7�5�:�:�E�W���"�"�5�#3�#3�S�$�?��*/��'�rgc���|j|�st�|�	|�S|jj	t|��}|�|St
j|�}t|�dk(rDt|�tdd�vr-d|dg}tjtj|d�d}n=t
j|�r&tj |�xrt|�dk(}nd}||jt|�<|S)Nrtr�r�rr�TF)r�r�preferDescriptionOverNamerSrwrxrr"r�r�rqrryrzrxr�is_push_button)rcror�rMr�res     �rfr|z#Utilities.preferDescriptionOverName�s�����%�%�c�*��7�4�S�9�9�
�
,�
,�
0�
0��c��
;��
�>��I�� � ��%���t�9��>�c�$�i�5���+@�@�$�c�+K�L�F����e�.�.���=��B�
�
%�
%�c�
*��+�+�C�0�C�S��Y�!�^�B��B�57��'�'��S�	�2��	rgc�~�tjtjtjtjgS)z!Hacky and to-be-obsoleted method.)r�LINE_SELECTED_DOWN�LINE_UNSELECTED_DOWN�LINE_SELECTED_UP�LINE_UNSELECTED_UPr�s rf�_getCtrlShiftSelectionsStringsz(Utilities._getCtrlShiftSelectionsStrings�s0���+�+��-�-��)�)��+�+�-�	-rgc�"��t�|��ry|j�sy|j�syt	j
t
j�j��r(d}tjtj|d�yy)NTFz.WEB: Treating locus of focus as source of copy)r�lastInputEventWasCopyr�� topLevelObjectIsActiveAndCurrentrr�rr�r�rr�rz)rcr�res  �rfr�zUtilities.lastInputEventWasCopy�sr����7�(�*���%�%�'���4�4�6���#�#�M�$<�$<�$>�$Q�$Q�$S�T�B�C����u�/�/��d�;��rgr)Tr)F)Nr�F)r;)rr�)rT)r�r�)Nr�NT)Trtr0)NTT)Nr�Nr)(S�__name__�
__module__�__qualname__rrqr�rr�r�r�r�r�r�rur�r�r�r�r�r�r�rr�r�rrrrrr$r'r.r1r8r<rDrIrSr`�staticmethodrWrVr�r�r�r�r�r�r�r�r�r�r�r#r�r�r�rr"r,r7r4rZrYr^r]rhrgrerdrr�r�r�r�r�r�r�r�r�r�r�r�r�r5r'r)r.r0r!r9r;r=rJrNrQrTrYr\rarerirmrsrwryr|r�r�r�r�r�r'r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r(r�r�r�r�r�r�r�r�rrrr
rrrrr&r6r:r�rrCrFrIr�rRrWrYr]r`rbrrerir&rr�ror�r*r)r�r�r�r�r�r�r�r!r�r r�rr�r�r�r�r�r�rGrprqr�r�r�rr�r�rrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrr
rrrrrrrrrr r"r$r�rur2r2r�r4r�r�rsr<rtrmrEr�rKrNrQrTrWrCr[r�r�rhr�r�rfr�rpr�r�r�r�r�r�ryr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrHrrrr!rr&r%r-r/r�r8r~rArGrMr2rTrVr�r�r[r>rfrFrorsrzr|r�r��
__classcell__)res@rfrr6s����HJ�T/�E�(@#�D$���"`��@�a�-�1�6�2?��
��
��"��(� �2�,�6�*�D�'�&R�(�	#�	#��"=�����05�2�G�$�
�9���$�2
�
��:.�`�.�6J�X	?�I"�VFK�P�G�R��$�J�X�>�@�<�"�@�q�f9�v<�|3��,�
/�b�>� 	�
�U�n%�N8���$+�
�<�
"��(�T1�1�3�R�1�S�O�6�"�:��(�*��$�%� �L�+�Z+�L�E�/�.�
�/�4�2�@�-�:�*�F�+�+�.�-�,�1�,�P�(�@�*�*�*�*���������8�2�A��&&�P"�Q��0
�7�0�1��(,�N��$
�
��
�
�� O�
�
�;�z�.�`,�\�"�,��P�
�
��	�13��6�$F�P��,�!�F
�O�)�)�)�
�
�E�
�H� 	��8�?�9�8�8�9�<�7�8�:�5�6�7�:�7�8�8�8�6�7�8�8�8�8�5�<�7�8�9�4�7�8�9�3�8�3�
�C�,0�4��"4���"@�0�D�S��&�2�9�7�0�0�6�2�2�)��(�P�<�2��"�,�,'�R�*!�F�&4�
��*�N��R�6�
��B� 
�
�
��� �6G�� � � �2�:	��"6��7�c�.G��4>��*�D�02��]�~��4
1�4�l	�4�#�J!�FY�v�"	��
I��\5�|�;�z�>�@
�)�V�*-��rgr)%�__id__�__version__�__date__�
__copyright__�__license__�gi�require_version�
gi.repositoryrr�r�r�r��orcarrrrr	r
rr�orca.ax_componentr
�orca.ax_documentr�orca.ax_hypertextr�orca.ax_objectr�
orca.ax_tabler�orca.ax_textr�orca.ax_utilitiesrrr�rgrf�<module>r�s���*������7�
���	�����7�E�"���	��
������!��!�)�'�)�#�!��)�[N� �*�*�[Nrg

Zerion Mini Shell 1.0