
    g
f                    P   d Z dZdZdZdZddlZ ej                  dd       dd	lmZ ddl	Z	ddl
Z
ddlZddlZdd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl m!Z! ddl"m#Z#  G d dejH                        Z$y)z$Id$z
$Revision$z$Date$zGCopyright (c) 2010 Joanmarie Diggs.Copyright (c) 2014-2015 Igalia, S.L.LGPL    NAtspiz2.0)r   )debug)focus_manager)input_event)messages)
orca_state)script_utilities)script_manager)settings_manager)AXComponent)
AXDocument)AXHypertext)AXObject)AXTable)AXText)AXUtilitiesc                   
    e Zd Z fdZd ZdOdZd Zd ZdPdZdQdZ	d Z
d	 ZdQd
ZdQdZd ZdQdZd Zd ZdRdZ fdZd Z fdZd Zd Zd Zd Zd Zd ZdQ fd	Zd Zd Zd Z fdZ d Z!d  Z"dSd!Z#dSd"Z$d# Z%d$ Z&e'dTd%       Z(d& Z)d' Z*dU fd(	Z+ fd)Z,dO fd*	Z- fd+Z.d, Z/dU fd-	Z0dRd.Z1 fd/Z2 fd0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 fdHZKdPdIZLdJ ZMdK ZNdP fdL	ZOdQdMZPdN ZQdO ZRdP ZSdQ ZT fdRZUdZ fdS	ZVdT ZWdU ZXdV ZYdW ZZdQ fdX	Z[dY Z\dQdZZ]d[ Z^ fd\Z_ fd]Z` fd^Za fd_Zb fd`Zc fdaZd fdb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| Zd} Zd~ Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdQdZdRdZd Zd Zd Zd Zd Zd Zd Zd Z fdZ fdZdQ fd	Zd Zd Zd Zd Z fdZd Zd Zd Zd Z fdZd Zd Zd Zd Zd Zd ZdQdZd Zd Zd Zd Zd Zg fdZd Zd Zd Zd Zd Zd Z fdZ fdZÈ fdZĈ fdZň fdÄZƈ fdĄZǈ fdńZȈ fdƄZɈ fdǄZdȄ ZdɄ Zdʄ Zd˄ Zd̄ Zd̈́ Zd΄ Zdτ ZdЄ Zdф Zd҄ Zdӄ ZdԄ ZdՄ Zdք Zdׄ Zd؄ Zdل Zdڄ Zdۄ Zd܄ Zd݄ Zdބ Zd߄ Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z fdZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd 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 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 Z7g f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 | _0        i | _1        i | _2        i | _3        i | _4        i | _5        i | _6        i | _7        i | _8        i | _9        i | _:        i | _;        i | _<        i | _=        i | _>        i | _?        d | _@        d | _A        d | _B        d | _C        d | _D        d | _E        d | _F        t        j                  j                  t        j                  j                  gi| _K        y 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.pyr   zUtilities.__init__8   sV    !#  ,.)*,'"$!##% 572!#"$"$!#"$(*%!#-/*$&!#% )+&!#!#*,'*,(*,("$461#% #% !)+&!#')$!#$&!%'" !!&(#461/1,$&!! "%'" #% *,'$&!"$&*#(,%$(!$(!)-&*.'"!&5::3G3G2H I    c                     g }| j                   j                         D ]/  \  }\  }}t        j                  |      r|j	                  |       1 |D ]  }| j                   j                  |d          y r   )r   itemsr   is_validappendpop)rc   toRemovekeyobjoffsets        rf   _cleanupContextszUtilities._cleanupContexts   so    "&"5"5";";"= 	%C#v$$S)$	%  	/C##C.	/rg   c           	      T   t        j                  |      s| j                         }t        j                  |      }| j                  j                  t        |            }d|d|d|d   d|d   g}t        j                  t        j                  |d       | j                  j                  j                  |       | j                  |       | j                          |rM|rJd|d   d|d   g}t        j                  t        j                  |d       || j                  t        |      <   y y y )	Nz!WEB: Clearing all cached info forzPreserving context:zContext:r   ,   TzWEB: Preserving context of)r   rj   documentFrame
get_parentr   gethashr   printTokens
LEVEL_INFO_scriptstructuralNavigation
clearCacheclearCaretContextclearCachedObjects)rc   ru   preserveContextdocumentFrameParentcontexttokenss         rf   	dumpCachezUtilities.dumpCache   s     / ..0M&11-@%%))$/B*CD5}'*gajRUW^_`Wac%**FD9))44]C}-!w2GAJWQZPFe..==DD%8 9:  '?rg   c                    t        j                  t         j                  dd       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 | _0        i | _1        i | _2        i | _3        i | _4        i | _5        i | _6        i | _7        i | _8        i | _9        i | _:        i | _;        i | _<        i | _=        | j}                          i | _?        d | _@        d | _A        y )NzWEB: cleaning up cached objectsT)Br   printMessagerz   r    r!   r"   r#   r$   r%   r&   r'   r(   r*   r)   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   r   r   r   rq   r   r]   r^   rc   s    rf   r   zUtilities.clearCachedObjects   s   5++-NPTU"$!##% 572!#"$"$!#"$!#(*%-/*$&!#% )+&!#!#*,'*,(*,("$461#% #% !)+&!#')$!#$&!%'" !!&(#461/1,$&!! "%'" #% *,'$&!"$*,',.) *.'"rg   c                 X    d | _         d | _        d | _        d | _        d | _        i | _        y r   )rX   rY   rZ   r[   r\   r   r   s    rf   clearContentCachezUtilities.clearContentCache   s2    &*#(,%$(!$(!)-&!#rg   c                     t        j                  |      st        j                  |      ry|st        j                  |      S yNTF)r   is_document_webis_embeddedis_document_frame)rc   ro   excludeDocumentFrames      rf   
isDocumentzUtilities.isDocument   s7    &&s+{/F/Fs/K#0055rg   c                    |s"t        j                         j                         }| j                  |      ry| j                  j                  t        |            }||S | j                  |      }|d u}|| j                  t        |      <   |S NT)r   
getManagerget_locus_of_focusr   r    rw   rx   getDocumentForObjectrc   ro   rvdocuments       rf   inDocumentContentzUtilities.inDocumentContent   s    **,??AC ??3$$((c3>I,,S1T!-/S	*	rg   c                 t    t        j                  |t        j                  j                  | j
                        S r   )r   get_relation_targetsr   RelationTypeEMBEDSr   )rc   frames     rf   _getDocumentsEmbeddedByz!Utilities._getDocumentsEmbeddedBy  s'    ,,UE4F4F4M4Mt__rg   c                 f   | j                   j                  }t        j                         j	                         }t        j                  |      |k(  ryd|d|g}t        j                  t        j                  |d       	 t        j                         j                  ||      }d|g}t        j                  t        j                  |d       t        |t        | j                               rk|j                         }|j                         D ]G  \  }}d|d|g}t        j                  t        j                  |d       t!        | j                   ||       I 	 t        j                         j'                  |      }t        j(                  |      | j                   _        d| j                   j                  g}t        j                  t        j                  |d       t        j                         j+                  |       y# t"        $ r* d}t        j$                  t        j                  |d       Y w xY w)	NTzWARNING:zis not child ofz WEB: Script for active Window iszWEB: Settingtoz1ERROR: Exception getting script for active windowzWEB: updating script's app to)r{   appr   r   get_active_windowr   rv   r   ry   rz   r   	getScript
isinstancetypegetTransferableAttributesri   setattr	Exceptionr   find_active_windowget_applicationset_active_window)	rc   r   windowr   rd   attrsattrvaluemsgs	            rf   sanityCheckActiveWindowz!Utilities.sanityCheckActiveWindow  s   ll))+==?v&#-f&7=%**FD9	7#..0::3GF8&AFe..=
 &$t||"4588:#(;;= 7KD%,dD%@F%%e&6&6EDLL$67
 ))+>>sC#33F;14<<3C3CD%**FD9  "44V<!  	<ECu//d;	<s   >AG= =0H0/H0c                     |xs" t        j                         j                         }| j                  |      }t	        t        t        j                  |            }t        |      dk(  r|d   S y Nrt   r   )	r   r   r   r   listfilterr   
is_showinglen)rc   r   	documentss      rf   activeDocumentzUtilities.activeDocument&  s^    I=335GGI008	 6 6	BC	y>QQ<rg   c                     |s$| j                         r| j                         }|r|S | j                  |xs" t        j                         j                               S r   )r   r   r   r   r   r   )rc   ro   r   s      rf   ru   zUtilities.documentFrame.  sN    t335**,H(()_0H0H0J0]0]0_``rg   c                 r   t        j                  |      ryt        j                  |      r&t        j                  |t         j
                        d uS t        j                  |      r=t        j                  |      dk(  r%| j                  t        j                  |d            S t        j                  |      S )NFrt   r   )r   is_entryis_imager   find_ancestoris_link
is_headingget_child_countisLink	get_childis_focusablerc   ro   s     rf   grabFocusWhenSettingCaretz#Utilities.grabFocusWhenSettingCaret6  s    $$))#{/B/BC4OO!!#&8+C+CC+HA+M;;x11#q9::'',,rg   c                 \   | j                   j                  j                         r$| j                   j                  j                          | j	                  |      }| j                  ||      \  }}| j                  |||       | j                   j                         ry t        j                         j                         }t        j                  |       t        j                         j                  d |d       |rt        j                  |       t        j                   ||       | j                   j#                  ||      | j                   j%                         k7  r| j                   j'                  d        |rt        j(                  |dd       | j                   j+                  |       y )NF)notify_scriptzSet caret in object.)r{   flatReviewPresenter	is_activequitr   findFirstCaretContextsetCaretContextfocusModeIsStickyr   r   r   r   clear_all_selected_textset_locus_of_focusr   
grab_focusset_caret_offsetuseFocusModeinFocusModetogglePresentationModeclear_cache_saveFocusedObjectInfo)rc   ro   rp   ru   	grabFocusoldFocuss         rf   setCaretPositionzUtilities.setCaretPositionC  sA   <<++557LL,,1132237	00f=VS&-8<<))+ ++-@@B&&x0  "55dCu5U$V,<<$$S(3t||7O7O7QQLL//5   e-CD 	++C0rg   c                    |sy t        j                  |t        j                  j                        }|r|j                  d      S ||k(  rJ| j                  |      \  }}t        j                  |      D ]  }t        j                  |      |kD  s|c S  t        j                  |      rt        j                  |d      S |r;||k7  r6t        j                  |      }|r|S t        j                  |      }|r||k7  r6y Nr   )r   get_relationr   r   FLOWS_TO
get_targetgetCaretContextiter_childrenr   get_character_offset_in_parentr   r   get_next_siblingrv   )rc   ro   ru   relationrp   childnextObjs          rf   getNextObjectInDocumentz!Utilities.getNextObjectInDocument^  s    ((e.@.@.I.IJ&&q))-..}=KC!//> !==eDvM L! ##C(%%c1--c]*//4G%%c*C	 c]* rg   c                 ,    t        j                  |      S r   )r   find_deepest_descendant)rc   ru   s     rf   getLastObjectInDocumentz!Utilities.getLastObjectInDocumentw  s    //>>rg   c                 |    t        j                  |      }|j                  dd      }|r|j                  d|      }|S )Nroledescription brailleroledescriptionr   get_attributes_dictrw   )rc   ro   	isBrailler   r   s        rf   getRoleDescriptionzUtilities.getRoleDescriptionz  s<    ,,S1YY("-3R8B	rg   c                    |r| j                  |      st        | 	  |      S d}| j                  |      sHt	        j
                  |      s3t        j                  |      }t        |j                  dd            dz
  }|S )Nlevelr   rt   )
r   r   	nodeLevelinMenur   r   r   r   intrw   )rc   ro   r   r   re   s       rf   r   zUtilities.nodeLevel  sp    ..s37$S))C K$:$:3$?005EUYYw*+Q.B	rg   c                      yr    r   s     rf   "_shouldCalculatePositionAndSetSizez,Utilities._shouldCalculatePositionAndSetSize  s    rg   c                     | j                  |      }| j                  |      }|	||dz
  |fS | j                  |      rt        |   |fi |S y)Nrt   )r   r   )getPositionInSet
getSetSizer   r   getPositionAndSetSize)rc   ro   argsposinsetsetsizere   s        rf   r   zUtilities.getPositionAndSetSize  sa    ((-//#&G$7a<((223770===rg   c                    t        j                  |d      }|j                  d      }|t        |      S t	        j
                  |      r~|j                  d      }|^t        j                  |      rIt        j                  |t        j                        }t        j                  |d      j                  d      }|t        |      S y )NFr  rowindex)	r   r   rw   r   r   is_table_rowr   find_descendantis_table_cell_or_header)rc   ro   r   positionr  cells         rf   r   zUtilities.getPositionInSet  s    ,,S%899Z(x= ##C(yy,HH$<$<S$A//[5X5XY#77eDHHT#8}$rg   c                     t        j                  |d      }|j                  d      }|t        |      S t	        j
                  |      r/t        j                  t        j                  |            }|dk7  r|S y )NFr  r   )	r   r   rw   r   r   r  r   get_row_count	get_table)rc   ro   r   r  rowss        rf   r   zUtilities.getSetSize  sj    ,,S%8))I&w<##C((():):3)?@Drzrg   c                 N    t        j                  |      }|j                  d      S )Nidr   rc   ro   r   s      rf   _getIDzUtilities._getID  s     ,,S1yyrg   c                 P    t        j                  |      }|j                  dd      S )Ndisplayr   r   r  s      rf   _getDisplayStylezUtilities._getDisplayStyle  s#    ,,S1yyB''rg   c                 N    t        j                  |      }|j                  d      S )Ntagr   r  s      rf   _getTagzUtilities._getTag  s!    ,,S1yyrg   c                 l    t        j                  |      }|j                  dd      j                         S )Nz	xml-rolesr   )r   r   rw   splitr  s      rf   _getXMLRoleszUtilities._getXMLRoles  s,    ,,S1yyb)//11rg   c                     |s"t        j                         j                         }| j                  |      ryt        |   |      S NF)r   r   r   r   r   inFindContainerrc   ro   re   s     rf   r  zUtilities.inFindContainer  s>    **,??AC!!#&w&s++rg   c                 x    | j                  |      syt        j                  |      ry| j                  |d       S r  )isTextBlockElementr   get_nametreatAsTextObjectr   s     rf   isEmptyzUtilities.isEmpty  s:    &&s+S!))#u555rg   c                 R    t        j                  |d      }|j                  dd      S )NFhiddenr   r  s      rf   isHiddenzUtilities.isHidden  s%    ,,S%8yy5))rg   c                 L    |rsy|k(  ryt        j                  |fd      S )NFTc                     | k(  S r   r   )xparents    rf   <lambda>z%Utilities._isOrIsIn.<locals>.<lambda>  s    qF{ rg   r   r   )rc   r   r+  s     `rf   	_isOrIsInzUtilities._isOrIsIn  s)    &F?%%e-BCCrg   c                    | j                  |      st        | 	  |      S | j                  |      ryt	        j
                  |      r+t	        j                  |      rt        j                  |      syt        j                  |      | j                         v r'| j                  |      }t	        j                  |      ryt        | 	  |      S NFT)r   r   
isTextArear   r   is_combo_boxis_editabler   r   get_role_textBlockElementRolesr   )rc   ro   r   re   s      rf   r1  zUtilities.isTextArea  s    %%c*7%c**;;s##C(&&s+++C0S!T%@%@%BB005H&&x0w!#&&rg   c                     t        j                  |      syt        j                  |      ryt        j                  |      xr t        j                  |       S r0  )r   r   is_read_onlyr   r3  r   s     rf   isReadOnlyTextAreazUtilities.isReadOnlyTextArea  sH    ##C(##C('',Q[5L5LS5Q1QQrg   c                 ^    | j                  ||       | j                  j                  |       y r   )r   r{   updateBraille)rc   ro   characterOffsets      rf   setCaretOffsetzUtilities.setCaretOffset  s$    c?3""3'rg   c                 *   |s| j                         \  }}| j                  ||      \  }}|rdt        j                  ||      d   j	                         r=| j                  ||      \  }}t        j                  ||      d   j	                         r=||fS r   )r   findNextCaretInOrderr   get_character_at_offsetisspace)rc   ro   rp   	skipSpacenextobj
nextoffsets         rf   nextContextzUtilities.nextContext  s    ..0KC"77VD00*EaHPPR&*&?&?&T# 00*EaHPPR 
""rg   c                 *   |s| j                         \  }}| j                  ||      \  }}|rdt        j                  ||      d   j	                         r=| j                  ||      \  }}t        j                  ||      d   j	                         r=||fS r   )r   findPreviousCaretInOrderr   r?  r@  )rc   ro   rp   rA  prevobj
prevoffsets         rf   previousContextzUtilities.previousContext  s    ..0KC";;CH00*EaHPPR&*&C&CGZ&X# 00*EaHPPR 
""rg   c                     d}| j                        rt        j                        dz
  }fd}}|r+| j                  ||      \  }}|r ||      s	 ||fS ||}}|r+||fS )Nr   rt   c                 D    | k(  xs t        j                  | fd      S )Nc                     | k(  S r   r   )r*  roots    rf   r,  z:Utilities.lastContext.<locals>._isInRoot.<locals>.<lambda>'  s    AI rg   r-  )orM  s    rf   	_isInRootz(Utilities.lastContext.<locals>._isInRoot&  s     9N 6 6q:M NNrg   )r#  r   get_character_countrD  )rc   rM  rp   rO  ro   lastobj
