+
    Qi: c                  sr   R t ^ RIHt RtRtRtRtRt^ RIt^ RI	t	^ RI
t
^ RIt^ RIHt ^ RIt]P                  ! R	R
4       ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RI H!t! ^ RI"H#t# ^ RI$H%t% ^ RI&H't' ]'       d   ^RI(H)t)  ! R R]PT                  4      t*R# )LUtilities for providing information about objects and events in web content.)annotationsz$Id$z
$Revision$z$Date$zGCopyright (c) 2010 Joanmarie Diggs.Copyright (c) 2014-2015 Igalia, S.L.ZLGPLN)TYPE_CHECKINGAtspiz2.0)r   )debug)focus_manager)input_event_manager)script_utilities)settings_manager)AXComponent)
AXDocument)AXHypertext)AXObject)AXTable)AXText)AXUtilities)AXUtilitiesDebugging)Scriptc                  s  a  ] tR t^FtRtR V 3R lltR R ltRR R lltR R	 ltR
 R lt	RR R llt
RR R lltR R ltRR R lltRR V 3R llltR R ltRR R lltRR R lltR R ltR R lt]RR  R! ll4       tR" R# ltRR$ V 3R% llltR& R' ltRR( V 3R) llltRR* R+ lltR, R- ltR. R/ ltRR0 R1 lltR2 R3 ltR4 R5 ltRR6 R7 llt RR8 R9 llt!RR: R; llt"RR< R= llt#RR> R? llt$RR@ RA llt%RRB RC llt&RRD RE llt'RF RG lt(RRH RI llt)RJ RK lt*RRL RM llt+RRN RO llt,RRP RQ llt-RRR RS llt.RRT RU llt/RV RW lt0RX RY lt1RRZ V 3R[ lllt2RR\ R] llt3R^ R_ lt4R` Ra lt5Rb Rc lt6Rd Re lt7RRf V 3Rg lllt8Rh Ri lt9Rj Rk lt:Rl Rm lt;Rn Ro lt<RRp Rq llt=RRr Rs llt>Rt Ru lt?Rv Rw lt@RRx V 3Ry llltARz R{ ltBR| R} ltCR~ R ltDR R ltER R ltFRR R lltGR R ltHR R ltIRR R lltJR R ltKR R ltLR R ltMR R ltNR R ltOR R ltPR R ltQR R ltRR R ltSR R ltTR R ltUR R ltVR R ltWR R ltXR R ltYR R ltZR R lt[R R lt\R R lt]R R lt^R R lt_R R lt`RR ltaR R ltbR tcR R ltdR R lteR R ltfR R ltgR thRR ltiRR ltjR R ltkR R ltlR R ltmR R ltnR R ltoRR R lltpRR R lltqRR R lltrR tsR ttR tuRR R lltvRR R lltwR R ltxRR R lltyR R ltzR t{RR R llt|RR R llt}RR R llt~RR R lltR R ltRtV ;t# (   	Utilitiesr    c                    V ^8  d   QhRRRR/# )   scriptr   returnNone Zformat   "F/usr/lib/python3.14/site-packages/orca/scripts/web/script_utilities.py__annotate__Utilities.__annotate__I   s     #= #=v #=$ #=    c                	sZ  < \         SV `  V4       / V n        / V n        / V n        / V n        / V n        / V n        / V n        / V n	        / V n
        / V n        / V n        / V n        / V n        / V n        / V n        / V n        / V n        / V n        / V n        / V n        / V n        / V n        / V n        / V n        / V n        R V n        R V n        R V n        R V n        R V n        R V n         \B        PD                  PF                  \B        PD                  PH                  ./V n%        R V n&        R # N)'super__init___cached_caret_contexts_cached_prior_contexts'_cached_can_have_caret_context_decision%_cached_context_paths_roles_and_names_cached_paths_cached_in_document_content_cached_in_top_level_web_app_cached_is_text_block_element1_cached_is_content_editable_with_embedded_objects_cached_has_grid_descendant_cached_is_off_screen_label&_cached_element_lines_are_single_chars&_cached_element_lines_are_single_words_cached_is_clickable_element_cached_is_link_cached_is_custom_image_cached_is_useless_image_cached_is_redundant_svg _cached_is_useless_empty_element2_cached_has_name_and_action_and_no_useful_children_cached_inferred_labels_cached_should_filter_cached_should_infer_label_for_cached_treat_as_text_object_cached_treat_as_div_cached_object_contents_cached_sentence_contents_cached_line_contents_cached_word_contents_cached_character_contents_cached_find_containerr   RoleLIST	LIST_ITEM_valid_child_roles_find_container)selfr   	__class__   &&r   r!   ZUtilities.__init__I   s5    OQ#OQ#HJ4GI2.0<>(=?)>@*RT><>(<>(GI3GI3=?)028:$9;%9;%AC-SU?VX$68"?A+=?)57!\`$^b&Z^"Z^"_c'?C#ZZ__uzz3345 	8<r   c                   V ^8  d   QhRR/# r   r   r   r   r   r   r   r   r   n   s     7 74 7r   c                	s    . pV P                   P                  4        F7  w  pw  r4\        P                  ! V4      '       d   K&  VP	                  V4       K9  	  V F  pV P                   P                  VR 4       K!  	  R # r   )r"   Zitemsr   is_validappendpop)rF   Z	to_removekeyobj_offsets   &    r   _cleanup_contextsZUtilities._cleanup_contextsn   si    	#'#>#>#D#D#FC#$$S))  % $G C''++C6 r   c               $    V ^8  d   QhRRRRRR/# )r   documentAtspi.Accessible | Nonepreserve_contextboolr   r   r   r   r   r   r   r   w   s-     I I)I I 
	Ir   c                s:   \         P                  ! V4      '       g   V P                  4       p\         P                  ! V4      pV P                  P                  \        V4      4      pRVRVRV.p\        P                  ! \        P                  VR4       V P                  V4       V P                  4        V'       d^   V'       dT   RV^ ,          RV^,          .p\        P                  ! \        P                  VR4       W@P                  \        V4      &   R# R# R# )zMDumps all cached information about objects, and by default the caret context.z!WEB: Clearing all cached info forzPreserving context:zContext:TzWEB: Preserving context of,N)r   rK   active_document
get_parentr"   gethashr   print_tokens
LEVEL_INFOclear_caret_contextclear_cached_objects)rF   rS   rU   Zdocument_parentcontexttokens   &&&   r   
dump_cacheZUtilities.dump_cachew   s       **++-H"--h7--11$2GH5x')9:wP5++VT:  *!!#2GAJWQZPFu//>AH''_(=> !(r   c               rI   rJ   r   r   r   r   r   r      s     + +d +r   c                s   \         P                  ! \         P                  RR4       / V n        / V n        / V n        / V n        / V n        / V n        / V n	        / V n
        / V n        / V n        / V n        / V n        / V n        / V n        / V n        / V n        / V n        / V n        / V n        / V n        / V n        / V n        / V n        V P5                  4        / V n        RV n        R# )zClears cached object details.zWEB: cleaning up cached objectsTN)r   print_messager]   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r&   r%   r$   rQ   r#   r@   rF      &r   r_   ZUtilities.clear_cached_objects   s    
 	E,,.OQUV+-(,.)-/*AC>+-(+-(573573,.)!')$(*%(*%02-BD?')$%'".0+,.)$&!572794 &(#&*#r   c               rI   rJ   r   r   r   r   r   r      s     / /T /r   c                sL    RV n         RV n        RV n        RV n        RV n        R# )z9Clears the cached line, word, object, character contents.N)r;   r<   r=   r>   r?   re   rf   r   clear_content_cacheZUtilities.clear_content_cache   s,     (,$)-&%)"%)"*.'r   c               $    V ^8  d   QhRRRRRR/# )r   rO   Atspi.Accessibleexclude_document_framerV   r   r   r   r   r   r   r      s#     	 	/ 	 	Y] 	r   c                s    \         P                  ! V4      '       g   \         P                  ! V4      '       d   R# V'       g   \         P                  ! V4      # R# )z"Returns True if obj is a document.TF)r   is_document_webis_embeddedZis_document_frame)rF   rO   rj      &&&r   is_documentZUtilities.is_document   s?     &&s++{/F/Fs/K/K%0055r   c               r   r   rO   rT   r   rV   r   r   r   r   r   r      s      '> $ r   c                	s:   V'       g$   \         P                  ! 4       P                  4       pV P                  V4      '       d   R # V P                  P                  \        V4      4      pVe   V# V P                  V4      pVRJpW P                  \        V4      &   V# )TN)r   get_managerget_locus_of_focusrn   r'   rZ   r[   get_document_for_objectrF   rO   rvrS      &&  r   in_document_contentZUtilities.in_document_content   s    ++-@@BC C  --11$s)<>I//4T!68((c3	r   c               r   r   rO   ri   r   rV   r   r   r   r   r   r      s     - -1A -d -r   c                s   \         P                  ! V4      '       d   R# \         P                  ! V4      '       d(   \        P                  ! V\         P
                  4      RJ# \         P                  ! V4      '       dB   \        P                  ! V4      ^8X  d'   V P                  \        P                  ! V^ 4      4      # \         P                  ! V4      # )z<Returns true if we should grab focus when setting the caret.FN)
r   is_entryis_imager   find_ancestoris_link
is_headingget_child_count	get_childis_focusablerF   rO      &&r   grab_focus_when_setting_caretZ'Utilities.grab_focus_when_setting_caret   s     $$$$))#{/B/BC4OO!!#&&8+C+CC+HA+M<< 2 23 :;;'',,r   c               (    V ^8  d   QhRRRRRRRR/# )	r   rO   ri   offsetintrS   rT   r   r   r   r   r   r   r   r      s8     E EE E *	E
 
Er   c                	st   V P                   P                  4       P                  4       '       d)   V P                   P                  4       P                  4        V P	                  V4      pV P                  W4      w  rV P                  WV4       V P                   P                  4       '       d   R # \        P                  ! 4       P                  4       p\        P                  ! V4       \        P                  ! 4       P                  R VRR7       V'       d   \        P                  ! V4       \        P                   ! W4       V P                   P#                  W4      V P                   P%                  4       8w  d   V P                   P'                  R 4       V'       d   \        P(                  ! VRR4       R # R # )NF)Znotify_scriptzSet caret in object.)_scriptZget_flat_review_presenterZ	is_activeZquitr   first_contextset_caret_contextZfocus_mode_is_stickyr   rp   rq   r   Zclear_all_selected_textset_locus_of_focusr   
grab_focusset_caret_offsetZuse_focus_modein_focus_modeZtoggle_presentation_modeclear_cache)rF   rO   r   rS   r   	old_focus   &&&&  r   set_caret_positionZUtilities.set_caret_position   s7    <<113==??LL22499;77<
((5sH5<<,,..!--/BBD	&&y1!!#66tSPU6V$,<<&&s6$,,:T:T:VVLL11$7   e-CD r   c               r   ro   r   r   r   r   r   r     s     . .%< . .r   c                	s   < V'       g$   \         P                  ! 4       P                  4       pV P                  V4      '       d   R # \        SV `  V4      # F)r   rp   rq   rv   r    in_find_container)rF   rO   rG   rH   r   r   ZUtilities.in_find_container  sA    ++-@@BC##C((w(--r   c               rR   )r   rO   ri   r   r   r   r   r   r   r   r   r   r   
  s"     ) )$4 )c )d )r   c                s^    V P                  W4       V P                  P                  V4       R# )z$Sets the caret offset via AtspiText.N)r   r   Zupdate_braille)rF   rO   r   rm   r   r   ZUtilities.set_caret_offset
  s$    
 	,##C(r   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# 
r   rO   rT   r   r   
skip_spacerV   restrict_tor   #tuple[Atspi.Accessible | None, int]r   r   r   r   r   r     <     % %$% % 	%
 -% 
-%r   c                    Vf   V P                  4       w  rV P                  W4      w  rVV'       dG   \        P                  ! WV4      ^ ,          P	                  4       '       d   V P                  WV4      w  rVKF  WV3# )zAReturns the next viable/valid caret context given obj and offset.)get_caret_contextfind_next_caret_in_orderr   get_character_at_offsetisspace)rF   rO   r   r   r   next_objnext_offset   &&&&&  r   next_contextZUtilities.next_context  sl     ;002KC $ = =c J00GJRRTT(,(E(Eh(\%+$$r   c          
     r   r   r   r   r   r   r   r   %  r   r   c                r   )zEReturns the previous viable/valid caret context given obj and offset.)r   find_previous_caret_in_orderr   r   r   )rF   rO   r   r   r   prev_objprev_offsetr   r   previous_contextZUtilities.previous_context%  sl     ;002KC $ A A# N00GJRRTT(,(I(I((`%+$$r   c               r   )r   rootri   r   tuple[Atspi.Accessible, int]r   r   r   r   r   r   8  s      !1 6R r   c                s   a ^ pV P                  S4      '       d   \        P                  ! S4      ^,
          pR V3R llpSpV'       d2   V P                  WB4      w  rVV'       d   V! V4      '       g    WB3# YVr$K9  WB3# )z4Returns the last viable/valid caret context in root.c               r   )r   ori   r   rV   r   r   r   r   r   Z,Utilities.last_context.<locals>.__annotate__?  s     	[ 	[+ 	[ 	[r   c                sX   < V S8H  ;'       g    \         P                  ! V V3R  l4      RJ# )c                   < V S8H  # r   r   )xr      &r   <lambda>Z=Utilities.last_context.<locals>._is_in_root.<locals>.<lambda>@  s	    AIr   N)r   rz   )r   r   r   r   _is_in_rootZ+Utilities.last_context.<locals>._is_in_root?  s)    9ZZ 6 6q:M NVZ ZZr   )treat_as_text_objectr   get_character_countr   )rF   r   r   r   rO   last_objlast_offsets   &f     r   last_contextZUtilities.last_context8  s     $$T**//59F	[ 	[ $($5$5c$B!HX!6!6 { #{r   c               $    V ^8  d   QhRRRRRR/# )r   ar   br   rV   r   r   r   r   r   r   K  s-     D D'D (D 
	Dr   c                s    W8X  d   R# Vw  r4Vw  rVV P                  W4V^,           4      pV P                  WVV^,           4      pV P                  Wx4      # )z-Returns true if a and b are on the same line.T)_get_extents_extents_are_on_same_line)	rF   r   r   Za_objZa_offsetZb_objZb_offsetZ	a_extentsZ	b_extents	   &&&      r   contexts_are_on_same_lineZ#Utilities.contexts_are_on_same_lineK  sW     6%%ex!|D	%%ex!|D	--iCCr   c               s(    V ^8  d   QhRRRRRRRR/# )r   r   tuple[int, int, int, int]r   pixel_deltar   r   rV   r   r   r   r   r   r   \  s0      $$  
	r   c                	s   W8X  d   R # V w  r4rVVw  rxrV^ 8X  d#   V^ 8X  d   Yu;8*  ;'       d    W,           8*  # u # V	^ 8X  d#   V
^ 8X  d   YHu;8*  ;'       d    WF,           8*  # u # \        WF,           W,           4      p\        WH4      pW8  d   R# WF^,          ,           pW^,          ,           p\        W,
          4      V8  d   R# R # TF)minmaxabs)r   r   r   Z_a_xZa_yZa_widthZa_heightZ_b_xZb_yZb_widthZb_heightZhighest_bottomZ
lowest_topZa_middleZb_middles   &&&            r   r   Z#Utilities._extents_are_on_same_line[  s     6'($7'($7a<HM//////a<HM//////S^S^<]
'A%A%x"#k1r   c               (    V ^8  d   QhRRRRRRRR/# )r   rO   rT   start_offsetr   
end_offsetr   r   r   r   r   r   r   r   y  s2     5 5$5 5 	5
 
#5r   c                	s   V'       g   R# RpV P                  V4      '       d   ^ Tu;8:  d   V8  d   M M\        P                  ! WV4      pVP                  VP                  VP
                  VP                  3pV^ ,          '       dW   V^,          '       dH   V^,          ^ 8X  d:   V^,          ^ 8X  d,   \        P                  ! WV4      P                  4       '       g   V# RVRVRVRV.p\        P                  ! \        P                  VR4       \        P                  ! V4      p\        P                  ! V4      '       g   \        P                   ! V4      '       dP   \        P"                  ! V4      '       g   \        P$                  ! V4      '       d   \&        P(                  ! V4      pM\&        P(                  ! V4      pVP                  VP                  VP
                  VP                  3# )    z&WEB: Suspected bogus range extents forz(chars:rW   z):T)r   r   r   r   )r   r   get_range_rectr   ywidthheightget_substringstripr   r\   r]   r   rY   r   is_menuis_list_itemis_combo_boxis_list_boxr	   get_rect)	rF   rO   r   r   resultrectra   parentZexts	   &&&&     r   r   ZUtilities._get_extentsy  si    $$S))a<.L*.L((JGDffdffdjj$++>F1II&))q	Q6!9PQ>'':FLLNN>9lCT6SFu//>$$S)$$(@(@(E(E))&11[5L5LV5T5T&&v.C&&s+Csuucii44r   c               r   )r   rO   ri   r   r   r   r   strr   r   r   r   r   r     s8     B BB B 	B
 
Br   c                s0  < V P                  V4      '       g   \        SV `	  WV4      # V P                  V4      '       d.   RVR.p\        P
                  ! \        P                  VR4       R# V P                  V4      '       g   R# \        P                  ! V4      '       dg   \        P                  ! V4      '       dK   V P                  P                  P                  V4      pV P                  P                  P                  V4      # \        SV `	  WV4      # )zPExpands the current object replacing embedded object characters with their text.zWEB: not expanding EOCs:zhas grid descendantT )rv   r    expand_eocs_has_grid_descendantr   r\   r]   r   r   is_mathr   r}   r   Zspeech_generatorZgenerate_speechZutterances_to_string)rF   rO   r   r   ra   Z
utterancesrG   s   &&&&  r   r   ZUtilities.expand_eocs  s     '',,7&s*EE$$S))0#7LMFu//>((--s##(@(@(E(E66FFsKJ<<00EEjQQw"3jAAr   c               s     V ^8  d   QhRRRR/# )r   contents,list[tuple[Atspi.Accessible, int, int, str]]r   r   r   r   r   r   r     s     
 
>
 
6
r   c                	s    . pV FB  pV P                   ! VR ,          !  pV F"  w  rVrxp	VP                  V^ ,          WVV34       K$  	  KD  	  V# ):r      N)Zsplit_substring_by_languagerL   )
rF   r   rt   contentsplitstartendstringZ	_languageZ_dialect
   &&        r   _adjust_contents_for_languageZ'Utilities._adjust_contents_for_language  sW     G44gclCE;@7Fx		71:u6:; <A  
 	r   c               r   )r   rO   rT   r   r   r   r   zlist[tuple[int, int, str, str]]r   r   r   r   r   r     s2      $  	
 
)r   c                	sR  < \         S
V `  WV4      pV'       g   Vf   V# \        P                  ! V4      pVe   V P	                  V4      '       g   V# \
        P                  ! V4      p\
        P                  ! V4      pV P                  WVV4      w  rVP                  ^ ^W34       V# r   )
r    -get_language_and_dialect_from_text_attributesr   rY   rv   r   get_link_start_offsetget_link_end_offsetZ&get_language_and_dialect_for_substringrL   )rF   rO   r   r   rt   r   r   r   ZlanguageZdialectrG   s   &&&&      r   r   Z7Utilities.get_language_and_dialect_from_text_attributes  s     WB3V`aI $$S)>!9!9&!A!AI11#6--c2 GGWZ[
		1a+,	r   c          
     s,    V ^8  d   QhRRRRRRRRR	R/# )