lastoffsets    `     rf   lastContextzUtilities.lastContext!  s    !!$'//59F	O "&"2"23"?GZ	' 2 F{ ":C	  F{rg   c                     ||k(  ry|\  }}|\  }}| j                  |||dz         }| j                  |||dz         }| j                  ||      S )NTrt   
getExtentsextentsAreOnSameLine)	rc   abaObjaOffsetbObjbOffsetaExtentsbExtentss	            rf   contextsAreOnSameLinezUtilities.contextsAreOnSameLine2  s]    6gg??4'A+>??4'A+>((8<<rg   c                 ,   | |k(  ry| \  }}}}|\  }}}	}
|dk(  r|dk(  r||cxk  xr ||
z   k  S c S |	dk(  r|
dk(  r||cxk  xr ||z   k  S c S t        ||z   ||
z         }t        ||      }||k\  ry||dz  z   }||
dz  z   }t        ||z
        |kD  ryy)NTr   F   )minmaxabs)rX  rY  
pixelDeltaaXaYaWidthaHeightbXbYbWidthbHeighthighestBottom	lowestTopaMiddlebMiddles                  rf   rW  zUtilities.extentsAreOnSameLine<  s    6"#B"#BQ;7a<+rG|++++Q;7a<+rG|++++BL"w,7BK	%w{"w{"w !J.rg   c                 D   |sg dS g d}| j                  |      rd|cxk  r|k  rn nt        j                  |||      }|j                  |j                  |j
                  |j                  g}|d   rj|d   re|d   dk(  r]|d   dk(  rUt        j                  |||      j                         r0d|d|d|d	|g}t        j                  t        j                  |d
       n|S t        j                  |      }t        j                  |      st        j                   |      r@t        j"                  |      st        j$                  |      rt'        j(                  |      }nt'        j(                  |      }|j                  |j                  |j
                  |j                  gS )N)r   r   r   r   r   rt   rb     z&WEB: Suspected bogus range extents forz(chars:rs   z):T)r#  r   get_range_rectr*  ywidthheightget_substringstripr   ry   rz   r   rv   r   is_menuis_list_itemr2  is_list_boxr   get_rect)	rc   ro   startOffset	endOffsetresultrectr   r+  exts	            rf   rV  zUtilities.getExtentsU  sT   !!#&1+Gi+G((k9EDffdffdjj$++>FayVAY6!9>fQi1n''[)DJJLBy+sItVU!!%"2"2FDA$$S)$(@(@(E))&1[5L5LV5T&&v.C&&s+Csuucii44rg   c                 X    |rt        j                  |      sy| j                  |      ryyr0  )r   r   isMathTopLevelr   s     rf   _preserveTreezUtilities._preserveTreen  s)    005s#rg   c                    | j                  |      st        | 	  |||      S | j                  |      r+d|dg}t	        j
                  t        j                  |d       y| j                  |      sy| j                  |      rJ| j                  j                  j                  |      }| j                  j                  j                  |      S t        | 	  |||      j                         S )NzWEB: not expanding EOCs:zhas grid descendantTr   )r   r   
expandEOCshasGridDescendantr   ry   rz   r#  r  r{   speechGeneratorgenerateSpeechutterancesToStringrz  )rc   ro   r  r  r   
utterancesre   s         rf   r  zUtilities.expandEOCsw  s    %%c*7%c;	BB!!#&0#7LMFe..=%%c*c"55DDSIJ<<//BB:NNw!#{I>DDFFrg   c                     | j                  |      st        | 	  |||      S | j                  |      rt	        j
                  |||      S y)Nr   )r   r   	substringr#  r   ry  )rc   ro   r  r  re   s       rf   r  zUtilities.substring  sK    %%c*7$S+yAA!!#&''[)DDrg   c                    | j                   j                  t        |            xs i }||v r|j                  |      S t        	|   |||      }t        j                  |d      }| j                  j                  j                         D ]  }|j                  |      }|||d   |<     ||i| j                   t        |      <   |S NFr   )
r   rw   rx   r   textAttributesr   r   r{   attributeNamesDictkeys)
rc   accrp   get_defaultsattrsForObjr   objAttributesrn   r   re   s
            rf   r  zUtilities.textAttributes  s    ,,00c;Ar[ ??6**&sFLA 44S%@<<22779 	&C!%%c*E  %a	&
 .4ENtCy)rg   c                 <    |dk(  r|dk(  rd}t         |   ||      S )Njustificationjustifyfill)r   localizeTextAttribute)rc   rn   r   re   s      rf   r  zUtilities.localizeTextAttribute  s)    /!ey&8Ew,S%88rg   c                     g }|D ]9  } | j                   |dd  }|D ]   \  }}}}}	|j                  |d   |||g       " ; |S )Nr   rt  )splitSubstringByLanguagerk   )
rc   contentsr   contentr  startendstringlanguagedialects
             rf   adjustContentsForLanguagez#Utilities.adjustContentsForLanguage  sh     	<G1D1171Q<@E9> <5sFHg		71:uc6:;<	<
 	rg   c                 4   t         
|   |||      }|s||S t        j                  |      }|| j	                  |      s|S t        j                  |      }t        j                  |      }| j                  |||      \  }}	|j                  dd||	f       |S Nr   rt   )
r   'getLanguageAndDialectFromTextAttributesr   rv   r   r   get_link_start_offsetget_link_end_offset!getLanguageAndDialectForSubstringrk   )rc   ro   r  r  r   r+  r  r  r  r  re   s             rf   r  z1Utilities.getLanguageAndDialectFromTextAttributes  s    W<S+yYI $$S)>!7!7!?I11#6--c2 BB65RUV'
		1a7+,	rg   c                 l   |r|syt        d|      }|D cg c]  }|d   |k(  s| }}|D cg c]  }|d   |cxk  r	|d   k  sn n| }}|r |d   r|d   |v r|j                  |d         S |s:|D cg c]  }||d   k(  s| }}|r |d   r|d   |v r|j                  |d         S | j                  |      syt        j                  ||      }|rK| j                  |      s:|D cg c]  }|d   |k(  s| }}t        |      dk(  r|j                  |d         S yc c}w c c}w c c}w c c}w )Nr   r   rt   rb  )rd  indexr!  r   get_child_at_offsetr   )	rc   ro   rp   r  
usingCacher*  matchesmatchr   s	            rf   findObjectInContentszUtilities.findObjectInContents  sK   (Q&6!A$#+166#=qqtv'<!'<==U1X%(h"6>>%(++ ':16QqT>Q:E:qeAh(&:~~eAh//&&s+//V<007"*<Qademq<G<7|q ~~gaj11% 7= ; =s-   D"D"D'D'6D,D,+D19D1c                    t         |   |      }|r| j                  |      s|S |r| j                  |      sy | j                  |      | j                  |      k7  ry d|d|dg}t	        j
                  t        j                  |d       |S )NzWEB: Previous object foris.T)r   findPreviousObjectr   getTopLevelDocumentForObjectr   ry   rz   rc   ro   r  r   re   s       rf   r  zUtilities.findPreviousObject  s    +C0..s3M411&9,,V48Y8YZ]8^^,c4E%**FD9rg   c                    t         |   |      }|r| j                  |      s|S |r| j                  |      sy | j                  |      | j                  |      k7  ry d|d|dg}t	        j
                  t        j                  |d       |S )NzWEB: Next object forr  r  T)r   findNextObjectr   r  r   ry   rz   r  s       rf   r  zUtilities.findNextObject  s    ',..s3M411&9,,V48Y8YZ]8^^(#tVSA%**FD9rg   c           	         | j                   j                  t        |            }||S t        j                  j
                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  g	}t        j                  |      }||v rd}n|t        j                  j                   k(  r*t#        j$                  t        j&                  |             }nG|t        j                  j(                  k(  r*t#        j*                  |      rd}n| j-                  |       }|| j                   t        |      <   |S r   )rE   rw   rx   r   r_   	CHECK_BOXCHECK_MENU_ITEMMENU	MENU_ITEMPAGE_TABRADIO_MENU_ITEMRADIO_BUTTONPUSH_BUTTONTOGGLE_BUTTONr   r4  ra   r   is_listrv   
TABLE_CELLr3  r!  )rc   ro   r   rolesroles        rf   isNonEntryTextWidgetzUtilities.isNonEntryTextWidget  s?   ''++DI6>I%%++%%$$++((''))+   %5=BUZZ))) (()<)<S)ABBBUZZ***&&s+005502""49-	rg   c                 t   |rt        j                  |      ry| j                  j                  t	        |            }||S t        j
                  |      sy| j                  |      r| j                  j                         ryt        j                  |      dkD  xs t        j                  |      }|rf| j                  |d      rTt        j                  |      r?| j                  |      s.d|dg}t!        j"                  t         j$                  |d       d}n|r| j'                  |      sqt(        j*                  j,                  g}t        j.                  |      }|r0||v r,d|dg}t!        j"                  t         j$                  |d       d}|r?|r=| j1                  |      r,d|dg}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|dg}t!        j"                  t         j$                  |d       d}|| j                  t	        |      <   |S )NFTr   r   zWEB: Treatingz+as non-text: named object treated as whole.zas 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_deadrV   rw   rx   supports_textr   r{   browseModeIsStickyr   rP  r   r3  _treatObjectAsWholer"  isCellWithNameFromHeaderr   ry   rz   isLiveRegionr   r_   LIST_BOXr4  r  r'  isOffScreenLabelisNonNavigableEmbeddedDocumentisFakePlaceholderForEntry)rc   ro   excludeNonEntryTextWidgetsr   r   
doNotQueryr  s          rf   r#  zUtilities.treatAsTextObject  s[   h&&s+$$((c3>I%%c*%%c*dll.M.M.O'',q0PK4K4KC4P$**338I8I#8N11#6%s,YZFe..=B))#.**--.J$$S)Ddj()30JK!!%"2"2FDA0T5N5Ns5S)30XY!!%"2"2FDAt}}S)T-B-B3-G)30]^!!%"2"2FDAd99#>)30bc!!%"2"2FDAd44S9)30]^!!%"2"2FDA-/S	*	rg   c                    |r| j                  |      sy| j                  j                  t        |            }||S d}| j	                  |      rUt        j                  |      r@t        j                  |      D ]&  }| j                  |      r| j                  |      s& n d}|r*d|dg}t        j                  t        j                  |d       || j                  t        |      <   |S )NFTWEB:z*has name and action and no useful children)r   rJ   rw   rx   hasExplicitNamer   supports_actionr   isUselessEmptyElementisUselessImager   ry   rz   )rc   ro   r   r   r   s        rf   #hasNameAndActionAndNoUsefulChildrenz-Utilities.hasNameAndActionAndNoUsefulChildrenF  s    ..s366::49E>I$)A)A#)F!//4 11%8D<O<OPU<V c#OPFe..=?A11$s)<	rg   c           	         |r| j                  |      sy| j                  j                  t        |            }||S t	        j
                  |      }d}| j                         }|j                  t        j                  j                  t        j                  j                  g       ||v rt        j                  |      st        j                  j                  t        j                  j                  t        j                  j                   t        j                  j"                  t        j                  j$                  t        j                  j&                  t        j                  j(                  t        j                  j*                  t        j                  j,                  g	t	        j.                  |fd      }|| j                  t        |      <   |S )NFc                 2    t        j                  |       v S r   r   r4  )r*  controlss    rf   r,  z?Utilities.isNonInteractiveDescendantOfControl.<locals>.<lambda>s  s    x7H7H7Kx7W rg   )r   r9   rw   rx   r   r4  r5  extendr   r_   IMAGECANVASr   r   r  r  r  r  r  r  r  r  	TREE_ITEMr   )rc   ro   r   r  r  r  s        @rf   #isNonInteractiveDescendantOfControlz-Utilities.isNonInteractiveDescendantOfControl]  s@   ..s366::49E>I  %++-ejj&&

(9(9:;5=!9!9#!>

,,

22

++

,,

22

//

..

00

,,.H ''-WXB?A11$s)<	rg   c           	         t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j
                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  g	}t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  g}t        j                   |      }||v ry||v r | j"                  j%                         ry|dk(  S |t         j                  j&                  k(  r?t        j(                  |      dk(  r&| j+                  t        j,                  |d            ryyt/        j0                  |      ry|t         j                  j2                  k(  r>| j5                  |      r| j"                  j7                          S | j9                  |      ry|t         j                  j:                  t         j                  j<                  fv r| j?                  |      ry|t         j                  j@                  k(  ry|t         j                  jB                  t         j                  jD                  t         j                  jF                  fv r| j"                  j7                          S |t         j                  jH                  k(  r$| j?                  |      xs | jK                  |      S | jM                  |      ry| j+                  |      ry| jO                  |      ry|| jQ                         v rTt/        jR                  |      r?| j?                  |      r.t        jT                  |      D ]  }| jW                  |      r y yy)NTr   rt   r   F),r   r_   r  r  r  r  r  r  r  r  r  r  MENU_BARTOOL_BARr  r   r4  r{   r   ENTRYr   r  r   r   r3  r  isFocusModeWidgetr  r  COLUMN_HEADER
ROW_HEADERr  	COMBO_BOXEMBEDDEDTREE
TREE_TABLELINKhasUselessCanvasDescendantr  isCustomImager5  r   r   r  )rc   ro   rp   alwaysdescendabler  r   s          rf   r  zUtilities._treatObjectAsWholex  s   **&&**,,**%%**&&**%%**,,**))**((****, zzzz**zz**zz++-
   %6>;||'') R<5::###'',1001C1CC1KL""3'5::(((%%c*<<::<<<77<EJJ,,ejj.C.CDD##C(5::'''EJJ''%**:O:OPP||668885::??"'',T0O0OPS0TT..s3))#.c" 4..00[5M5Mc5R##C(!//4 !11%8 ! rg   c                    t        j                  |      }t        j                  d|      D cg c]  }|j	                          }}dt        |      }}|D ]%  }|d   |cxk  r	|d   k  sn |d   |d   dz   }} n ||| ||fS c c}w )Nz)\S*[^\.\?\!]+((?<!\w)[\.\?\!]+(?!\w)|\S*)r   rt   )r   get_all_textrefinditerspanr   )	rc   ro   rp   textmspans
rangeStartrangeEndr  s	            rf   __findSentencezUtilities.__findSentence  s    ""3'#%;;/[]a#bcacc #d)H
 	DAw&+DG+'+AwQ!H
	 Jx(*h>> ds   Bc                 ,     fd}|s2d| d|d|ddg}t        j                  t         j                  |d       y j                  |      s2d| d|d|dd	g}t        j                  t         j                  |d       y
t	        j
                  |      }|W|dt        |      }	}} ||      }
d| d|d|dd|
 d| d|	 dg}t        j                  t         j                  |d       |||	fS |t        j                  j                  k(  rt        j                  |      st        j                  |      t        j                  j                  t        j                  j                   fv s't#        j$                  d|      r j'                  |      sW|dt        |      }	}} ||      }
d| d|d|dd|
 d| d|	 dg}t        j                  t         j                  |d       |||	fS |t        j                  j(                  k(  rC j+                  ||      r1|dz  }d|d|dg}t        j                  t         j                  |d       t-        d|      }|t        j                  j(                  k(  rt	        j.                  ||      \  }}}	n|t        j                  j                  k(  rt	        j0                  ||      \  }}}	n|t        j                  j2                  k(  rt	        j4                  ||      \  }}}	nR|t        j                  j6                  k(  rt	        j8                  ||      \  }}}	nt	        j.                  ||      \  }}}	 ||      }
d| d|d|dd|
 d| d|	 dg}t        j                  t         j                  |d       |t        j                  j                  k(  xr |xr |||	fdk(  }|rV j;                  ||      \  }}} ||      }
dd|
 d| d| dg}t        j                  t         j                  |d       |||fS |||	fS )Nc                 \    | j                  j                  d      j                  dd      S )Nz[OBJ]
\n)replaceEMBEDDED_OBJECT_CHARACTERr*  rc   s    rf   stringForDebugz2Utilities._getTextAtOffset.<locals>.stringForDebug  s(    99T;;WEMMdTYZZrg   zWEB: Text at offset z forusing:z#'', Start: 0, End: 0. (obj is None)T)r   r   r   z:'', Start: 0, End: 1. (treatAsTextObject() returned False))r   r   rt   r   'z
', Start: z, End: r  z\wrt   zWEB: Line sought forz#at end of text. Adjusting offset toz7HACK: Attempting to recover from above failure. Result:)r   ry   rz   r#  r   r  r   r   TextBoundaryTypeSENTENCE_STARTr   r3  r   r4  r_   ra   HEADINGr  searchr!  
LINE_STARTtreatAsEndOfLinerd  get_line_at_offsetget_sentence_at_offset
WORD_STARTget_word_at_offsetCHARr?  _Utilities__findSentence)rc   ro   rp   boundaryr  r   allTextr  r  r  sneedSadHack	sadStringsadStartsadEnds   `              rf   _getTextAtOffsetzUtilities._getTextAtOffset  s5   	[ ,VHD93SV;=Fe..=%%c*,VHD93SVRTFe..=%%c*!(!S\3EFv&A,VHD93SV!JugWSE;=Fe..=5#%%u--<<<[E\E\]`Ea  %%***>*>

@R@R)SSyy0T5L5LS5Q%,aWs"6*0=sGXWZaS
5'Q?A!!%"2"2FDAuc))u--888T=R=RSVX^=_aKF,c3Xc#Fe..=Q u--888!'!:!:3!GFE3//>>>!'!>!>sF!KFE3//:::!'!:!:3!GFE3//444!'!?!?V!LFE3!'!:!:3!GFE36"(5sGXsaS
5'Q79%**FD9 %"8"8"G"GG 2G 2s#z1 	 *.*=*=c6*J'Ixy)AO!JxjxqACFe..=h..uc!!rg   c                 ,   d||g}t        j                  t         j                  |d       |sg S |t        j                  j
                  k(  r8| j                  |      r't        j                  |      }|r|dt        |      |ggS |t        j                  j                  k(  r| j                  |      r,| j                  |      r|}n| j                  |      }|dddggS | j                  |      }| j                  |      rt!        j"                  |      rY|rWd|dg}t        j                  t         j                  |d       |dt        j$                  |      t!        j"                  |      ggS d|dg}t        j                  t         j                  |d       d }| j'                  |      rt!        j"                  |      rY|rWd|d	g}t        j                  t         j                  |d       |dt        j$                  |      t!        j"                  |      ggS d|d	g}t        j                  t         j                  |d       d }t)        j*                  |      r?t!        j,                  |      dk(  r'| j/                  t!        j0                  |d      d|      S | j3                  |||      \  }}}	|s|||	|ggS ||z
  	 |   }
|
| j4                  k(  r+t7        j8                  ||      }|r| j/                  |d|      S t?        j@                  d|      D cg c]  }|jC                          }}tE        tG        fd|            }t        |      dk(  r |d   \  }}||z  }||| }|t        |      z   }	|t        j                  jH                  t        j                  jJ                  fv r|||	|ggS | jM                  |||	|gg      S # t:        $ r;}d
 d| d| }t        j<                  t         j                  |d       Y d }~	d }~ww xY wc c}w )Nz#WEB: Attempting to get contents forTr   rt   r   z#WEB: Returning name as contents forz(single-char lines)z'WEB: Returning all text as contents forz(single-word lines)zWEB: Could not get char z for 'z': u   [^￼]+c                 0    | d   cxk  xr | d   k  S c S r  r   )r*  stringOffsets    rf   r,  z.Utilities._getContentsForObj.<locals>.<lambda>V  s    !(D!(D (D rg   )'r   ry   rz   r   r  r  isTimer   r  r   r  isMathr  getMathAncestorr#  elementLinesAreSingleCharsr   r"  rP  elementLinesAreSingleWordsr   is_internal_framer   _getContentsForObjr   r"  r	  r   r  r   r   r  r  r  r   r   r  r  r  )rc   ro   rp   r  r   r  mathtreatAsTextr  r  charr   errorr   r  rangesstringsr  r  r%  s                      @rf   r,  zUtilities._getContentsForObj  s   7hG%**FD9Iu--<<<SAQ((-FaVf566u--888{{3&&s+D//4Dq!R())005K..s3$$S)kCSJ_`F%%e&6&6E !V%?%?%DhFWFWX[F\]^^CSJ_`!!%"2"2FDA..s3$$S)kCSJ_`F%%e&6&6E !V%?%?%DhFWFWX[F\]^^CSJ_`!!%"2"2FDA((-(2J2J32OST2T**8+=+=c1+Eq(SS!223Is%f-..~		G,'D
 t555#77VD225!XFF$&KKf$EFq!&&(FFvDfMNw<1#*1: JZEJx0F#f+%C..995;Q;Q;V;VWW%f-..--UC/H.IJJ)  	<,\N&E7SCu//d;;	< Gs   O
 P
	P0P		Pc                 H    i | _         | j                  |||      }i | _         |S r   )r   _getSentenceContentsAtOffsetrc   ro   rp   useCacher   s        rf   getSentenceContentsAtOffsetz%Utilities.getSentenceContentsAtOffsetb  s+    ,.)..sFHE,.)	rg   c                 F    |sg S t        d|      }|r. j                  || j                  d      dk7  r j                  S t        j                  j
                  } j                  |||      t        j                  |      r*t        j                  |      rS  j                  |      rS  fd}d   \  }}}}	|r|	rމ j                  |      r|dk(  r>nǉ j                  t        j                  |            rt        j                  |      dk(  rn j!                  ||      \  }
} j                  |
||      }t#        t%        fd|            }t#        t%        ||            }|r|j'                  |d         }||dz   d  }|sn|dd d   \  }}}}	|r|	r |d         smd   \  }}}} j)                  ||dz
        \  }} j                  |||      }t#        t%        fd|            }|snj+                  |        |d         sm|r _        S )	Nr   Tr  r   c                 ,   | \  }}}}j                  |      syj                  |      r dt        j                  |      cxk  r|k  ry d|cxk  rdk  r%n n"dj	                  |j                         dd        }t        j                  d|      }|d uS )NFr   T    rt   z\S[\.\!\?]+(\s|\Z))r!  r#  r   rP  joinr  r  r  )r*  xObjxStartxEndxStringr  rc   s         rf   _treatAsSentenceEndzCUtilities._getSentenceContentsAtOffset.<locals>._treatAsSentenceEnd{  s    *+'D&$**40%%d+F4N4Nt4T0\X\0\ 1] Fa((7==?12#67II3W=E$$rg   c                     | vS r   r   r*  objectss    rf   r,  z8Utilities._getSentenceContentsAtOffset.<locals>.<lambda>  s    1G+; rg   rt   c                     | vS r   r   rD  s    rf   r,  z8Utilities._getSentenceContentsAtOffset.<locals>.<lambda>  s    AW,< rg   )rd  r  rY   r   r  r  r,  r   r3  
is_focused$isContentEditableWithEmbeddedObjectsr!  r   rv   r   r   rF  r   r   r  r>  r  )rc   ro   rp   r6  r  rB  firstObj
firstStartfirstEndfirstStringprevObjpOffsetonLeft
endsOnLeftilastObj	lastStartlastEnd
lastStringr   nOffsetonRightrE  s   `                     @rf   r4  z&Utilities._getSentenceContentsAtOffseth  s?   IQ((!>!>4 ) QTVW444))88))#vx@""3'%%c*88=	% 7>aj3*h;&&x0?(()<)<X)FG==hG1L#<<XzRGW,,WgxHF&!;VDEFf%8&ABJLLB0!!GAaL:A!*7Hj(K) ;. &gbk26=bk3GY#88'A+NGW--gwIG6"<gFGGNN7# &gbk2 ,3D)rg   c                 H    i | _         | j                  |||      }i | _         |S r   )r   _getCharacterContentsAtOffsetr5  s        rf   getCharacterContentsAtOffsetz&Utilities.getCharacterContentsAtOffset  s+    ,.)//VXF,.)	rg   c                     |sg S t        d|      }|r.| j                  ||| j                  d      dk7  r| j                  S t        j                  j
                  }| j                  |||      }|r|| _        |S )Nr   Tr9  r   )rd  r  r\   r   r  r  r,  )rc   ro   rp   r6  r  rE  s         rf   rY  z'Utilities._getCharacterContentsAtOffset  s    IQ((!?!?D ) RUWX555))..))#vx@-4D*rg   c                 H    i | _         | j                  |||      }i | _         |S r   )r   _getWordContentsAtOffsetr5  s        rf   getWordContentsAtOffsetz!Utilities.getWordContentsAtOffset  s+    ,.)**3A,.)	rg   c                     |sg S t        d|      }|rL j                  || j                  d      dk7  r* j                  || j                  d        j                  S t        j
                  j                  } j                  |||       j                  |||dz          fd}d   \  }}}}	 j                  ||      \  }
}|
r|	r|
|k7  rt        j                  |
|      d   }|r|j                         rn j                  |
||      }t        t        ||            }|snW j                  d   |d         rj!                  d       |dd d   \  }}}}	 j                  ||      \  }
}|
r|	r|
|k7  rd   \  }}}}|r|r|d   j                         s j#                  ||dz
        \  }}||k(  rn} j                  |||      }|r j                  d   |d         r|dd }t        t        ||            }|sn3j%                  |       d   \  }}}}|r|r|d   j                         sd   \  }}}}	|dk(  rt'        j(                  |      rd   g|r _         j                  ||d       S )	Nr   Tr9  r   zWord (cached)rt   c                 |    | v ry| \  }}}}||k(  s|syj                  |||dz         }j                  |      S )NFrt   rU  )	r*  r>  r?  r@  rA  xExtentsextentsrE  rc   s	         rf   _includez4Utilities._getWordContentsAtOffset.<locals>._include  sP    G|*+'D&$~WtVVaZ@H,,Wh??rg   zWord (not cached))rd  r  r[   _debugContentsInfor   r  r  r,  rV  rF  r   r?  r@  r   r   _contentIsSubsetOfrl   r>  r  r   r|  )rc   ro   rp   r6  r  rc  rI  rJ  rK  rL  rM  rN  r/  rO  rR  rS  rT  rU  r   rV  rW  rb  rE  s   `                    @@rf   r]  z"Utilities._getWordContentsAtOffset  s   IQ((!:!:t ) MPRS''VT5N5NP_`000))44))#vx@//#vvz:		@ 7>aj3*h88:N+'X*=11'7CAFD4<<>,,WgxHF&623F&&wqz6":>A!GAaL:A!*7Hj(K#<<XzRGW +'X*=$ 3:"+/GZ*Z^-C-C-E#88'A+NGW'!--gwIG42271:wr{K!!B-6(G45GNN7#6=bk3GY *Z^-C-C-E" 7>aj3*h?{77AqzlG(/D%VW6IJrg   c                 H    i | _         | j                  |||      }i | _         |S r   )r   _getObjectContentsAtOffsetr5  s        rf   getObjectContentsAtOffsetz#Utilities.getObjectContentsAtOffset  s+    ,.),,S&(C,.)	rg   c                 `    sg S t        j                        r)d}t        j                  t        j                  |d       g S t        d|      }|rL j                  | j                  d      dk7  r* j                  | j                  d        j                  S  j                        fd fd} j                  |d       s/d	d
| g}t        j                  t        j                  |d       g S d   \  }}}	}
 j                  ||	dz
        \  }}|rg j                  ||d       }t        t        ||            }|sn<j                  |       d   d   d   d   }	} j                  ||	dz
        \  }}|rg|r _         j                  |d       S )Nz<ERROR: Cannot get object contents at offset for dead object.Tr   r9  r   zObject (cached)c                 L    | sy| k(  ry t        j                  |             S r0  )r   rv   )r*  _isInObjectro   s    rf   rk  z9Utilities._getObjectContentsAtOffset.<locals>._isInObject5  s)    Cxx221566rg   c                 j    | v ry| \  }}}}||k(  ryr	j                  |      r|k7  ry |      S r  )
isLandmark)
r*  r>  r?  r@  rA  rk  ro   objIsLandmarkrE  rc   s
        rf   rc  z6Utilities._getObjectContentsAtOffset.<locals>._include<  sG    G|*+'D&$~!63$;t$$rg   z%ERROR: Cannot get object contents forz
at offset rt   rb  zObject (not cached))r   r  r   r   rz   rd  r  rX   rd  rm  r,  ry   r>  r   r   r  )rc   ro   rp   r6  r   rc  r   rR  rS  rT  rU  r   rV  rW  rk  rn  rE  s   ``            @@@rf   rg  z$Utilities._getObjectContentsAtOffset!  s   IC PCu//d;IQ((!<!< ) ORTU''!<!<>OQ222,	7	% 	% ))#vt<=sjQWPXDYZFe..=I29"+/GZ44WgkJ--gwEG6(G45GNN7#&r{1~wr{1~WG#88'A+NGW  *1D'VW6KLrg   c                     |\  }}}}|\  }}}	}
||k(  r;t        t        ||            }t        t        ||	            }|j                  |      S yr  )setrangeissubset)rc   contentAcontentBobjAstartAendAstringAobjBstartBendBstringBsetAsetBs                rf   re  zUtilities._contentIsSubsetOfa  sY    &.#fdG&.#fdG4<uVT*+DuVT*+D==&&rg   c                    t         j                  t         j                  k  ry d|d|d|dg}t        j                  t         j                  |d       d}t	        |      D ]}  \  }\  }}	}
}	 | j                  ||	|
      }d	| d
|	 d|
 d| d| d}|t        j                  t         j                  ||      z  }t        j                  t         j                  |d        y # t        $ r}d| d}Y d }~vd }~ww xY w)NWEB: for	at offsetr  Tz        z(exception: )z     z	. chars: -z: 'z
' extents=r  )	r   rz   
debugLevelry   	enumeraterV  r   getAccessibleDetailsr   )rc   ro   rp   r  contentsMsgr   indentrQ  r  r  r  r  rb  r0  r   s                  rf   rd  zUtilities._debugContentsInfok  s   e...;sKM%**FD9,5h,? 	<(A(UC2//#uc: !IeWAcU#fXZyPRSC5--e.>.>VLLCu//d;	<  2(q12s   *C	C8(C33C8c                 4   | j                  |      syt        j                  |      sy| j                  |      ry|t	        j
                  |      k(  r-d|d|dg}t        j                  t        j                  |d       yt	        j                  ||      d   }|| j                  k(  rq| j                  ||dz
  |      }| j                  |||dz         }| j                  ||      }d|d|d|d	| g}t        j                  t        j                  |d       | S y)
NFr  rp   z(is end of line: offset is characterCountTr   rt   zis [obj]. Same line: zIs end of line: )rH  r   r  r   r   rP  r   ry   rz   r?  r	  rV  rW  )rc   ro   rp   r   r/  prevExtentsthisExtentssameLines           rf   r  zUtilities.treatAsEndOfLine|  s   88=%%c*??3V//44sHf6`aFe..= --c6:1=4111//#vz6BK//#vvzBK00kJHsHf6M 2LBFe..=<rg   c                 J    i | _         | j                  ||||      }i | _         |S r   )r   _getLineContentsAtOffset)rc   ro   rp   
layoutModer6  r   s         rf   getLineContentsAtOffsetz!Utilities.getLineContentsAtOffset  s-    ,.)**3
HM,.)	rg   c                 h    !" t        j                          }sg S t        j                        r)d}t        j                  t        j
                  |d       g S t        d|      }t        j                        st        j                        r- j                        st        j                  |      }|r|d}|rL j                  | j                  d      dk7  r* j                  | j                  d        j                  S |?t!        j"                         j%                  d      xs  j&                  j)                         }g "|dkD  r) j+                  |      r j-                  |dz
  |       n j-                  ||dz           j/                        r& j1                        }|r j-                  |dd       t        j2                   j4                        ! !" fd	}	t6        j8                  j:                  }
 j=                  ||
      "|s|r" _         j                  |"d
       "S "r"d   s+dg}t        j>                  t        j
                  |d       g S "d   \  }}}} d   dk(  r d   dk(  s jA                  |      r j-                  |||       "d   \  }}}} jC                  |      r jE                  |      \  }}|dz  } jG                        } jI                  ||      \  }} jK                  ||dz
        \  }}t        j                          }|r jG                  |      |k(  rtM        jN                  ||      d   }|jQ                         r jI                  ||      \  }}tM        jN                  ||      d   }|dk(  r||k(  rn j=                  |||
      }tS        tU        |	|            }|snj jW                  "d   |d         r"jY                  d       |"dd "d   d   "d   d   }} jI                  ||      \  }}|r jG                  |      |k(  rt        j                          }d||z
  dd}t        j                  t        j
                  |d       t        j                          }|r< jG                  |      |k(  r'tM        jN                  ||      d   }|jQ                         r jK                  ||      \  }}tM        jN                  ||      d   }|dk(  r||k(  rnŉ j=                  |||
      }|r jW                  "d   |d         r|dd }tS        tU        |	|            }|sn{"j[                  |       "d   d   "d   d   }} jC                  |      r jE                  |      \  }}|dz  } jK                  ||dz
        \  }}|r jG                  |      |k(  r't        j                          }d||z
  dd}t        j                  t        j
                  |d       "d   \  }}}}|dk(  rt]        "      dkD  r"jY                  d       |r" _        dt        j                          |z
  dd}t        j                  t        j
                  |d        j                  |"d       i  _/        "S )Nz:ERROR: Cannot get line contents at offset for dead object.Tr   r9  r   zLine (cached)r  rt   c                    | v ry| \  }}}}||k(  ryj                  |||dz         }	|k7  rCj                  	      rj                  |      ryj                  	      rjj                  |      rYt        j                  |j
                        }
s|r
|k7  ryt        d   |d   z
        dk  rt        d   |d   z
        dk  ryj                  	      j                  |      k7  ryt        j                  	      rt        j                  |      ryt        j                  	      rt        j                  	      ryt        j                  |      rt        j                  |      ryj                  |      sj                  	      rj                  |d         }|S j!                  |      rj                  ||d         }|S j                  |      }|S )NFrt   r   rt  )rV  rm  r   r   r   isLandmarkBannerre  isBlockListDescendantr   is_tree_relatedr   r   has_no_sizer  r'  rW  isTextSubscriptOrSuperscript)r*  r>  r?  r@  rA  ra  
xObjBanner
onSameLinerb  ro   	objBannerrE  rc   s           rf   rc  z4Utilities._getLineContentsAtOffset.<locals>._include  s   G|*+'D&$~tVVaZ@Hd{??3'DOOD,A ;;s#D(9!)!7!7d>S>S!TJ!ZY*5L$71:349c'!*xXY{BZ>[_`>`$//48R8RSW8XX  005+:U:UVZ:[  ++C0[5L5LS5Q  ++D1k6M6Md6S ""4(DKK,<!66w'RS*U

 	 2248!66w(ST+V
  "66wI
rg   zLine (not layout mode)z WEB: Error. No objects found forrb  rt  r  z)INFO: Time to get line contents on left: .4fr  z*INFO: Time to get line contents on right: z!INFO: Time to get line contents: zLine (layout mode))0timer   r  r   r   rz   rd  r   is_tool_baris_menu_barr  r   r  r  rZ   rd  r   r   
getSettingr{   r   r  rV  isInlineListDescendantlistForInlineListDescendantr   r  r   r  r  r,  ry   r'  r  rS  r   rF  r>  r   r?  r@  r   r   re  rl   r  r   r   )#rc   ro   rp   r  r6  	startTimer   r   	containerrc  r  r   rI  rJ  rK  rL  rR  rS  rT  rU  r   rM  rN  r   rV  prevStartTimer/  rO  prevEndTimenextStartTimerW  nextEndTimerb  r  rE  s#   ``                              @@@rf   r  z"Utilities._getLineContentsAtOffset  s   IIK	IC NCu//d;IQ##C(K,C,CC,H00533C@E((!:!:t ) MPRS''!:!:OM000)446AA,O .<<++-  A:$//V<ooc6A:v>Gooc66A:>G&&s+88=I//)Q:**30E0EF	#	 #	J ))44))#vx@,3)##C:RSNGAJ8#>Fe..=I6=aj3*hAJ!O
aDKK4Iooh
HEG29"+/GZw'#//8GWqLG,,S188:N44WgkJ 		$33G<H11'7CAFD||~#'#@#@'#R 11'7CAFDt|G 3,,WgxHF&623F&&wqz6":>A!GAaL#*1:a='!*Q-jH#<<XzRGW' $33G<H* iik9+:UVY9ZZ[\5++S$7 		$33G<H11'7CAFD||~#'#<#<Wg#N 11'7CAFDt|7 2--gwIG42271:wr{K!!B-6(G45GNN7#&r{1~wr{1~WG""7+#'#3#3G#< 1#88'A+NGW/ $33G<H2 iik:;;VWZ:[[\]5++S$76=aj3*h$3w<!#3KKN(/D%1$))+	2I#1NaP5++S$7VW6JK,.)rg   c                 8   || j                         \  }}d|d|g}t        j                  t        j                  |d       t	        j
                  |      sxd|dg}t        j                  t        j                  |d       | j                          | j                         \  }}d|d|g}t        j                  t        j                  |d       | j                  ||||      }|r|d   sg S |d   d   |d   d   }}d	|d|g}t        j                  t        j                  |d       | j                  |       }	| j                  |||	      \  }}|sT|rRd
|d|dg}t        j                  t        j                  |d       | j                          | j                  |||	      \  }}d
|d|g}t        j                  t        j                  |d       | j                  ||||      }
|
s-d|d|g}t        j                  t        j                  |d       g S ||
k(  rU| j                  ||d      \  }}d|d|g}t        j                  t        j                  |d       | j                  ||||      }
||
k(  rt        j                  |      }t        j                  t        j                  |d       |dk\  rjt	        j                  |      }| j                  ||d      \  }}d|d|g}t        j                  t        j                  |d       | j                  ||||      }
|
S )NWEB: Current context is: , TWEB: Current context objis not valid. Clearing cache.WEB: Now Current context is: r   rt   zWEB: First context on line is: zWEB: Previous context is: . Trying again.%WEB: Could not get line contents for &WEB: Got same line. Trying again with WEB: Trying again with)r   r   ry   rz   r   rj   r   r  elementIsPreformattedTextrI  r   r  rv   )rc   ro   rp   r  r6  r   linerI  firstOffsetrA  r  r  r+  s                rf   getPreviousLineContentsz!Utilities.getPreviousLineContentsU  s   ;..0KC-sD&A%**FD9  %0#7VWFe..=##%..0KC5sD&IFe..=++CXNaI $Q
DGAJ+3Xt[Q%**FD966x@@	**8[)LVx2CvGXYFe..=##%..xiPKC.T6B%**FD9//VZR=sD&QFe..=I8..sFDAKC>T6RFe..=33CXVH855c:Ee..=z!,,S1"2265$GV2CvF!!%"2"2FDA77VZQYZrg   c                 B   || j                         \  }}d|d|g}t        j                  t        j                  |d       t	        j
                  |      sxd|dg}t        j                  t        j                  |d       | j                          | j                         \  }}d|d|g}t        j                  t        j                  |d       | j                  ||||      }|r|d   sg S |d   d   |d   d	   d
z
  }}| j                  |      }	|	r| j                  |	      \  }}d|d|g}t        j                  t        j                  |d       | j                  |       }
| j                  |||
      \  }}|sT|rRd|d|dg}t        j                  t        j                  |d       | j                          | j                  |||
      \  }}d|d|g}t        j                  t        j                  |d       | j                  ||||      }||k(  rU| j                  ||d      \  }}d|d|g}t        j                  t        j                  |d       | j                  ||||      }||k(  rt        j                  |      }|dk\  rjt	        j                  |      }| j                  ||d      \  }}d|d|g}t        j                  t        j                  |d       | j                  ||||      }|s-d|d|g}t        j                  t        j                  |d       g S |S )Nr  r  Tr  r  r  r   r   rb  rt   zWEB: Last context on line is: zWEB: Next context is: r  r  r  r  )r   r   ry   rz   r   rj   r   r  r(  rS  r  rD  r   r  rv   )rc   ro   rp   r  r6  r   r  rR  
lastOffsetr-  rA  r  r  r+  s                 rf   getNextLineContentszUtilities.getNextLineContents  s   ;..0KC-sD&A%**FD9  %0#7VWFe..=##%..0KC5sD&IFe..=++CXNaI"2hqk48A;?##G,"&"2"24"8GZ2GT:N%**FD966w??	&&w
IFVw.T6CTUFe..=##%**7J	JKC*Cv>%**FD9//VZR8**3=KC>T6RFe..=33CXVH811#6Cax!,,S1"..vsDAV2CvF!!%"2"2FDA77VZQYZ=sD&QFe..=Irg   c                     | j                  |      st        | 	  |       y | j                  |      rt        | 	  |       y y r   )r   r   updateCachedTextSelectionhasPresentableTextr  s     rf   r  z#Utilities.updateCachedTextSelection  sA    %%c*G-c2""3'G-c2 (rg   c                 l   t        j                  |      d   }|sy |r|j                  | j                        s|S |s|j	                  | j                        s|S t        t        t        j                  |                  }|s|j                          |D ]  }| j                  ||   |      }|s|c S  y r   )r   get_selected_text
startswithr	  endswithr   rq  r   r   reverse_findSelectionBoundaryObject)rc   rM  	findStartr  indicesrQ  r  s          rf   r  z&Utilities._findSelectionBoundaryObject  s    ))$/2V..t/M/MNK1O1O!PKuX55d;<=OO 	A66tAw	JF	
 rg   c                 R    | j                  |d      }| j                  |d      }||fS r   )r  )rc   rM  obj1obj2s       rf   _getSelectionAnchorAndFocusz%Utilities._getSelectionAnchorAndFocus  s0    00t<00u=Tzrg   c                 j    |r|sg S t        j                  |      r)d}t        j                  t        j                  |d       g S d } fd}g }t        j
                  |      }t        t        j                  |      t        j                  |            D ]c  }t        j                  ||      }	 j                  |	      r+|j                  |	       |j                   j                  |	||             ||v sc n ||k(  r|S ||vr3|j                  |       |j                   j                  |||             t        j
                  |      }
t        j                  |      }t        j                  |
|dz         xs |}	 |j                  |      }||k(  r|dz  }|d | }|S # t        $ r Y |S w xY w)Nz/INFO: Cannot get subtree: Start object is dead.Tc                 
    | d uS r   r   r*  s    rf   rc  z'Utilities._getSubtree.<locals>._include  s    D= rg   c                 &    j                  |       S r   )isStaticTextLeafr
  s    rf   _excludez'Utilities._getSubtree.<locals>._exclude  s    ((++rg   rt   )r   r  r   r   rz   rv   rq  get_index_in_parentr   r   r  rk   r  findAllDescendantsr  
ValueError)rc   startObjendObjr   rc  r  subtreestartObjParentrQ  r   endObjParentendObjIndexrR  endIndexs   `             rf   _getSubtreezUtilities._getSubtree  s   VIH%CCu//d;I	!	, !,,X6x33H= 00@B 	A&&~q9E$$U+NN5!NN4225(HMN 	 XN NN6"NN42268XNO**62226:$$\;?CMv	)}}W-H & Aix(G  	 	s   F% %	F21F2c                 l     j                  |      st         	  |      S  j                  j                  j                  dd      \  }} j                  |      \  }}||f j                  j                  d<    fd} j                  ||      }||k(  r||k(  r|nJ j                  ||      }	t        t        |      j                  |	      t        j                  |            syD ]C  }
|
||||fvr)t        j                  |
fd      rt         =  |
       4t         	  |
|       E y)NselectionAnchorAndFocus)NNc                 t    j                  t        j                  |       t        j                  |            S r   )pathComparisonr   get_path)r  r  rc   s     rf   _cmpz1Utilities.handleTextSelectionChange.<locals>._cmp+  s-    &&x'8'8'>@Q@QRV@WXXrg   )rn   Fc                     | v S r   r   )r*  descendantss    rf   r,  z5Utilities.handleTextSelectionChange.<locals>.<lambda>:  s    [@P rg   T)r   r   handleTextSelectionChanger{   pointOfReferencerw   r  r  sortedrp  union	functools
cmp_to_keyr   r   r  )rc   ro   speakMessageoldStartoldEndr  r  r  
oldSubtree
newSubtree
descendantr  re   s   `          @rf   r  z#Utilities.handleTextSelectionChange"  s4   %%c*74S99 LL))--.GV 	&55c:
sDI3<%%&?@	Y %%h7
H$K))%5J Z!6!6z!B	H\H\]aHbcK% 	LJ(FE3!??))*6PQ1*=1*lK	L rg   c                 <   |s"t        j                         j                         }| j                  j	                  t        |            }||S | j                  |      }|s| j                  |      r|}| j                  |      }|| j                  t        |      <   |S r   )	r   r   r   r!   rw   rx   r   r   isTopLevelWebAppr   s       rf   inTopLevelWebAppzUtilities.inTopLevelWebAppA  s    **,??AC##''S	2>I,,S1DOOC0H""8,,.tCy)	rg   c                 <   t        j                  |      r| j                  t        j                  |            sct        j                  |      }t        |xr |j                  d            }d|d|d|dg}t        j                  t        j                  |d       |S y)Nhttpr  zis top-level web application:z(URI:r  TF)r   r   r   r   rv   r   get_uriboolr  r   ry   rz   )rc   ro   urir   r   s        rf   r  zUtilities.isTopLevelWebAppQ  s    ""3',,X-@-@-EF$$S)Cc4cnnV45Bc#BBQTVYZFe..=Irg   c                     | j                  |      syt        j                  |      rt        j                  |      S t        j                  |      r| j                  |       S yr  )isWebAppDescendantr   is_tool_tiprG  r   r  r   s     rf   "forceBrowseModeForWebAppDescendantz,Utilities.forceBrowseModeForWebAppDescendant\  sW    &&s+""3'))#..&&s+--c222rg   c                 
   t        j                  |      r+d|dg}t        j                  t        j                  |d       yt        j
                  |      rUt        j                  |      r@t        j                  |      s+d|dg}t        j                  t        j                  |d       yt        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                   t        j                  j"                  t        j                  j$                  t        j                  j&                  t        j                  j(                  t        j                  j*                  t        j                  j,                  t        j                  j.                  t        j                  j0                  t        j                  j2                  g}t5        j6                  |      }||v r+d|dg}t        j                  t        j                  |d       y|t        j                  j8                  t        j                  j:                  fv rSt=        j>                  t=        j@                  |            r+d|dg}t        j                  t        j                  |d       yt        jB                  |      rRt5        jD                  |t         jF                        }|r*d|dg}t        j                  t        j                  |d       |S | jI                  |      r+d|d	g}t        j                  t        j                  |d       yt        j                  jJ                  t        j                  j8                  t        j                  j:                  g}||v rp| jM                  |      s_| jO                  |      sNtQ        jR                  | jU                               s+d|d