r   rO   rT   r   r   r   r   	use_cacherV   r   r   r   r   r   r   r     s<      $  ?	
  
r   c                s   V'       d	   V'       g   R# \        ^ V4      pV Uu. uF  qU^ ,          V8X  g   K  VNK  	  ppV Uu. uF'  qU^,          Tu;8:  d   V^,          8  g   K!  M K%  VNK)  	  ppV'       d6   V^ ,          '       d'   V^ ,          V9   d   VP                  V^ ,          4      # V'       g^   V Uu. uF  qRV^,          8X  g   K  VNK  	  ppV'       d6   V^ ,          '       d'   V^ ,          V9   d   VP                  V^ ,          4      # V P                  V4      '       g   R# \        P                  ! W4      pV'       d`   V P                  V4      '       gI   V Uu. uF  qU^ ,          V8X  g   K  VNK  	  pp\        V4      ^8X  d   VP                  V^ ,          4      # R# u upi u upi u upi u upi )z.Returns the index of obj + offset in contents.)r   indexis_text_block_elementr   find_child_at_offsetlen)	rF   rO   r   r   r   r   ZmatchesZmatchchilds	   &&&&&    r   find_object_in_contentsZ!Utilities.find_object_in_contents  sb    (IQ&6hA$#+11h6#=Gqtv'<!'<'<G=U1XX%(h"6>>%(++ ':1QqT>QQE:qeAh(&:~~eAh//))#..I00=33E::"*<(Qdemqq(G<7|q ~~gaj11	% 7= ; =s4   F,F,F1&F1*F1;F6F6&F;:F;c               r   ro   r   r   r   r   r   r     s     , ,(? ,D ,r   c                s|   V'       d   \         P                  ! V4      '       d   R# V P                  P                  \	        V4      4      pVe   V# \         P
                  ! V4      '       g   R# V P                  V4      '       d!   V P                  P                  4       '       d   R# \        P                  ! V4      ^ 8  ;'       g    \        P                  ! V4      pV'       d{   V P                  VR	4      '       dc   \         P                  ! V4      '       dG   V P                  V4      '       g0   RVR.p\         P"                  ! \         P$                  VR4       RpEMV'       Ed   \        P&                  ! V4      '       Eg   \(        P*                  P,                  \(        P*                  P.                  \(        P*                  P0                  .p\         P2                  ! V4      pV'       d4   WT9   d.   RVR.p\         P"                  ! \         P$                  VR4       RpV'       da   \        P4                  ! V4      '       g   V P7                  V4      '       d.   RVR.p\         P"                  ! \         P$                  VR4       RpV'       dE   V P9                  V4      '       d.   RVR.p\         P"                  ! \         P$                  VR4       RpV'       dE   V P;                  V4      '       d.   RVR.p\         P"                  ! \         P$                  VR4       RpW P                  \	        V4      &   V# )
z7Returns True if obj should be treated as a text object.FTzWEB: Treatingz+as non-text: named object treated as whole.zas non-text due to role.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   )r   is_deadr9   rZ   r[   supports_textrv   r   browse_mode_is_stickyr   r   r   is_editable_treat_object_as_wholeget_name_is_cell_with_name_from_headerr   r\   r]   is_live_regionr   rA   LIST_BOXTABLE	TABLE_ROWget_role	is_hidden_is_off_screen_label#_is_non_navigable_embedded_document_is_fake_placeholder_for_entry)rF   rO   rt   ra   Znot_text_rolesrole   &&    r   r   ZUtilities.treat_as_text_object  s_    h&&s++..2249=>I%%c**'',,0R0R0T0T'',q0PPK4K4KC4P$--c2668;L;LS;Q;Q66s;;%s,YZFu//>BR22377#jj115::3C3CUZZEYEYZN$$S)Dd,)30JK""5#3#3VTB{,,S11T5N5Ns5S5S)30]^""5#3#3VTBd>>sCC)30bc""5#3#3VTBd99#>>)30]^""5#3#3VTB79))$s)4	r   c               r   rw   r   r   r   r   r   r   #  s      ?O TX r   c                	sB   V'       d   V P                  V4      '       g   R # V P                  P                  \        V4      4      pVe   V# R p\        P
                  ! V4      '       dl   \        P                  ! V4      '       dP   \        P                  ! V4       F3  pV P                  V4      '       d   V P                  V4      '       g   K3   M	  RpV'       d,   RVR.p\        P                  ! \        P                  VR4       W P                  \        V4      &   V# )FTWEB:z*has name and action and no useful children)rv   r5   rZ   r[   r   has_explicit_namer   supports_actioniter_children_is_useless_empty_element_is_useless_imager   r\   r]   )rF   rO   rt   r   ra      &&   r   +_has_name_and_action_and_no_useful_childrenZ5Utilities._has_name_and_action_and_no_useful_children#  s    0055DDHHcS>I((--(2J2J32O2O!//455e<<@V@VW\@]@] 5 c#OPFu//>MO??S	J	r   c               rR   r   rO   ri   r   z
int | Noner   rV   r   r   r   r   r   r   :  s(     J J*: JJ JZ^ Jr   c           	     	s(	   \         P                  P                  \         P                  P                  \         P                  P                  \         P                  P
                  \         P                  P                  \         P                  P                  \         P                  P                  \         P                  P                  \         P                  P                  .	p\         P                  P                  \         P                  P                  \         P                  P                  \         P                  P                  .p\        P                   ! V4      pWS9   d   R # WT9   d(   V P"                  P%                  4       '       d   R # VR8H  # V\         P                  P&                  8X  dL   \        P(                  ! V4      ^8X  d/   V P+                  \        P,                  ! V^ 4      4      '       d   R # R# \.        P0                  ! V4      '       d   R# V\         P                  P2                  8X  dP   V P5                  V4      '       d    V P"                  P7                  4       '       * # V P9                  V4      '       d   R # V\         P                  P:                  \         P                  P<                  39   d   \.        P>                  ! V4      '       d   R # V\         P                  P@                  8X  d   R # V\         P                  PB                  \         P                  PD                  \         P                  PF                  39   d    V P"                  P7                  4       '       * # V\         P                  PH                  8X  d0   \.        P>                  ! V4      ;'       g    V PK                  V4      # V PM                  V4      '       d   R # V P+                  V4      '       d   R # V PO                  V4      '       d   R # WPPQ                  4       9   dr   \.        PR                  ! V4      '       dV   \.        P>                  ! V4      '       d:   \        PT                  ! V4       F  pV PW                  V4      '       d   K   R# 	  R # R# )TFr   ),r   rA   	CHECK_BOXCHECK_MENU_ITEMr   	MENU_ITEMPAGE_TABRADIO_MENU_ITEMRADIO_BUTTONZPUSH_BUTTONZTOGGLE_BUTTONMENUZMENU_BARTOOL_BAR	TREE_ITEMr   r   r   r   ENTRYr}   r   r~   r   r   
TABLE_CELLis_focus_mode_widgetr   r  COLUMN_HEADER
ROW_HEADERr   	COMBO_BOXEMBEDDEDTREE
TREE_TABLEZLINKhas_useless_canvas_descendantr   is_custom_image_text_block_element_rolesr   r  r  )rF   rO   r   ZalwaysZdescendabler   r      &&&    r   r   Z Utilities._treat_object_as_whole:  s   **&&**,,**%%**&&**%%**,,**))**((****, zzzz**zz**zz++-
   %>||))++ R<5::###'',155h6H6Ha6PQQ""3''5::(((((--<<==?????DDEJJ,,ejj.C.CDD,,S115::'''EJJ''%**:O:OPP||99;;;5::??"005``9[9[\_9``33C88..s33$$ 11338P8PQT8U8U,,S11!//455e<<  5 r   c               r   )	r   rO   ri   r   r   granularityAtspi.TextGranularityr   ztuple[str, int, int]r   r   r   r   r   r     s2     >" >">" >" +	>"
 
>"r   c                	s   R  pV'       g5   RVRV R2VRR.p\         P                  ! \         P                  VR4       R# V P                  V4      '       g5   RVRV R2VRR.p\         P                  ! \         P                  VR4       R# \        P
                  ! V4      pVfW   T^ \        V4      rpV! V4      p
RVRV R2VRRV
 R	V R
V	 R2.p\         P                  ! \         P                  VR4       WxV	3# V\        P                  P                  8X  d   \        P                  ! V4      '       g   \        P                  ! V4      \        P                  P                  \        P                  P                   39   g5   \"        P$                  ! RV4      '       d   V P'                  V4      '       gW   T^ \        V4      rpV! V4      p
RVRV R2VRRV
 R	V R
V	 R2.p\         P                  ! \         P                  VR4       WxV	3# V\        P                  P(                  8X  dN   V P+                  W4      '       d7   V^,          pRVRVR.p\         P                  ! \         P                  VR4       \-        ^ V4      pV\        P                  P(                  8X  d   \        P.                  ! W4      w  rxp	MV\        P                  P                  8X  d   \        P0                  ! W4      w  rxp	MV\        P                  P2                  8X  d   \        P4                  ! W4      w  rxp	MRV\        P                  P6                  8X  d   \        P8                  ! W4      w  rxp	M\        P.                  ! W4      w  rxp	V! V4      p
RVRV R2VRRV
 R	V R
V	 R2.p\         P                  ! \         P                  VR4       WxV	3# )c                sF    V P                  R R4      P                  RR4      # )   ￼z[OBJ]
\n)replacer   rf   r   string_for_debugZ7Utilities._get_text_at_offset.<locals>.string_for_debug  s     99Xw/77eDDr   r   
at offset z for:z#'', Start: 0, End: 0. (obj is None)Tz='', Start: 0, End: 1. (treat_as_text_object() returned False)'z
', Start: z, End: .z\wzWEB: Line sought forz#at end of text. Adjusting offset to)r   r   r   )r   r      )r   r\   r]   r   r   get_all_textr   r   TextGranularitySENTENCEr   r   r   r   rA   rC   HEADINGresearchr   LINEtreat_as_end_of_liner   get_line_at_offsetZget_sentence_at_offsetWORDZget_word_at_offsetCHARr   )rF   rO   r   r  r$  ra   all_textr   r   r   s   &&&&       r   _get_text_at_offsetZUtilities._get_text_at_offset  s{   	E kZxt+Dc3;=Fu//>O((--kZxt+Dc3UWFu//>O&&s+!)1c(m3F (AkZxt+Dc3!JugWSE;=Fu//>#%%%//888AXAXY\A]A]  %%***>*>

@R@R)SSyy11d6P6PQT6U6U%-q#h-s$V, +F84/H#saS
5'Q?A""5#3#3VTBc))%//4449R9RSV9_9_aKF,c3Xc#Fu//>Q%//444!'!:!:3!GF3E11:::!'!>!>s!KF3E11666!'!:!:3!GF3E11666!'!?!?!LF3!'!:!:3!GF3V$+F84'@#saS
5'Q795++VT:c!!r   c               r   )	r   rO   ri   r   r   r  r  r   r   r   r   r   r   r   r     s>     GO GOGO GO +	GO
 
6GOr   c                	s"	  a R W.p\         P                  ! \         P                  VR4       V'       g   . # V\        P                  P
                  8X  dK   \        P                  ! V4      '       d/   \        P                  ! V4      pV'       d   V^ \        V4      V3.# V\        P                  P                  8X  Ed   \        P                  ! V4      '       d-   \        P                  ! V\        P                  4      pV^ ^R3.# V P!                  V4      pV P#                  V4      '       d   \        P$                  ! V4      '       dc   V'       d[   RVR.p\         P                  ! \         P                  VR4       V^ \        P&                  ! V4      \        P$                  ! V4      3.# RVR.p\         P                  ! \         P                  VR4       RpV P)                  V4      '       d   \        P$                  ! V4      '       dc   V'       d[   RVR.p\         P                  ! \         P                  VR4       V^ \        P&                  ! V4      \        P$                  ! V4      3.# RVR.p\         P                  ! \         P                  VR4       Rp\        P*                  ! V4      '       dD   \        P,                  ! V4      ^8X  d)   V P/                  \        P0                  ! V^ 4      ^ V4      # V P3                  WV4      w  rXp	V'       g   WW3.# \5        ^ W(,
          4      o VS,          p
V
R8X  d2   \6        P8                  ! W4      ;p'       d   V P/                  V^ V4      # \>        P@                  ! RT4       Uu. uF  qPC                  4       NK  	  pp\E        \G        T3R lT4      4      p\        T4      ^8X  d-   T^ ,          w  ppTT,          pTTT pT\        T4      ,           p	T\        P                  PH                  \        P                  PJ                  39   d   YY3.# T PM                  YY3.4      #   \:         d4    R	S R
T R2p\         P<                  ! \         P                  TR4        ELi ; iu upi )z#WEB: Attempting to get contents forTr   z#WEB: Returning name as contents forz(single-char lines)z'WEB: Returning all text as contents forNz(single-word lines)r  zWEB: Could not get char z for 'r'  u   [^￼]+c                sL   < V ^ ,          Su;8*  ;'       d    V ^,          8*  # u # )r   r   )r   string_offsetr   r   r   Z1Utilities._get_contents_for_obj.<locals>.<lambda>  s    !(E(E1(Er   )'r   r\   r]   r   r+  r,  r   Zis_timer   r*  r   r0  is_math_relatedr   find_ancestor_inclusiver   r   _element_lines_are_single_charsr   r   _element_lines_are_single_wordsZis_internal_framer}   _get_contents_for_objr~   r8  r   r   r   Z
IndexErrorrd   r.  ZfinditerZspanlistfilterr3  r4  r   )rF   rO   r   r  ra   r   mathtreat_as_textr   r   charr   msgZmZrangesZstringsZrange_startZ	range_endr9  s   &&&&              @r   r>  ZUtilities._get_contents_for_obj  s    8J5++VT:I%//888[=P=PQT=U=U((-FaVf566%//444**3//77[=P=PQq!R()) 55c:M33C88$$S))mCSJ_`F&&u'7'7F !V%?%?%DhFWFWX[F\]^^CSJ_`""5#3#3VTB"33C88$$S))mCSJ_`F&&u'7'7F !V%?%?%DhFWFWX[F\]^^CSJ_`""5#3#3VTB"((--(2J2J32OST2T--h.@.@a.H![YY!55c;Os-..Av~.	M-(D
 x'<<SII5I55eQLL$&KKf$EF$Eq&&($EFvEvNOw<1%,QZ"K[ EK	2F#f+%C50055u7L7L7Q7QRR-..11C3L2MNN'  	=,]O6&KC 0 0#t<	= Gs   0	Q 
R:R	R	c               r   	r   rO   ri   r   r   r   rV   r   r   r   r   r   r   r   r     2        	
 
6r   c                F    / V n         V P                  WV4      p/ V n         V# )z7Returns the sentence contents for the specified offset.)r$   )_get_sentence_contents_at_offset_internalrF   rO   r   r   rt      &&&& r   get_sentence_contents_at_offsetZ)Utilities.get_sentence_contents_at_offset  s+     8:4;;CS794	r   c               r   rE  r   r   r   r   r   r     s8     K KK K 	K
 
6Kr   c                	sP  a a V'       g   . # \        ^ V4      pV'       dL   S P                  '       d:   S P                  WS P                  RR7      R8w  d   S P                  ;'       g    . # \        P                  P
                  pS P                  WV4      o\        P                  ! V4      '       d8   \        P                  ! V4      '       d   S# S P                  V4      '       d   S# V 3R lpS^ ,          w  rgrV'       Ed   V	'       Ed   S P                  V4      '       d
   V^ 8X  d   MMGS P                  \        P                  ! V4      4      '       d   \        P                  ! V4      ^ 8X  d   MS P!                  Wg4      w  rS P                  WV4      p\#        \%        V3R lV4      4      p\#        \%        W\4      4      pV'       d$   VP'                  VR,          4      pW^,           R pV'       g   MVSR&   S^ ,          w  rgrEK  V! SR,          4      '       gs   SR,          w  ppppS P)                  VV^,
          4      w  ppS P                  VVV4      p\#        \%        V3R lV4      4      pV'       g   MSP+                  V4       K  V'       d   SS n        S# )	r   Tr   c                sX  < V w  rr4SP                  V4      '       g   R # SP                  V4      '       d(   ^ \        P                  ! V4      u;8  d
   V8:  d    R#  ^ Tu;8:  d   ^8:  d*   M M&RP	                  VP                  4       R,          4      p\        P                  ! V4      # )FTZ :r)  NN)r   r   r   r   Zjoinr   Zhas_sentence_ending)r   x_objx_startx_endx_stringrF   s   &    r   _treat_as_sentence_endZSUtilities._get_sentence_contents_at_offset_internal.<locals>._treat_as_sentence_end4  s    ./+EE--e44((//A8R8RSX8Y4b]b4b 5c G q 88HNN$4R$89--h77r   c                   < V S9  # r   r   r   objectsr   r   r   EUtilities._get_sentence_contents_at_offset_internal.<locals>.<lambda>M  s
    AW,<r   Nr   r   Nc                rR  r   r   rS  r   r   r   rU  ^  s
    Qg-=r   r   )r   r<   r   r   r+  r,  r>  r   r   