g}t        j                  t        j                  |d       y| jW                  |      r+d|dg}t        j                  t        j                  |d       y| jY                  |      r+d|dg}t        j                  t        j                  |d       y| j[                  |      r+d|dg}t        j                  t        j                  |d       y| j]                  |      r+d|dg}t        j                  t        j                  |d       yy)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)/r   r3  r   ry   rz   is_expandabler   r   r   r_   r  r  r  r  r  r  r  r  PASSWORD_TEXTPROGRESS_BARSLIDERSPIN_BUTTONr  r  r  r  r   r4  r  TABLEr   is_layout_tabler  r|  r   r}  isButtonWithPopupr  r!  r  r   is_pdfru   isGridDescendantisMenuDescendantisToolBarDescendantrH  )rc   ro   r   alwaysFocusModeRolesr  r   focusModeRoless          rf   r  zUtilities.isFocusModeWidgeth  s   ""3'c#OPFe..=$$S)k.F.Fs.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JFe..=EJJ))5::+;+;<<&&w'8'8'=>c#VWFe..=##C(''[-D-DEB #'_`!!%"2"2FDAI!!#&c#Z[Fe..=**--**//****, >!**3/;;C@$$T%7%7%9:c#YZFe..=  %c#XYFe..=  %c#XYFe..=##C(c#[\Fe..=44S9c#WXFe..=rg   c                    t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j
                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                   t         j                  j"                  t         j                  j$                  t         j                  j&                  t         j                  j(                  t         j                  j*                  t         j                  j,                  g}	 |j/                  t         j                  j0                         |j/                  t         j                  j2                         	 |j/                  t         j                  j6                         |j/                  t         j                  j8                         |S # t4        $ r Y `w xY w# t4        $ r Y |S w xY wr   )r   r_   ARTICLECAPTIONr  COMMENT
DEFINITIONDESCRIPTION_LISTDESCRIPTION_TERMDESCRIPTION_VALUEDOCUMENT_FRAMEDOCUMENT_WEBFOOTERFORMr  r`   ra   	PARAGRAPHr  SECTIONSTATICTEXTr  rk   CONTENT_DELETIONCONTENT_INSERTIONr   MARK
SUGGESTION)rc   r  s     rf   r5  z Utilities._textBlockElementRoles  s   ####))##&&,,,,--**((""##%%%%&&##""&&)(.	LL445LL556
	LL)LL../   		  		s&   AJ8 $AK 8	KK	KKc                 >   t        j                  |      }t        d |j                  dd      j	                  d            }t        d t        | j
                  |            }ddj                  |      dg}t        t        d |            r|S t        | )  |      S )Nc                 &    | j                  dd      S )N+r<  r  r  s    rf   r,  z7Utilities.mnemonicShortcutAccelerator.<locals>.<lambda>      QYYsC0 rg   keyshortcutsr   r<  c                 &    | j                  dd      S )Nr<  r  r   r  s    rf   r,  z7Utilities.mnemonicShortcutAccelerator.<locals>.<lambda>  r!  rg   c                     | S r   r   r  s    rf   r,  z7Utilities.mnemonicShortcutAccelerator.<locals>.<lambda>  s     rg   )r   r   maprw   r  labelFromKeySequencer=  r   r   r   mnemonicShortcutAccelerator)rc   ro   r   r  r   re   s        rf   r'  z%Utilities.mnemonicShortcutAccelerator  s    ,,S10%))NB2O2U2UVY2Z[0#d6O6OQU2VW#((4."%{B'(Iw2377rg   c                 P    |r| j                  |      st        | 	  |||      S g S r   )r   r   unrelatedLabels)rc   rM  onlyShowingminimumWordsre   s       rf   r)  zUtilities.unrelatedLabels  s,    //57*4lKK	rg   c                 N   |r| j                  |      sy| j                  j                  t        |            }||S d}t	        j
                  |      r9| j                  |      s(t        j                  || j                        D ]  }d} n || j                  t        |      <   |S r0  )
r   r/   rw   rx   r   r   r   r   r   r  rc   ro   r   r   s       rf   isFocusableWithMathChildz"Utilities.isFocusableWithMathChild  s    ..s3++//S	:>I##C(OOC(!//T5H5HI  57&&tCy1	rg   c                 P    | j                  |      syt        j                  |      S r  )r.  r   rG  r   s     rf   isFocusedWithMathChildz Utilities.isFocusedWithMathChild  s$    ,,S1%%c**rg   c                 :   |r| j                  |      sy| j                  j                  t        |            }||S t	        j
                  |      }| j                         }||vrd}nt	        j                  |      sd}nt        j                  |      rd}nj| j                  |      rd}nVt        j                  |      rd}n>| j                  |      rd}n*t        j                  |      s| j                  |       }nd}|| j                  t        |      <   |S r0  )r   r"   rw   rx   r   r4  r5  r  r   r3  
isGridCellis_documentr  r   r  )rc   ro   r   r  textBlockElementss        rf   r!  zUtilities.isTextBlockElement  s   ..s3%%))$s)4>I  % 779((B'',B$$S)B__S!B$$S)B$B))#.==cBBBB.0  c+	rg   c                     t        j                  |      r6| j                  |      s%| j                  j                  j                          S yr   )r   is_table_cellr#  r{   caretNavigation'last_input_event_was_navigation_commandr   s     rf   _advanceCaretInEmptyObjectz$Utilities._advanceCaretInEmptyObject+  s<    $$S)$2H2H2M||33[[]]]rg   c                     |t         j                  j                  }t        	|   ||||      \  }}}|| j
                  k(  r,t        j                  ||      }|r| j	                  ||||      S |||fS r   )r   r  r  r   textAtPointr	  r   r  )
rc   ro   r*  rv  r  r  r  r  r   re   s
            rf   r;  zUtilities.textAtPoint1  s}    --88H"W0aHEsT33333C?E''q!X>>uc!!rg   c                      yr  r   r   s    rf   _treatAlertsAsDialogszUtilities._treatAlertsAsDialogs=      rg   c                 Z  
 |r| j                  |      sy| j                  |      ryt        j                  |      r*|(| j	                  |||dz         }|r|| j
                  k7  ryt        j                  |      }t        j                  |      r|sy| j                  j                  t        |            }||S | j                  j                  t        j                  |            

r7|sd}n2
fd}t        t        j                  ||      D cg c]  }| c}      }|sdt        j                   |      }| j                  j                  |      

r2
fd}	t        t        j                  ||	      D cg c]  }| c}      }|| j                  t        |      <   |S c c}w c c}w )NFrt   Tc                 >    | d uxr t        j                  |       vS r   r  r*  
validRoless    rf   pred1z#Utilities.treatAsDiv.<locals>.pred1Y  "    D=SX->->q-A-SSrg   c                 >    | d uxr t        j                  |       vS r   r  rA  s    rf   pred2z#Utilities.treatAsDiv.<locals>.pred2b  rD  rg   )r   isDescriptionListr   r  r  r	  r   r   is_panelrW   rw   rx   rb   r4  r  r   rv   )rc   ro   rp   r  
childCountr   rC  r*  r+  rF  rB  s             @rf   
treatAsDivzUtilities.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26:JT h&<&<VU&KL1LM&(c#	 J Ms   	F#9	F(c                 (    d| j                  |      v S )Nalertr  r   s     rf   isAriaAlertzUtilities.isAriaAlertj  s    $++C000rg   c                 L    t         |   |      ry| j                  |      dk(  S )NT
blockquote)r   isBlockquoter  r  s     rf   rQ  zUtilities.isBlockquotem  s'    7$||C L00rg   c                     |r| j                  |      st        | 	  |      S t        j                  |      ryd| j                  |      v S )NTcomment)r   r   	isCommentr   
is_commentr  r  s     rf   rT  zUtilities.isComments  sJ    ..s37$S))!!#&D--c222rg   c                     |r| j                  |      st        | 	  |      S t        j                  |      ryd| j                  |      v xs d| j                  |      k(  S )NTdeletiondel)r   r   isContentDeletionr   is_content_deletionr  r  r  s     rf   rY  zUtilities.isContentDeletion|  s]    ..s37,S11**3/T..s33QuS@Q7QQrg   c                     |r| j                  |      st        | 	  |      S t        j                  |      | j                         vryt        j                  |      S r  )r   r   isContentErrorr   r4  r5  r   is_invalid_entryr  s     rf   r\  zUtilities.isContentError  sS    ..s37)#..S!)D)D)FF++C00rg   c                     |r| j                  |      st        | 	  |      S t        j                  |      ryd| j                  |      v xs d| j                  |      k(  S )NT	insertionins)r   r   isContentInsertionr   is_content_insertionr  r  r  s     rf   ra  zUtilities.isContentInsertion  s]    ..s37-c22++C0d//44RcAR8RRrg   c                     |r| j                  |      st        | 	  |      S t        j                  |      ryd| j                  |      v xs d| j                  |      k(  S )NTmark)r   r   isContentMarkedr   is_markr  r  r  s     rf   re  zUtilities.isContentMarked  s]    ..s37*3//s#**3//N6T\\#=N3NNrg   c                     |r| j                  |      st        | 	  |      S t        j                  |      ryd| j                  |      v S )NT
suggestion)r   r   isContentSuggestionr   is_suggestionr  r  s     rf   ri  zUtilities.isContentSuggestion  sJ    ..s37.s33$$S)t00555rg   c                 4    | j                  |      }|xr d|v S )Nr  r  )rc   ro   r  s      rf   isCustomElementzUtilities.isCustomElement  s    ll3!scz!rg   c                     t        j                  |      sy| j                  |      }d|vry| j                  |      d uS NFinline)r   r+  r  r   rc   ro   displayStyles      rf   isInlineIframezUtilities.isInlineIframe  sD    ,,S1,,S1<'((-T99rg   c                     |sy| j                   j                  t        |            }||S t        j                  || j
                        }|d u}|| j                   t        |      <   |S r  )r>   rw   rx   r   r   rs  rc   ro   r   ancestors       rf   isInlineIframeDescendantz"Utilities.isInlineIframeDescendant  sg    ++//S	:>I))#t/B/BCT!46&&tCy1	rg   c                 P    | j                  |      sy| j                  |      }d|v S ro  )ri  r  rq  s      rf   isInlineSuggestionzUtilities.isInlineSuggestion  s.    '',,,S1<''rg   c                 *    d| j                  |      k(  S )Nsvgrl  r   s     rf   isSVGzUtilities.isSVG  s    S)))rg   c                 |    t        j                  |      ryt        j                  |      r| j                  |      S yr   )r   is_text_inputr2  isEditableComboBoxr   s     rf   isTextFieldzUtilities.isTextField  s5    $$S)##C(**3//rg   c                     t        j                  || j                        }|rt        j                  |      sy|d   |k(  S r  r   r   ry  r   rc   ro   rh  s      rf   $isFirstItemInInlineContentSuggestionz.Utilities.isFirstItemInInlineContentSuggestion  s<    ++C1H1HI
x77
C!}##rg   c                     t        j                  || j                        }|rt        j                  |      sy|d   |k(  S )NFr   r  r  s      rf   #isLastItemInInlineContentSuggestionz-Utilities.isLastItemInInlineContentSuggestion  s<    ++C1H1HI
x77
C"~$$rg   c                 p    |xs" t        j                         j                         }| j                  |      S r   )r   r   r   r'  r   s     rf   speakMathSymbolNameszUtilities.speakMathSymbolNames  s-    D]--/BBD{{3rg   c                 d    | j                  t        j                         j                               S r   )r'  r   r   r   r   s    rf   isInMathzUtilities.isInMath  s#    {{=335HHJKKrg   c                 0    | j                  |      }|dv }|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  )rc   ro   r  r   s       rf   r'  zUtilities.isMath  s'    ll3 '# '#R 	rg   c                 *    | j                  |      dk(  S )Nnonerl  r   s     rf   isNoneElementzUtilities.isNoneElement	      ||C F**rg   c                 (    | j                  |      dv S )N)r  r  r  r  rl  r   s     rf   isMathLayoutOnlyzUtilities.isMathLayoutOnly	  s    ||C $KKKrg   c                 (    | j                  |      dv S )N)r  r  r  rl  r   s     rf   isMathMultilinezUtilities.isMathMultiline	  s    ||C $DDDrg   c                 *    | j                  |      dk(  S )Nr  rl  r   s     rf   isMathEnclosezUtilities.isMathEnclose"	      ||C J..rg   c                 *    | j                  |      dk(  S )Nr  rl  r   s     rf   isMathFencedzUtilities.isMathFenced%	      ||C I--rg   c                     t        j                  |      syt        j                  |      }|j	                  d      }|sy|D ]  }|j                         s|dk7  s y y)NFlinethickness0T)r   is_math_fractionr   r   rw   	isnumeric)rc   ro   r   r  r/  s        rf   isMathFractionWithoutBarz"Utilities.isMathFractionWithoutBar(	  s^    ++C0,,S1		/2! 	D~~DCK	 rg   c                 *    | j                  |      dk(  S )Nr  rl  r   s     rf   isMathPhantomzUtilities.isMathPhantom7	  r  rg   c                 *    | j                  |      dk(  S )Nr  rl  r   s     rf   isMathMultiScriptzUtilities.isMathMultiScript:	  s    ||C O33rg   c                 *    | j                  |      dk(  S )Nr  rl  r   s     rf   _isMathPrePostScriptSeparatorz'Utilities._isMathPrePostScriptSeparator=	  s    ||C M11rg   c                 (    | j                  |      dv S )N)r  r  r  rl  r   s     rf   isMathSubOrSuperScriptz Utilities.isMathSubOrSuperScript@	  s    ||C $???rg   c                 *    | j                  |      dk(  S )Nr  rl  r   s     rf   isMathTablezUtilities.isMathTableC	      ||C H,,rg   c                 (    | j                  |      dv S )N)r  r  rl  r   s     rf   isMathTableRowzUtilities.isMathTableRowF	  s    ||C $999rg   c                 *    | j                  |      dk(  S )Nr  rl  r   s     rf   isMathTableCellzUtilities.isMathTableCellI	  s    ||C E))rg   c                 (    | j                  |      dv S )N)r  r  r  rl  r   s     rf   isMathUnderOrOverScriptz!Utilities.isMathUnderOrOverScriptL	  s    ||C $EEErg   c                 *    | j                  |      dk(  S )Nr  rl  r   s     rf   _isMathSubElementzUtilities._isMathSubElementO	  r  rg   c                 *    | j                  |      dk(  S )Nr  rl  r   s     rf   _isMathSupElementzUtilities._isMathSupElementR	  r  rg   c                 *    | j                  |      dk(  S )Nr  rl  r   s     rf   _isMathSubsupElementzUtilities._isMathSubsupElementU	  r  rg   c                 *    | j                  |      dk(  S )Nr  rl  r   s     rf   _isMathUnderElementzUtilities._isMathUnderElementX	  r  rg   c                 *    | j                  |      dk(  S )Nr  rl  r   s     rf   _isMathOverElementzUtilities._isMathOverElement[	      ||C G++rg   c                 *    | j                  |      dk(  S )Nr  rl  r   s     rf   _isMathUnderOverElementz!Utilities._isMathUnderOverElement^	  s    ||C L00rg   c                 *    | j                  |      dk(  S )Nr  rl  r   s     rf   isMathSquareRootzUtilities.isMathSquareRoota	  r  rg   c                 (    | j                  |      dv S )N)r  r  r  r  r  r  rl  r   s     rf   isMathTokenzUtilities.isMathTokend	  s    ||C $OOOrg   c                 ,    t        j                  |      S r   )r   is_mathr   s     rf   r  zUtilities.isMathTopLevelg	  s    ""3''rg   c                     | j                  |      sy | j                  |      r|S t        j                  || j                        S r   )r'  r  r   r   r   s     rf   r(  zUtilities.getMathAncestorj	  s=    {{3s#J%%c4+>+>??rg   c                 .    t        j                  |d      S Nrt   r   r   r   s     rf   getMathDenominatorzUtilities.getMathDenominators	      !!#q))rg   c                 .    t        j                  |d      S r   r  r   s     rf   getMathNumeratorzUtilities.getMathNumeratorv	  r  rg   c                 T    | j                  |      r|S t        j                  |d      S r   )r  r   r   r   s     rf   getMathRootBasezUtilities.getMathRootBasey	  s(      %J!!#q))rg   c                 .    t        j                  |d      S r  r  r   s     rf   getMathRootIndexzUtilities.getMathRootIndex	  r  rg   c                     | j                  |      s"| j                  |      s| j                  |      rt        j                  |d      S y r   )r  r  r  r   r   r   s     rf   getMathScriptBasezUtilities.getMathScriptBase	  sB    &&s+**3/$$S)%%c1--rg   c                 t    | j                  |      s| j                  |      rt        j                  |d      S y r  )r  r  r   r   r   s     rf   getMathScriptSubscriptz Utilities.getMathScriptSubscript	  s3    !!#&$*C*CC*H%%c1--rg   c                     | j                  |      rt        j                  |d      S | j                  |      rt        j                  |d      S y Nrt   rb  )r  r   r   r  r   s     rf   getMathScriptSuperscriptz"Utilities.getMathScriptSuperscript	  sG    !!#&%%c1--$$S)%%c1--rg   c                 t    | j                  |      s| j                  |      rt        j                  |d      S y r  )r  r  r   r   r   s     rf   getMathScriptUnderscriptz"Utilities.getMathScriptUnderscript	  s3    ##C(D,H,H,M%%c1--rg   c                     | j                  |      rt        j                  |d      S | j                  |      rt        j                  |d      S y r  )r  r   r   r  r   s     rf   getMathScriptOverscriptz!Utilities.getMathScriptOverscript	  sG    ""3'%%c1--'',%%c1--rg   c                 b    t        j                  |      D ]  }| j                  |      s|c S  y r   )r   r   r  )rc   ro   r   s      rf   _getMathPrePostScriptSeparatorz(Utilities._getMathPrePostScriptSeparator	  s4    ++C0 	E11%8	 rg   c                     | j                  |      }|sg S g }t        j                  |      }|r)|j                  |       t        j                  |      }|r)|S r   )r  r   r   rk   rc   ro   	separatorchildrenr   s        rf   getMathPrescriptszUtilities.getMathPrescripts	  sZ    77<	I)))4OOE"--e4E  rg   c                     | j                  |      }g }t        j                  |d      }|r3||k7  r.|j                  |       t        j                  |      }|r||k7  r.|S r  )r  r   r   rk   r   r  s        rf   getMathPostscriptszUtilities.getMathPostscripts	  sb    77<	""3**OOE"--e4E * rg   c                     | j                  |      sg S t        j                  |      }|j                  dd      j	                         S )Nnotationlongdiv)r  r   r   rw   r  r  s      rf   getMathEnclosureszUtilities.getMathEnclosures	  s?    !!#&I,,S1yyY/5577rg   c                     | j                  |      sdgS t        j                  |      }t        |j	                  dd            S )Nr   
separatorsrs   )r  r   r   r   rw   r  s      rf   getMathFencedSeparatorsz!Utilities.getMathFencedSeparators	  s=      %4K,,S1EIIlC011rg   c                     | j                  |      sddgS t        j                  |      }|j                  dd      |j                  dd      gS )Nr   open(closer  )r  r   r   rw   r  s      rf   getMathFenceszUtilities.getMathFences	  sJ      %8O,,S1		&#&		'3(?@@rg   c                       j                   j                  t                    }||S  fd}d}}|rt        j                  ||      }|dz  }|r| j                   t              <   |S )Nc                 ^     |       S j                  |       j                        k(  S r   rl  )r*  ro   rc   tests    rf   predz+Utilities.getMathNestingLevel.<locals>.pred	  s.    Aw<<?dll3&777rg   r   rt   )r0   rw   rx   r   r   )rc   ro   r  r   r  rv  s   ```   rf   getMathNestingLevelzUtilities.getMathNestingLevel	  sv    ##''S	2>I	8
 --h=H!GB  -/tCy)	rg   c                 r      fd}t              dk(  rS t        t        |            }i  _        |S )Nc                    | \  }}}}|rt        j                  |      ryj                  j                  t	        |            }||S |xs t        j
                  |      }d}j                  |      sj                  |      r|rj                  |      r|j                         rj                  |      snt        j                  |      r|rWj                  |      sFj                  |      s5j                  |      s$j!                  |	      sj#                  |	      rd}nt%        j&                  |      rj)                  |      }ncj+                  | 	      }t,        j.                  j0                  t,        j.                  j2                  g}|r