is_focused)is_content_editable_with_embedded_objectsr   r   rY   r   get_character_offset_in_parentr   r?  r@  r   r   extend)rF   rO   r   r   r  rQ  	first_objfirst_start
_first_endfirst_stringZprev_objectr   on_leftZends_on_leftir   _last_startlast_end_last_stringr   r   on_rightrT  s   f&&&                  @r   rH  Z3Utilities._get_sentence_contents_at_offset_internal  sF    IQ777++!?!?4 , QTVW55;;;++44,,S+F""3''%%c**==cBB	8 <C1:8	
iLL)))44!# $++H,?,?	,JKK==iHAM'+'H'H'`$K00;WG6"<gFGG'= GHLMM,r"23!A#$-"GCL?Fqz<IJ )55<CBK9Hk8\$($A$A(HWXL$Y!Hk11(KUHF#=xHIHNN8$-4D*r   c               r   rE  r   r   r   r   r   r   i  rF  r   c                rG  )z?Returns the character contents for obj at the specified offset.)r$   *_get_character_contents_at_offset_internalrI  rJ  r    get_character_contents_at_offsetZ*Utilities.get_character_contents_at_offseti  s+     8:4<<S)T794	r   c               r   rE  r   r   r   r   r   r   v  s2        	
 
6r   c                	sL   V'       g   . # \        ^ V4      pV'       dL   V P                  '       d:   V P                  WV P                  RR7      R8w  d   V P                  ;'       g    . # \        P                  P
                  pV P                  WV4      pV'       d   WPn        V# )r   TrL  r   )r   r?   r   r   r+  r4  r>  )rF   rO   r   r   r  rT  r   r   re  Z4Utilities._get_character_contents_at_offset_internalv  s     IQ888++!@!@D , RUWX66<<"<++00,,S+F.5+r   c               r   rE  r   r   r   r   r   r     rF  r   c                rG  )zJReturns a list of (obj, start, end, string) tuples for the word at offset.)r$   _get_word_contents_at_offsetrI  rJ  r   get_word_contents_at_offsetZ%Utilities.get_word_contents_at_offset  s+     8:4..sIF794	r   c               r   rE  r   r   r   r   r   r     s8     W WW W 	W
 
6Wr   c                	s0  a aaa S'       g   . # \        ^ V4      pV'       dk   S P                  '       dY   S P                  SVS P                  RR7      R8w  d5   S P                  SVS P                  R4       S P                  ;'       g    . # \        P
                  P                  pS P                  SW$4      oS P                  SW"^,           4      oVVVV 3R lpS^ ,          w  rgrS P                  Wg4      w  rV