st        j4                  |      |v rd}|j                  t	        |      <   |S r0  )r   r  rT   rw   rx   r"  r!  r   rH  rz  isEmptyAnchorr   r  r'  r  r  isErrorForContentsisLabellingContentsr   r  r  isInferredLabelForContentsr   r_   r  r  r4  )r*  ro   r  r  r  r   displayedTextwidgetalwaysFilterr  inferLabelsrc   s            rf   rc  z9Utilities.filterContentsForPresentation.<locals>._include	  s   &'#CV(**3/##''S	2B~	"<h&7&7&<MB((-S1A=<<SA&,,.$$S)**3/--$'',%%c*))#x8**39))#.))#.88HE %

 7 79M9MN{h.?.?.G<.WB,.DtCy)Irg   rt   )r   r   r   rT   )rc   r  r%  rc  r   s   ```  rf   filterContentsForPresentationz'Utilities.filterContentsForPresentation	  s:    	@ x=AO&8,-	rg   c                     |j                         s|j                         ryg d}g d}||v s||v ry||v s||v ry|j                         S )NF)r  [{<)
r  ?!r  rs   ;r  ]}>T)r@  isalnum)rc   lastCharnextCharopeningPunctuationclosingPunctuations        rf   needsSeparatorzUtilities.needsSeparator
  s_    !1!1!31O))X9K-K))X9K-K!!rg   c                 Z    t        j                  |      xr t        j                  |      S r   )r   supports_tablesupports_selectionr   s     rf   supportsSelectionAndTablez#Utilities.supportsSelectionAndTable#
  s#    &&s+P0K0KC0PPrg   c                 V   |sy| j                   j                  t        |            }||S t        j                  |      sd}n+| j                  |      }||k7  r| j                  |      }|sd}| t        j                  |      }t        |      }|| j                   t        |      <   |S r  )
r&   rw   rx   r   r   ru   r  r   find_all_gridsr  )rc   ro   r   r   document_has_gridsgridss         rf   r  zUtilities.hasGridDescendant&
  s    $$((c3>I'',B))#.Hh%)%;%;H%E")B:..s3EeB-/S	*	rg   c                     |sy| j                   j                  t        |            }||S t        j                  || j
                        d u}|| j                   t        |      <   |S r  )r'   rw   rx   r   r   r:  rc   ro   r   s      rf   r  zUtilities.isGridDescendant>
  sc    ##''S	2>I##C)G)GHPTT,.tCy)	rg   c                 T    t        j                  |d      }|j                  d      dvS )NFsort)r  Nr   r  s      rf   isSortedzUtilities.isSortedJ
  s(    ,,S%8yy 66rg   c                 V    t        j                  |d      }|j                  d      dk(  S )NFrB  	ascendingr   r  s      rf   isAscendingzUtilities.isAscendingN
  s(    ,,S%8yy K//rg   c                 V    t        j                  |d      }|j                  d      dk(  S )NFrB  
descendingr   r  s      rf   isDescendingzUtilities.isDescendingR
  s(    ,,S%8yy L00rg   c                 8   t        j                  |      syt        j                  |      }|syt	        j
                  |      }|D ]  }t        j                  |      |k(  s y t	        j                  |      }|D ]  }t        j                  |      |k(  s y yr0  )r   r6  r   r"  r   get_column_headersget_row_headers)rc   ro   nameheadersheaders        rf   r  z"Utilities.isCellWithNameFromHeaderV
  s    ((-  %,,S1 	F  (D0	 ))#. 	F  (D0	 rg   c                 v    t         |   |      ryt        j                  |      }|j	                  d      dk(  S )NTr  -1)r   setSizeUnknownr   r   rw   rc   ro   r   re   s      rf   rR  zUtilities.setSizeUnknownj
  s7    7!#&,,S1yy#t++rg   c                     t         |   |      ryt        j                  |      }|j	                  d      dk(  xs |j	                  d      dk(  S )NTrowcountrQ  colcount)r   rowOrColumnCountUnknownr   r   rw   rS  s      rf   rW  z!Utilities.rowOrColumnCountUnknownq
  sJ    7*3/,,S1yy$,M		*0E0MMrg   c                 
   |r| j                  |      st        | 	  ||      S t        | 	  ||      sy| j                  |      r| j                  j                          S | j                         ry| j                         ryyr0  )r   r   shouldReadFullRowr  r{   r   lastInputEventWasLineNavlastInputEventWasMouseButton)rc   ro   rM  re   s      rf   rY  zUtilities.shouldReadFullRowx
  s|    ..s37,S'::w(g6  %||//111((*,,.rg   c                     |sy| j                   j                  t        |            }||S t        j                  |t
        j                        d u}|| j                   t        |      <   |S r  )r%   rw   rx   r   r   r   r   r@  s      rf   isEntryDescendantzUtilities.isEntryDescendant
  sb    $$((c3>I##C)=)=>dJ-/S	*	rg   c                     |sy| j                   j                  t        |            }||S t        j                  |t
        j                        d u}|| j                   t        |      <   |S r  )r(   rw   rx   r   r   r   is_label_or_captionr@  s      rf   isLabelDescendantzUtilities.isLabelDescendant
  sc    $$((c3>I##C)H)HIQUU-/S	*	rg   c                      yr  r   r   s     rf   isMenuInCollapsedSelectElementz(Utilities.isMenuInCollapsedSelectElement
  r>  rg   c                     |sy| j                   j                  t        |            }||S t        j                  |t
        j                        d u}|| j                   t        |      <   |S r  )r*   rw   rx   r   r   r   r{  r@  s      rf   r  zUtilities.isMenuDescendant
  sb    ##''S	2>I##C)<)<=TI,.tCy)	rg   c                     |sy| j                   j                  t        |            }||S t        |   |      }|| j                   t        |      <   |S r  )r)   rw   rx   r   isModalDialogDescendantrc   ro   r   re   s      rf   re  z!Utilities.isModalDialogDescendant
  sU    **..tCy9>IW,S135%%d3i0	rg   c                 0   |sy| j                   j                  t        |            }||S t        j                  |      r|}n$t        j                  |t        j                        }|xr | j                  |       }|| j                   t        |      <   |S r  )r+   rw   rx   r   r  r   r   isNonNavigablePopupru  s       rf   isNavigableToolTipDescendantz&Utilities.isNavigableToolTipDescendant
  s    //33DI>>I""3'H--c;3J3JKH@d66x@@8:**495	rg   c                 T    d| j                  |      v xs d| j                  |      k(  S )Nr  r  r  r   s     rf   r&  zUtilities.isTime
  s+    **3//N6T\\#=N3NNrg   c                     |sy| j                   j                  t        |            }||S t        j                  |t
        j                        d u}|| j                   t        |      <   |S r  )r,   rw   rx   r   r   r   r  r@  s      rf   r  zUtilities.isToolBarDescendant
  sb    &&**495>I##C)@)@AM/1!!$s),	rg   c                     |sy| j                   j                  t        |            }||S t        j                  |t
        j                        d u}|| j                   t        |      <   |S r  )r-   rw   rx   r   r   r   r   r@  s      rf   r  zUtilities.isWebAppDescendant
  sb    %%))$s)4>I##C)@)@AM.0  c+	rg   c                    |r| j                  |      st        | 	  |      S | j                  j	                  t        |            }|.|r*d|dg}t        j                  t        j                  |d       |S t        j                  |      r| j                  |      }n| j                  |      rd}n| j                  |      rd}n| j                  |      rd}n| j                  |      rd}n| j!                  |      rd}n| j#                  |      rd}nm| j%                  |      rd}nX| j'                  |      rd}nC| j)                  |      rd}n.| j+                  |      rd}n| j-                  |      rd}n| j/                  |      rd}n| j1                  |      rd}n| j3                  |      r| j5                  |       }nt        j6                  |      rd}nt        j8                  |      rd}nt        j:                  |      r| j5                  |       }n`t        j<                  |      r(t        j>                  |      s| j5                  |       }n#| jA                  |      rd}nt        | 	  |      }|r*d|dg}t        j                  t        j                  |d       || j                  t        |      <   |S )Nr  zis deemed to be layout onlyTF)!r   r   isLayoutOnlyr.   rw   rx   r   ry   rz   r   r  rJ  rG  isDescriptionListTermisDescriptionListDescriptionr'  rm  rY  ra  re  ri  isDPubisFeedisFigureisGridrs  r  is_table_headeris_separatorrH  r  r  r  )rc   ro   r   r   re   s       rf   ro  zUtilities.isLayoutOnly
  so   ..s37',,##DI.> #'DE!!%"2"2FD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*;3L3LS3Q))#..B$B%c*Bc#@AFe..=(*49%	rg   c                 T    | j                  |      dv ryd| j                  |      v ryy)N)precodeTrz  F)r  r  r   s     rf   r  z#Utilities.elementIsPreformattedText%  s/    <</T&&s++rg   c           	         |r| j                  |      sy| j                  |      ry| j                  j                  t	        |            }||S t        j                  |      }|sy| j                  |      syt        j                  |      }t        j                  d|      }t        |      |z  dkD  ryt        j                  |dd       t        t        d t        j                   d|                  }t#        j$                  |       xr t        |      dkD  }|rUd}||k  rNt        j&                  ||      \  }}}	t        |j!                               dk7  rd}nt)        |dz   |	      }||k  rN|| j                  t	        |      <   |S )	NF   ￼333333?z+Checking if element lines are single words.c                     | S r   r   r  s    rf   r,  z6Utilities.elementLinesAreSingleWords.<locals>.<lambda>M  s    q rg   z
[\s\ufffc]rt   r   )r   r  r4   rw   rx   r   rP  r#  r  r  findallr   r   r   r   r   r  r   r3  r  rd  )
rc   ro   r   nCharsr  eocsr   rQ  r  r  s
             rf   r*  z$Utilities.elementLinesAreSingleWords.  sp   ..s3))#.--11$s)<>I++C0%%c* $$S)zz(F+t9Vc! 	S%)VWf["((=&*IJK ((--A#f+/Af*%+%>%>sA%F"sv||~&!+B!SM f* 79((c3	rg   c                    |r| j                  |      sy| j                  j                  t        |            }||S t	        j
                  |      }|sy| j                  |      syt	        j                  |      }t        j                  d|      }t        |      |z  dkD  ryt        j                  |dd       t        j                  |       }|rwt        |      D ]i  }t	        j                   ||      d   }|j#                         s|dv r1t	        j$                  ||      d   }t        |j'                               dkD  sgd} n || j                  t        |      <   |S )NFr|  r}  z+Checking if element lines are single chars.r   )r|  u   �rt   )r   r3   rw   rx   r   rP  r#  r  r  r  r   r   r   r   r3  rq  r?  r@  r  rz  )rc   ro   r   r  r  r  rQ  r/  s           rf   r)  z$Utilities.elementLinesAreSingleChars^  sN   ..s3--11$s)<>I++C0%%c* $$S)zz(F+t9Vc! 	S%)VW ((--6] 55c1=a@<<>T-A%A223:1=v||~&*B 79((c3	rg   c                    r| j                        sy| j                  j                  t                    }||S d}| j	                        D ]  }t        j                  |fd      sd} n || j                  t              <   |S )NFc                     | k(  S r   r   )r*  ro   s    rf   r,  z5Utilities.labelIsAncestorOfLabelled.<locals>.<lambda>  s    S rg   T)r   r2   rw   rx   targetsForLabelr   r   )rc   ro   r   targets    `  rf   labelIsAncestorOfLabelledz#Utilities.labelIsAncestorOfLabelled  s    ..s3,,00c;>I**3/ 	F%%f.@A	
 68''S	2	rg   c                    |r| j                  |      sy| j                  j                  t        |            }||S | j	                  |      ryd}| j                  |      }|rVt        dt        j                  |            }t        j                  |d|      }|j                  dk  s|j                  dk  rd}|| j                  t        |      <   |S )NFrt   r   T)r   r1   rw   rx   r  labelTargetsrd  r   rP  ru  r*  rv  )rc   ro   r   targetsr  r  s         rf   r  zUtilities.isOffScreenLabel  s    ..s3##''S	2>I))#.##C(a33C89C((a5DvvzTVVaZ,.tCy)	rg   c                     t        j                  |      rSt        j                  t        j                  |            s+d|dg}t        j                  t
        j                  |d       yy)Nr  zis a detached documentTF)r   r3  r   rj   rv   r   ry   rz   )rc   ro   r   s      rf   isDetachedDocumentzUtilities.isDetachedDocument  sT    ""3'0A0A(BUBUVYBZ0[c#;<Fe..=rg   c                     |xs | j                         }t        j                  |      D ]I  }t        j                  |      |k(  sd|d|g}t        j                  t
        j                  |d       |c S  y )NWEB: Returningzas iframe parent of detachedT)ru   r   find_all_internal_framesr   rv   r   ry   rz   )rc   ro   rM  iframer   s        rf   iframeForDetachedDocumentz#Utilities.iframeForDetachedDocument  st    +t))+!::4@ 	F""3'61*F4RTWX!!%"2"2FDA		 rg   c                 ^    t        j                  |t        j                  j                        S r   )r   r   r   r   	LABEL_FORr   s     rf   r  zUtilities.targetsForLabel  s!    ,,S%2D2D2N2NOOrg   c                    |r| j                  |      sg S | j                  j                  t        |            }||S | j	                  |      D cg c]  }t        |       }}|| j                  t        |      <   |S c c}w r   )r   rO   rw   rx   r  )rc   ro   r   ts       rf   r  zUtilities.labelTargets  s{    ..s3I##DI.>I#33C89!d1g99(*49%	 :s   A?c                     | j                        sy|D ]8  \  }}}}t        j                  |      st        j                  |fd      s8 y y)NFc                     | k(  S r   r   )r*  links    rf   r,  z;Utilities.isLinkAncestorOfImageInContents.<locals>.<lambda>  s    Q$Y rg   T)r   r   r   r   r   )rc   r  r  ro   r  r  r  s    `     rf   isLinkAncestorOfImageInContentsz)Utilities.isLinkAncestorOfImageInContents  sT    {{4 '/ 	#CV'',%%c+>?		 rg   c           
         |\  }}}}t        t        | j                  |D cg c]  }|d   	 c}            }|sy |D ]@  }	| j                  |	      \  }
}||v s|
j	                         |j	                         k(  s>|	c S  y c c}w r   )r   r   shouldInferLabelForinferLabelForrz  )rc   r  r  ro   r  r  r  r*  objsrN  labelsourcess               rf   r!  z$Utilities.isInferredLabelForContents  s    ")UCF433H5Mqad5MNO 	A!//2NE7g~%++-6<<>"A	
  6Ns   Bc                     | j                   j                  t        |            g k(  ry| j                  |      }|D ]  }t	        j
                  |      s y yr0  )rO   rw   rx   r  r   r   )rc   ro   r  r  s       rf   isLabellingInteractiveElementz'Utilities.isLabellingInteractiveElement  sW    !!$s),2&&s+ 	F''/	 rg   c                    | j                  |      ry| j                  |      }|st        |      xs | j                  |      S |D ]  \  }}}}t	        |      |v s y | j                  |      sy| j                  |      sy|D ]Q  \  }}}}| j                  |      r| j                  |      r+t        j                  | j                  ||            sQ y yr0  )	r  r  r  r`  rx   r!  r   r_  commonAncestor)rc   ro   r  r  r  r  r  r  s           rf   r   zUtilities.isLabellingContents  s    !!#&##C(=?D$:$:3$??'/ 	#CVCyG#	 &&s+%%c*'/ 	#CV))#.$2I2I#2N..t/B/B3/LM	 rg   c                 X   |r| j                  |      sy| j                  j                  t        |            }||S d}t	        j
                  |      r>t	        j                  |      s)t        j                  |d      s| j                  |      sd}|| j                  t        |      <   |S )NFjumpT)
r   r;   rw   rx   r   r   r   r   
has_actionr  r@  s      rf   isAnchorzUtilities.isAnchor  s    ..s3^^S	*>Is#++C0&&sF3$$S)B$&tCy!	rg   c                 L    | j                  |      xr | j                  |       S r   )r  r#  r   s     rf   r  zUtilities.isEmptyAnchor%  s$    }}S!E$*@*@*E&EErg   c                 T    t        j                  |      xr | j                  |       S r   )r   r  r#  r   s     rf   isEmptyToolTipzUtilities.isEmptyToolTip(  s&    &&s+OD4J4J34O0OOrg   c                 T    t        j                  |      sy| j                  |      ryyr0  )r   is_alertr   r   s     rf   isBrowserUIAlertzUtilities.isBrowserUIAlert+  s'    ##C(!!#&rg   c                     | j                  |      syt        j                  |      }|r:| j                  |      r)t        j                  |      }|r| j                  |      r)t	        j
                  |      S r  )r  r   rv   ro  r   is_frame)rc   ro   r+  s      rf   isTopLevelBrowserUIAlertz"Utilities.isTopLevelBrowserUIAlert4  sh    $$S)$$S)**62((0F **62 ##F++rg   c                 n   |r| j                  |      sy| j                  j                  t        |            }||S | j	                  |      ry| j                  |      r+d|dg}t        j                  t        j                  |d       yd}| j                  |      sBt        j                  |      st        j                  |d      }nt        j                  |d      }|rt        j                  |      st        j                  |      rt!        j"                  |      }|j%                  dd      s-d|d	g}t        j                  t        j                  |d       d}n=|j'                         s-t        j(                  |      xs t        j*                  |       }|| j                  t        |      <   |S )