'       d   V	'       d   W8w  d   \        P                  ! W4      ^ ,          pV'       d   VP                  4       '       d   MS P                  WV4      p\        \        W]4      4      pV'       g   M]S P                  S^ ,          VR,          4      '       d   SP!                  ^ 4       VSR&   S^ ,          w  rgrS P                  Wg4      w  rK  SR,          w  rppV'       d   V'       d   VR,          P                  4       '       g   S P#                  VV^,
          4      w  ppVV8X  d   MS P                  VVV4      pV'       d,   S P                  S^ ,          VR,          4      '       d   V^ R p\        \        VV4      4      pV'       g   M SP%                  V4       SR,          w  rppK  S^ ,          w  rgrV^ 8X  d'   \&        P(                  ! V4      '       d   S^ ,          .oV'       d   SS n        S P                  SVSR4       S# )r   TrL  zWord (cached)c                sT  < V S9   d   R # \         P                  ! S4      '       d   R # V w  rr4W#8X  g	   V'       g   R # \         P                  ! S4      '       d&   \         P                  ! V4      '       d
   SV8w  d   R # S	P                  WV^,           4      pS	P	                  SV4      # r   )r   is_text_inputZis_table_cell_or_headerr   r   )
r   rM  rN  rO  rP  	x_extentsextentsrO   rT  rF   s
   &     r   _includeZ8Utilities._get_word_contents_at_offset.<locals>._include  s    G|((--./+EEx2237766u==#,))%'A+FI11'9EEr   rV  zWord (not cached)r   )r   r>   r   _debug_contents_infor   r+  r3  r>  r   r   r   r   r   r?  r@  _content_is_subset_ofrM   r   rZ  r   r   )rF   rO   r   r   r  rl  r[  r\  r]  r^  r   r   rC  r_  r   ra  rb  Zlast_stringr   r   rd  rk  rT  s   ff&&                 @@r   rg  Z&Utilities._get_word_contents_at_offset  s    IQ333++!;!;t , MPRS))!;!;_N1177R7++00,,S&F##C!<	F 	F& <C1:8	
 $ A A) Y<H,A11(HKD4<<>>00TG6(45G))'!*gbkBBA"GCL?Fqz<IJ$($E$Ei$]!Hk 8?r{4x;{2/F/F/H/H$($A$A(HWXL$Y!Hk8#11(KUHD66wqz8B<PP#Ab>F8X67HNN8$;B2;8H8[ <C1:8	
! 8 8 C CqzlG)0D&!!#vw8KLr   c               r   rE  r   r   r   r   r   r     rF  r   c                rG  )zLReturns a list of (obj, start, end, string) tuples for the object at offset.)r$   _get_object_contents_at_offsetrI  rJ  r   get_object_contents_at_offsetZ'Utilities.get_object_contents_at_offset  s+     8:400iH794	r   c               r   rE  r   r   r   r   r   r      s8     D DD D 	D
 
6Dr   c                	s  aaaa Sf   . # \         P                  ! S4      '       d+   Rp\        P                  ! \        P                  VR4       . # \        ^ V4      pV'       di   V P                  '       dW   V P                  SW P                  RR7      R
8w  d4   V P                  SW P                  R4       V P                  ;'       g    . # \        P                  ! S4      oVV3R loVVVV3R lpV P                  SVR 4      oS'       g1   RSRV 2.p\        P                  ! \        P                  VR4       . # SR
,          w  rxrV P                  Wy^,
          4      w  rV'       d|   V P                  WR 4      p\        \        W]4      4      pV'       g   MLSP!                  V4       SR
,          ^ ,          SR
,          ^,          rV P                  Wy^,
          4      w  rK  V'       d   SV n        V P                  SVSR	4       S# )Nz<ERROR: Cannot get object contents at offset for dead object.TrL  zObject (cached)c                sb   < V '       g   R # V S8X  d   R# S! \         P                  ! V 4      4      # FT)r   rY   )r   _is_in_objectrO   s   &r   rr  Z?Utilities._get_object_contents_at_offset.<locals>._is_in_object  s)    Cx !4!4Q!788r   c                s   < V S9   d   R # V w  rr4W#8X  d   R # S'       d&   \         P                  ! V4      '       d
   SV8w  d   R # S! V4      # r   )r   is_landmark)	r   rM  rN  rO  	_x_stringrr  rO   obj_is_landmarkrT  s	   &    r   rl  Z:Utilities._get_object_contents_at_offset.<locals>._include!  sG    G|/0,EE;#:#:5#A#AcUl ''r   z%ERROR: Cannot get object contents forr%  zObject (not cached)r   )r   r   r   rd   r]   r   r;   r   rm  r   rs  r>  r\   r   r?  r@  rZ  )rF   rO   r   r   rD  rl  ra   r   ra  rb  rc  r   r   rd  rr  ru  rT  s   &f&&          @@@r   ro  Z(Utilities._get_object_contents_at_offset   s    ;IC  PC 0 0#t<IQ555++!=!= , ORTU))!=!=?PR3399r9%11#6	9	( 	( ,,S&$?=sjQWPXDYZFu//>I8?5x $ = =hST U11(NHF867HNN8$!(QQh$($A$A(WXL$Y!Hk+2D(!!#vw8MNr   c               r   )r   	content_a&tuple[Atspi.Accessible, int, int, str]	content_br   rV   r   r   r   r   r   r   F  s(      9 : 
	r   c                	s    Vw  r4rVVw  rxrW78X  d:   \        \        WE4      4      p\        \        W4      4      pVP                  V4      # R # r   )setrangeZissubset)rF   rv  rx  Zobj_aZstart_aZend_aZ	_string_aZobj_bZstart_bZend_bZ	_string_bZset_aZset_bs   &&&          r   rn  ZUtilities._content_is_subset_ofF  sM    
 ,5(+4(>g-.Eg-.E>>%((r   c          
     ,    V ^8  d   QhRRRRRRRRR	R
/# )r   rO   ri   r   r   r   r   contents_msgr   r   r   r   r   r   r   r   r   T  s<     = == = ?	=
 = 
=r   c                	s   \         P                  \         P                  8  d   R # RVRVRVR.p\         P                  ! \         P                  VR4       Rp\	        V4       Fq  w  pw  rrV P                  WV
4      pRV RV	 RV
 R	V R
V R2pV\        P                  ! WR4      ,          p\         P                  ! \         P                  VR4       Ks  	  R # )NWEB: Zfor	at offsetr&  Tz     z	. chars: Z-z: 'z
' extents=r   Fz        )	r   r]   Z
debugLevelr\   Z	enumerater   r   Zobject_details_as_stringrd   )rF   rO   r   r   r|  ra   Zindentr`  accr   r   r   rk  rD     &&&&&         r   rm  ZUtilities._debug_contents_infoT  s     e...<[&#N5++VT:,5h,?(A(C''C8G!IeWAcU#fXZyPRSC'@@eTTC 0 0#t<	 -@r   c               rR   )r   rO   ri   r   r   r   rV   r   r   r   r   r   r   h  s"        (8  #  $  r   c                s   V P                  V4      '       g   R# \        P                  ! V4      '       g   R# V P                  V4      '       d   R# V\        P
                  ! V4      8X  d0   RVRVR.p\        P                  ! \        P                  VR4       R# \        P                  ! W4      ^ ,          pVR8X  d   V P                  W^,
          V4      pV P                  WV^,           4      pV P                  WV4      pRVRVRVRV'       * .p\        P                  ! \        P                  VR4       V'       * # R# )	zKReturns true if the offset in obj should be treated as the end of the line.Fr}  r   z(is end of line: offset is characterCountTr  zis [obj]. Same line: zIs end of line: )rX  r   r   rn   r   r   r   r\   r]   r   r   r   )rF   rO   r   ra   rC  Zprev_extentsZthis_extentsZ	same_line   &&&     r   r1  ZUtilities.treat_as_end_of_lineh  s    ==cBB%%c**C  V//44sHf6`aFu//> --c:1=8,,S1*fEL,,S&1*EL66|RIsHf6M!3]DFu//> = r   c          
     r{  r   rO   ri   r   r   layout_modebool | Noner   rV   r   r   r   r   r   r   r   r     s<     
 

 
 !	

 
 
6
r   c                	sF    / V n         V P                  WW44      p/ V n         V# r   )r$   _get_line_contents_at_offset)rF   rO   r   r  r   rt   s   &&&&& r   get_line_contents_at_offsetZ%Utilities.get_line_contents_at_offset  s+     8:4..sKS794	r   c          
     r{  r  r   r   r   r   r   r     sC     o oo o !	o
 o 
6or   c                	sn  a aa a!a" \         P                   ! 4       pS'       g   . # \        P                  ! S4      '       d+   R p\        P                  ! \        P
                  VR4       . # \        ^ V4      p\        P                  ! S4      '       g   \        P                  ! S4      '       d;   S P                  S4      '       g$   \        P                  ! SV4      pV'       d   Vo^ pV'       dk   S P                  '       dY   S P                  SVS P                  RR7      R8w  d5   S P                  SVS P                  R4       S P                  ;'       g    . # VfG   \         P"                  ! 4       P%                  R4      ;'       g    S P&                  P)                  4       p. o"V^ 8  d4   S P+                  SV4      '       d   S P-                  SV^,
          V4      o MS P-                  SW"^,           4      o \        P.                  ! S\        P0                  4      eA   \        P2                  ! S\        P4                  4      pV'       d   S P-                  V^ ^4      o \        P2                  ! S\        P6                  4      o!\        P.                  ! S\        P8                  4      p	V VV!V"V 3R lp
\:        P<                  P>                  pS PA                  SW+4      o"V'       g&   V'       d   S"S n        S P                  SVS"R4       S"# S"'       d   S"^ ,          '       g-   RS.p\        PB                  ! \        P
                  VR4       . # S"^ ,          w  rppS ^,          ^ 8X  d   S ^,          ^ 8X  g   \        PD                  ! V4      '       d   S P-                  WV4      o S"R,          w  pppp\        PF                  ! V4      '       d   S PI                  V4      w  ppV^,          pS PK                  S4      pS PM                  W4      w  ppS PO                  VV^,
          4      w  pp\         P                   ! 4       pV'       d   S PK                  V4      V8X  d   V	\        P.                  ! V\        P8                  4      8w  d   MS PA                  VVV4      p\Q        \S        V
V4      4      pV'       g   MqS PU                  S"^ ,          VR,          4      '       d   S"PW                  ^ 4       VS"R&   S"^ ,          ^ ,          S"^ ,          ^,          rS PM                  W4      w  ppK  \         P                   ! 4       pR	VV,
          R
 R2p\        P                  ! \        P
                  VR4       \         P                   ! 4       pV'       Ed0   S PK                  V4      V8X  Ed   V	\        P.                  ! V\        P8                  4      8w  d   MS PA                  VVV4      pV'       d,   S PU                  S"^ ,          VR,          4      '       d   V^ R p\Q        \S        V
V4      4      pV'       g   MS"PY                  V4       S"R,          ^ ,          S"R,          ^,          pp\        PF                  ! V4      '       d   S PI                  V4      w  ppV^,          pS PO                  VV^,
          4      w  ppEK8  \         P                   ! 4       pRVV,
          R
 R2p\        P                  ! \        P
                  VR4       S"^ ,          w  rppVR8X  d"   \[        S"4      ^8  d   S"PW                  ^ 4       V'       d   S"S n        R\         P                   ! 4       V,
          R
 R2p\        P                  ! \        P
                  VR4       S P                  SVS"R4       / S n.        S"# )z:ERROR: Cannot get line contents at offset for dead object.TrL  zLine (cached)Z
layoutModec                s^  < V S9   d   R # V w  rr4W#8X  d   R # SP                  WV^,           4      pS	V8w  Ed   \        P                  ! S	4      '       d   \        P                  ! V4      '       d   R # SP                  S	4      '       d   SP                  V4      '       d   \        P
                  ! V\        P                  4      pS
'       g	   V'       d
   S
V8w  d   R # \        S^ ,          V^ ,          ,
          4      ^8:  d(   \        S^,          V^,          ,
          4      ^8:  d   R # MSP                  S	4      SP                  V4      8w  d   R # \        P                  ! S	4      '       d   \        P                  ! V4      '       d   R # \        P                  ! S	4      '       d   \        P                  ! S	4      '       d   R # \        P                  ! V4      '       d   \        P                  ! V4      '       d   R # \        P                  ! V4      '       g   \        P                  ! S	4      '       d   SP                  SVS^,          4      pV# \        P                   ! V\        P"                  4      '       d   SP                  SWU^,          4      pV# SP                  SV4      pV# r   )r   r   rs  r{   r   rz   is_landmark_bannerr   _is_block_list_descendantZis_tree_relatedr|   r	   has_no_sizer   r:  r   r;  Z is_subscript_or_superscript_text)r   rM  rN  rO  rt  rj  Zx_obj_bannerZon_same_linerk  rO   
obj_bannerrT  rF   s   &       r   rl  Z8Utilities._get_line_contents_at_offset.<locals>._include  s   G|/0,EE))%'A+FIe|**3//K4K4KE4R4R <<$$e)<)<#+#9#9%A_A_#`L"l
l8R$71:	!45:s71:PYZ[P\C\?]ab?b$33C8D<Z<Z[`<aa  0055+:U:UV[:\:\  ++C00[5L5LS5Q5Q  ++E22{7N7Nu7U7U ""5))[-H-H-M-M#==gyRYZ[R\]   11;GGI I#==gy\]R^_    $==gyQr   zLine (not layout mode)z WEB: Error. No objects found forrV  z)INFO: Time to get line contents on left: .4fr6  z*INFO: Time to get line contents on right: r   z!INFO: Time to get line contents: zLine (layout mode)r   )/timer   r   r   rd   r]   r   r   is_tool_barZis_menu_barr   r   r   r=   r   rm  r   rp   get_settingr   r   r1  r   r;  is_inline_list_itemrz   is_listr  is_table_rowr   r+  r0  r>  r\   r:  r   r   rr   r   r   r?  r@  rn  rM   rZ  r   r$   )#rF   rO   r   r  r   
start_timerD  r   	containerZobj_rowrl  r  ra   r[  r\  Z	first_endr^  r   ra  rb  rc  rS   r   r   r   r   Zprev_start_timer_  Zprev_end_timeZnext_start_timerd  Znext_end_timerk  r  rT  s#   ff&&&                           @@@r   r  Z&Utilities._get_line_contents_at_offset  s9    YY[
IC  NC 0 0#t<IQ##C((K,C,CC,H,H33C8844S&AE333++!;!;t , MPRS))!;!;_N1177R7*668DD\R 0 0<<--/  A:$33C@@''VaZ@G''VaZ@G++C1P1PQ] ..sK4G4GHI++Iq!<++C1O1OP
2238P8PQ$	  $	 L ++00,,S&F-4*%%c67<TUNGAJJ8#>Fu//>I:A!*7		<AJ!O
aK4O4OPY4Z4Z''		JG8?5+xx((!%!2!28!<HhMH//4 $ A A) Y+ $ = =hST U+ ))+477AXM(::8[E]E]^^00;TG6(G45G))'!*gbkBBA"GCL%,QZ]GAJqM{$($E$Ei$]!Hk		9-/:YZ]9^^_`E,,c48 ))+h477AXM(::8[E]E]^^11(KUHD66wqz8B<PP#Ab>F8X67HNN8$!(QQhH""8,,%)%6%6x%@"(A$($A$A(HWXL$Y!Hk		:=?;Z[^:__`aE,,c48:A!*7		<4CL1$4KKN)0D&1$))+
2J31OqQE,,c48!!#vw8LM794r   c          
     r{  r   rO   rT   r   r   r  r  r   rV   r   r   r   r   r   r   r   r   G  sC     A A$A A !	A
 A 
6Ar   c                s   Vf   V P                  4       w  rRVRV.p\        P                  ! \        P                  VR4       \        P
                  ! V4      '       gz   RVR.p\        P                  ! \        P                  VR4       V P                  4        V P                  4       w  rRVRV.p\        P                  ! \        P                  VR4       V P                  WW44      pV'       d   V^ ,          '       g   . # V^ ,          ^ ,          V^ ,          ^,          rRVRV.p\        P                  ! \        P                  VR4       \        P                  ! 4       P                  R4      '       * p	V P                  WxV	4      w  rV'       gZ   V'       dR   R	VRVR
.p\        P                  ! \        P                  VR4       V P                  4        V P                  WxV	4      w  rR	VRV.p\        P                  ! \        P                  VR4       V P                  WW44      p
V
'       g/   RVRV.p\        P                  ! \        P                  VR4       . # Wj8X  dS   V P                  WR4      w  rRVRV.p\        P                  ! \        P                  VR4       V P                  WW44      p
Wj8X  d   \        P                  ! V4      p\        P                  ! \        P                  VR4       V^ 8  di   \        P                  ! V4      pV P                  WR4      w  rRVRV.p\        P                  ! \        P                  VR4       V P                  WW44      p
V
# )zIReturns a list of (obj, start, end, string) tuples for the previous line.WEB: Current context is: , TWEB: Current context objis not valid. Clearing cache.WEB: Now Current context is: zWEB: First context on line is: speakBlankLinesz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   r\   r]   r   rK   r_   r  r   rp   r  r   r   r   rY   )rF   rO   r   r  r   ra   liner[  Zfirst_offsetr   r   r   r   s   &&&&&        r   get_previous_line_contentsZ$Utilities.get_previous_line_contentsG  s    ;002KC-sD&A5++VT:  %%0#7VWFu//>%%'002KC5sD&IFu//>//[TaI"&q'!*d1gaj<3YlS5++VT:)557CCDUVV
++IZPy2CvGXYFu//>%%'//	TKC.T6B5++VT:33CX=sD&QFu//>I//TBKC>T6RFu//>77[\H55c:Eu//>z!,,S1"33F4H2CvF""5#3#3VTB;;C`r   c          
     r{  r  r   r   r   r   r   r     sC     D D$D D !	D
 D 
6Dr   c                s   Vf   V P                  4       w  rRVRV.p\        P                  ! \        P                  VR4       \        P
                  ! V4      '       gz   RVR.p\        P                  ! \        P                  VR4       V P                  4        V P                  4       w  rRVRV.p\        P                  ! \        P                  VR4       V P                  WW44      pV'       d   V^ ,          '       g   . # VR,          ^ ,          VR,          ^,          ^,
          r\        P                  ! V\        P                  4      p	V	'       d   V P                  V	4      w  rxRVRV.p\        P                  ! \        P                  VR4       \        P                  ! 4       P                  R4      '       * p
V P                  WxV
4      w  rV'       gZ   V'       dR   R	VRVR
.p\        P                  ! \        P                  VR4       V P                  4        V P                  WxV
4      w  rR	VRV.p\        P                  ! \        P                  VR4       V P                  WW44      pWk8X  dS   V P                  WR4      w  rRVRV.p\        P                  ! \        P                  VR4       V P                  WW44      pWk8X  d   \         P"                  ! V4      pV^ 8  di   \        P$                  ! V4      pV P                  WR4      w  rRVRV.p\        P                  ! \        P                  VR4       V P                  WW44      pV'       g/   RVRV.p\        P                  ! \        P                  VR4       . # V# )zEReturns a list of (obj, start, end, string) tuples for the next line.r  r  Tr  r  r  zWEB: Last context on line is: r  zWEB: Next context is: r  r  r  r  r   )r   r   r\   r]   r   rK   r_   r  r;  r   r   r   r   rp   r  r   r   r   rY   )rF   rO   r   r  r   ra   r  r   r   rA  r   r   r   r   r  r   get_next_line_contentsZ Utilities.get_next_line_contents  s    ;002KC-sD&A5++VT:  %%0#7VWFu//>%%'002KC5sD&IFu//>//[TaI $RT"Xa[1_+//+:M:MN$($5$5d$;!H2HdKP5++VT:)557CCDUVV
''zJx.T6CTUFu//>%%'++H:NKC*Cv>5++VT:33CX++C>KC>T6RFu//>77[\H11#6Cax!,,S1"//TB2CvF""5#3#3VTB;;C`=sD&QFu//>Ir   c               rR   )r   r   ri   
find_startrV   r   rT   r   r   r   r   r   r     s(        
!	r   c                	s   \         P                  ! V4      ^ ,          pV'       g   R# V'       d   VP                  R4      '       g   V# V'       g   VP                  R4      '       g   V# \	        \        \        P                  ! V4      4      4      pV'       g   VP                  4        V F5  pV P                  \        P                  ! W4      V4      pV'       g   K3  Vu # 	  R# )r   Nr  )r   Zget_selected_text
startswithendswithr?  rz  r   r}   Zreverse_find_selection_boundary_objectr~   )rF   r   r  r   Zindicesr`  r   r  r   r  Z)Utilities._find_selection_boundary_object  s    
 ))$/2f//99K&//(";";KuX55d;<=OOA99(:L:LT:UWabFv 
 r   c               r   )r   r   ri   r   z7tuple[Atspi.Accessible | None, Atspi.Accessible | None]r   r   r   r   r   r     s       
Ar   c                	sP    V P                  VR 4      pV P                  VR4      pW#3# r   )r  )rF   r   obj1obj2ru   r   _get_selection_anchor_and_focusZ)Utilities._get_selection_anchor_and_focus  s0     33D$?33D%@zr   c               r   )r   	start_objri   end_objr   list[Atspi.Accessible]r   r   r   r   r   r     s(     3 3#3 "3 
 	3r   c                	s   V'       d	   V'       g   . # \         P                  ! V4      '       d+   R p\        P                  ! \        P                  VR4       . # R pR p. p\         P
                  ! V4      p\        \         P                  ! V4      \         P                  ! V4      4       Fq  p\         P                  ! Wx4      p	\        P                  ! V	4      '       g   K7  VP                  V	4       VP                  V P                  WV4      4       W&9   g   Kq   M	  W!8X  d   V# W&9  d3   VP                  V4       VP                  V P                  W$V4      4       \         P
                  ! V4      p
\         P                  ! V4      p\         P                  ! W^,           4      ;'       g    Tp VP                  V4      pW8X  d
   V^,          pVRV pV#   \          d     T# i ; i)z/INFO: Cannot get subtree: Start object is dead.Tc                s
    V R J# r   r   r#  rf   r   rl  Z(Utilities._get_subtree.<locals>._include  s    D= r   c                s8    \         P                  ! V 4      '       * # r   )r   is_web_elementr#  rf   r   _excludeZ(Utilities._get_subtree.<locals>._exclude  s    "11!444r   N)r   r   r   rd   r]   rY   rz  Zget_index_in_parentr}   r~   r   r  rL   rZ  Z_find_all_descendantsr   Z
ValueError)rF   r  r  rD  rl  r  ZsubtreeZstart_obj_parentr`  r   Zend_obj_parentZend_obj_indexr   Z	end_index   &&&           r   _get_subtreeZUtilities._get_subtree  s   
 gII&&CC 0 0#t<I	!	5 #..y9x33I> 001ABDA&&'7;E--e44NN5!NN455exPQ!D N!NN7#NN455gRS!,,W5 44W=%%na6GHSSG	*h/I "Q	jy)G  	 	s   4G G*)G*c               rh   )r   rO   ri   speak_messagerV   r   r   r   r   r   r   r   '  s(     $ $$ $ 
	$r   c                s  <a a S P                  V4      '       d!   S P                  P                  4       '       d   \        SS `  V4      # S P                  P
                  P                  RR4      w  r4S P                  V4      w  rVWV3S P                  P
                  R&   V 3R lpS P                  W44      pWS8X  d
   Wd8X  d   VoMJS P                  WV4      p	\        \        V4      P                  V	4      \        P                  ! V4      R7      oS'       g   R# S FT  p
WWEV39  d:   \        P                  ! V
V3R l4      '       d   \         P"                  ! V
4       KE  \        SS `  W4       KV  	  R# )z&Handles a change in the selected text.ZselectionAnchorAndFocusc                sx   < SP                  \        P                  ! V 4      \        P                  ! V4      4      # r   )Zpath_comparisonr   get_path)r  r  rF   rH   r   _cmpZ4Utilities.handle_text_selection_change.<locals>._cmp6  s-    ''(9(9$(?ARARSWAXYYr   )rN   Fc                s   < V S9   # r   r   )r   descendantsr   r   r   Z8Utilities.handle_text_selection_change.<locals>.<lambda>F  s
    [@Pr   T)NN)rv   r   r   r    handle_text_selection_changepoint_of_referencerZ   r  r  Zsortedry  Zunion	functoolsZ
cmp_to_keyr   rz   r   Zupdate_cached_selected_text)rF   rO   r  Z	old_startZold_endr   r   r  Zold_subtreeZnew_subtreeZ
descendantr  rG   s   f&&        @r   r  Z&Utilities.handle_text_selection_change'  s:    '',,0J0J0L0L77<< LL++//0I<X 		99#>
FK\''(AB	Z ''	;#.%K++E7K K &&{39M9Md9SUK %JWS!AA))*6PQQ22:>4ZO & r   c               r   ro   r   r   r   r   r   r   M  s      (? 4 r   c                s\   Vf$   \         P                  ! 4       P                  4       pV P                  P	                  \        V4      4      pVe   V# V P                  V4      pV'       g   V P                  V4      '       d   TpV P                  V4      pW P                  \        V4      &   V# )z=Returns True if the object is in a top-level web application.)	r   rp   rq   r(   rZ   r[   rr   rn   is_top_level_web_apprs   ru   r   in_top_level_web_appZUtilities.in_top_level_web_appM  s     ;++-@@BC..2249=>I//4D,,S11H&&x079))$s)4	r   c               r   rw   r   r   r   r   r   r   _  s      (8 T r   c                sj   \         P                  ! V4      '       d   V P                  \        P                  ! V4      4      '       gl   \
        P                  ! V4      p\        T;'       d    VP                  R4      4      pRVRVRVR.p\        P                  ! \        P                  VR4       V# R# )z:Returns True if the object is a top-level web application.Zhttpr   zis top-level web application:z(URI:)TF)r   rl   rr   r   rY   r
   get_urirV   r  r   r\   r]   )rF   rO   urirt   ra   r  r   r  ZUtilities.is_top_level_web_app_  s     ""3''//0C0CC0HII$$S)Cc44cnnV45Bc#BBQTVYZFu//>Ir   c               r   rw   r   r   r   r   r   r   l  s      <L QU r   c                s(   \         P                  ! V\        P                  4      '       g   R# \        P                  ! V4      '       d   \        P
                  ! V4      # \        P                  ! V4      '       d   V P                  V4      '       * # R# )zGReturns true if we should force browse mode for web-app descendant obj.F)r   rz   r   rl   is_tool_tiprW  rk   r  r   r   r   (force_browse_mode_for_web_app_descendantZ2Utilities.force_browse_mode_for_web_app_descendantl  sj     %%c;+B+BCC""3''))#..&&s++00555r   c               r   rw   r   r   r   r   r   r   z  s     T T(8 TT Tr   c                s   \         P                  ! V4      '       d.   RVR.p\        P                  ! \        P                  VR4       R# \         P
                  ! V4      '       df   \         P                  ! V4      '       dJ   \         P                  ! V4      '       g.   RVR.p\        P                  ! \        P                  VR4       R# \        P                  P                  \        P                  P                  \        P                  P                  \        P                  P                  \        P                  P                  \        P                  P                  \        P                  P                   \        P                  P"                  \        P                  P$                  \        P                  P&                  \        P                  P(                  \        P                  P*                  \        P                  P,                  \        P                  P.                  \        P                  P0                  \        P                  P2                  .p\4        P6                  ! V4      pWC9   d.   RVR.p\        P                  ! \        P                  VR4       R# V\        P                  P8                  \        P                  P:                  39   d^   \<        P>                  ! \<        P@                  ! V4      4      '       d.   RVR.p\        P                  ! \        P                  VR4       R# \         PB                  ! W4      '       d.   RVR.p\        P                  ! \        P                  VR4       R# \         PD                  ! W4      '       d.   RVR	.p\        P                  ! \        P                  VR4       R# \        P                  PF                  \        P                  P8                  \        P                  P:                  .pWE9   d   V PI                  V4      '       gp   V PK                  V4      '       gY   \L        PN                  ! V PQ                  V4      4      '       g.   RVR
.p\        P                  ! \        P                  VR4       R# \4        PR                  ! V\         PT                  4      e.   RVR.p\        P                  ! \        P                  VR4       R# \4        PR                  ! V\         PV                  4      e,   RVR.p\        P                  ! \        P                  VR4       \4        PR                  ! V\         PX                  4      e.   RVR.p\        P                  ! \        P                  VR4       R# V P[                  V4      '       d.   RVR.p\        P                  ! \        P                  VR4       R# R# )z=Returns true if obj should be treated as a focus-mode widget.r   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 onlyFz0is focus mode widget because it's a listbox itemz5is 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   r   r   r\   r]   Zis_expandabler   r{   r   rA   r  r  r   r  r	  r  r  r
  PASSWORD_TEXTZPROGRESS_BARZSLIDERZSPIN_BUTTONr  r  r  r  r   r   r  r   r   Zis_layout_tableZ	get_tableis_list_box_itemZis_button_with_popupr  r   r  r
   Zis_pdfrr   rz   is_gridr   r  rX  )rF   rO   ra   Zalways_focus_mode_rolesr   Zfocus_mode_rolesr   r   r  ZUtilities.is_focus_mode_widgetz  s    ""3''c#OPFu//>$$S))k.F.Fs.K.K&&s++c#_`Fu//>#(::#7#7#(::#3#3#(::#6#6#(::??#(::#7#7#(::#=#=#(::#=#=#(::#6#6#(::#;#;#(::#:#:#(::#4#4#(::#9#9#(::#6#6#(::#7#7#(::#8#8#(::??#4"   %*c#IJFu//>EJJ))5::+;+;<<&&w'8'8'=>>c#VWFu//>''22c#UVFu//>++C66c#Z[Fu//>!JJ//!JJ11!JJ,,. #--c22CCCHH$$T%A%A#%FGGc#YZFu//>!!#{':':;Gc#XYFu//>!!#{':':;Gc#XYFu//>!!#{'>'>?Kc#[\Fu//>99#>>c#WXFu//>r   c               rI   )r   r   zlist[Atspi.Role]r   r   r   r   r   r     s      +; r   c                	s   \         P                  P                  \         P                  P                  \         P                  P                  \         P                  P
                  \         P                  P                  \         P                  P                  \         P                  P                  \         P                  P                  \         P                  P                  \         P                  P                  \         P                  P                  \         P                  P                  \         P                  P                  \         P                  P                  \         P                  P                   \         P                  P"                  \         P                  P$                  \         P                  P&                  \         P                  P(                  \         P                  P*                  \         P                  P,                  \         P                  P.                  \         P                  P0                  \         P                  P2                  \         P                  P4                  .pV# r   )r   rA   ZARTICLEZCAPTIONr  ZCOMMENTZCONTENT_DELETIONZCONTENT_INSERTIONZ
DEFINITIONZDESCRIPTION_LISTZDESCRIPTION_TERMZDESCRIPTION_VALUEZDOCUMENT_FRAMEZDOCUMENT_WEBZFOOTERZFORMr-  rB   rC   ZMARK	PARAGRAPHr  SECTIONSTATICZ
SUGGESTIONZTEXTr  )rF   roless   & r   r  Z#Utilities._text_block_element_roles  sM   ####))##,,--&&,,,,--**((""##%%%%&&##""&&&&1(4 r   c               r   )	r   r   rT   only_showingrV   minimum_wordsr   r   r  r   r   r   r   r   r     s2     
 
%
 
 	

 
 
r   c                sf   < V'       d   V P                  V4      '       g   \        SV `	  WV4      # . # )z:Returns a list of labels in root that lack a relationship.)rv   r    unrelated_labels)rF   r   r  r  rG   s   &&&&r   r  ZUtilities.unrelated_labels  s/     11$777+DNN	r   c               r   rw   r   r   r   r   r   r     s     G G0@ GT Gr   c                s   V'       d   V P                  V4      '       g   R# \        P                  ! V4      ;'       dM    V P                  V4      '       * ;'       d/    \	        \
        P                  ! V\        P                  4      4      # )zGReturns true if obj is focusable, not a document, and has a math child.F)rv   r   r   rn   Zanyr   r  r   r   r   r   is_focusable_with_math_childZ&Utilities.is_focusable_with_math_child  sq     0055'', G GT5E5Ec5J1J G GX++C1D1DEF	Gr   c               r   rw   r   r   r   r   r   r     s     + +.> +4 +r   c                s`    V P                  V4      '       g   R# \        P                  ! V4      # )zEReturns true if obj is focused, not a document, and has a math child.F)r  r   rW  r   r   r   is_focused_with_math_childZ$Utilities.is_focused_with_math_child  s)     0055%%c**r   c               r   rw   r   r   r   r   r   r     s      )9 d r   c                s   V'       d   V P                  V4      '       g   R# V P                  P                  \        V4      4      pVe   V# \        P
                  ! V4      V P                  4       9  d   RpM\        P                  ! V4      '       g   RpM\        P                  ! V4      '       d   RpM\        P                  ! V4      '       d   RpMn\        P                  ! V4      '       d   RpMOV P                  V4      '       d   RpM5\        P                  ! V4      '       g   V P                  V4      '       * pMRpW P                  \        V4      &   V# )z,Returns true if obj is a text block element.FT)rv   r)   rZ   r[   r   r   r  r   r   r   Zis_grid_cellrn   r  r   r  rF   rO   rt      && r   r   ZUtilities.is_text_block_element  s    0055//33DI>>IS!)G)G)IIB'',,B$$S))B%%c**B$$S))B!!#&&B))#..EEcJJBB8:**495	r   c               r   rw   r   r   r   r   r   r   *  s      2B t r   c                	s    \         P                  ! V4      '       dE   V P                  V4      '       g.   V P                  P	                  4       P                  4       '       * # R # T)r   is_table_cellr   r   get_caret_navigator'last_input_event_was_navigation_commandr   r   r   _advance_caret_in_empty_objectZ(Utilities._advance_caret_in_empty_object*  sE    $$S))$2K2KC2P2P||779aacccr   c               rR   r  r   r   r   r   r   r   0  s#     + + 0 +* +PT +r   c                s  a	 V'       d   V P                  V4      '       g   R# \        P                  ! V4      '       d   R# \        P                  ! V4      '       d4   Ve0   \        P
                  ! WV^,           4      pV'       d
   VR8w  d   R# \        P                  ! V4      p\        P                  ! V4      '       d   V'       g   R# V P                  P                  \        V4      4      pVe   V# RpV P                  P                  \        P                  ! V4      4      o	S	'       d:   V'       g   RpM.V	3R lp\        \        \        P                   ! W4      4      4      pV'       gh   \        P"                  ! V4      pV P                  P                  V4      o	S	'       d/   V	3R lp\        \        \        P                   ! Wx4      4      4      pWPP                  \        V4      &   V# )z6Returns True if the object should be treated as a div.Fr  Tc                N   < V R J;'       d    \         P                  ! V 4      S9  # r   r   r   r   valid_rolesr   r   pred1Z%Utilities.treat_as_div.<locals>.pred1M  %    D=TTX->->q-A-TTr   c                r  r   r  r  r   r   pred2Z%Utilities.treat_as_div.<locals>.pred2V  r  r   )rv   r   Zis_description_listr  r   r   r   r}   Zis_panelr:   rZ   r[   rD   r   rV   r?  r  rY   )
rF   rO   r   r   child_countrt   r  r   r  r  s
   &&&      @r   treat_as_divZUtilities.treat_as_div0  sh    0055**3//s##(:))#vzBF&H,..s3$$[&&**495>I--11(2C2CC2HIU $x55cABC((-F1155f=KU$x55fDEF/1!!$s),	r   c               s$    V ^8  d   QhRRRRRR/# )r   r   r   infer_labelsrV   r   r   r   r   r   r   r   ]  s(     0 0>0 0 
6	0r   c                sx   a aa VVV 3R lp\        S4      ^8X  d   S# \        \        VS4      4      p/ S n        V# )zPFilters contents for presentation, removing objects that should not be included.c                s  < V w  rr4V'       d   \         P                  ! V4      '       d   R # SP                  P                  \	        V4      4      pVe   V# T;'       g    \         P
                  ! V4      pRpSP                  V4      '       g   SP                  V4      '       d	   V'       d   SP                  V4      '       d   VP                  4       '       d   SP                  V4      '       g   \        P                  ! V4      '       d	   V'       d   \        P                  ! V4      '       gw   SP                  V4      '       g`   SP!                  V4      '       gI   SP#                  VS	4      '       g1   SP%                  VS	4      '       g   SP'                  VS	4      '       d   R pM\        P(                  ! V4      '       d   \        P*                  ! V4      pMsSP-                  V S	4      p\.        P0                  P2                  \.        P0                  P4                  .pV'       d&   S
'       g   \         P6                  ! V4      V9   d   R pVSP                  \	        V4      &   V# rq  )r   r   r7   rZ   r[   r   r   r{   rX  r   _is_empty_anchorr	   r  r   r   r   r  %is_link_ancestor_of_image_in_contentsZis_error_for_contents_is_labelling_contentsr  r   is_inferred_label_for_contentsr   rA   r  r  r   )r   rO   _start_endr   rt   textZwidgetZalways_filterr   r  rF   s   &        r   rl  Z<Utilities.filter_contents_for_presentation.<locals>._includef  s   ()%C(**3//++//S	:B~	33X..s3DB++C00DLL4E4EtAA#FFv||~~'',,**3//'',,++C00((--<<S(KK,,S(;;--c8<<))#.. 2237<<QI!&!8!8%**:N:N O|x/@/@/HM/YB46D&&tCy1Ir   )r   r?  r@  r7   )rF   r   r  rl  rt   s   fff  r    filter_contents_for_presentationZ*Utilities.filter_contents_for_presentation]  s:     	D x=AO&8,-%'"	r   c               r   rw   r   r   r   r   r   r     s      (8 T r   c                	s   V'       g   R # V P                   P                  \        V4      4      pVe   V# \        P                  ! V4      '       g   R pM1V P                  4       pW8w  d   V P                  V4      pV'       g   R pVf"   \        P                  ! V4      p\        V4      pW P                   \        V4      &   V# r   )
r+   rZ   r[   r   r}   rX   r   r   Zfind_all_gridsrV   )rF   rO   rt   rS   Zdocument_has_gridsZgridsr   r   r   ZUtilities._has_grid_descendant  s    --11$s)<>I'',,B++-H%)%>%>x%H")B:..s3EeB68((c3	r   c               r   rw   r   r   r   r   r   r     s      2B t r   c                	sv   \         P                  ! V4      '       g   R # \        P                  ! V4      pV'       g   R # \        P
                  ! V4      pV F!  p\        P                  ! V4      V8X  g   K    R# 	  \        P                  ! V4      pV F!  p\        P                  ! V4      V8X  g   K    R# 	  R # rq  )r   r  r   r   r   Zget_column_headersZget_row_headers)rF   rO   nameZheadersZheaderr  r   r   Z(Utilities._is_cell_with_name_from_header  s    ((--  %,,S1F  (D0  ))#.F  (D0  r   c               rR   )r   rO   ri   previous_objectrT   r   rV   r   r   r   r   r   r     s(       1 
	r   c                	s  < V'       d   V P                  V4      '       g   \        SV `	  W4      # \        SV `	  W4      '       g   R # \        P                  ! V\
        P                  4      e    V P                  P                  4       '       * # \        P                  ! 4       P                  4       '       d   R # \        P                  ! 4       P                  4       '       d   R # R# rq  )rv   r    should_read_full_rowr   rz   r   r  r   r   r   rp   Zlast_event_was_line_navigationZlast_event_was_mouse_button)rF   rO   r  rG   s   &&&r   r  ZUtilities.should_read_full_row  s    
 00557/EEw+CAA!!#{':':;G||11333**,KKMM**,HHJJr   c               r   rw   r   r   r   r   r   r     s     / /3C / /r   c           	     	s   V'       d   V P                  V4      '       g   R # \        P                  ! V4      '       d   R # V P                  P	                  \        V4      4      pVe   V# \        P                  ! V4      pV'       g   R # V P                  V4      '       g   R # \        P                  ! V4      p\        P                  ! RV4      p\        V4      V,          R8  d   R # \        P                  ! VR R4       \        \!        R \        P"                  ! RV4      4      4      p\        V4      ^8  ;'       d:    \        P$                  ! V4      ;'       g    \        P&                  ! V4      '       * pV'       dX   ^ pWs8  dP   \        P(                  ! W4      w  rHp	\        VP#                  4       4      ^8w  d   R pM\+        V^,           V	4      pKU  W P                  \        V4      &   V# )Fr  333333?z+Checking if element lines are single words.c                s    V # r   r   r#  rf   r   r   Z;Utilities._element_lines_are_single_words.<locals>.<lambda>  s    qr   z
[\s\ufffc])rv   r   Zis_coder.   rZ   r[   r   r   r   r*  r.  findallr   r   r   r?  r@  r   r   ri  r2  r   )
rF   rO   rt   n_charsr   eocsra   r`  r  r   r   r   r=  Z)Utilities._element_lines_are_single_words  s   0055s##88<<T#YG>I,,S1((-- $$S)zz(F+t9Ws" 	S%)VWf["((=&*IJK [1_ U U ,,S1SS[5N5Ns5ST 	A+&,&?&?&G#v||~&!+B!SMAC33DI>	r   c               r   rw   r   r   r   r   r   r     s     , ,3C , ,r   c                	s   V'       d   V P                  V4      '       g   R # V P                  P                  \        V4      4      pVe   V# \        P
                  ! V4      pV'       g   R # V P                  V4      '       g   R # \        P                  ! V4      p\        P                  ! RV4      p\        V4      V,          R8  d   R # \        P                  ! VR R4       \        P                  ! V4      ;'       g    \        P                  ! V4      '       * pV'       d   \!        V4       F~  p\        P"                  ! W4      ^ ,          pVP%                  4       '       g   VR9   d   K?  \        P&                  ! W4      ^ ,          p\        VP)                  4       4      ^8  g   K|  R p M	  W P                  \        V4      &   V# )Fr  r  z+Checking if element lines are single chars.)r  u   �)rv   r-   rZ   r[   r   r   r   r*  r.  r  r   r   r   r   r   ri  rz  r   r   r2  r   )rF   rO   rt   r  r   r  r`  rC     &&      r   r<  Z)Utilities._element_lines_are_single_chars  s`   005588<<T#YG>I,,S1((-- $$S)zz(F+t9Ws" 	S%)VW ))#.PP+2K2KC2PQ7^55c=a@<<>>T-A%A223:1=v||~&*B $ BD33DI>	r   c               r   )r   labelri   r   rV   r   r   r   r   r   r   1  s      4D  r   c                	s~    \         P                  ! V4       F"  p\        P                  ! W!4      '       g   K!   R # 	  R# r   )r   get_is_label_forr   is_ancestor)rF   r  Zlabelledr  r   _label_is_ancestor_of_labelledZ(Utilities._label_is_ancestor_of_labelled1  s0    #44U;H##H44 < r   c               r   rw   r   r   r   r   r   r   8  s      (8 T r   c                	s   V'       d   V P                  V4      '       g   R # V P                  P                  \        V4      4      pVe   V# V P	                  V4      '       d   R # R p\
        P                  ! V4      '       d]   \        ^\        P                  ! V4      4      p\        P                  ! V^ V4      pVP                  ^ 8  g   VP                  ^ 8  d   RpW P                  \        V4      &   V# rq  )rv   r,   rZ   r[   r  r   r  r   r   r   r   r   r   )rF   rO   rt   r   r   r  r   r   ZUtilities._is_off_screen_label8  s    0055--11$s)<>I..s33'',,a33C89C((a5DvvzTVVaZ68((c3	r   c               r   rw   r   r   r   r   r   r   M  s      )9 d r   c                	s    \         P                  ! V4      '       d^   \        P                  ! \        P                  ! V4      4      '       g.   R VR.p\
        P                  ! \
        P                  VR4       R# R# )r   zis a detached documentTF)r   rn   r   rK   rY   r   r\   r]   )rF   rO   ra   r  r   _is_detached_documentZUtilities._is_detached_documentM  sZ    ""3''0A0A(BUBUVYBZ0[0[c#;<Fu//>r   c               rh   )r   rO   ri   r   rT   r   r   r   r   r   r   r   U  s(       & 
!	r   c                	s
   T;'       g    V P                  4       p\        P                  ! V4       FN  p\        P                  ! V4      V8X  g   K   R VRV.p\
        P                  ! \
        P                  VR4       Vu # 	  R# )WEB: Returningzas iframe parent of detachedTN)rX   r   Zfind_all_internal_framesr   rY   r   r\   r]   )rF   rO   r   Ziframera      &&&  r   _iframe_for_detached_documentZ'Utilities._iframe_for_detached_documentU  su    
 --t++-!::4@F""3'61*F4RTWX""5#3#3VTB	 A r   c               rR   )r   linkri   r   r   r   rV   r   r   r   r   r   r   c  s(       ? 
	r   c                s   a V P                  S4      '       g   R# V FH  w  r4rV\        P                  ! V4      '       g   K$  \        P                  ! VV3R l4      '       g   KG   R# 	  R# )z<Returns true if link is an ancestor of an image in contents.Fc                r   r   r   )r   r  r   r   r   ZAUtilities.is_link_ancestor_of_image_in_contents.<locals>.<lambda>p  s	    Q$Yr   T)r{   r   ry   r   rz   )rF   r  r   rO   r  r  _strings   &f&    r   r  Z/Utilities.is_link_ancestor_of_image_in_contentsc  sV     ||D!!*2&C'',,%%c+>??	 +3 r   c               rR   )r   r   rw  r   r   r   rV   r   r   r   r   r   r   u  s(      7 ? 
	r   c           
     s@   Vw  r4rV\        \        V P                  V Uu. uF  qw^ ,          NK  	  up4      4      pV'       g   R# V FN  p	V P                  V	4      w  rW;9   g   K  V
'       g   K(  V
P	                  4       VP	                  4       8X  g   KM   R# 	  R# u upi )z:Returns true if content is an inferred label for contents.FT)r?  r@  _should_infer_label_forinfer_label_forr   )rF   r   r   rO   r  r  r   r   Zobjsr   r  Zsources   &&&         r   r  Z(Utilities.is_inferred_label_for_contentsu  s     %,!TF4779Q1A$$9QRSA!11!4NE~%%EKKMV\\^,K 
  :Rs   Bc               rR   )r   rO   ri   r   z3list[tuple[Atspi.Accessible, int, int, str]] | Noner   rV   r   r   r   r   r   r     s)     ! !! F! 
	!r   c                	s   V P                  V4      '       d   R # \        P                  ! V4      pV'       g2   V'       d   R# \        P                  ! V\        P
                  4      RJ# V F  w  rErgWC9   g   K   R# 	  V P                  V4      '       g   R # \        P                  ! V\        P
                  4      f   R # V F{  w  rErg\        P                  ! V\        P
                  4      f   K/  V P                  V4      '       d   KH  \        P
                  ! \        P                  ! WA4      4      '       g   Kz   R# 	  R # )FTN)r  r   r  r   rz   Zis_label_or_captionr   Zget_common_ancestor)rF   rO   r   targetsr  r  r  r  r  r   r  Z Utilities._is_labelling_contents  s    
 $$S))..s3))#{/N/NOW[[[*2&C~ +3 ))#..!!#{'F'FGO*2&C%%c;+J+JKS))#....x/K/KC/UVV +3 r   c               r   rw   r   r   r   r   r   r     s     J J$4 J Jr   c                	s`    V P                  V4      ;'       d    V P                  V4      '       * # r   )	is_anchorr   r   r   r   r  ZUtilities._is_empty_anchor  s'    ~~c"II4+D+DS+I'IIr   c               r   rw   r   r   r   r   r   r     s     S S&6 S4 Sr   c                	sj    \         P                  ! V4      ;'       d    V P                  V4      '       * # r   )r   r  r   r   r   r   _is_empty_tool_tipZUtilities._is_empty_tool_tip  s)    &&s+RRD4M4Mc4R0RRr   c               r   rw   r   r   r   r   r   r     s     	 	'7 	D 	r   c                st    \         P                  ! V4      '       g   R# V P                  V4      '       d   R# R# )z<Returns true if obj is an alert outside of document content.FT)r   Zis_alertrv   r   r   r   is_browser_ui_alertZUtilities.is_browser_ui_alert  s/     ##C((##C((r   c               r   rw   r   r   r   r   r   r     s     ! !(8 !T !r   c                	s"   V'       d   V P                  V4      '       g   R # V P                  P                  \        V4      4      pVe   V# V P	                  V4      '       d   R # V P                  V4      '       d.   RVR.p\        P                  ! \        P                  VR4       R # R pV P                  V4      '       gL   \        P                  ! V4      '       g   \        P                  ! VR4      pM\        P                  ! VR4      pV'       d   \        P                  ! V4      '       g   \        P                  ! V4      '       d   \         P"                  ! V4      pVP%                  RR4      '       g/   RVR.p\        P                  ! \        P                  VR4       R pMOVP'                  4       '       g:   \        P(                  ! V4      ;'       g    \        P*                  ! V4      '       * pW P                  \        V4      &   V# )	Fr   z%is not clickable: has grid descendantTZclickclick-ancestorr  r   z'is not clickable: its text is just EOCs)rv   r/   rZ   r[   r  r   r   r\   r]   r  r   r   r   
has_actionr   r   r   r*  r"  r   	is_staticr{   )rF   rO   rt   ra   r  r  r   is_clickable_elementZUtilities.is_clickable_element  s   0055..2249=>I..s33$$S))c#JKFu//>((--++C00((g6((.>?h'',,1G1G1L1L&&s+D<<"-- #'PQ""5#3#3VTBZZ\\%//4PP8K8KC8PQ79))$s)4	r   c               r   )r   itemri   comboboxr   rV   r   r   r   r   r   r     s(     # ## ## 
	#r   c                sR   \         P                  ! V4      '       g   \         P                  ! V4      '       g   R# \         P                  ! V4      '       g   R# \        P
                  ! W4      '       d   R# \        P                  ! VR 4      p\         P                  ! V4      pW$9   # )z?Returns true if item is an item for editable combobox combobox.FTc                sj    \         P                  ! V 4      ;'       g    \         P                  ! V 4      # r   )r   r   r   r#  rf   r   r   Z:Utilities.is_item_for_editable_combo_box.<locals>.<lambda>  s&    K33A6UU+:R:RST:UUr   )r   r   is_menu_itemZis_editable_combo_boxr   r  rz   Zget_is_controlled_by)rF   r   r  r  r  r  r   is_item_for_editable_combo_boxZ(Utilities.is_item_for_editable_combo_box  s     ((..+2J2J42P2P00:://**UW	229=""r   c               r   rw   r   r   r   r   r   r     s     D D2B Dt Dr   c                	s  a V'       d4   V P                  V4      '       d   \        P                  ! V4      '       g   R # \        P                  ! V4      '       d   R # \        P
                  ! \        P                  ! V\        P                  4      4      oS'       g   R # V3R lpV! V4      '       d   R# \        P                  ! W4      RJ# )Fc                s   < \         P                  ! V 4      P                  4       pSV8w  d   R # \        P                  ! V 4      ;'       g    \        P
                  ! V 4      # r   )r   r*  r   r   
is_sectionr  )r   r   
entry_names   & r   	_is_matchZ;Utilities._is_fake_placeholder_for_entry.<locals>._is_match  sK    ((+113FV#))!,HH0E0Ea0HHr   TN)	rv   r   rY   r   r   r   rz   rx   find_descendant)rF   rO   r  r     && @r   r   Z(Utilities._is_fake_placeholder_for_entry  s    0055(:M:Mc:R:R""3''&&x'='=c;CWCW'XY
	I S>>''7tCCr   c               r   rw   r   r   r   r   r   r   		  s     ^ ^-= ^$ ^r   c                	s    \         P                  ! V\        P                  4      f   R# \         P                  ! V\        P
                  4      R J # NF)r   rz   r   r  r;  r  r   r   r   r  Z#Utilities._is_block_list_descendant		  s=    !!#{':':;C//[5T5TUY]]]r   c               r   rw   r   r   r   r   r   r   	  s      +  r   c                	s   V'       g   R # V P                   P                  \        V4      4      pVe   V# \        P                  ! V4      '       d   V P                  V4      '       g   RpM\        P                  ! V4      '       de   \        P                  ! \        P                  ! V4      4      '       d5   \        P                  ! V\        P                  ! V4      4      '       d   RpMR pW P                   \        V4      &   V# rq  )
r0   rZ   r[   r   r{   r  r  r   rY   Zhas_same_non_empty_namer  r  r   r{   ZUtilities.is_link	  s    !!%%d3i0>Is##DNN3,?,?B""3''K,?,?@S@STW@X,Y,Y//X5H5H5MNNBB*,T#Y'	r   c               r   rw   r   r   r   r   r   r   #	  s     S S1A Sd Sr   c                sZ    \        \        P                  ! WP                  4      4      ^ 8  # )zIReturns true if obj has a canvas descendant which lacks fallback content.)r   r   Zfind_all_canvasesr  r   r   r   r  Z'Utilities.has_useless_canvas_descendant#	  s&     ;006L6LMNQRRRr   c               r   rw   r   r   r   r   r   r   (	  s      7G D r   c                	s    V P                  V4      '       d1   V P                  V4      '       d   R \        P                  ! V4      9   # R# )ZdoubleclickF)rn   rr   r   r   r   r   r   r   Z-Utilities._is_non_navigable_embedded_document(	  s<    C  T%A%A#%F%F H$5$5c$:::r   c               r   rw   r   r   r   r   r   r   -	  s      %5 $ r   c                	s   \         P                  ! V4      '       d0   \        P                  ! \        P                  ! V4      4      ^8X  d   R# V P
                  P                  \        V4      4      pVe   V# Rp\        P                  ! V4      p\        \        P                  ! V\         P                  4      4      p\        V4      \        P                  ! V4      8X  dq   \        P                  ! V4      pWR,          8w  dN   \        P                  ! V4      p\        P                  ! VR,          4      p\        P                  ! Wg4      pW8H  p\        V4      pW P
                  \        V4      &   V# )r)  Fr   )r   is_svgr   r}   rY   r3   rZ   r[   r?  r  r   r	   Zsort_objects_by_sizer   Zget_rect_intersectionrV   )	rF   rO   rt   r   ZchildrenZsorted_childrenZobj_extentsZlargest_extentsZintersection	   &&       r   _is_redundant_svgZUtilities._is_redundant_svg-	  s   !!#&&(*B*B8CVCVWZC[*\`a*a**..tCy9>I$$S)..v{7I7IJKx=H44V<<)>>xHOb)))2237"-"6"6r7J"K*@@^!0"X35%%d3i0	r   c               r   rw   r   r   r   r   r   r   D	  s      #3  r   c                s   V'       d   V P                  V4      '       g   R# V P                  P                  \        V4      4      pVe   V# Rp\        P
                  ! V4      '       d   \        P                  ! V4      '       d   \        P                  ! V4      '       d   \        P                  ! V4      '       d   \        P                  ! R\        P                  ! V4      4      '       g\   \        P                  ! V4       F?  p\        P                  ! V4      '       d   K!  \        P                   ! V4      '       d   K?   M	  RpW P                  \        V4      &   V# )z&Returns true if obj is a custom image.Fz[^\s\ufffc]T)rv   r1   rZ   r[   r   Zis_web_element_customr   r  r   r   r.  r/  r   r*  r  is_image_or_canvasr
  )rF   rO   rt   r   ru   r   r  ZUtilities.is_custom_imageD	  s    
 0055))--d3i8>I,,S11k6S6STW6X6X%%c**%%c**99^V-@-@-EFF!//4#66u==ASASTYAZAZ 5 24$$T#Y/	r   c               r   rw   r   r   r   r   r   r   ^	  s     ( (%5 ($ (r   c                	sb   V'       d   V P                  V4      '       g   R # V P                  P                  \        V4      4      pVe   V# Rp\        P
                  ! V4      p\        P                  ! V4      '       g   \        P                  ! V4      '       g   R pV'       dR   \        P                  ! V4      '       g4   \        P                  ! V4      '       g   V P                  V4      '       d   R pV'       d"   V P                  V4      '       d   V'       g   R pV'       d   \        P                  ! V4      '       d   R pV'       d   \        P                  ! \        P                  ! V4      4      '       dT   V'       gL   \         P"                  ! \        P                  ! V4      4      pV'       d   VP%                  R4      '       g   R pV'       d   \        P&                  ! V4      '       dg   \        P(                  ! V4      '       d   R pMGV'       g@   V P+                  V4      '       g)   \        P,                  ! V4      w  rVV^8  d
   V^8  d   R pV'       d3   \        P.                  ! V4      '       d   V P1                  V4      '       * pV'       d|   \        P2                  ! V4      '       d`   \5        \7        \        P2                  ! V4      ^24      4       F2  pV P9                  \        P:                  ! W4      4      '       d   K0  R p M	  W P                  \        V4      &   V# )FTZ
javascript)rv   r2   rZ   r[   r   r   r  r
  r   r   get_descriptionhas_long_descr  r   r{   rY   r   get_link_urir  Zsupports_imageZget_image_descriptionr  Zget_image_sizer   r   r}   rz  r   r  r~   )rF   rO   rt   r   r  r   r   r`  r  r   r  ZUtilities._is_useless_image^	  s/   0055**..tCy9>I'99#>..s33{7I7I#7N7NB8$$S))..s33((--B$++C009JB+**3//B+%%h&9&9#&>??HY**8+>+>s+CDC3>>,77())#..--c22&t/E/Ec/J/J ( 7 7 <2:&2+B(((--..s33B(**3//3x77<bAB--h.@.@.HIIB C
 46%%d3i0	r   c               r   rw   r   r   r   r   r   r   	  s      "2 t r   c                s   \         P                  ! V4      pV'       g   R# \        VP                  4       4      ^8  d   R# \        P
                  P                  V4      p\        V4      ^8  d.   RVR.p\        P                  ! \        P                  VR4       R# \        V4      ^8X  dH   \        V4      \        RR4      9   d.   RVR.p\        P                  ! \        P                  VR4       R# R# )z%Returns true if obj has a valid name.FTzWEB: name ofzis suspected query stringi   i  zis in unicode private use area)r   r   r   r   urllibZparseZparse_qsr   r\   r]   Zordrz  )rF   rO   r  Zparsedra   r  r   has_valid_nameZUtilities.has_valid_name	  s       %tzz|q &&t,v;?$c+FGFu//>t9>c$i5+@@$c+KLFu//>r   c               r   rw   r   r   r   r   r   r   	  s     ! !-= !$ !r   c                	s  a V'       d   V P                  V4      '       g   R # V P                  P                  \        V4      4      pVe   V# \        P
                  P                  \        P
                  P                  \        P
                  P                  \        P
                  P                  .p\        P                  ! V4      pWC9  d!   \        P                  ! V4      '       g   R pEM8\        P                  ! V4      '       d   R pEM\        P                  ! V4      '       d   R pMV P!                  V4      '       g9   \        P"                  ! V4      '       g   \        P$                  ! V4      '       d   R pM\&        P(                  ! V4      '       d3   \&        P*                  ! V4      \        P,                  ! V4      8w  d   R pMY\        P.                  ! V4      '       d<   \        P0                  ! V4      p. ROo\3        \5        V3R lV4      4      pV'       * pMRpW P                  \        V4      &   V# )Fc                rR  r   r   )r   ignorer   r   r   Z5Utilities._is_useless_empty_element.<locals>.<lambda>	  s	    !6/r   T)r  zshow-context-menuz
do-default)rv   r4   rZ   r[   r   rA   r  r  r  r   r   r   r   is_aria_alertr   r   r  r  r}   r   r   r*  r   r   Zget_action_namesr?  r@  )rF   rO   rt   r  r   namesr  s   &&    @r   r  Z#Utilities._is_useless_empty_element	  s   00552266tCyA>I%%##""%%'   %[%>%>s%C%CB%%c**B$$S))B  %%++C00H4L4LS4Q4QB'',,1D1DS1IXM^M^_bMc1cB%%c**--c2EJF 95ABEBB;=--d3i8	r   c               r   rw   r   r   r   r   r   r   	  s     8 8!1 8d 8r   c                sr    V'       d   V P                  V4      '       g   R# \        P                  ! VR4      # )z+Returns true if obj has a long description.FZshowlongdesc)rv   r   r  r   r   r   r  ZUtilities.has_long_desc	  s-     0055""377r   c               r   )r   rO   ri   r   z)tuple[str | None, list[Atspi.Accessible]]r   r   r   r   r   r   	  s      #3 8a r   c                s
   V P                  V4      '       g   R. 3# V P                  P                  \        V4      4      pVe   V# V P                  P
                  P                  VR4      pW P                  \        V4      &   V# )zCAttempts to infer the text serving as the functional label for obj.NF)r  r6   rZ   r[   r   Zlabel_inferenceZinferr  r  r   r  ZUtilities.infer_label_for	  su     ++C008O))--d3i8>I\\))//U;24$$T#Y/	r   c               r   rw   r   r   r   r   r   r   	  s      +;  r   c                	s   V P                  4       '       d,   \        P                  ! V\        P                  4      '       d   R # V P
                  P                  \        V4      4      pV'       dW   V P                  P                  4       P                  4       '       g)   \        P                  ! 4       P                  4       '       * # VR J d   V# \        P                  ! V4      p\        P                  ! V4      '       d   R pM\        P                   ! V4      '       d   R pMV'       g   \"        P$                  P&                  \"        P$                  P(                  \"        P$                  P*                  \"        P$                  P,                  \"        P$                  P.                  \"        P$                  P0                  .pW49   ;'       d    \        P2                  ! V4      '       * pW P
                  \        V4      &   V P                  P                  4       P                  4       '       d<   V\"        P$                  P0                  \"        P$                  P&                  39  d   R # V# r   )rv   r   rz   r   rl   r8   rZ   r[   r   r  r  r   rp   Z
in_say_allr   r   Zhas_role_from_ariar   rA   r  r  r  r   r  r  Zget_displayed_label)rF   rO   rt   r   r  r  r   r  Z!Utilities._should_infer_label_for	  s   ''))X-C-CCI`I`-a-a0044T#Y?dll668``bb$002==???;I  %S!!B++C00BZZ))ZZ))ZZ%%ZZ((ZZ--ZZ,,.E KK{'F'Fs'K#KB9;++DI6<<++-UUWWEJJ33UZZ5I5IJJ	r   c               r   rw   r   r   r   r   r   r   	  s      %5 $ r   c                	s   V P                  V4      '       g   R # \        P                  ! V4      '       g   R # \        P                  ! V4      '       g1   \        P                  ! \        P
                  ! V4      4      '       d   R# R # rq  )rv   r   r   Zis_spin_buttonr   rY   r   r   r   _is_spinner_entryZUtilities._is_spinner_entry	  s]    '',,&&s++%%c**k.H.HI\I\]`Ia.b.br   c               r   r   eventzAtspi.Eventr   rV   r   r   r   r   r   r   
  s     N N{ Nt Nr   c                s    V P                  VP                  4      '       g   R# VP                  P                  R4      ;'       d$    \        P
                  ! 4       P                  4       # )z6Returns true if event is believed to be spinner noise.Fzobject:text-selection-changed)r  sourcetyper  r   rp   last_event_was_up_or_downrF   r  r   r   !event_is_spinner_noise_deprecatedZ+Utilities.event_is_spinner_noise_deprecated
  sV     %%ell33zz$$%DE N N#//1KKM	Nr   c               r   r  r   r   r   r   r   r   
  s     
 
K 
TX 
r   c                s(   VP                   P                  R4      '       dq   V P                  VP                  4      '       dP   \        P
                  ! 4       P                  4       '       d'   V P                  4       ^ ,          pVP                  V8H  # R# )zBReturns true if event should be treated as a spinner value change.object:text-caret-movedF)r  r  r  r  r   rp   r  r   )rF   r  rO   r  r   .treat_event_as_spinner_value_change_deprecatedZ8Utilities.treat_event_as_spinner_value_change_deprecated
  sl     ::  !:;;%%ell33"..0JJLL,,.q1||s**r   c               r   r  r   r   r   r   r   r   
  s      + $ r   c                s   V P                  VP                  4      '       d   R# VP                  P                  R4      '       dq   \        P
                  ! VP                  4      ;'       gI    \        P                  ! VP                  4      ;'       g!    \        P                  ! VP                  4      # VP                  P                  R4      '       d   R# R# )z9Returns true if event is believed to be browser UI noise.Fzaccessible-namezobject:children-changedT)	rv   r  r  r  r   Zis_status_barZis_labelZis_framer  r  r   r   $event_is_browser_ui_noise_deprecatedZ.Utilities.event_is_browser_ui_noise_deprecated
  s     ##ELL11::011,,U\\: 6 6k>R>RSXS_S_>` 6 6''56::  !:;;r   c                s   VRJ;'       g    V P                  VP                  4      pV'       g   R# R pR pR p\        P                  ! VP                  4      '       d   VP                  P                  R4      '       d{   V P                  V4      w  rxV! V4      '       g   V! V4      '       d   R# WqP                  8X  d:   V! V4      '       d,   \        P                  ! 4       P                  4       '       d   R# R# )z;Returns true if event is believed to be autocomplete noise.NFc                V    \         P                  ! \        P                  ! V 4      4      # r   )r   r   r   rY   r#  rf   r   r  ZJUtilities.event_is_autocomplete_noise_deprecated.<locals>.is_list_box_item1
  s    **8+>+>q+ABBr   c                r!  r   )r   r   r   rY   r#  rf   r   r  ZFUtilities.event_is_autocomplete_noise_deprecated.<locals>.is_menu_item4
  s    &&x':':1'=>>r   c                r!  r   )r   r   r   rY   r#  rf   r   is_combo_box_itemZKUtilities.event_is_autocomplete_noise_deprecated.<locals>.is_combo_box_item7
  s    ++H,?,?,BCCr   object:text-T)
rv   r  r   r   r  r  r   r   rp   r  )	rF   r  rS   Z
in_contentr  r  r"  rO   rP   r   r   &event_is_autocomplete_noise_deprecatedZ0Utilities.event_is_autocomplete_noise_deprecated(
  s    
 T)SST-E-Eell-S
	C	?	D ""5<<00zz$$^4411(;LC$$S(9(9ll"'8'='=&224NNPPr   c               r   r  r   r   r   r   r   r   F
  s     
M 
M{ 
MW[ 
Mr   c                s    V P                  VP                  4      '       d   R# V P                  V4      '       d   R# V P                  V4      # )z7Returns true if event is browser ui autocomplete noise.FT)rv   r  ,_event_is_browser_ui_autocomplete_text_noise1_event_is_browser_ui_autocomplete_selection_noiser  r   r   1event_is_browser_ui_autocomplete_noise_deprecatedZ;Utilities.event_is_browser_ui_autocomplete_noise_deprecatedF
  sA     ##ELL11<<UCCEEeLLr   c                	s   R R.pVP                   V9  d   R# \        P                  ! VP                  4      '       g   R# \        P
                  ! 4       P                  4       p\        P                  ! V4      '       dH   \        P                  ! V4      '       d,   \        P
                  ! 4       P                  4       '       g   R# R# )object:selection-changedobject:state-changed:selectedFT)r  r   Zis_menu_relatedr  r   rp   rq   rx   rW  r   r  )rF   r  	selectionfocusru   r   r&  Z;Utilities._event_is_browser_ui_autocomplete_selection_noiseR
  s    /1PQ	::Y&**5<<88))+>>@&&;+A+A%+H+H&224NNPPr   c               r   r  r   r   r   r   r   r   b
  s      + RV r   c                	s   VP                   P                  R 4      '       d'   \        P                  ! VP                  4      '       g   R# \
        P                  ! 4       P                  4       p\        P                  ! V4      '       g   R# \        P                  ! V4      '       g   \        P                  ! V4      '       d$   \        P                  ! 4       P                  4       # R# )r#  F)r  r  r   Z!is_single_line_autocomplete_entryr  r   rp   rq   Zis_selectableZis_menu_item_of_any_kindr   r   r  )rF   r  r+  r  r   r%  Z6Utilities._event_is_browser_ui_autocomplete_text_noiseb
  s     zz$$^44??MM))+>>@((////66+:R:RSX:Y:Y&224NNPPr   c               r   r  r   r   r   r   r   r   r
  s      [ T r   c                s>   RR.pVP                   V9  d   R# \        P                  ! VP                  4      '       g   R# V P	                  VP                  4      '       d   R# V P	                  \
        P                  ! 4       P                  4       4      '       g   R# R# )z8Returns true if event is a browser UI page switch event.r(  r)  FT)r  r   Zis_page_tab_list_relatedr  rv   r   rp   rq   )rF   r  r*  r  r   event_is_browser_ui_page_switchZ)Utilities.event_is_browser_ui_page_switchr
  sw    
 01PQ	::Y&33ELLAA##ELL11''(A(A(C(V(V(XYYr   c               r   r  r   r   r   r   r   r   
  s      ; 4 r   c                s   \         P                  ! 4       P                  4       '       d-   V P                  4       pV P	                  VP
                  4      pMMV P                  \         P                  ! 4       P                  4       4      pV P                  VP
                  4      pRVRVR.p\        P                  ! \        P                  VR4       V'       d	   V'       g   R# W28X  d   R# \        P                  ! V4      '       g\   \        P                  ! V4      '       d@   V P                  4       V8X  d+   Rp\        P                  ! \        P                  VR4       R# R# )zDReturns true if event comes from the document of the locus of focus.zWEB: Event doc:z. Focus doc:r(  TFz,WEB: Treating active doc as locusOfFocus doc)r   rp   Zfocus_is_active_windowrX   !get_top_level_document_for_objectr  rr   rq   r   r\   r]   r   rK   rd   )rF   r  r+  r  ra   rD  r   r   %event_is_from_locus_of_focus_documentZ/Utilities.event_is_from_locus_of_focus_document
  s    $$&==??((*E;;ELLIF001J1J1L1_1_1abE11%,,?F#V^UCH5++VT:5?  ''H,=,=f,E,E##%/D##E$4$4c4@r   c               r   r  r   r   r   r   r   r   
  s       QU r   c                s  a SP                   R8w  d   R# \        P                  ! 4       P                  4       pV'       g+   Rp\        P
                  ! \        P                  VR4       R# SP                  V8X  d+   Rp\        P
                  ! \        P                  VR4       R# \        P                  ! VV3R l4      '       d+   Rp\        P
                  ! \        P                  VR4       R# \        P                  ! SP                  4      '       dL   R\        P                  ! SP                  4      R	.p\        P                  ! \        P                  VR4       R# R
p\        P
                  ! \        P                  VR4       R# )z?Returns true if event is an irrelevant selection changed event.r(  Fz:WEB: Selection changed event is relevant (no locusOfFocus)Tz:WEB: Selection changed event is relevant (is locusOfFocus)c                "   < V SP                   8H  # r   )r  r   r  r   r   r   ZGUtilities.event_is_irrelevant_selection_changed_event.<locals>.<lambda>
  s    13Dr   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   rp   rq   r   rd   r]   r  r   rz   r   Zis_page_tab_listZget_role_namer\   )rF   r  r+  rD  ra   s   &f   r   +event_is_irrelevant_selection_changed_eventZ5Utilities.event_is_irrelevant_selection_changed_event
  s     ::33))+>>@NC 0 0#t<<<5 NC 0 0#t<!!%)DEEWC 0 0#t< ''55M,,U\\:CAFu//>WE,,c48r   c                s~    VP                   P                  R4      '       g   R# V P                  VP                  4      # )zAReturns true if event is for an object we're treating as a whole.r#  F)r  r  r   r  r  r   r   &event_is_for_non_navigable_text_objectZ0Utilities.event_is_for_non_navigable_text_object
  s1     zz$$^44**5<<88r   c                sf   V'       d"   VP                   P                  R4      '       g   R# T;'       g$    \        P                  ! 4       P	                  4       p\
        P                  ! V\        P                  4      f   R# \
        P                  ! VP                  \        P                  4      RJ # )z4Returns true if caret moved outside the active grid.r  FN)
r  r  r   rp   rq   r   rz   r   r  r  )rF   r  r   rm   r   caret_moved_outside_active_gridZ)Utilities.caret_moved_outside_active_grid
  s|     %**//0IJJQQ!:!:!<!O!O!Q	!!)[-@-@AI%%ellK4G4GHDPPr   c                s   V'       d"   VP                   P                  R4      '       g   R# \        P                  ! VP                  4      '       d   R# V P                  4       p\        P                  ! V4      pV'       g   R# \        P                  ! VP                  R4      pV'       d	   WE8X  d   R# T;'       g$    \        P                  ! 4       P                  4       pV P                  V4      '       d   TpM \        P                  ! W P                  4      pT;'       d.    \        P                   ! V4      \        P"                  ! V4      8H  # )z8Returns true if the caret moved to a same-page fragment.r  FidT)r  r  r   r   r  rX   r
   get_document_uri_fragmentr   get_attributer   rp   rq   r{   rz   r   r  r  )rF   r  r   rS   fragmentZ	source_idr  r  r   !caret_moved_to_same_page_fragmentZ+Utilities.caret_moved_to_same_page_fragment
  s     %**//0IJJ""5<<00'')77A**5<<>	.QQ!:!:!<!O!O!Q	<<	""D)))\\BDVV006*:L:LX:VVVr   c               r   rw   r   r   r   r   r   r   
  s     