NFr  z%is not clickable: has grid descendantTclickclick-ancestorr|  r   z'is not clickable: its text is just EOCs)r   r:   rw   rx   r  r  r   ry   rz   r  r   r   r   r  r"  r  r   r  r  rz  	is_staticr   )rc   ro   r   r   r  s        rf   isClickableElementzUtilities.isClickableElement>  sp   ..s3%%))$s)4>I))#.!!#&c#JKFe..=%%c*++C0((g6((.>?h'',1G1G1L&&s+D<<"- #'PQ!!%"2"2FDAZZ\%//4P8K8KC8PQ.0  c+	rg   c                    |r| j                  |      st        | 	  |      S | j                  j	                  t        |            }||S t        j                  || j                        d u}|| j                  t        |      <   |S r   )	r   r   isCodeDescendantr$   rw   rx   r   r   isCoderf  s      rf   r  zUtilities.isCodeDescendanta  s{    ..s37+C00##''S	2>I##C5TA,.tCy)	rg   c                     |r| j                  |      st        | 	  |      S | j                  |      dk(  xs d| j	                  |      v S )Nrz  )r   r   r  r  r  r  s     rf   r  zUtilities.isCodem  sK    ..s37>#&&||C F*Nf8I8I#8N.NNrg   c                 L    t         |   |      ry| j                  |      dk(  S )NTdl)r   rG  r  r  s     rf   rG  zUtilities.isDescriptionLists  s'    7$S)||C D((rg   c                 L    t         |   |      ry| j                  |      dk(  S )NTdt)r   rp  r  r  s     rf   rp  zUtilities.isDescriptionListTermy  s'    7(-||C D((rg   c                 L    t         |   |      ry| j                  |      dk(  S )NTdd)r   rq  r  r  s     rf   rq  z&Utilities.isDescriptionListDescription  s'    7/4||C D((rg   c                     |sg S | j                   j                  t        |            }||S t        |   |      }| j                  |      s|S || j                   t        |      <   |S r   )rP   rw   rx   r   descriptionListTermsr   rf  s      rf   r  zUtilities.descriptionListTerms  sj    I''++DI6>IW)#.%%c*I02""49-	rg   c                     |sg S | j                   j                  t        |            }||S t        |   |      }| j                  |      s|S || j                   t        |      <   |S r   )rQ   rw   rx   r   valuesForTermr   rf  s      rf   r  zUtilities.valuesForTerm  sj    I  $$T#Y/>IW"3'%%c*I)+DI&	rg   c                 n    t        j                  |d      }|j                  dt        |   |            S )NF	valuetext)r   r   rw   r   getComboBoxValuerS  s      rf   r  zUtilities.getComboBoxValue  s0    ,,S%8yyeg&>s&CDDrg   c                 $   |r| j                  |      st        | 	  |      S | j                  j	                  t        |            }||S d}t        j                  |      rt        j                  |      }|| j                  t        |      <   |S r  )	r   r   r  r<   rw   rx   r   r2  r3  rf  s      rf   r  zUtilities.isEditableComboBox  s    ..s37-c22%%))$s)4>I##C(((-B.0  c+	rg   c                 T   t        j                  |      sy t        j                  |t         j                        }|y t        j
                  |t        j                  j                  | j                        }t        |      dk(  r|d   S t        j                  || j                        S r   )r   r|  r   r   r}  r   r   r   CONTROLLED_BYr  r   )rc   itemlistboxr  s       rf   getEditableComboBoxForItemz$Utilities.getEditableComboBoxForItem  s    ''-(({/F/FG?//050B0B0P0P040G0GI w<11:%%gt/F/FGGrg   c                     t        j                  |      sy| j                  |      sy| j                  |      |k(  }d|d|d|g}t	        j
                  t        j                  |d       |S )NFr  z
is item ofr  T)r   r|  r  r  r   ry   rz   )rc   r  comboBoxr   r   s        rf   isItemForEditableComboBoxz#Utilities.isItemForEditableComboBox  sh    ''-&&x0,,T2h>$hR@%**FD9	rg   c                     |r| j                  |      sy| j                  |      }t        t        t	        d |                  }|S )NFc                 $    | j                  d      S )Nzdoc-)r  r  s    rf   r,  z"Utilities.isDPub.<locals>.<lambda>  s    V(< rg   )r   r  r  r   r   )rc   ro   r  r   s       rf   rr  zUtilities.isDPub  sA    ..s3!!#&$v<eDEF	rg   c                 (    d| j                  |      v S )Nzdoc-abstractrM  r   s     rf   isDPubAbstractzUtilities.isDPubAbstract      !2!23!777rg   c                 (    d| j                  |      v S )Nzdoc-acknowledgmentsrM  r   s     rf   isDPubAcknowledgmentszUtilities.isDPubAcknowledgments  s    $(9(9#(>>>rg   c                 (    d| j                  |      v S )Nzdoc-afterwordrM  r   s     rf   isDPubAfterwordzUtilities.isDPubAfterword      $"3"3C"888rg   c                 (    d| j                  |      v S )Nzdoc-appendixrM  r   s     rf   isDPubAppendixzUtilities.isDPubAppendix  r  rg   c                 (    d| j                  |      v S )Nzdoc-backlinkrM  r   s     rf   isDPubBacklinkzUtilities.isDPubBacklink  r  rg   c                 (    d| j                  |      v S )Nzdoc-bibliorefrM  r   s     rf   isDPubBibliorefzUtilities.isDPubBiblioref  r  rg   c                 (    d| j                  |      v S )Nzdoc-bibliographyrM  r   s     rf   isDPubBibliographyzUtilities.isDPubBibliography      !T%6%6s%;;;rg   c                 (    d| j                  |      v S )Nzdoc-chapterrM  r   s     rf   isDPubChapterzUtilities.isDPubChapter       1 1# 666rg   c                 (    d| j                  |      v S )Nzdoc-colophonrM  r   s     rf   isDPubColophonzUtilities.isDPubColophon  r  rg   c                 (    d| j                  |      v S )Nzdoc-conclusionrM  r   s     rf   isDPubConclusionzUtilities.isDPubConclusion      4#4#4S#999rg   c                 (    d| j                  |      v S )Nz	doc-coverrM  r   s     rf   isDPubCoverzUtilities.isDPubCover      d//444rg   c                 (    d| j                  |      v S )Nz
doc-creditrM  r   s     rf   isDPubCreditzUtilities.isDPubCredit      t00555rg   c                 (    d| j                  |      v S )Nzdoc-creditsrM  r   s     rf   isDPubCreditszUtilities.isDPubCredits  r  rg   c                 (    d| j                  |      v S )Nzdoc-dedicationrM  r   s     rf   isDPubDedicationzUtilities.isDPubDedication   r  rg   c                 (    d| j                  |      v S )Nzdoc-endnoterM  r   s     rf   isDPubEndnotezUtilities.isDPubEndnote  r  rg   c                 (    d| j                  |      v S )Nzdoc-endnotesrM  r   s     rf   isDPubEndnoteszUtilities.isDPubEndnotes  r  rg   c                 (    d| j                  |      v S )Nzdoc-epigraphrM  r   s     rf   isDPubEpigraphzUtilities.isDPubEpigraph	  r  rg   c                 (    d| j                  |      v S )Nzdoc-epiloguerM  r   s     rf   isDPubEpiloguezUtilities.isDPubEpilogue  r  rg   c                 (    d| j                  |      v S )Nz
doc-erratarM  r   s     rf   isDPubErratazUtilities.isDPubErrata  r  rg   c                 (    d| j                  |      v S )Nzdoc-examplerM  r   s     rf   isDPubExamplezUtilities.isDPubExample  r  rg   c                 (    d| j                  |      v S )Nzdoc-footnoterM  r   s     rf   isDPubFootnotezUtilities.isDPubFootnote  r  rg   c                 (    d| j                  |      v S )Nzdoc-forewordrM  r   s     rf   isDPubForewordzUtilities.isDPubForeword  r  rg   c                 (    d| j                  |      v S )Nzdoc-glossaryrM  r   s     rf   isDPubGlossaryzUtilities.isDPubGlossary  r  rg   c                 (    d| j                  |      v S )Nzdoc-glossrefrM  r   s     rf   isDPubGlossrefzUtilities.isDPubGlossref  r  rg   c                 (    d| j                  |      v S )Nz	doc-indexrM  r   s     rf   isDPubIndexzUtilities.isDPubIndex!  r  rg   c                 (    d| j                  |      v S )Nzdoc-introductionrM  r   s     rf   isDPubIntroductionzUtilities.isDPubIntroduction$  r  rg   c                 (    d| j                  |      v S )Nzdoc-noterefrM  r   s     rf   isDPubNoterefzUtilities.isDPubNoteref'  r  rg   c                 (    d| j                  |      v S )Nzdoc-pagelistrM  r   s     rf   isDPubPagelistzUtilities.isDPubPagelist*  r  rg   c                 (    d| j                  |      v S )Nzdoc-pagebreakrM  r   s     rf   isDPubPagebreakzUtilities.isDPubPagebreak-  r  rg   c                 (    d| j                  |      v S )Nzdoc-partrM  r   s     rf   
isDPubPartzUtilities.isDPubPart0      T..s333rg   c                 (    d| j                  |      v S )Nzdoc-prefacerM  r   s     rf   isDPubPrefacezUtilities.isDPubPreface3  r  rg   c                 (    d| j                  |      v S )Nzdoc-prologuerM  r   s     rf   isDPubProloguezUtilities.isDPubPrologue6  r  rg   c                 (    d| j                  |      v S )Nzdoc-pullquoterM  r   s     rf   isDPubPullquotezUtilities.isDPubPullquote9  r  rg   c                 (    d| j                  |      v S )Nzdoc-qnarM  r   s     rf   	isDPubQnazUtilities.isDPubQna<      D--c222rg   c                 (    d| j                  |      v S )Nzdoc-subtitlerM  r   s     rf   isDPubSubtitlezUtilities.isDPubSubtitle?  r  rg   c                 (    d| j                  |      v S )Nzdoc-tocrM  r   s     rf   	isDPubToczUtilities.isDPubTocB  r  rg   c                 (   |r| j                  |      st        | 	  |      S | j                  j	                  t        |            }||S t        j                  |t        j                  j                        }|| j                  t        |      <   |S r   )r   r   isErrorMessager=   rw   rx   r   has_relationr   r   	ERROR_FORrf  s      rf   r$  zUtilities.isErrorMessageE  s~    ..s37)#..!!%%d3i0>I""3(:(:(D(DE*,T#Y'	rg   c                 B   |r&| j                  |      rt        j                  |      syt        j                  |      ryt        j
                  t        j                  |t        j                              syfd} ||      ryt        j                  ||      d uS )NFc                     t        j                  |       j                         }|k7  ryt        j                  |       xs t        j
                  |       S r  )r   r  rz  r   
is_sectionr  )r*  r  	entryNames     rf   _isMatchz5Utilities.isFakePlaceholderForEntry.<locals>._isMatch\  sH    ((+113FF"))!,H0E0Ea0HHrg   T)	r   r   rv   r   r3  r"  r   r   r  )rc   ro   r+  r*  s      @rf   r  z#Utilities.isFakePlaceholderForEntryQ  s    ..s38K8KC8P""3'%%h&<&<S+BVBV&WX		I C=''X6dBBrg   c                 (    d| j                  |      v S )NgridrM  r   s     rf   ru  zUtilities.isGridg      **3///rg   c                 (    d| j                  |      v S )NgridcellrM  r   s     rf   r2  zUtilities.isGridCellj  r  rg   c                    |r| j                  |      sy| j                  j                  t        |            }||S t	        j
                  |      sd}n| j                  |      }|xr d|v }|| j                  t        |      <   |S ro  )r   r?   rw   rx   r   r|  r  )rc   ro   r   rr  s       rf   isInlineListItemzUtilities.isInlineListItemm  s    ..s3##''S	2>I'',B005L:(l":B,.tCy)	rg   c                 J    | j                  |      sy| j                  |       S r  )isListDescendantr  r   s     rf   r  zUtilities.isBlockListDescendant~  s'    $$S)..s333rg   c                     |r| j                  |      sy| j                  j                  t        |            }||S t	        j
                  |t        j                        }|d u}|| j                  t        |      <   |S r  )r   rC   rw   rx   r   r   r   r  ru  s       rf   r4  zUtilities.isListDescendant  st    ..s3##''S	2>I))#{/B/BCT!,.tCy)	rg   c                    |r| j                  |      sy| j                  j                  t        |            }||S | j	                  |      rd}n$t        j                  || j                        }|d u}|| j                  t        |      <   |S r0  )r   r@   rw   rx   r2  r   r   ru  s       rf   r  z Utilities.isInlineListDescendant  s    ..s3))--d3i8>I  %B--c43H3HIH%B24$$T#Y/	rg   c                 n    | j                  |      sy t        j                  |t        j                        S r   )r  r   r   r   r  r   s     rf   r  z%Utilities.listForInlineListDescendant  s,    **3/%%c;+>+>??rg   c                 (    d| j                  |      v S )NfeedrM  r   s     rf   rs  zUtilities.isFeed  r.  rg   c                     |r| j                  |      syt        j                  |      syt        j                  || j
                        d uS r  )r   r   
is_articler   r   rs  r   s     rf   isFeedArticlezUtilities.isFeedArticle  sB    ..s3%%c*%%c4;;7tCCrg   c                 T    d| j                  |      v xs | j                  |      dk(  S )Nfigurerk  r   s     rf   rt  zUtilities.isFigure  s+    4,,S11RT\\#5F(5RRrg   c                     |r j                  |      sy j                  j                  t        |            }||S t	        j
                  |      rd}nb j                  |      rt        t        j                  |            }n2 j                  |      }t        t        t         fd|                  }| j                  t        |      <   |S )NFTc                 (    | j                         v S r   )getLandmarkTypesr
  s    rf   r,  z&Utilities.isLandmark.<locals>.<lambda>  s    A1F1F1H,H rg   )r   rA   rw   rx   r   is_landmarkisLandmarkRegionr  r   r"  r  r   r   )rc   ro   r   r  s   `   rf   rm  zUtilities.isLandmark  s    ..s3!!$s),>I""3'B""3'h'',-B%%c*Ed6"H%PQRB&(c#	rg   c                 *    | j                  |      }| S r   rM  )rc   ro   r  s      rf   isLandmarkWithoutTypezUtilities.isLandmarkWithoutType  s    !!#&yrg   c                 (    d| j                  |      v S )NbannerrM  r   s     rf   r  zUtilities.isLandmarkBanner      4,,S111rg   c                 (    d| j                  |      v S )NcomplementaryrM  r   s     rf   isLandmarkComplementaryz!Utilities.isLandmarkComplementary  r  rg   c                 (    d| j                  |      v S )NcontentinforM  r   s     rf   isLandmarkContentInfozUtilities.isLandmarkContentInfo  r  rg   c                 (    d| j                  |      v S )NformrM  r   s     rf   isLandmarkFormzUtilities.isLandmarkForm  r.  rg   c                 (    d| j                  |      v S )NmainrM  r   s     rf   isLandmarkMainzUtilities.isLandmarkMain  r.  rg   c                 (    d| j                  |      v S )N
navigationrM  r   s     rf   isLandmarkNavigationzUtilities.isLandmarkNavigation  r  rg   c                 (    d| j                  |      v S )NregionrM  r   s     rf   rC  zUtilities.isLandmarkRegion  rH  rg   c                 (    d| j                  |      v S )Nr  rM  r   s     rf   isLandmarkSearchzUtilities.isLandmarkSearch  rH  rg   c                 \    |r| j                  |      syt        j                  |      }d|v S )NFzcontainer-live)r   r   r   r  s      rf   r  zUtilities.isLiveRegion  s0    ..s3,,S15((rg   c                    |sy| j                   j                  t        |            }||S t        j                  |      r| j                  |      sd}nkt        j                  |      rTt        j                  t        j                  |            r,t        j                  |t        j                  |            rd}nd}|| j                   t        |      <   |S r0  )
rB   rw   rx   r   r   r  r  r   rv   has_same_non_empty_namer@  s      rf   r   zUtilities.isLink  s    \\d3i(>Is#DMM#,>B""3'""8#6#6s#;<//X5H5H5MNBB"$T#Y	rg   c                    |r| j                  |      sy| j                  j                  t        |            }||S t	        j
                  |      xr t	        j                  |       }|| j                  t        |      <   |S r  )r   rD   rw   rx   r   r  r   r@  s      rf   rh  zUtilities.isNonNavigablePopup  s}    ..s3&&**495>I$$S) 2,,S11 	 02!!$s),	rg   c                 Z    t        t        j                  || j                              dkD  S r   )r   r   find_all_canvasesr  r   s     rf   r  z$Utilities.hasUselessCanvasDescendant  s%    ;00d6I6IJKaOOrg   c                 P    | j                  |      ryt        j                  |      S r  )r'  r   is_subscript_or_superscriptr   s     rf   r  z&Utilities.isTextSubscriptOrSuperscript  s"    ;;s66s;;rg   c                 n    |r| j                  |      st        | 	  |      S d| j                  |      v S )Nswitch)r   r   isSwitchr  r  s     rf   rf  zUtilities.isSwitch  s9    ..s37#C((4,,S111rg   c                 $   | j                   j                  t        |            }||S d}| j                  |      r+| j	                  |      r	 t        j                  |      }d|v }|| j                   t        |      <   |S # t        $ r d}Y 'w xY w)NFdoubleclickT)rK   rw   rx   r   r   r   r"  r   )rc   ro   r   rM  s       rf   r  z(Utilities.isNonNavigableEmbeddedDocument  s    1155d3i@>I??3D$=$=c$B+((- #d*:<,,T#Y7	  s   B BBc                    | j                  |      r+t        j                  t        j                  |            dk(  ry| j                  j                  t        |            }||S d}t        j                  |      }t        j                  || j                         D cg c]  }| }}t        |      t        j                  |      k(  ret        j                  |      }||d   k7  rHt        j                  |      }t        j                  |d         }t        j                  ||      }	|	|k(  }|| j                  t        |      <   |S c c}w )Nrt   Fr   )r|  r   r   rv   rH   rw   rx   r   r   r   sort_objects_by_sizer~  get_rect_intersection)
rc   ro   r   r+  r*  r  sortedChildren
objExtentslargestExtentsintersections
             rf   isRedundantSVGzUtilities.isRedundantSVG/  s   zz#(":":8;N;Ns;S"TXY"Y!!%%d3i0>I$$S)'55fdjjIJ!AJJx=H44V<<(==hGNnR(((11#6