I 
I0@ 
IT 
Ir   c                s   a \         P                  ! V P                  4       4      oS'       g   R# V3R lp\        P                  ! W4      RJ# )z@Returns true if obj is a child of the current document fragment.Fc                s8   < \         P                  ! V R 4      S8H  # )r4  )r   r6  )r   r7  r   r   is_same_fragmentZ@Utilities.is_child_of_current_fragment.<locals>.is_same_fragment
  s    ))!T2h>>r   N)r
   r5  rX   r   rz   )rF   rO   r9  r7  r  r   is_child_of_current_fragmentZ&Utilities.is_child_of_current_fragment
  sA     778L8L8NO	? %%c<DHHr   c               r   rw   r   r   r   r   r   r   
  s      =M RV r   c                s  a  V'       d   S P                  V4      '       g   R# S P                  P                  \        V4      4      pVe   V# RpV 3R lp\        P
                  ! V4      '       d   RpM\        P                  ! V4      '       d   \        P                  ! W4      RJpM\        P                  ! V4      '       d#   V! V4      ;'       g    S P                  V4      pMAS P                  V4      '       g+   S P                  V4      pV'       d   S P                  V4      pVS P                  \        V4      &   V# )z>Returns true if obj is content editable with embedded objects.FNc                s   < \         P                  ! V 4      SP                  4       9   ;'       d5    SP                  V 4      '       * ;'       d    \        P
                  ! V 4      # r   )r   r   r  r   r   r  )r   rF   r   r   has_text_block_roleZPUtilities.is_content_editable_with_embedded_objects.<locals>.has_text_block_role  s]    $$Q'4+I+I+KK a a;;A>>a aCNC]C]^_C`ar   )rv   r*   rZ   r[   r   ri  Zis_multi_line_entryr   r  r   r{   rn   rr   rX  )rF   rO   rt   r;  rS   s   f&   r   rX  Z3Utilities.is_content_editable_with_embedded_objects
  s   
 0055CCGGS	R>I	a $$S))B,,S11))#C4OB$$S))$S)>>T\\#->B!!#&&33C8HCCHMLN>>tCyI	r   c               r   )r   rO   ri   r   ztuple[int, int, int]r   r   r   r   r   r     s     > >0@ >EY >r   c                	s    \         P                  ! V4      pV P                  V4      '       g   R# \        P                  ! V4      p\        P
                  ! V4      pW4\        P                  ! V4      3# )r)  )r   r   r   )r   rY   r   r   r   r   r   r   )rF   rO   r   r   r   r  r   _range_in_parent_with_lengthZ&Utilities._range_in_parent_with_length  s_    $$S)((0011#6--c2655f===r   c               r   rw   r   r   r   r   r   r   $  s     Y Y+; Y Yr   c                	s   V P                   P                  \        V4      4      pVe   V# Vf   R# \        P                  ! V4      '       d+   Rp\
        P                  ! \
        P                  VR4       R# \        P                  ! V4      '       g-   RV.p\
        P                  ! \
        P                  VR4       R# \        P                  ! V4      '       g-   RV.p\
        P                  ! \
        P                  VR4       R# \        P                  ! 4       pR p\        P                  ! V4      '       d/   RV.p\
        P                  ! \
        P                  VR4       RpEM\        P                  ! V4      '       d/   RV.p\
        P                  ! \
        P                  VR4       RpEM\        P                  ! V4      '       d/   RV.p\
        P                  ! \
        P                  VR4       RpEMi\        P                   ! VR4      '       d/   R	V.p\
        P                  ! \
        P                  VR4       RpEM\        P"                  ! V4      '       d/   R