!,!5!5nR6H!I*@@^\!Z/*,T#Y'	 Ks   	E
c                 &   |r| j                  |      sy| j                  j                  t        |            }||S d}| j	                  |      r| j                  |      rt        j                  |      rt        j                  |      rnt        j                  dt        j                  |            sEt        j                  |      D ]+  }t        j                  |      r| j!                  |      r+ n d}|| j                  t        |      <   |S )NF[^\s\ufffc]T)r   rF   rw   rx   rm  r  r   r)  r   r  r  r  r   r  r   is_image_or_canvasr|  r-  s       rf   r  zUtilities.isCustomImageE  s    ..s3  $$T#Y/>I$)=)=c)B%%c*%%c*99^V-@-@-EF!//4 #66u=EAR )+DI&	rg   c                    |r| j                  |      sy| j                  j                  t        |            }||S d}t	        j
                  |      s| j                  |      sd}|r=t        j                  |      s&t        j                  |      s| j                  |      rd}|r$| j                  |      r| j                  |      sd}|rt	        j                  |      rd}|rvt	        j                  t        j                  |            rN| j                  |      s=t!        j"                  t        j                  |            }|r|j%                  d      sd}|rst        j&                  |      r^t        j(                  |      rd}nF| j                  |      s5| j+                  |      s$t        j,                  |      \  }}|dkD  r|dkD  rd}|r't        j.                  |      r| j1                  |       }|rkt        j2                  |      rVt5        t7        t        j2                  |      d            D ]+  }| j9                  t        j:                  ||            r)d} n || j                  t        |      <   |S )NFT
javascript   2   )r   rG   rw   rx   r   rs  r|  r   r"  get_descriptionhasLongDescr  r  r   r   rv   r   get_link_urir  supports_imageget_image_descriptionrp  get_image_sizer  r#  r   rq  rc  r  r   )rc   ro   r   r  rw  rx  rQ  s          rf   r  zUtilities.isUselessImage[  s   ..s3!!%%d3i0>I..s3tzz#B8$$S)..s3&&s+B4**3/8L8LS8QB+**3/B+%%h&9&9#&>?H\H\]`Ha**8+>+>s+CDC3>>,7())#.--c2))#.t7J7J37O ( 7 7 <v2:&2+B(((-++C00B(**3/3x77<bAB **8+=+=c1+EFB
 +-T#Y'	rg   c                    t        j                  |      }|syt        |j                               dkD  ryt        j
                  j                  |      }t        |      dkD  r+d|dg}t        j                  t        j                  |d       yt        |      dk(  rBt        |      t        dd      v r+d|d	g}t        j                  t        j                  |d       yy)
NFrt   Trb  WEB: name ofzis suspected query string     is in unicode private use area)r   r"  r   r  urllibparseparse_qsr   ry   rz   ordrq  )rc   ro   rM  parsedr   s        rf   hasValidNamezUtilities.hasValidName  s      %tzz|q &&t,v;?$c+FGFe..=t9>c$i5+@@$c+KLFe..=rg   c                    |r| j                  |      sy| j                  j                  t        |            }||S t        j
                  j                  t        j
                  j                  t        j
                  j                  t        j
                  j                  g}t        j                  |      }||vr| j                  |      sd}nt        j                  |      rd}nt        j                  |      rd}n| j!                  |      s*t        j"                  |      st        j$                  |      rd}nt'        j(                  |      r.t'        j*                  |      t        j,                  |      k7  rd}nLt        j.                  |      r5t        j0                  |      }g dt3        t5        fd|            }| }nd}|| j                  t        |      <   |S )NF)r  zshow-context-menuz
do-defaultc                     | vS r   r   )r*  ignores    rf   r,  z1Utilities.isUselessEmptyElement.<locals>.<lambda>  s    !6/ rg   T)r   rI   rw   rx   r   r_   r  r  r  	TABLE_ROWr   r4  rN  r   r   r3  r  rx  r   r   rP  r  r"  r  get_action_namesr   r   )rc   ro   r   r  r  namesr  s         @rf   r  zUtilities.isUselessEmptyElement  s   ..s3((,,T#Y7>I%%##""%%'   %uT%5%5c%:B%%c*B$$S)Bs#++C0H4L4LS4QB'',1D1DS1IXM^M^_bMc1cB%%c*--c2EJF 95ABEBB13##DI.	rg   c                 h   |r| j                  |      sy| j                  j                  t        |            }||S d}t	        j
                  |      }|rDt	        j                  |d      .d|d|dg}t        j                  t        j                  |d       d}|| j                  t        |      <   |S )NFr   zERROR: reportsz0children, but AXObject.get_child(obj, 0) is NoneT)
r   rL   rw   rx   r   r   r   r   ry   rz   )rc   ro   r   rI  r   s        rf   isParentOfNullChildzUtilities.isParentOfNullChild  s    ..s3&&**495>I--c2
(,,S!4<iHJFe..=B/1!!$s),	rg   c                 |    |r| j                  |      syt        j                  |      }|j                  d      dk(  S )NFzexplicit-nametrue)r   r   r   rw   r  s      rf   r  zUtilities.hasExplicitName  s9    ..s3,,S1yy)V33rg   c                     |r| j                  |      sy| j                  j                  t        |            }||S t	        j
                  |d      }|| j                  t        |      <   |S )NFshowlongdesc)r   r5   rw   rx   r   r  r@  s      rf   ry  zUtilities.hasLongDesc  sd    ..s3""49->I  n5')$s)$	rg   c                 ~   |r| j                  |      st        | 	  |      S | j                  |      st	        j
                  |      sy| j                  j                  t        |            }||S | j                  |      }d }t        t        t        ||                  }|| j                  t        |      <   |S )NFc                     t        j                  |       xr, t        j                  |       xr t        j                  |       S r   )r   
is_captionr   
is_visibler  s    rf   isVisibleCaptionz5Utilities.hasVisibleCaption.<locals>.isVisibleCaption  s>    ))!, L**1-L2=2H2H2KLrg   )r   r   hasVisibleCaptionrt  r   r8  r6   rw   rx   labelsForObjectr  r   r   )rc   ro   r   labelsr  re   s        rf   r  zUtilities.hasVisibleCaption  s    ..s37,S11c"h&=&=c&B$$((c3>I%%c*	L $v.789-/S	*	rg   c                 V   |r| j                  |      st        | 	  |      S | j                  j	                  t        |            }||S t        j                  |t        j                  j                        }|xr |j                         dkD  }|| j                  t        |      <   |S r   )r   r   
hasDetailsr7   rw   rx   r   r   r   r   DETAILSget_n_targetsrc   ro   r   r   re   s       rf   r  zUtilities.hasDetails  s    ..s37%c**!!$s),>I((e.@.@.H.HI6(002Q6&(c#	rg   c                     | j                  |      sg S t        j                  |t        j                  j
                        S r   )r  r   r   r   r   r  r   s     rf   	detailsInzUtilities.detailsIn  s2    s#I,,S%2D2D2L2LMMrg   c                 V   |r| j                  |      st        | 	  |      S | j                  j	                  t        |            }||S t        j                  |t        j                  j                        }|xr |j                         dkD  }|| j                  t        |      <   |S r   )r   r   	isDetailsr8   rw   rx   r   r   r   r   DETAILS_FORr  r  s       rf   r  zUtilities.isDetails
  s    ..s37$S))__  c+>I((e.@.@.L.LM6(002Q6%'S	"	rg   c                     | j                  |      sg S t        j                  |t        j                  j
                        S r   )r  r   r   r   r   r  r   s     rf   
detailsForzUtilities.detailsFor  s2    ~~c"I,,S%2D2D2P2PQQrg   c                     |r| j                  |      syt        j                  |      }|j                  dd      j	                         S )Nfalsehaspopup)r   r   r   rw   lowerr  s      rf   	popupTypezUtilities.popupType  s?    ..s3,,S1yyW-3355rg   c                     | j                  |      sd g fS | j                  j                  t        |            }||S | j                  j
                  j                  |d      }|| j                  t        |      <   |S r  )r  rM   rw   rx   r{   labelInferenceinferr@  s      rf   r  zUtilities.inferLabelFor$  sr    '',8O!!%%d3i0>I\\((..sE:*,T#Y'	rg   c                    | j                         r| j                  |      ry| j                  j                  t	        |            }|r?| j
                  j                  j                         s| j
                  j                          S |du r|S t        j                  |      }t        j                  |      }|rd}n| j                  |      rd}n|st        j                  j                  t        j                  j                   t        j                  j"                  t        j                  j$                  t        j                  j&                  t        j                  j(                  g}||v xr | j+                  |       }|| j                  t	        |      <   | j
                  j                  j                         r7|t        j                  j(                  t        j                  j                  fvry|S r  )r   r  rU   rw   rx   r{   r7  r8  inSayAllr   r4  r"  r  r   r_   r  r  r  r  r  r  displayedLabel)rc   ro   r   r  rM  r  s         rf   r  zUtilities.shouldInferLabelFor0  sv   %%'4+B+B3+G&&**495dll22ZZ\||,,...;I  %  %Bs#BZZ))ZZ))ZZ%%ZZ((ZZ--ZZ,,.E ?t':':3'?#?B/1!!$s),<<''OOQEJJ33UZZ5I5IJJ	rg   c                    |r| j                  |      st        | 	  |      S | j                  j	                  t        |            }||S | j                  |      }|D cg c],  }|(t        j                  |      xs | j                  |      . }}dj                  |      }|| j                  t        |      <   |S c c}w )Nr<  )r   r   r  rR   rw   rx   r  r   r"  r"  r=  )rc   ro   r   r  r  r2  re   s         rf   r  zUtilities.displayedLabelQ  s    ..s37)#..%%))$s)4>I%%c*=CZ49uGX $$U+ 0((/0 Z ZXXg.0  c+	Zs   !1B?c                     |sg S | j                   j                  t        |            }||S t        |   |      }| j                  |      s|S || j                   t        |      <   |S r   )rN   rw   rx   r   r  r   rf  s      rf   r  zUtilities.labelsForObjecta  sj    I""&&tCy1>IW$S)%%c*I+-d3i(	rg   c                     | j                  |      syt        j                  |      syt        j                  |      s(t        j                  t	        j
                  |            ryyr0  )r   r   r3  is_spin_buttonr   rv   r   s     rf   isSpinnerEntryzUtilities.isSpinnerEntryp  sQ    %%c*&&s+%%c*k.H.HI\I\]`Ia.brg   c                     | j                  |j                        sy|j                  j                  d      s|j                  j                  d      r| j	                         \  }}|dv ryy)NFzobject:text-changedzobject:text-selection-changedDownUpT)r  sourcer   r  lastKeyAndModifiersrc   eventlastKeymodss       rf   eventIsSpinnerNoisezUtilities.eventIsSpinnerNoise|  s]    ""5<<0::  !67jj##$CD 446MGT.(rg   c                     |j                   j                  d      rT| j                  |j                        r9| j	                         \  }}|dv r"| j                         \  }}|j                  |k(  S y)Nobject:text-caret-movedr  F)r   r  r  r  r  r   )rc   r  r  r  ro   rp   s         rf   treatEventAsSpinnerValueChangez(Utilities.treatEventAsSpinnerValueChange  sg    ::  !:;@S@STYT`T`@a 446MGT.("224V||s**rg   c                 >   | j                  |j                        ry|j                  j                  d      r3| j	                  |j                        r| j                         \  }}|dk(  S |j                  j                  d      s|j                  j                  d      rat        j                  |j                        xs@ t        j                  |j                        xs t        j                  |j                        S |j                  j                  d      ryy)NFobject:text-Returnzaccessible-namezobject:children-changedT)r   r  r   r  isSingleLineAutocompleteEntryr  r  r   is_status_baris_labelr  r  s       rf   eventIsBrowserUINoisezUtilities.eventIsBrowserUINoise  s    !!%,,/::  011%,,? 446MGTh&&::  0EJJ4G4GHY4Z,,U\\: 6k>R>RSXS_S_>` 6''56::  !:;rg   c                 v   |xs | j                  |j                        }|syd }d }d }t        j                  |j                        ro|j                  j                  d      rT| j                  |      \  }} ||      s ||      ry||j                  k(  r  ||      r| j                         \  }	}
|	dv ryy)NFc                 R    t        j                  t        j                  |             S r   )r   r}  r   rv   r  s    rf   isListBoxItemz9Utilities.eventIsAutocompleteNoise.<locals>.isListBoxItem  s    **8+>+>q+ABBrg   c                 R    t        j                  t        j                  |             S r   )r   r{  r   rv   r  s    rf   
isMenuItemz6Utilities.eventIsAutocompleteNoise.<locals>.isMenuItem  s    &&x':':1'=>>rg   c                 R    t        j                  t        j                  |             S r   )r   r2  r   rv   r  s    rf   isComboBoxItemz:Utilities.eventIsAutocompleteNoise.<locals>.isComboBoxItem  s    ++H,?,?,BCCrg   r  Tr  )r   r  r   r3  r   r  r   r  )rc   r  ru   	inContentr  r  r  ro   rp   r  r  s              rf   eventIsAutocompleteNoisez"Utilities.eventIsAutocompleteNoise  s    !IT%;%;ELL%I		C	?	D ""5<<0zz$$^4..}=KCS!Z_ell"~c': $ 8 8 :n,rg   c                     | j                  |j                        ry| j                  |      ry| j                  |      S r0  )r   r  &_eventIsBrowserUIAutocompleteTextNoise+_eventIsBrowserUIAutocompleteSelectionNoiserc   r  s     rf   !eventIsBrowserUIAutocompleteNoisez+Utilities.eventIsBrowserUIAutocompleteNoise  s9    !!%,,/66u=??FFrg   c                 2   ddg}|j                   |vryt        j                  |j                        syt	        j
                         j                         }t        j                  |      r-t        j                  |      r| j                         \  }}|dvryy)Nobject:selection-changedobject:state-changed:selectedFr  T)
r   r   is_menu_relatedr  r   r   r   r   rG  r  )rc   r  	selectionfocusr  r  s         rf   r  z5Utilities._eventIsBrowserUIAutocompleteSelectionNoise  s    /1PQ	::Y&**5<<8((*==?&;+A+A%+H 446MGTn,rg   c                 d   |j                   j                  d      r| j                  |j                        syt	        j
                         j                         }t        j                  |      syt        j                  |      st        j                  |      r| j                         \  }}|dv S y)Nr  Fr  )r   r  r  r  r   r   r   r   is_selectableis_menu_item_of_any_kindr|  r  )rc   r  r  r  r  s        rf   r  z0Utilities._eventIsBrowserUIAutocompleteTextNoise  s    zz$$^444U\\B((*==?((///6&&u- 446MGTn,,rg   c                    ddg}|j                   |vryt        j                  |j                        sy| j	                  |j                        ry| j	                  t        j                         j                               syy)Nr  r  FT)r   r   is_page_tab_list_relatedr  r   r   r   r   )rc   r  r  s      rf   eventIsBrowserUIPageSwitchz$Utilities.eventIsBrowserUIPageSwitch  sl    /1PQ	::Y&33ELLA!!%,,/%%m&>&>&@&S&S&UVrg   c                 p   t        j                         j                         r,| j                         }| j	                  |j
                        }nL| j                  t        j                         j                               }| j                  |j
                        }d|d|dg}t        j                  t        j                  |d       |r|sy||k(  ryt        j                  |      sPt        j                  |      r;| j                         |k(  r(d}t        j                  t        j                  |d       yy)NzWEB: Event doc:z. Focus doc:r  TFz,WEB: Treating active doc as locusOfFocus doc)r   r   focus_is_active_windowr   r  r  r   r   r   ry   rz   r   rj   r   )rc   r  r  r  r   r   s         rf   eventIsFromLocusOfFocusDocumentz)Utilities.eventIsFromLocusOfFocusDocument  s    ##%<<>'')E66u||DF--m.F.F.H.[.[.]^E..u||<F#V^UCH%**FD95U?  'H,=,=f,E""$.D""5#3#3S$?rg   c                    j                   dk7  ryt        j                         j                         }|s(d}t	        j
                  t        j                  |d       yj                  |k(  r(d}t	        j
                  t        j                  |d       yt        j                  |fd      r(d}t	        j
                  t        j                  |d       yt        j                  j                        rHdt        j                  j                        d	g}t	        j                  t        j                  |d       yd
}t	        j
                  t        j                  |d       y)Nr  Fz:WEB: Selection changed event is relevant (no locusOfFocus)Tz:WEB: Selection changed event is relevant (is locusOfFocus)c                 "    | j                   k(  S r   )r  r*  r  s    rf   r,  zBUtilities.eventIsIrrelevantSelectionChangedEvent.<locals>.<lambda>  s    13D rg   zCWEB: 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   r   r   r   r   r   rz   r  r   r   r   is_page_tab_listget_role_namery   )rc   r  r  r   r   s    `   rf   &eventIsIrrelevantSelectionChangedEventz0Utilities.eventIsIrrelevantSelectionChangedEvent  s   ::33((*==?NCu//d;<<5 NCu//d;!!%)DEWCu//d; ''5M,,U\\:CAFe..=W5++S$7rg   c                     | j                  |j                        rt        j                  |j                        sy| j	                  |      s| j                  |      ryyr0  )r   r  r   r3   isDeleteCommandTextDeletionEvent#isBackSpaceCommandTextDeletionEventr  s     rf   textEventIsDueToDeletionz"Utilities.textEventIsDueToDeletion+  sK    %%ell3))%,,700766u=rg   c                    |j                   j                  d      sy| j                  |j                        rt	        j
                  |j                        sy|j                  t        j                         j                         k7  ryt        t        j                  t        j                        r3t        j                  }|xr |j                         xr |j                    S yNr  F)r   r  r   r  r   r3  r   r   r   r   r	   lastInputEventr   KeyboardEventlastNonModifierKeyEventisPrintableKey	modifiers)rc   r  
inputEvents      rf   textEventIsDueToInsertionz#Utilities.textEventIsDueToInsertion6  s    zz$$^4%%ell3))%,,7<<=335HHJJj//1J1JK#;;JZ*";";"=ZjFZFZBZZrg   c                 p    |j                   j                  d      sy| j                  |j                        S r  )r   r  r  r  r  s     rf   $textEventIsForNonNavigableTextObjectz.Utilities.textEventIsForNonNavigableTextObjectG  s,    zz$$^4''55rg   c                     | j                  |j                        sy|j                  j                  d      r9| j                  |j
                  v r!t        j                  d|j
                         S y)NFobject:text-changed:insertrr  )r   r  r   r  r	  any_datar  r  r  s     rf   eventIsEOCAddedzUtilities.eventIsEOCAddedM  sW    %%ell3::  !=>--?xx???rg   c                     |r|j                   j                  d      sy|xs" t        j                         j	                         }| j                  |      sy| j                  |j                         S )Nr  F)r   r  r   r   r   r  r  )rc   r  r   s      rf   caretMovedOutsideActiveGridz%Utilities.caretMovedOutsideActiveGridW  s_    %**//0IJN}779LLN$$X.((666rg   c                 >   |r|j                   j                  d      syt        j                  |j                        ryt        j                  | j                               }|sy| j                  |j                        }|r||k(  ry|xs" t        j                         j                         }| j                  |      r|}n t        j                  || j                        }|xr9 t        j                   |      t        j"                  | j                               k(  S )Nr  FT)r   r  r   r3  r  r   get_document_uri_fragmentru   r  r   r   r   r   r   r   r   rz  r  )rc   r  r   fragmentsourceIDr  s         rf   caretMovedToSamePageFragmentz&Utilities.caretMovedToSamePageFragmenta  s    %**//0IJ""5<<0778J8J8LM;;u||,H,N}779LLN;;x D))(DKK@Db006*:L:LTM_M_Ma:bbbrg   c                      t        j                   j                  |            sy fd}t        j                  ||      d uS )NFc                 ,    j                  |       k(  S r   )r  )r*  r	  rc   s    rf   isSameFragmentz:Utilities.isChildOfCurrentFragment.<locals>.isSameFragment}  s    ;;q>X--rg   )r   r  ru   r   r   )rc   ro   r  r	  s   `  @rf   isChildOfCurrentFragmentz"Utilities.isChildOfCurrentFragmentx  sC    778J8J38OP	. %%c>:$FFrg   c                 
    |r j                  |      sy j                  j                  t        |            }||S d} fd} j	                  |      dv rd}nt        j                  |      rt        j                  ||      }ndt        j                  |      r ||      xs  j                  |      }n3 j                  |      s" j                  |      } j                  |      }| j                  t        |      <   |S )NFc                     t        j                  |       j                         v xr& j                  |        xr j	                  |        S r   )r   r4  r5  r  r  r
  s    rf   hasTextBlockRolezHUtilities.isContentEditableWithEmbeddedObjects.<locals>.hasTextBlockRole  sT    $$Q'4+F+F+HH [66q99[BFBWBWXYBZ>Z[rg   )inputtextarea)r   r#   rw   rx   r  r   is_multi_line_entryr   r  r3  r   r   r   rH  )rc   ro   r   r  r   s   `    rf   rH  z.Utilities.isContentEditableWithEmbeddedObjects  s    ..s377;;DIF>I	[ << 55B,,S1))#/?@B$$S)!#&:$++c*:B%005H::8DB@B2249=	rg   c                     t        j                  |      }| j                  |      syt        j                  |      }t        j
                  |      }||t        j                  |      fS )N)r   r   r   )r   rv   r#  r   r  r  r   rP  )rc   ro   r+  r  r  s        rf   _rangeInParentWithLengthz"Utilities._rangeInParentWithLength  s[    $$S)%%f-11#6--c2c655f===rg   c                 F   |r| j                  |      st        | 	  |      S t        j                  |      sy	 | j
                  j                  t        |             | j                  |dd      \  }}}|j                  d      }|dk(  ry|dvry|S # t        $ r Y @w xY w)NFr   Tinvalidr  )spellinggrammar)r   r   getErrorr   r]  r   rl   rx   r   r  rw   )rc   ro   r   r  r  r0  re   s         rf   r  zUtilities.getError  s    ..s37#C((++C0	""&&tCy1 !//Q=uc		)$G//  		s   $B 	B B c                     |r| j                  |      sy | j                  |      sy t        j                  |t        j
                  j                        }|r|j                  d      S y r   )r   r  r   r   r   r   ERROR_MESSAGEr   )rc   ro   r   s      rf   _getErrorMessageContainerz#Utilities._getErrorMessageContainer  sY    ..s3}}S!((e.@.@.N.NO&&q))rg   c                 B    | j                  | j                  |            S r   )r  r  r   s     rf   getErrorMessagezUtilities.getErrorMessage  s    t==cBCCrg   c                 l    | j                  |      sy|D ]  \  }}}}| j                  |      |k(  s y yr0  )r$  r  )rc   ro   r  r  r  r  r  s          rf   r  zUtilities.isErrorForContents  sF    ""3''/ 	#CV--c2c9	 rg   c                 
   | j                   j                  t        |            }||S |yt        j                  |      r(d}t        j                  t
        j                  |d       yt        j                  |      s*d|g}t        j                  t
        j                  |d       yt        j                         }d }t        j                  |      r-d|g}t        j                  t
        j                  |d       d}nt        j                  |      r-d|g}t        j                  t
        j                  |d       d}nt        j                  |      r-d|g}t        j                  t
        j                  |d       d}nm| j                  |      r-d|g}t        j                  t
        j                  |d       d}n/| j!                  |      r-d	|g}t        j                  t
        j                  |d       d}n| j#                  |      r-d
|g}t        j                  t
        j                  |d       d}n| j%                  |      r-d|g}t        j                  t
        j                  |d       d}nu| j'                  |      r-d|g}t        j                  t
        j                  |d       d}n7| j)                  |      r-d|g}t        j                  t
        j                  |d       d}n| j+                  |      r-d|g}t        j                  t
        j                  |d       d}n| j-                  |      r-d|g}t        j                  t
        j                  |d       d}n}| j/                  |      r-d|g}t        j                  t
        j                  |d       d}n?| j1                  |      r-d|g}t        j                  t
        j                  |d       d}n| j3                  |      r,d|g}t        j                  t
        j                  |d       d}n| j5                  |      r,d|g}t        j                  t
        j                  |d       d}nt7        j8                  |      r,d|g}t        j                  t
        j                  |d       d}nFd|dt        j                         |z
  ddg}t        j                  t
        j                  |d       d}|| j                   t        |      <   dt        j                         |z
  dd}t        j                  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  zcan have caret context. (r  s)z INFO: _canHaveCaretContext took r  )r   rw   rx   r   r  r   r   rz   rj   ry   r  r   r   r3  rB  r  r  r  rh  r  r  r  r  isPseudoElementr  r  r'  r   r  )rc   ro   r   r   r   r  s         rf   _canHaveCaretContextzUtilities._canHaveCaretContext  s   ..2249=>I;C >Cu//d;  %EsKFe..=IIK	##C(DcJFe..=B$$S)CSIFe..=B$$S)<cBFe..=B""3'GMFe..=B'',LcRFe..=B""3'GMFe..=B%%c*JCPFe..=B  %DcJFe..=B$CSIFe..=B  %EsKFe..=B%%c*KSQFe..=B!!#&EsKFe..=B++C0QSVWFe..=B55c:\^abFe..=B]]3 EcJFe..=B$$S)KSQFe..=Bs&?		i@WX[?\\^$_`Fe..=B79))$s)40y1H0MQO5++S$7	rg   c                      yr  r   r   s     rf   r%  zUtilities.isPseudoElement3  r>  rg   c                 v   d|g}t        j                  t         j                  |d       |}d\  }}|r@t        j                  |      }|dk  rd }n ||}}t        j                  ||      }|r|}nn|r@|r0| j                  |      s| j                  |t        d|dz
              S | j                  |      r|dfS y)Nz#WEB: Searching for caret context inTNr   r   r   rt   )r   ry   rz   r   get_caret_offsetr   r  r'  r>  rd  r   )rc   ro   r   r  
contextObjcontextOffsetrp   r   s           rf   searchForCaretContextzUtilities.searchForCaretContext6  s    7=%**FD9	$,!
M,,S1Fz,/M
#77VDC  dmmJ7,,ZRQRAR9STT??9%a<rg   c                    t        j                         j                         }d}t        j                  t        j
                  |d       | j                  |      syt        j                  |      s|dfS |t        j                  |      fS )Nz+WEB: Getting caret context via locusOfFocusTr)  r   )r   r   r   r   r   rz   r   r   r  r   r*  )rc   ro   r   s      rf   _getCaretContextViaLocusOfFocusz)Utilities._getCaretContextViaLocusOfFocusP  st    &&(;;=;5++S$7%%c*%%c*6MF++C000rg   c                 |   d|g}t        j                  t         j                  |d       t        j                  |      s9| j                         }d|g}t        j                  t         j                  |d       |sm|s(d}t        j                  t         j                  |d       y| j                         \  }}d|d|dg}t        j                  t         j                  |d       ||fS | j                  j                  t        t        j                  |                  }|4d	|d
|d   d|d   g}t        j                  t         j                  |d       n/d|dg}t        j                  t         j                  |d       d\  }}|r| j                  |      s?|s(d}t        j                  t         j                  |d       y| j                  |      \  }}n|s|\  }}nt        j                  |d         sd}t        j                  t         j                  |d       | j                         \  }}|rH| j                  t        j                  |            \  }	}
|	rt        j                  |	      r
|	|
}}n|\  }}d|d
|d|dg}t        j                  t         j                  |d       | j                  |||       ||fS )NzWEB: 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)zWEB: Cached context ofr  r   rt   zWEB: 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.zWEB: Result context of)r   ry   rz   r   rj   ru   r   r/  r   rw   rx   rv   isTopLevelDocumentr-  findContextReplicantr   )rc   ru   getReplicantsearchIfNeededr   r   ro   rp   r   caretObjcaretOffsets              rf   r   zUtilities.getCaretContext\  s   2MB%**FD9  / ..0M:MJFe..=!U""5#3#3S$?>>@KC&T6;PQFe..=;%%))$x/B/B=/Q*RS.tWQZQUW^_`WabFe..=2M3GFe..="KCd55mD!1""5#3#3S$?44]CKC!KC""71:.GCu//d;335KC(,(B(B8CVCVWZC[(\%+ 1 1( ;"*KC!KC*M4dFTWX%**FD9S&-8F{rg   c                     |xs | j                         }|sdgd d fS | j                  j                  t        t	        j
                  |                  }|sdgd d fS |S r)  )ru   r   rw   rx   r   rv   )rc   ru   r   s      rf   getCaretContextPathRoleAndNamez(Utilities.getCaretContextPathRoleAndName  sd    %=););)=4t##,,00h6I6I-6X1YZ4t##	rg   c                    | j                          |xs | j                         }|sy t        j                  |      }| j                  j                  t        |      d        | j                  j                  t        |      d        y r   )r   ru   r   rv   r   rl   rx   r   )rc   ru   r+  s      rf   r~   zUtilities.clearCaretContext  sk     %=););)=$$]3Vd3Vd3rg   c                    t        j                  |      r(d}t        j                  t        j                  |d       yt        j                         j                         s(d}t        j                  t        j                  |d       y| j                         \  }}}t        j                  |      }||k7  r,d|d|g}t        j                  t        j                  |d       yt        j                  |      }	||	k7  r,d|d|	g}t        j                  t        j                  |d       yt        j                  |      |k7  }
| j                         }| j                  j                  t!        t        j"                  |                  \  }}d	|
g}t        j                  t        j                  |d       t        j                         j%                  |||
       | j'                  |||       y)
NzWEB: 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:)r   r  r   r   rz   r   r   focus_is_deadr8  r  ry   r4  r"  ru   r   rw   rx   rv   r   r   )rc   r  	replicantr   pathr  rM  replicantPathr   replicantRolenotifyru   ro   rp   s                 rf   handleEventFromContextReplicantz)Utilities.handleEventFromContextReplicant  s   I&3Cu//d;'')779VCu//d;>>@dD )))4= CT*M;Fe..= )))4= CT*M;Fe..=""9-5**,))--d83F3F}3U.VWVA6J%**FD9  "55eYOY>rg   c                    d }t        j                  |j                        r|j                  }nt        j                  |j                        r|j                  }n^t	        j
                  |j                  t         j                        xs. t	        j
                  |j                  t         j                        }|(d}t        j                  t        j                  |d       yd|dg}t        j                  t        j                  |d       t	        j                  |dd       t        j                  |      }t        j                  |      s8t         j                  s(d}t        j                  t        j                  |d       y| j                  j                  j!                  di       }|j!                  t#        t%        j&                         j)                                     }t	        j*                  |      |k7  }d	|d
g}t        j                  t        j                  |d       t%        j&                         j-                  |||       | j/                  |d       y)NzBWEB: Could not find listbox or tree to recover from removed child.TFzWEB: Checkingzfor 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   )r   r}  r  is_treer   r   r   r   rz   ry   r   get_focused_objectr|  is_tree_itemr{   r  rw   rx   r   r   r   r"  r   r   )	rc   r  r  r   r   r  r  oldNamer@  s	            rf   %_handleEventForRemovedSelectableChildz/Utilities._handleEventForRemovedSelectableChild  s   	""5<<0I  .I ..u||[=T=TU M))%,,8K8KL VCu//d;!9.BC%**FD9 	Y/]^--i8((.+2J2JSCu//d;--11'2>))D!9!9!;!N!N!PQR""4(G3EtSQ%**FD9  "55eT6JT1%rg   c                 ~   t        j                         j                         }j                  |k(  r(d}t	        j
                  t        j                  |d       nt        j                  |fd      r(d}t	        j
                  t        j                  |d       nt        j                         j                         rF| j                  j                  |dd      r(d}t	        j
                  t        j                  |d       n(d}t	        j
                  t        j                  |d       yj                  dk(  r(d	}t	        j
                  t        j                  |d       y| j                        ryd
\  }}d}| j                         \  }}t        j                  j                        }	|dk(  r<j                  |	k\  rHd}t	        j
                  t        j                  |d       | j!                  j                  d      \  }}n?dj                  dz
  cxk  r|	k  rqn nnt        j"                  j                  j                  dz
        }
d|
dg}t	        j$                  t        j                  |d       | j!                  |
d      \  }}n| j'                  j                        }d|dg}t	        j$                  t        j                  |d       | j!                  |d      \  }}nZ|dk(  rAj                  dk(  rHd}t	        j
                  t        j                  |d       | j)                  j                  d      \  }}ndj                  cxk  r|	k  ryn nvt        j"                  j                  j                        }
dj                  |
dg}t	        j$                  t        j                  |d       | j)                  |
d      \  }}no| j+                  j                        }d|dg}t	        j$                  t        j                  |d       | j)                  |d      \  }}nd}t        j,                  j                  dd       | j/                  j                        \  }}|t1        j2                  j                        }|rt        j                         j                         rt1        j4                  |      rx| j6                  j8                  j;                  di       }|j;                  t=        t        j                         j                                     }t        j>                  |      |k7  }|r?d||fz  }t        j                         jA                  ||       | jC                  ||       ydj                  g}t	        j$                  t        j                  |d       y)Nz%WEB: Removed child is locus of focus.Tc                 "    | j                   k(  S r   )r  r  s    rf   r,  z6Utilities.handleEventForRemovedChild.<locals>.<lambda>  s    Q%..5H rg   z1WEB: 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   zWEB: Event detail1 is useless.r)  r  zAWEB: Last child removed. Getting new location from end of parent.r   rt   z4WEB: 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)"r   r   r   r  r   r   rz   r   r   r;  isSameObjectdetail1rG  r  r   r  rI  r   ry   r  rD  r  r   r-  r   rD  rG  r{   r  rw   rx   r"  r   r   )rc   r  r  r   ro   rp   r@  	keyStringr  rI  r   r   rM  r   r  rF  s    `              rf   handleEventForRemovedChildz$Utilities.handleEventForRemovedChild  s   ((*==?>>U"9Cu//d;##E+HIECu//d;%%'557  dCQCu//d;\Cu//d;==B2Cu//d;55e<V224	4--ell;
}}
*Y""5#3#3S$?"225<<DVemma'4*4 **5<<9JKPRWY\]!!%"2"2FDA"225"=V11%,,?Z!3(!!%"2"2FDA"227B?V& }}!\""5#3#3S$?"..u||R@VU]]/Z/ **5<<GI5==&!!%"2"2FDA"..ub9V--ell;X!3(!!%"2"2FDA"..w;V F   u6YZ44U\\BKC{!44U\\B }//1??AkF\F\]`Fa5599'2F))D)A)A)C)V)V)X$YZ!**3/7:DV}TC$$&99%fM  f-FU%**FD9rg   c                 T   | j                  |      \  }}}| j                  |      }|r|rt        j                  |      |k7  rd }|r|rt        j                  |      |k7  rd }|sy| j                  |d      \  }}d|d|g}	t        j                  t        j                  |	d       ||fS )Nr)  r   zWEB: Context replicant isr  T)	r8  getObjectFromPathr   r4  r"  r   r   ry   rz   )
rc   ru   	matchRole	matchNamer=  oldRolerF  ro   rp   r   s
             rf   r2  zUtilities.findContextReplicantJ  s    !%!D!D]!Sgw$$T*9  %09  %000a8V-sD&A%**FD9F{rg   c                     t        j                  |      s| j                         }|r;| j                  j	                  t        t        j                  |                  }|r|S y)Nr)  )r   rj   ru   r   rw   rx   rv   )rc   ru   r   s      rf   getPriorContextzUtilities.getPriorContext[  sR      / ..0M))--d83F3F}3U.VWGrg   c                     | j                   j                  t        |            }||S t        j                  |      xs dg}|| j                   t        |      <   |S r)  )r   rw   rx   r   r  r@  s      rf   _getPathzUtilities._getPathf  sP    [[__T#Y'>Is#+t!#DI	rg   c                    |xs | j                         }|sy t        j                  |      }| j                  j	                  t        |      ||f      \  }}||f| j                  t        |      <   ||f| j                  t        |      <   | j                  |      }t        j                  |      }t        j                  |      }	|||	f| j                  t        |      <   y r   )ru   r   rv   r   rw   rx   r   rV  r4  r"  r   )
rc   ro   rp   ru   r+  oldObj	oldOffsetr=  r  rM  s
             rf   r   zUtilities.setCaretContexto  s    %=););)=$$]3 //33DL3-P	,2I,=DL),/KDL)}}S!  %  %8<dD8H''V5rg   c                 F    i | _         | j                  ||      }i | _         |S r   )r   _findFirstCaretContext)rc   ro   rp   r   s       rf   r   zUtilities.findFirstCaretContext~  s)    ,.)((f5,.)	rg   c                 d
   d|d|g}t        j                  t         j                  |d       t        j                  |      }t
        j                  j                  t
        j                  j                  t
        j                  j                  t
        j                  j                  g}||v ryt        j                  |      rd| j                  ||      sRt        j                  |d      }d|dg}t        j                  t         j                  |d       | j                  |d      S | j                  |      }|s?| j!                  |      r.d|dg}t        j                  t         j                  |d       |dfS t#        j$                  |      }|r
||k\  r| j'                  |      r| j)                         r| j+                  ||      \  }	}
|	s*d	|g}t        j                  t         j                  |d       no| j'                  |	      s-d
|	d|dg}t        j                  t         j                  |d       n1d|d|	d|
g}t        j                  t         j                  |d       |	|
fS d|d|d|d|g}t        j                  t         j                  |d       ||fS t-        d|      }|rt#        j.                  |      }||   | j0                  k7  s|t
        j                  j2                  k(  r+d}t        j4                  t         j                  |d       ||fS | j7                  |      r+d}t        j4                  t         j                  |d       ||fS t9        j:                  ||      }|s+d}t        j4                  t         j                  |d       ||fS | j=                  |      rl| j?                  |      r[d|d|d|dg}t        j                  t         j                  |d       |dz  }t9        j:                  ||      }| j?                  |      r[| jA                  |      r6d|d|dz   dg}t        j                  t         j                  |d       ||dz   fS | jC                  |      rH| j+                  ||      \  }	}
|	r1d|d|	d|
g}t        j                  t         j                  |d       |	|
fS | j!                  |      s1d|d|d|g}t        j                  t         j                  |d       ||fS d|d|d|g}t        j                  t         j                  |d       | j                  |d      S ) Nz(WEB: Looking for first caret context forr  Tr   zWEB: Will look in childzfor first caret contextz0WEB: First caret context for non-text context isr  z3WEB: No next object found at end of contenteditablezWEB: Next objectzfound at end of contenteditablezis not editablez2WEB: First caret context at end of contenteditablezis 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  zcannot be context.rt   z*WEB: First caret context is next offset inr  z!(skipping list item marker child)z/WEB: First caret context at end of empty anchorzcannot be context. ReturningzWEB: Looking in childzfor first caret context for)"r   ry   rz   r   r4  r   r_   r`   INTERNAL_FRAMEr   r  r   rJ  r   r[  r#  r&  r   rP  rH  lastInputEventWasCharNavrD  rd  r  r	  r  r   r)  r   r  r   r  isListItemMarkerr  )rc   ro   rp   r   r  lookInChild
firstChildr.  lengthr   
nextOffsetr  r   r   s                 rf   r[  z Utilities._findFirstCaretContext  s   <c4P%**FD9  %zzzz00zz''zz++- ;'',T__S&5Q!++C3J/=VWFe..=..z1==,,S1t88=H#sSFe..=6M++C06V+88=$B_B_Ba&*&6&6sF&C#SUXYF%%e&6&6EBB7K0'?FWYF%%e&6&6ERTW/$
LF%%e&6&6E"J..:Cvt4)Fe..=;Q))#.Gv$"@"@@DEJJL\L\D\=""5#3#3S$?F{" ..s3[""5#3#3S$?F{"//V<NCu//d;;??3,,U3&tS+vOcd!!%"2"2FDA!#77VD	 ,,U3   'BCqj"EGFe..=
?"e$"&"2"23"?GZKS+WdJH!!%"2"2FDA
**((/"E+I3PTV\]Fe..=;)52OQTVZ\bc%**FD9**5!44rg   c                     t        j                          }| j                  ||      }d|d|d|d   d|d   dt        j                          |z
  ddg	}t        j                  t        j                  |d	       |S )
NzWEB: Next caret in order forr  r  r   rt   r  r  r$  T)r  _findNextCaretInOrderr   ry   rz   rc   ro   rp   r  r   r   s         rf   r>  zUtilities.findNextCaretInOrder  sw    IIK	''V40#tVSQ%r!u$))+	*A#)Fb&IK%**FD9	rg   c                    |s| j                         \  }}|r| j                  |      sy| j                  |      rt| j                  |      rt	        j
                  |      }t        |dz   t        |            D ]  }t        j                  ||      }|rQ||   | j                  k7  r?d|d||   j                  dd      dg}t        j                  t        j                  |d       | j                  |      r,| j                  |d	      r|d
fc S | j!                  |d	      c S ||   | j                  | j"                  fvs||fc S  ngt%        j&                  |      r8| j                  ||      s&| j!                  t%        j(                  |d
      d	      S |d
k  r| j+                  |      s|d
fS | j-                  |      ry|rt%        j.                  |      rt| j1                  t%        j.                  |            r%| j3                  t%        j.                  |            }bt%        j.                  |      }t%        j4                  |      szd}t        j6                  t        j                  |d       | j9                  | j;                         |      }	t%        j4                  |	      r|	}nt%        j.                  |      r|}	 y| j=                  |      \  }
}}|
dz   |k(  r&d
|
cxk  r|cxk  r|k  rn n| j!                  ||
      S t%        j>                  |      }|r| j!                  |d	      S |}|rt%        j.                  |      rty)Nr)  rt   ERROR: Childfound at offset with char 'r  r  r  Tr   r   z6WEB: Finding next caret in order. Parent is not valid.) r   r   r&  r#  r   r  rq  r   r   r  r	  r  r   ry   rz   r  rf  ZERO_WIDTH_NO_BREAK_SPACEr   r   r   r!  r1  rv   r  r  rj   r   findReplicantru   r  r   rc   ro   rp   r  rQ  r   r   r+  r   r<  r  r  rc  s                rf   rf  zUtilities._findNextCaretInOrder  s	   ..0KC$005$$S)%%c* --c2vz3w<8 &A';;CCEt/M/M!M"0%9V")!*"4"4T5"A3"H))%*:*:FDI00733E2>#(!8O#99%DDqz ::D<Z<Z*\ \"Av& ))#.t7O7OPSU[7\11(2D2DS!2LbQQ!D$;$;C$@Av ""3'h))#.&&x':':3'?@44X5H5H5MN((-F$$V,N""5#3#3S$? ..t/A/A/CVL	$$Y/&F((0 C  "&!>!>s!CE3qyCA$>$>$>11&%@@--c2E11%<<C3 h))#.6 rg   c                     t        j                          }| j                  ||      }d|d|d|d   d|d   dt        j                          |z
  ddg	}t        j                  t        j                  |d	       |S )
Nz WEB: Previous caret in order forr  r  r   rt   r  r  r$  T)r  _findPreviousCaretInOrderr   ry   rz   rg  s         rf   rF  z"Utilities.findPreviousCaretInOrder'  sw    IIK	++C84c4Q%r!u$))+	*A#)Fb&IK%**FD9	rg   c                    |s| j                         \  }}|r| j                  |      sy| j                  |      r| j                  |      rt	        j
                  |      }|dk(  s|t        |      kD  rt        |      }t        |dz
  dd      D ]  }t        j                  ||      }|rQ||   | j                  k7  r?d|d||   j                  dd      dg}t        j                  t        j                  |d	       | j                  |      r,| j                  |d      r|d
fc S | j!                  |d      c S ||   | j                  | j"                  fvs||fc S  n}t%        j&                  |      rN| j                  ||      s<| j!                  t%        j(                  |t%        j&                  |      dz
        d      S |d
k  r| j+                  |      s|d
fS | j-                  |      ry|rt%        j.                  |      rt| j1                  t%        j.                  |            r%| j3                  t%        j.                  |            }bt%        j.                  |      }t%        j4                  |      szd}t        j6                  t        j                  |d	       | j9                  | j;                         |      }	t%        j4                  |	      r|	}nt%        j.                  |      r|}	 y| j=                  |      \  }
}}|
dz   |k(  r&d
|
cxk  r|cxk  r|k  rn n| j!                  ||
      S t%        j>                  |      }|r| j!                  |d      S |}|rt%        j.                  |      rty)Nr)  r   rt   ri  rj  r  r  r  Tr   z:WEB: Finding previous caret in order. Parent is not valid.) r   r   r&  r#  r   r  r   rq  r   r  r	  r  r   ry   rz   r  ro  rk  r   r   r   r!  r1  rv   r  r  rj   r   rl  ru   r  get_previous_siblingrm  s                rf   ro  z#Utilities._findPreviousCaretInOrder/  s:   ..0KC$005$$S)%%c* --c2R<6CL#8 \Fvz2r2 &A';;CCEt/M/M!M"0%9V")!*"4"4T5"A3"H))%*:*:FDI00733E2>#(!8O#==eRHHqz ::D<Z<Z*\ \"Av& ))#.t7O7OPSU[7\55&&sH,D,DS,IA,MNPRT T!D$;$;C$@Av ""3'h))#.&&x':':3'?@44X5H5H5MN((-F$$V,R""5#3#3S$? ..t/A/A/CVL	$$Y/&F((0 C  "&!>!>s!CE3qyCA$>$>$>55feDD11#6E55eR@@C3 h))#.6 rg   c                 
   | j                   y | j                   j                  j                  d      r| j                   j                  S | j                   j                  j                  d      r| j                   j                  S y )Nr  zobject:children-changed:add)r]   r   r  r  r  r   s    rf   lastQueuedLiveRegionzUtilities.lastQueuedLiveRegiono  sn    **2**//::;WX22999**//::;XY22;;;rg   c                    t        j                         j                  d      sy| j                  |j                        syt        j                         j                  d      sT| j                  |j                        | j                         k7  r(d}t        j                  t        j                  |d       y|j                  j                  d      rt        j                  |j                  | j                        }|rJt        j                   |      |j                  k(  r(d}t        j                  t        j                  |d       y| j"                  rn| j"                  j                  |j                  k(  rK| j"                  j$                  |j$                  k(  r(d}t        j                  t        j                  |d       yt'        |j$                  t(        j*                        rt        j,                  |j$                        rQ| j/                  |j$                        d	v r4d
|j$                  g}t        j0                  t        j                  |d       y| j3                         |j$                  k(  rK| j"                  j                  |j                  k7  r(d}t        j                  t        j                  |d       y|| _        y)NinferLiveRegionsF presentLiveRegionFromInactiveTabz-WEB: Live region source is not in active tab.Tr  z6WEB: 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   r   r   rz   r   r  r   r   rN  r   rD  r]   r  r   r   
Accessibleis_unknown_or_redundantr  ry   rs  )rc   r  r   rL  r   s        rf   handleAsLiveRegionzUtilities.handleAsLiveRegion{  s   **,778JK  .**,778Z[00>$BUBUBWWACu//d;::  !=>**5<<9I9IJE77>%,,NN""5#3#3S$?..22775::E22;;u~~MF""5#3#3S$?enne&6&67225>>B<</3CCBENNS!!%"2"2FDA((*enn<22775::EW""5#3#3S$?*/'rg   c                    | j                  |      st        | 	  |      S | j                  j	                  t        |            }||S t        j                  |      }t        |      dk(  rDt        |      t        dd      v r-d|dg}t        j                  t        j                  |d       d}n=t        j                  |      r&t        j                   |      xr t        |      dk(  }nd}|| j                  t        |      <   |S )Nrt   r  r  r  r  TF)r   r   preferDescriptionOverNamerS   rw   rx   r   r"  r   r  rq  r   ry   rz   rx  r   is_push_button)rc   ro   r   rM  r   re   s        rf   r|  z#Utilities.preferDescriptionOverName  s    %%c*74S99,,00c;>I  %t9>c$i5+@@$c+KLFe..=B%%c*++C0CSY!^BB57''S	2	rg   c                 ~    t         j                  t         j                  t         j                  t         j                  gS )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    ++--))++- 	-rg   c                 "   t         |          ry| j                         sy| j                         syt	        j
                  t        j                         j                               r(d}t        j                  t        j                  |d       yy)NTFz.WEB: Treating locus of focus as source of copy)r   lastInputEventWasCopyr    topLevelObjectIsActiveAndCurrentr   r  r   r   r   r   r   rz   )rc   r   re   s     rf   r  zUtilities.lastInputEventWasCopy  sr    7(*%%'446##M$<$<$>$Q$Q$STBCu//d;rg   r  )Tr   )F)Nr   F)r;  )r   r   )r   T)r   r   )Nr   NT)Trt  r0  )NTT)Nr   Nr)  (S  __name__
__module____qualname__r   rq   r   r   r   r   r   r   r   r   ru   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r$  r'  r.  r1  r8  r<  rD  rI  rS  r`  staticmethodrW  rV  r  r  r  r  r  r  r  r  r  r  r  r#  r  r  r  r  r"  r,  r7  r4  rZ  rY  r^  r]  rh  rg  re  rd  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r5  r'  r)  r.  r0  r!  r9  r;  r=  rJ  rN  rQ  rT  rY  r\  ra  re  ri  rm  rs  rw  ry  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  r  r  r  r  r
  r  r  r  r  r&  r6  r:  r  r  rC  rF  rI  r  rR  rW  rY  r]  r`  rb  r  re  ri  r&  r  r  ro  r  r*  r)  r  r  r  r  r  r  r  r!  r  r   r  r  r  r  r  r  r  r  rG  rp  rq  r  r  r  r  r  r  rr  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  ru  r2  r2  r  r4  r  r  rs  r<  rt  rm  rE  r  rK  rN  rQ  rT  rW  rC  r[  r  r   rh  r  r  rf  r  rp  r  r  r  r  r  r  ry  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  rH  r  r  r  r!  r  r&  r%  r-  r/  r   r8  r~   rA  rG  rM  r2  rT  rV  r   r   r[  r>  rf  rF  ro  rs  rz  r|  r  r  __classcell__)re   s   @rf   r   r   6   s   HJT/E(@#D$"`@a-162?

"( 2,6*D'&R(	#	#"=  052G$9$2:.`.6JX	?I"VFKPGR$JX>@<"@qf9v<|3,
/b> 	
Un%N8$+
<
"(T1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 

 6G   2:	"67c.G4>*D 02 ]~4
14l	4#J!FYv"	I\5|;z>@
)V*- rg   r   )%__id____version____date____copyright____license__girequire_versiongi.repositoryr   r  r  r  r  orcar   r   r   r   r	   r
   r   r   orca.ax_componentr   orca.ax_documentr   orca.ax_hypertextr   orca.ax_objectr   orca.ax_tabler   orca.ax_textr   orca.ax_utilitiesr   r   r   rg   rf   <module>r     s   * 7 	   7E "   	        !  ! ) ' ) # !  )[N ** [Nrg   