V.p\
        P                  ! \
        P                  VR4       RpEMV P%                  V4      '       d/   RV.p\
        P                  ! \
        P                  VR4       RpEMV P'                  V4      '       d/   RV.p\
        P                  ! \
        P                  VR4       RpEMJV P)                  V4      '       d/   RV.p\
        P                  ! \
        P                  VR4       RpEMV P+                  V4      '       d/   RV.p\
        P                  ! \
        P                  VR4       RpEMV P-                  V4      '       d/   RV.p\
        P                  ! \
        P                  VR4       RpEM{V P/                  V4      '       d/   RV.p\
        P                  ! \
        P                  VR4       RpEM6\        P0                  ! V\        P2                  4      '       d.   RV.p\
        P                  ! \
        P                  VR4       RpM\        P4                  ! V4      '       d.   RV.p\
        P                  ! \
        P                  VR4       RpM\6        P8                  ! V4      '       d.   RV.p\
        P                  ! \
        P                  VR4       RpMLRVR\        P                  ! 4       V,
          R R2.p\
        P                  ! \
        P                  VR4       RpW P                   \        V4      &   R\        P                  ! 4       V,
          R R2p\
        P                  ! \
        P                  VR4       V# )NFz*WEB: Dead object cannot have caret contextTz-WEB: Invalid object cannot have caret contextz*WEB: Non-element cannot have caret contextz,WEB: Focusable object can have caret contextz+WEB: Editable object can have caret contextz$WEB: Landmark can have caret contextz0WEB: Table-related object can have caret contextz4WEB: Non-focusable tooltip cannot have caret contextz4WEB: Useless empty element cannot have caret contextz/WEB: Off-screen label 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 contextz9WEB: Fake placeholder for entry cannot have caret contextz3WEB: Presentational child 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 r6  )r$   rZ   r[   r   r   r   rd   r]   rK   r\   r   r  r  r   r   rs  Zis_table_relatedr  r  r   r  r  r  r   rz   Zchildren_are_presentationalr   r	   r  )rF   rO   rt   rD  ra   r  r   r   _can_have_caret_contextZ!Utilities._can_have_caret_context$  s   99==d3iH>I;C  >C 0 0#t<  %%EsKFu//>))#..BCHFu//>YY[
##C((DcJFu//>B$$S))CSIFu//>B$$S))<cBFu//>B))#t44H#NFu//>B$$S))LcRFu//>B++C00LcRFu//>B&&s++GMFu//>B##C((DcJFu//>B""3''CSIFu//>B$$S))EsKFu//>B0055QSVWFu//>B##C)P)PQQKSQFu//>B""3'' EcJFu//>B$$S))KSQFu//>Bs&?		j@XY\?]]_$`aFu//>BBD44T#Y?0z1I#0NaPE,,c48	r   c               r   )r   rO   ri   r   r   r   r   r   r   r   r     s      ,< A] r   c                s   RV.p\         P                  ! \         P                  VR4       TpRRrTV'       dG   \        P                  ! V4      pV^ 8  d   RpK)  YrT\
        P                  ! W4      pV'       d   TpKM   V'       d@   \        P                  ! V4      '       g$   V P                  V\        RV^,
          4      4      # V P                  V4      '       d   V^ 3# R# )z*Searches inside obj for the caret context.z#WEB: Searching for caret context inTNr   Nr   )r   r\   r]   r   get_caret_offsetr   r   r   r   r   r   rn   )rF   rO   ra   r  Zcontext_objZcontext_offsetr   r   r  r   search_for_caret_contextZ"Utilities.search_for_caret_context  s     8=5++VT:	&*B^,,S1Fz.1^#88EC{44[AA00c"nWXFX>YZZI&&a<r   c               r   )r   rS   rT   get_replicantrV   search_if_neededr   r   r   r   r   r   r   r     s2     > >)> > 	>
 
&>r   c                s   RV.p\         P                  ! \         P                  VR4       \        P                  ! V4      '       g;   V P                  4       pRV.p\         P                  ! \         P                  VR4       V'       g   V'       g+   Rp\         P                  ! \         P                  VR4       R# \        P                  ! 4       P                  4       ^ rv\        P                  ! V4      '       d   \        P                  ! V4      pRVRVR.p\         P                  ! \         P                  VR4       Wg3# V P                  P                  \        \        P                   ! V4      4      4      pVe>   R	VR
V^ ,          RV^,          .p\         P                  ! \         P                  VR4       M.RVR.p\         P                  ! \         P                  VR4       RRrvV'       d   V P#                  V4      '       gG   V'       g+   Rp\         P                  ! \         P                  VR4       R# V P%                  V4      w  rgMV'       g   Vw  rgM\        P                  ! V^ ,          4      '       g   Rp\         P                  ! \         P                  VR4       V P'                  4       w  rgV'       dN   V P%                  \        P                   ! V4      4      w  rV	'       d   \        P                  ! V	4      '       d   YrvMVw  rgRVR
VRVR.p\         P                  ! \         P                  VR4       V P)                  WgV4       Wg3# )zAReturns an (obj, offset) tuple representing the current location.zWEB: Getting caret context forTz"WEB: Now getting caret context forz=WEB: Returning None, -1: No document and no search requested.Nr  r  z(from locusOfFocus)zWEB: Cached context ofisz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 ofr   r?  )r   r\   r]   r   rK   rX   rd   r   rp   rq   r   r   r@  r"   rZ   r[   rY   is_top_level_documentrA  "_find_context_replicant_deprecatedr   )rF   rS   rB  rC  ra   rD  rO   r   r`   Z	caret_objZcaret_offsetr7  r   r   ZUtilities.get_caret_context  s    3H=5++VT:  **++-H:HEFu//>#U##E$4$4c4@'335HHJA%%c**005&T6;PQFu//>;--11$x7J7J87T2UV.$
DRYZ[R\]Fu//>2HcBFu//>d88BB#1##E$4$4c4@77AKC!KC""71:..GC 0 0#t<AACKC*.*G*GH[H[\_H`*a'	!2!29!=!="+!KC*HdCvsS5++VT:sH5{r   c               r   )r   rS   rT   r   z/tuple[list[int], Atspi.Role | None, str | None]r   r   r   r   r   r     s      ) 
9r   c                	s    T;'       g    V P                  4       pV'       g   R.RR3# V P                  P                  \        \        P
                  ! V4      4      4      pV'       g   R.RR3# V# )r)  Nr   )rX   r%   rZ   r[   r   rY   )rF   rS   rt   r  r   %_get_caret_context_path_role_and_nameZ/Utilities._get_caret_context_path_role_and_name  sl     55t3354t##77;;$$X./14t##	r   c               r   )r   rS   rT   r   r   r   r   r   r   r   r     s     < <,C <t <r   c                s.   V P                  4        T;'       g    V P                  4       pV'       g   R# \        P                  ! V4      pV P                  P                  \        V4      R4       V P                  P                  \        V4      R4       R# )zClears the caret context.N)rg   rX   r   rY   r"   rM   r[   r#   )rF   rS   r   r  r   r^   ZUtilities.clear_caret_context  sp     	  "55t335$$X.##''Vd;##''Vd;r   c                s   \         P                  ! V4      '       d+   Rp\        P                  ! \        P                  VR4       R# \
        P                  ! 4       P                  4       '       g+   Rp\        P                  ! \        P                  VR4       R# V P                  4       w  rEp\         P                  ! V4      pWG8w  d/   RVRV.p\        P                  ! \        P                  VR4       R# \         P                  ! V4      p	WY8w  d/   RVRV	.p\        P                  ! \        P                  VR4       R# \         P                  ! V4      V8g  p
V P                  4       pV P                  P                  \!        \         P"                  ! V4      4      4      w  rR	V
.p\        P                  ! \        P                  VR4       \
        P                  ! 4       P%                  WV
4       V P'                  W-V4       R# )
zSAttempts to clean up when we can an event from a replacement of the focused object.z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   rd   r]   r   rp   focus_is_deadrG  r  r\   r   r   rX   r"   rZ   r[   rY   r   r   )rF   r  Z	replicantrD  pathr   r  Zreplicant_pathra   Zreplicant_rolenotifyrS   Z_objr   r  r   #handle_event_from_context_replicantZ-Utilities.handle_event_from_context_replicant  s    I&&3C 0 0#t<((*88::VC 0 0#t<EEGD!**95!CT*N<Fu//>!**95!CT*N<Fu//>""9-5'')2266tH<O<OPX<Y7Z[A6J5++VT:!!#66uPy(;r   c                	s    R p\         P                  ! VP                  4      '       d   VP                  pM\         P                  ! VP                  4      '       d   VP                  pMf\        P
                  ! VP                  \         P                  4      ;'       g0    \        P
                  ! VP                  \         P                  4      pVf+   Rp\        P                  ! \        P                  VR4       R# RVR.p\        P                  ! \        P                  VR4       \        P                  ! VRR4       \         P                  ! V4      p\         P                  ! V4      '       gA   \         P                  '       g+   Rp\        P                  ! \        P                  VR4       R# V P                  P                  P!                  R/ 4      pVP!                  \#        \$        P&                  ! 4       P)                  4       4      4      p\        P*                  ! V4      V8g  pR	VR
.p\        P                  ! \        P                  VR4       \$        P&                  ! 4       P-                  WV4       V P/                  V^ 4       R# )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: 0)r   r   r  Zis_treer   rz   r   rd   r]   r\   r   get_focused_objectr   Zis_tree_itemr   r  rZ   r[   r   rp   rq   r   r   r   )	rF   r  r  rD  ra   r   r  old_namerJ  r  r   *_handle_event_for_removed_selectable_childZ4Utilities._handle_event_for_removed_selectable_child  s   	""5<<00I  ..I ..u||[=T=TU M M))%,,8K8KL VC 0 0#t<!9.BC5++VT: 	Y/]^--i8((..+2J2J2JSC 0 0#t<//33GR@99T-";";"="P"P"RST""4(H4EtSQ5++VT:!!#66uFKtQ'r   c                s  a \         P                  ! 4       P                  4       pSP                  V8X  d*   Rp\        P
                  ! \        P                  VR4       Mt\        P                  ! VV3R l4      '       d*   Rp\        P
                  ! \        P                  VR4       M*Rp\        P
                  ! \        P                  VR4       R# SP                  R8X  d+   Rp\        P
                  ! \        P                  VR4       R# V P                  S4      '       d   R# RRrTRp\        P                  ! SP                  4      p\        P                  ! 4       P                  4       '       EdL   SP                  V8  dI   R	p\        P
                  ! \        P                  VR4       V P                  SP                  R4      w  rEEM^ SP                  ^,
          u;8:  d   V8  dw   M Ms\        P                   ! SP                  SP                  ^,
          4      pR
VR.p	\        P"                  ! \        P                  V	R4       V P                  VR4      w  rEEMV P%                  SP                  4      p
RV
R.p	\        P"                  ! \        P                  V	R4       V P                  V
R4      w  rEEM\        P                  ! 4       P'                  4       '       EdI   SP                  ^ 8X  dI   Rp\        P
                  ! \        P                  VR4       V P)                  SP                  R4      w  rEEM^ SP                  u;8  d   V8  d{   M Mw\        P                   ! SP                  SP                  4      pRSP                  VR.p	\        P"                  ! \        P                  V	R4       V P)                  VR4      w  rEEMV P+                  SP                  4      pRVR.p	\        P"                  ! \        P                  V	R4       V P)                  VR4      w  rEEM,Rp\        P,                  ! SP                  RR4       V P/                  SP                  4      w  rEVf!   \0        P2                  ! SP                  4      pV'       d   \         P                  ! 4       P5                  4       '       d   \0        P6                  ! V4      '       d{   V P8                  P:                  P=                  R/ 4      pVP=                  \?        \         P                  ! 4       P                  4       4      4      p\        P@                  ! V4      V8g  pV'       dA   RV RV 2p\         P                  ! 4       PC                  SWF4       V PE                  WE4       R# RSP                  .p	\        P"                  ! \        P                  V	R4       R# )zOAttempts to recover when the current object has been removed from the document.z%WEB: Removed child is locus of focus.Tc                r/  r   )any_datar0  r   r   r   Z:Utilities.handle_event_for_removed_child.<locals>.<lambda>H  s    Q%..5Hr   z1WEB: Removed child is ancestor of locus of focus.zHWEB: Removed child is not locus of focus nor ancestor of locus of focus.FzWEB: Event detail1 is useless.NzAWEB: Last child removed. Getting new location from end of parent.z4WEB: Getting new location from end of previous childr(  z>WEB: Getting new location from end of source's previous objectzDWEB: 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  z*WEB: Setting locusOfFocus and context to: r  z2WEB: Unable to find context for child removed fromr   )#r   rp   rq   rP  r   rd   r]   r   rz   Zdetail1rO  r}   r  r   Zlast_event_was_upr   r~   r\   Zfind_previous_objectZlast_event_was_downr   Zfind_next_objectr   rA  r   rM  rH  rW  r   r  rZ   r[   r   r   r   )rF   r  r+  rD  rO   r   rJ  r  r   ra   r   r   r  rN  s   &f            r   handle_event_for_removed_childZ(Utilities.handle_event_for_removed_childA  sg    ))+>>@>>U"9C 0 0#t<##E+HIIEC 0 0#t<\C 0 0#t<==B2C 0 0#t<::5AABV..u||<**,>>@@}}+Y##E$4$4c4@"33ELL"EVemma'5+5 **5<<9JKPRWY\]""5#3#3VTB"33E2>V44U\\BZ"C)""5#3#3VTB"33HbAV ,,.BBDD}}!\##E$4$4c4@"//bAVU]]0[0 **5<<GI5==&""5#3#3VTB"//r:V00>X"C)""5#3#3VTB"//"=V F   u6YZ77EKC{!44U\\B }002@@BB{G]G]^aGbGb77;;GRH 99T-*C*C*E*X*X*Z%[\!**3/8;>se2fXNC%%'::5#N""3/FU5++VT:r   c               r   )r   rS   rT   
match_rolerV   
match_namer   r   r   r   r   r   r   r     s2      )  	
 
-r   c                	s   V P                  V4      w  rEpV P                  V4      pV'       d&   V'       d   \        P                  ! V4      V8w  d   R pV'       d&   V'       d   \        P                  ! V4      V8w  d   R pV'       g   R# V P                  V^ 4      w  rxRVRV.p	\        P                  ! \        P                  V	R4       Wx3# )NzWEB: Context replicant isr  Tr?  )	rG  Z_get_object_from_pathr   r   r   r   r   r\   r]   )
rF   rS   rR  rS  rI  Zold_rolerN  rO   r   ra   
   &&&&      r   rF  Z,Utilities._find_context_replicant_deprecated  s     $(#M#Mh#W ((.:  %1:  %1O((a0-sD&A5++VT:{r   c               r   )r   rS   rT   r   z#tuple[Atspi.Accessible, int] | Noner   r   r   r   r   r     s      ) 
-r   c                s    \         P                  ! V4      '       g   V P                  4       pV'       dC   V P                  P	                  \        \         P                  ! V4      4      4      pV'       d   V# R# )zCReturns the previously-stored caret context for the given document.r?  )r   rK   rX   r#   rZ   r[   rY   )rF   rS   r`   r  r   get_prior_contextZUtilities.get_prior_context  sY       **++-H1155d8;N;Nx;X6YZGr   c               r   )r   rO   ri   r   z	list[int]r   r   r   r   r   r     s      - ) r   c                	s    V P                   P                  \        V4      4      pVe   V# \        P                  ! V4      ;'       g    R.pW P                   \        V4      &   V# r?  )r&   rZ   r[   r   r  r  r  r   	_get_pathZUtilities._get_path  sW    ##DI.>Is#++t(*49%	r   c               s(    V ^8  d   QhRRRRRRRR/# )r   rO   rT   r   r   rS   r   r   r   r   r   r   r   r     s8     T T$T T *	T
 
Tr   c                s   T;'       g    V P                  4       pV'       g   R# \        P                  ! V4      pV P                  P	                  \        V4      W34      w  rVWV3V P                  \        V4      &   W3V P                  \        V4      &   V P                  V4      p\        P                  ! V4      p\        P                  ! V4      p	WxV	3V P                  \        V4      &   R# )z4Sets the caret context in document to (obj, offset).N)rX   r   rY   r"   rZ   r[   r#   rV  r   r   r%   )
rF   rO   r   rS   r   Zold_objZ
old_offsetrI  r   r  rT  r   r   ZUtilities.set_caret_context  s     55t335$$X."99==d6lSMZ4;4G##DL147K##DL1~~c"  %  %CGtCS224<@r   c               rR   )r   rO   ri   r   r   r   r   r   r   r   r   r   r     s#      !1 3 C_ r   c                sD    / V n         V P                  W4      p/ V n         V# )zBReturns the first viable/valid caret context given obj and offset.)r$   _first_context)rF   rO   r   rt   s   &&& r   r   ZUtilities.first_context  s)     8:4  -794	r   c                	s
   R VRV.p\         P                  ! \         P                  VR4       \        P                  ! V4      p\
        P                  P                  \
        P                  P                  \
        P                  P                  \
        P                  P                  .pWE9   d   \        P                  ! V4      '       dl   V P                  W4      '       gU   \        P                  ! V^ 4      pRVR.p\         P                  ! \         P                  VR4       V P                  V^ 4      # V P                  V4      pV'       gG   V P!                  V4      '       d0   RVR.p\         P                  ! \         P                  VR4       V^ 3# \"        P$                  ! V4      pV'       Ed7   W(8  Ed0   V P'                  V4      '       d   \(        P*                  ! 4       P-                  4       '       d   V P/                  W4      w  rV	'       g,   RV.p\         P                  ! \         P                  VR4       MvV P'                  V	4      '       g/   RV	R	VR
.p\         P                  ! \         P                  VR4       M1RVRV	RV
.p\         P                  ! \         P                  VR4       W3# RVRVRVRV.p\         P                  ! \         P                  VR4       W3# \1        ^ V4      pV'       d   \"        P2                  ! V4      pV'       d   W,          R8w  g    V\
        P                  P4                  8X  d,   Rp\         P6                  ! \         P                  VR4       W3# V P9                  V4      '       d,   Rp\         P6                  ! \         P                  VR4       W3# \:        P<                  ! W4      pV'       g,   Rp\         P6                  ! \         P                  VR4       W3# V P?                  V4      '       dh   V PA                  V4      '       dQ   RVRVRVR.p\         P                  ! \         P                  VR4       V^,          p\:        P<                  ! W4      pKg  V PC                  V4      '       dM   V P/                  W4      w  rV	'       d2   RVRV	RV
.p\         P                  ! \         P                  VR4       W3# V P!                  V4      '       g2   RVRVRV.p\         P                  ! \         P                  VR4       W3# RVRVRV.p\         P                  ! \         P                  VR4       V P                  V^ 4      # )z(WEB: Looking for first caret context forr  TzWEB: Will look in childzfor first caret contextz0WEB: First caret context for non-text context isrL  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 ofrD  r  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: ChildZofr~  zcannot be context.z/WEB: First caret context at end of empty anchorzcannot be context. ReturningzWEB: Looking in childzfor first caret context for)"r   r\   r]   r   r   r   rA   rB   ZINTERNAL_FRAMEr   r   r}   r  r~   rW  r   r>  r   r   rX  r   rp   Z#last_event_was_character_navigationr   r   r*  r  rd   r<  r   r   rn   r  r  )rF   rO   r   ra   r   Zlook_in_childZfirst_childrB  lengthr   r   r5  rD  r   r  r   rW  ZUtilities._first_context  s}   <c4P5++VT:  %22))--/  '',,T5F5Fs5S5S",,S!4K/>WXFu//>&&{A6611#6!=!=c!B!BH#sSFu//>6M++C0=V-==cBB&224XXZZ(,(9(9#(F%SUXYF&&u'7'7FGGQQ0(?FWYF&&u'7'7FRTW/4NF&&u'7'7F#00:Cvt4)Fu//>;Q**3/HX-9dejjFVFV>V=##E$4$4c4@{" 33C88[##E$4$4c4@{"00=NC 0 0#t<;C  0077&tS+vOcd""5#3#3VTB!#88E  ''$($5$5c$B!HKS+Xt[J""5#3#3VTB,,++E22"E+I3PTV\]Fu//>;)52OQTVZ\bc5++VT:""5!,,r   c               rR   r   rO   rT   r   r   r   r   r   r   r   r   r   r   ?  (      $  
&	r   c                   \         P                   ! 4       pV P                  W4      pRVRVRV^ ,          RV^,          R\         P                   ! 4       V,
          R R2.	p\        P                  ! \        P                  VR4       V# )z4Returns the next (obj, offset) to the specified one.zWEB: Next caret in order forr  r&  (r  r=  T)r  "_find_next_caret_in_order_internalr   r\   r]   rF   rO   r   r  rt   ra   rb   r   r   Z"Utilities.find_next_caret_in_order?  sw     YY[
44SA0#tVSQ%r!u$))+
*B3)Gr&JL5++VT:	r   c               rR   rY  r   r   r   r   r   r   M  s(     ? ?$? ? 
&	?r   c                	sh   V'       g   V P                  4       w  rV'       d   V P                  V4      '       g   R# V P                  V4      '       Ed   V P                  V4      '       Edy   \        P
                  ! V4      '       Ed\   \        P                  ! V4      p\        V^,           \        V4      4       EF#  p\        P                  ! W4      pV'       d   W4,          R8w  d   RVRW4,          P                  RR4      R.p\        P                  ! \        P                  VR4       V\        P                  ! V4      8X  d0   RW.p\        P                  ! \        P                  VR4       W3u # V P                  V4      '       d3   V P!                  VR
4      '       d   V^ 3u # V P#                  VR
4      u # W4,          RV P$                  39  g   EK!  W3u # 	  M|\&        P(                  ! V4      '       d?   V P!                  W4      '       g(   V P#                  \&        P*                  ! V^ 4      R
4      # V^ 8  d   V P-                  V4      '       g   V^ 3# V P/                  V4      '       d   R# V'       Ed1   \&        P0                  ! V4      ;p'       Ed   V P3                  V4      '       d   V P5                  V4      pKR  \&        P6                  ! V4      '       gJ   R	p\        P8                  ! \        P                  VR4       \&        P0                  ! V4      '       d   TpK  MV P;                  V4      w  rpV	^,           V
8X  d,   ^ T	u;8:  d   T
u;8  d   V8:  d   M MV P#                  Wy4      # \&        P<                  ! V4      pV'       d   V P#                  VR
4      # TpEK9  R# )Nr  ERROR: Childfound at offset with char 'r   r!  r'  Tz WEB: Handling error by returningz6WEB: Finding next caret in order. Parent is not valid.r   r?  )r   rv   r>  r   r   r   r*  rz  r   r   r   r"  r   r\   r]   rY  r   r]  ZERO_WIDTH_NO_BREAK_SPACEr   r}   r~   r   rE  rY   r  r  rK   rd   r<  Zget_next_siblingrF   rO   r   r5  r`  r   ra   r   rD  r   r   rX  r  r   r]  Z,Utilities._find_next_caret_in_order_internalM  s   
 002KC$22377O'',,((--&2L2LS2Q2Q!..s3vz3x=9A'<<SDE!8"0%9V"*+"5"5dE"BC"I**5+;+;VTJ![%O%OPU%VV&H#%QF!..u/?/?N#&6M33E::66ubAA#(!8O#FFubQQ{$d&D&D+F F"v! :" ))#..t7R7RSV7_7_>>x?Q?QRUWX?Y[]^^!D$>$>s$C$CAv %%c**Oc!4!4S!99v9))&1188@$$V,,N##E$4$4c4@&&v.. C!%!B!B3!GEqyCA$>$>$>>>vMM--c2E>>ubIICr   c               rR   rY  r   r   r   r   r   r     rZ  r   c                r[  )z8Returns the previous (obj, offset) to the specified one.z WEB: Previous caret in order forr  r&  r\  r  r=  T)r  &_find_previous_caret_in_order_internalr   r\   r]   r^  rb   r   r   Z&Utilities.find_previous_caret_in_order  sw     YY[
88E4c4Q%r!u$))+
*B3)Gr&JL5++VT:	r   c               rR   rY  r   r   r   r   r   r     s(     = =$= = 
&	=r   c                	s:   V'       g   V P                  4       w  rV'       d   V P                  V4      '       g   R
# V P                  V4      '       Ed   V P                  V4      '       EdG   \        P
                  ! V4      '       Ed*   \        P                  ! V4      pVR	8X  g   V\        V4      8  d   \        V4      p\        V^,
          R	R	4       F  p\        P                  ! W4      pV'       dQ   W4,          R8w  dD   RVRW4,          P                  RR4      R.p\        P                  ! \        P                  VR4       V P                  V4      '       d3   V P                  VR	4      '       d   V^ 3u # V P!                  VR	4      u # W4,          RV P"                  39  g   K  W3u # 	  M\$        P&                  ! V4      '       dZ   V P                  W4      '       gC   V P!                  \$        P(                  ! V\$        P&                  ! V4      ^,
          4      R	4      # V^ 8  d   V P+                  V4      '       g   V^ 3# V P-                  V4      '       d   R
# V'       Ed1   \$        P.                  ! V4      ;p'       Ed   V P1                  V4      '       d   V P3                  V4      pKR  \$        P4                  ! V4      '       gJ   Rp\        P6                  ! \        P                  VR4       \$        P.                  ! V4      '       d   TpK  MV P9                  V4      w  rpV	^,           V
8X  d,   ^ T	u;8:  d   T
u;8  d   V8:  d   M MV P!                  Wy4      # \$        P:                  ! V4      pV'       d   V P!                  VR	4      # TpEK9  R
# )Nr  r_  r`  r   r!  r'  Tz:WEB: Finding previous caret in order. Parent is not valid.r   r?  )r   rv   r>  r   r   r   r*  r   rz  r   r   r"  r   r\   r]   r   rc  ra  r   r}   r~   r   rE  rY   r  r  rK   rd   r<  Zget_previous_siblingrb  r  r   rc  Z0Utilities._find_previous_caret_in_order_internal  s   
 002KC$22377O'',,((--&2L2LS2Q2Q!..s3R<6CM#9 ]Fvz2r2A'<<SDE!8"0%9V"*+"5"5dE"BC"I**5+;+;VTJ33E::66ubAA#(!8O#JJ5RTUU{8T5S5S*TT"v 3 ))#..t7R7RSV7_7_BB&&sH,D,DS,IA,MNPRT T!D$>$>s$C$CAv %%c**Oc!4!4S!99v9))&1188@$$V,,R##E$4$4c4@&&v.. C!%!B!B3!GEqyCA$>$>$>BB6QQ11#6EBB5"MMCr   c               r   r  r   r   r   r   r   r     s      ; 4 r   c                s   \         P                  ! 4       P                  R4      '       g   R# \        P                  ! VP
                  4      '       g   R# \         P                  ! 4       P                  R4      '       gY   V P                  VP
                  4      V P                  4       8w  d+   Rp\        P                  ! \        P                  VR4       R# \        P                  ! VP
                  \        P                  4      pV'       dP   \        P                  ! V4      VP
                  8X  d+   Rp\        P                  ! \        P                  VR4       R# R# )z9Returns true if event should be handled as a live region.ZinferLiveRegionsFZ presentLiveRegionFromInactiveTabz-WEB: Live region source is not in active tab.Tz6WEB: Focused source will be presented as part of alert)r   rp   r  r   r   r  r-  rX   r   rd   r]   r   rz   r  rM  )rF   r  rD  Zalertru   r   handle_as_live_regionZUtilities.handle_as_live_region  s      ++-99:LMM))%,,77++-99:\]]55ellCtG[G[G]]AC 0 0#t<&&u||[5N5NO[33E:ellJJC 0 0#t<r   )!r$   r"   r?   r%   r-   r.   r@   r+   r5   r'   r(   r6   r/   r*   r1   r0   r,   r3   r)   r4   r2   r=   r;   r&   r#   r<   r7   r8   r:   r9   r>   rE   rD   r	  r  r   )Nr   FN)i   )r   r   r   )r   T)r   )NT)Nr   NT)NTr   )NFT)NTT)Nr   Nr?  )Z__name__Z
__module__Z__qualname__Z__firstlineno____doc__r!   rQ   rc   r_   rg   rn   rv   r   r   r   r   r   r   r   r   Zstaticmethodr   r   r   r   r   r   r   r  r   r8  r>  rK  rH  rf  re  rh  rg  rp  ro  rn  rm  r1  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  r  r  r  r  r  r   r$  r'  r&  r%  r,  r.  r1  r2  r3  r8  r:  rX  r<  r>  rA  r   rG  r^   rK  rO  rQ  rF  rU  rV  r   r   rW  r   r]  r   rc  rd  Z__static_attributes__Z__classcell__)rG   s   @r   r   r   F   s   V#= #=J7I0+B/	"-E:. .)%&%&&D   :5>B B2
 .B,\.JX>"@GORKZ.WrDL=( D
obAFDL43j$ $L$Tl<
 
G+<+Z0d0* ,/b,\*$&!FJS	!F#(D,^&S

.4(T.!F8>N
<
M  (6@9QW4
I>>Yv8>@<%N!FVp, T,W-r?B=~ r   r   )+re  Z
__future__r   Z__id__Z__version__Z__date__Z__copyright__Z__license__r  r.  r  r  Ztypingr   ZgiZrequire_versionZgi.repositoryr   Zorcar   r   r   r   r   Zorca.ax_componentr	   Zorca.ax_documentr
   Zorca.ax_hypertextr   Zorca.ax_objectr   Zorca.ax_tabler   Zorca.ax_textr   Zorca.ax_utilitiesr   Zorca.ax_utilities_debuggingr   r   r   r   r   r   r   <module>rf     s   > S #7  	     	   7E "    $ ! ! ) ' ) # !  ) <j6 ** j6r   