+
    Qi  c                   s   R t RtRtRtRtR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 R4      t]P9                  4        R# )<Utilities for obtaining information about accessible tables.z$Id$z
$Revision$z$Date$zGCopyright (c) 2023 Igalia, S.L.Copyright (c) 2023 GNOME Foundation Inc.ZLGPLN)	GeneratorAtspiz2.0)r   )GLib)debug)messages)object_properties)AXObject)AXComponent)AXUtilitiesRole)AXUtilitiesStatec                   s.  a  ] tR t^6t o Rt/ t/ t/ t/ t/ t	/ t
/ t/ t/ t/ t/ t/ t/ t/ t/ t/ t]P,                  ! 4       t]V 3R lR l4       t]V 3R lR l4       t]RV 3R lR ll4       t]RV 3R lR	 ll4       t]V 3R
 lR l4       t]RV 3R lR ll4       t]V 3R lR l4       t]RV 3R lR ll4       t ]V 3R lR l4       t!]RV 3R lR ll4       t"]V 3R lR l4       t#]V 3R lR l4       t$]V 3R lR l4       t%]V 3R lR l4       t&]V 3R lR l4       t']V 3R  lR! l4       t(]V 3R" lR# l4       t)]RV 3R$ lR% ll4       t*]V 3R& lR' l4       t+]V 3R( lR) l4       t,]V 3R* lR+ l4       t-]V 3R, lR- l4       t.]V 3R. lR/ l4       t/]V 3R0 lR1 l4       t0]V 3R2 lR3 l4       t1]V 3R4 lR5 l4       t2]V 3R6 lR7 l4       t3]V 3R8 lR9 l4       t4]V 3R: lR; l4       t5]RV 3R< lR= ll4       t6]V 3R> lR? l4       t7]V 3R@ lRA l4       t8]RV 3RB lRC ll4       t9]RV 3RD lRE ll4       t:]V 3RF lRG l4       t;]V 3RH lRI l4       t<]V 3RJ lRK l4       t=]RV 3RL lRM ll4       t>]V 3RN lRO l4       t?]V 3RP lRQ l4       t@]V 3RR lRS l4       tA]V 3RT lRU l4       tB]V 3RV lRW l4       tC]V 3RX lRY l4       tD]V 3RZ lR[ l4       tE]V 3R\ lR] l4       tF]V 3R^ lR_ l4       tG]V 3R` lRa l4       tH]V 3Rb lRc l4       tI]V 3Rd lRe l4       tJ]V 3Rf lRg l4       tK]V 3Rh lRi l4       tL]V 3Rj lRk l4       tM]V 3Rl lRm l4       tN]V 3Rn lRo l4       tO]V 3Rp lRq l4       tP]V 3Rr lRs l4       tQ]V 3Rt lRu l4       tR]V 3Rv lRw l4       tS]V 3Rx lRy l4       tT]V 3Rz lR{ l4       tU]V 3R| lR} l4       tV]V 3R~ lR l4       tW]V 3R lR l4       tX]V 3R lR l4       tY]V 3R lR l4       tZ]V 3R lR l4       t[]RV 3R lR ll4       t\V 3R lt]Rt^V t_R# )AXTabler    c                   < V ^8  d   QhRR/#    returnN Zformat__classdict__   "2/usr/lib/python3.14/site-packages/orca/ax_table.py__annotate__AXTable.__annotate__P   s           c                 s~    \         P                  ! \        P                  R7      p RV n        V P                  4        R# )z3Starts thread to periodically clear cached details.)ZtargetTN)	threadingZThreadr   _clear_stored_dataZdaemonstart)Zthreads    r   start_cache_clearing_threadZ#AXTable.start_cache_clearing_threadO   s*     !!)C)CDr   c                r   r   r   r   r   r   r   r   X   s     . . .r   c                 s\     \         P                  ! ^<4       \        P                  4        K-  )z*Clears any data we have cached for objects)timeZsleepr   _clear_all_dictionariesr   r   r   r   ZAXTable._clear_stored_dataW   s     JJrN++-r   c                $   < V ^8  d   QhRS[ RR/# r   reasonr   Nstrr   r   r   r   r   `   s     1 1 1T 1r   c                s   R pV '       d   VRV  2,          p\         P                  ! \         P                  VR4       \        P                  ;_uu_ 4        \        P
                  P                  4        \        P                  P                  4        \        P                  P                  4        \        P                  P                  4        \        P                  P                  4        \        P                  P                  4        \        P                  P                  4        \        P                  P                  4        \        P                  P                  4        \        P                  P                  4        \        P                   P                  4        \        P"                  P                  4        \        P$                  P                  4        RRR4       R#   + '       g   i     R# ; i)zAXTable: Clearing cache.z	 Reason: TN)r   print_message
LEVEL_INFOr   _lockCAPTIONSZclearPHYSICAL_COORDINATES_FROM_CELLPHYSICAL_COORDINATES_FROM_TABLEPHYSICAL_SPANS_FROM_CELLPHYSICAL_SPANS_FROM_TABLEPHYSICAL_COLUMN_COUNTPHYSICAL_ROW_COUNTPRESENTABLE_COORDINATESPRESENTABLE_COORDINATES_LABELSPRESENTABLE_COLUMN_COUNTPRESENTABLE_ROW_COUNTCOLUMN_HEADERS_FOR_CELLROW_HEADERS_FOR_CELL)r    msg   & r   r   ZAXTable._clear_all_dictionaries_   s2   (Yvh''CE,,c48]]]""$2288:3399;,,224--335))//1&&,,.++1132288:,,224))//1++113((..0 ]]]s   FG&&G7	c                r   r   r!   r   r   r   r   r   v   s     0 0 0T 0r   c                s0    \         P                  V 4       R# )z*Clears all cached information immediately.N)r   r   )r       &r   clear_cache_nowZAXTable.clear_cache_nowu   s     	''/r   c                \   < V ^8  d   QhRS[ P                  RS[ P                  R,          /# r   tabler   Nr   
Accessibler   r   r   r   r   |   s,      5++ 0@0@40G r   c                s:   \         P                  ! V 4      '       g   R# \        V 4      \        P                  9   d)   \        P                  P                  \        V 4      4      #  \        P                  P                  V 4      pRT RT.p\        P                  ! \        P                  TR4       T\        P                  \        T 4      &   T#   \        P                   d7   pRT 2p\        P                  ! \        P                  TR4        Rp?R# Rp?ii ; i)z>Returns the accessible object containing the caption of table.Nz#AXTable: Exception in get_caption: TzAXTable: Caption foris)r   supports_tablehashr   r&   getr   Tableget_captionr   GErrorr   r#   r$   print_tokens)r9   Zcaptionerrorr3   tokens   &    r   rA   ZAXTable.get_caption{   s     &&u--;'***##''U44	kk--e4G )%w?5++VT:(/e% {{ 	7w?C 0 0#t<	s   &C D$+DDc                @   < V ^8  d   QhRS[ P                  RS[RS[/# r   r9   prefer_attributer   r   r;   boolintr   r   r   r   r      s)       0 0 D TW r   c                R   \         P                  ! V 4      '       g   R# V'       d   \        P                  V 4      pVe   V# \        P                  P                  \        V 4      4      pVe   V#  \        P                  P                  V 4      pRT RT.p\        P                  ! \        P                  TR4       T\        P                  \        T 4      &   T#   \        P                   d8   pRT 2p\        P                  ! \        P                  TR4       Ru Rp?# Rp?ii ; i)z"Returns the column count of table.Nz(AXTable: Exception in get_column_count: TzAXTable: Column count forr<   )r   r=   r    _get_column_count_from_attributer+   r?   r>   r   r@   Zget_n_columnsr   rB   r   r#   r$   rC   r9   rI   countrD   r3   rE      &&    r   get_column_countZAXTable.get_column_count   s     &&u--I<<UCE --11$u+>L	KK--e4E .udEB5++VT:5:%%d5k2 {{ 	<UGDC 0 0#t<I	   1C D&/,D!D&!D&c                H   < V ^8  d   QhRS[ P                  RS[R,          /# r8   r   r;   rL   r   r   r   r   r      s%      0@0@ S4Z r   c                   \        V 4      \        P                  9   d)   \        P                  P                  \        V 4      4      # \        P
                  ! V 4      pVP                  R4      pRpVe   \        V4      pRV RV.p\        P                  ! \        P                  VR4       V\        P                  \        V 4      &   V# )zJReturns the value of the 'colcount' object attribute or None if not found.ZcolcountNz#AXTable: Column count attribute forr<   T)
r>   r   r/   r?   r   get_attributes_dictrL   r   rC   r$   r9   attrsZattrrQ   rE   rF   r   rO   Z(AXTable._get_column_count_from_attribute   s     ;':::3377UDD,,U3yy$IE7eL5++VT:8=((e5r   c                rG   rH   rJ   r   r   r   r   r      s)      U--  QT r   c                rM   )zReturns the row count of table.Nz%AXTable: Exception in get_row_count: TzAXTable: Row count forr<   rN   )r   r=   r   _get_row_count_from_attributer,   r?   r>   r   r@   Z
get_n_rowsr   rB   r   r#   r$   rC   rP   rR   r   get_row_countZAXTable.get_row_count   s     &&u--I99%@E **..tE{;L	KK**51E +E4?5++VT:27""4;/ {{ 	9%AC 0 0#t<I	rT   c                rU   r8   rV   r   r   r   r   r      s%      U-=-= #* r   c                rW   )zJReturns the value of the 'rowcount' object attribute or None if not found.ZrowcountNz AXTable: Row count attribute forr<   T)
r>   r   r0   r?   r   rX   rL   r   rC   r$   rY   rF   r   r[   Z%AXTable._get_row_count_from_attribute   s     ;'7770044T%[AA,,U3yy$IE4eT5I5++VT:5:%%d5k2r   c                sF   < V ^8  d   QhRS[ P                  RS[RS[RS[/# )r   r9   max_rowsmax_colsr   r   r;   rL   rK   r   r   r   r   r      s3      +.?B	r   c           
     s   \        \        V\        P                  V R4      4      4       F  p\        \        V\        P	                  V R4      4      4       FV  p \
        P                  P                  WV4      ^8  d     R# \
        P                  P                  WV4      ^8  d     R# KX  	  K  	  R#   \        P                   d9   pRT 2p\        P                  ! \        P                  TR4        Rp?  R# Rp?ii ; i)z<Returns True if table has at least one cell with a span > 1.FTz,AXTable: Exception in is_non_uniform_table: N)rangeminr   r\   rS   r   r@   Zget_row_extent_atZget_column_extent_atr   rB   r   r#   r$   )r9   r]   r^   rowcolrD   r3      &&&    r   is_non_uniform_tableZAXTable.is_non_uniform_table   s     Xw'<'<UE'JKLCS7+C+CE5+QRS!{{44UEI#{{77CH1L# M	 T M  {{ !HPC''(8(8#tD !s   %B6%B66D+C>>Dc                :   < V ^8  d   QhRS[ P                  RS[/# r   r9   r   rV   r   r   r   r   r     s!      )9)9 c r   c                v   \         P                  ! V 4      '       g   ^ #  \        P                  P	                  V 4      pRT RT.p\        P                  ! \        P                  TR4       T#   \
        P                   d7   pRT 2p\        P                  ! \        P                  TR4        Rp?^ # Rp?ii ; i)z0Returns the number of selected columns in table.z0AXTable: Exception in get_selected_column_count TNz"AXTable: Selected column count forr<   )r   r=   r   r@   Zget_n_selected_columnsr   rB   r   r#   r$   rC   r9   rQ   rD   r3   rE   rF   r   get_selected_column_countZ!AXTable.get_selected_column_count  s     &&u--	KK66u=E 7tUK5++VT: {{ 	DUGLC 0 0#t<	   A- -B8+B33B8c                J   < V ^8  d   QhRS[ P                  RS[S[,          /# rg   r   r;   listrL   r   r   r   r   r     s%      E$4$4 c r   c                x   \         P                  ! V 4      '       g   . #  \        P                  P	                  V 4      pRT RT.p\        P                  ! \        P                  TR4       T#   \
        P                   d8   pRT 2p\        P                  ! \        P                  TR4       . u Rp?# Rp?ii ; i)zCReturns a list of column indices for the selected columns in table.z,AXTable: Exception in get_selected_columns: TNzAXTable: Selected columns forare)r   r=   r   r@   get_selected_columnsr   rB   r   r#   r$   rC   )r9   ZcolumnsrD   r3   rE   rF   r   rq   ZAXTable.get_selected_columns  s     &&u--I	kk66u=G 25%I5++VT: {{ 	@HC 0 0#t<I	   A- -B9,B4.B94B9c                rf   rg   rV   r   r   r   r   r   &  s!      e&6&6 3 r   c                rh   )z-Returns the number of selected rows in table.z-AXTable: Exception in get_selected_row_count TNzAXTable: Selected row count forr<   )r   r=   r   r@   Zget_n_selected_rowsr   rB   r   r#   r$   rC   ri   rF   r   get_selected_row_countZAXTable.get_selected_row_count%  s     &&u--	KK33E:E 4UD%H5++VT: {{ 	A%IC 0 0#t<	rk   c                rl   rg   rm   r   r   r   r   r   8  s%      !1!1 d3i r   c                ro   )z=Returns a list of row indices for the selected rows in table.z)AXTable: Exception in get_selected_rows: TNzAXTable: Selected rows forrp   )r   r=   r   r@   get_selected_rowsr   rB   r   r#   r$   rC   )r9   rowsrD   r3   rE   rF   r   rt   ZAXTable.get_selected_rows7  s     &&u--I	;;007D /udC5++VT: {{ 	=eWEC 0 0#t<I	rr   c                rf   rg   r   r;   rK   r   r   r   r   r   J  s%     @ @e&6&6 @4 @r   c                s   \         P                  ! V 4      '       g   R# \        P                  V RR7      pV^ 8:  d   R# \        P	                  V 4      V8X  d   R# \        P                  V RR7      p\        P                  V 4      V8H  # )z0Returns True if all cells in table are selected.FrI   T)r   r=   r   r\   rs   rS   rj   )r9   ru   Zcols   &  r   all_cells_are_selectedZAXTable.all_cells_are_selectedI  sx     &&u--$$UU$C19))%0D8'''F0074??r   c          	      sh   < V ^8  d   QhRS[ P                  RS[RS[RS[ P                  R,          /# )r   r9   rb   columnr   NrV   r   r   r   r   r   [  s;      5++ # s uGWGWZ^G^ r   c                s   \         P                  ! V 4      '       g   R#  \        P                  P	                  WV4      pRT RT R2T RT.p\        P                  ! \        P                  TR4       T#   \
        P                   d?   pRT RT R2T RT.p\        P                  ! \        P                  TR4        Rp?R# Rp?ii ; i)	z1Returns the cell at the 0-indexed row and column.Nz(AXTable: Exception getting cell at row: z col:  in:TzAXTable: Cell at row: r<   )
r   r=   r   r@   Zget_accessible_atr   rB   r   rC   r$   )r9   rb   rz   cellrD   rE   s   &&&   r   get_cell_atZAXTable.get_cell_atZ  s     &&u--	;;00VDD +3%vfXSA5$PTU5++VT: {{ 	@VF8SVWY^5"Fu//>		s    A5 5C
3CCc                rf   r   r}   r   rV   r   r   r   r   r   n  s!     2 2e.. 23 2r   c                s   \         P                  ! V R4      pVe   VR8w  d   \        V4      # \         P                  ! V 4      p\         P                  ! V4      \
        P                  P                  8X  d   Tp \         P                  ! V 4      # )z>Returns the index of cell to be used with the table interface.ztable-cell-index )	r   get_attributerL   Z
get_parentZget_roler   ZRoleZ
TABLE_CELLZget_index_in_parent)r}   indexZparentrx   r   _get_cell_indexZAXTable._get_cell_indexm  sr     &&t-?@"u:
 $$T*V$

(=(==D++D11r   c                sV   < V ^8  d   QhRS[ P                  RS[RS[S[S[3,          /# )r   r}   rI   r   r   r;   rK   tuplerL   r   r   r   r   r     s5     " "U-- " "QVWZ\_W_Q` "r   c                sZ   \         P                  ! V 4      '       g   R# \        P                  ! V 4      '       d   \        P                  V 4      w  r#M\        P                  V 4      w  r#V'       g   W#3# \        P                  V 4      w  rEVe   \        V4      pVe   \        V4      pW#3# )z!Returns the row and column spans.rN   rN   )	r	   is_table_cell_or_headerr   supports_table_cellr   _get_cell_spans_from_table_cell_get_cell_spans_from_table_get_cell_spans_from_attributerL   )r}   rI   row_spancol_spanZrowspan_attrZcolspan_attrrR   r   get_cell_spansZAXTable.get_cell_spans~  s     66t<<M''--!(!H!H!NHh!(!C!CD!IH%%%,%K%KD%Q"#<(H#<(H!!r   c                l   < V ^8  d   QhRS[ P                  RS[S[R,          S[R,          3,          /# r   r}   r   Nr   r;   r   r"   r   r   r   r   r     s5     " ""	sTz3:%	&"r   c                s   \        V 4      \        P                  9   d*   \        P                  P                  \        V 4      R4      # \        P
                  ! V 4      pVP                  RR4      pVP                  RR4      pRV RVRV.p\        P                  ! \        P                  VR4       W#3\        P                  \        V 4      &   W#3# )	zMReturns the row and column spans exposed via object attribute, or None, None.Nrowspancolspanz(AXTable: Row and col span attributes forr|   ,TNN)	r>   r   PRESENTABLE_SPANSr?   r   rX   r   rC   r$   )r}   rZ   r   r   rE   rF   r   r   Z&AXTable._get_cell_spans_from_attribute  s     :222,,00d\JJ,,T299Y-99Y-<dCSVX`a5++VT:080B!!$t*-!!r   c                P   < V ^8  d   QhRS[ P                  RS[S[S[3,          /# r   r   r;   r   rL   r   r   r   r   r     s)     :" :")9)9 :"eCHo :"r   c                s   \        V 4      \        P                  9   d*   \        P                  P                  \        V 4      R4      # \        P	                  V 4      pV^ 8  d   R# \        P                  V 4      pVf   R# \        P                  ! V4      '       g   R# \        P                  ! V4      '       d   R#  \        P                  P                  W!4      pTf3   RT RT R2T.p\        P$                  ! \        P"                  TR4       R# T^ ,          '       g   R# TP&                  p\        P)                  TR4      pYx8  d3   RT T R	T 2.p\        P$                  ! \        P"                  TR4       ^pTP*                  p	\        P-                  TR4      p
Y8  d3   R
T T	 RT
 2.p\        P$                  ! \        P"                  TR4       ^p	RT RT RT	 2.p\        P$                  ! \        P"                  TR4       Yy3\        P                  \        T 4      &   Yy3#   \        P                   d8   pRT 2p\        P                   ! \        P"                  TR4       Ru Rp?# Rp?ii ; i)zAReturns the row and column spans of cell via the table interface.Nz2AXTable: Exception in _get_cell_spans_from_table: Tz3AXTable: get_row_column_extents_at_index failed forz	at index r{   Fz!AXTable: Table iface row span forz is greater than row count: z!AXTable: Table iface col span forz is greater than col count: zAXTable: Table iface spans forare rowspan: , colspan: r   )   r   )r>   r   r*   r?   r   	get_tabler   r=   r	   is_treer   r@   Zget_row_column_extents_at_indexr   rB   r   r#   r$   rC   Zrow_extentsr\   Zcol_extentsrS   )r}   r   r9   resultrD   r3   rE   r   Z	row_countr   Z	col_counts   &          r   r   Z"AXTable._get_cell_spans_from_table  sI    ::::4488dXNN''-19M!!$'=M&&u--M ""5))K	[[@@NF >KT!%,e5Fu//>MayyM%%))%7	94!
">ykJLFu//>H%%,,UE:	94!
">ykJLFu//>H2D!(;xjAC5++VT:8@8J))$t*5!!E {{ 	FugNC 0 0#t<M	s   >H) )I5>,I0*I50I5c                r   r   r   r   r   r   r   r     s)     " "e.>.> "5c? "r   c                s   \        V 4      \        P                  9   d*   \        P                  P                  \        V 4      R4      # \        P
                  ! V 4      '       g   R#  \        P                  P                  V 4      p\        P                  P                  V 4      pRT RT RT 2.p\        P                  ! \        P                  TR4       Y3\        P                  \        T 4      &   Y3#   \        P                   d8   pRT 2p\        P                  ! \        P                  TR4       Ru Rp?# Rp?ii ; i)zFReturns the row and column spans of cell via the table cell interface.z7AXTable: Exception in _get_cell_spans_from_table_cell: TNz"AXTable: TableCell iface spans forr   r   r   )r>   r   r)   r?   r   r   r   	TableCellZget_row_spanZget_column_spanr   rB   r   r#   r$   rC   )r}   r   r   rD   r3   rE      &     r   r   Z'AXTable._get_cell_spans_from_table_cell  s    :9993377T
HMM++D11M	 33D9H66t<H 7!(;xjAC5++VT:7?7I((d4!! {{ 	KE7SC 0 0#t<M	s   '>C6 6E,D=7E=Ec                d   < V ^8  d   QhRS[ P                  RS[RS[S[ P                  ,          /# )r   r9   rz   r   r   r;   rL   rn   r   r   r   r   r     s6      ),	e	r   c                   \         P                  ! V 4      '       g   . # V^ 8  d   . #  \        P                  P	                  W4      pRT R2T RT.p\        P                  ! \        P                  TR4       Te   T.# . #   \
        P                   d8   pRT 2p\        P                  ! \        P                  TR4       . u Rp?# Rp?ii ; i)zIReturns the column headers of the indexed column via the table interface.z6AXTable: Exception in _get_column_headers_from_table: TNz'AXTable: Table iface header for column  ofr<   )r   r=   r   r@   Zget_column_headerr   rB   r   r#   r$   rC   )r9   rz   headerrD   r3   rE   rR   r   _get_column_headers_from_tableZ&AXTable._get_column_headers_from_table  s     &&u--IA:I	[[225AF <F83GPTV\]5++VT:8O	 {{ 	J5'RC 0 0#t<I	   B C,CCCc                ^   < V ^8  d   QhRS[ P                  RS[S[ P                  ,          /# r   r   r;   rn   r   r   r   r   r     s,      %2B2B tEL\L\G] r   c                   \         P                  ! V 4      '       g   . #  \        P                  P	                  V 4      pTf-   RT .p\        P                  ! \        P                  TR4       . # RT.p\        P                  ! \        P                  TR4       T#   \
        P                   d8   pRT 2p\        P                  ! \        P                  TR4       . u Rp?# Rp?ii ; i)zAReturns the column headers for cell via the table cell interface.z;AXTable: Exception in _get_column_headers_from_table_cell: TNz+AXTable: get_column_header_cells failed forz5AXTable: TableCell iface column headers for cell are:)r   r   r   r   Zget_column_header_cellsr   rB   r   r#   r$   rC   r}   headersrD   r3   rE   rF   r   #_get_column_headers_from_table_cellZ+AXTable._get_column_headers_from_table_cell  s     ++D11I	oo==dCG ?CTJFu//>II7S5++VT: {{ 	OPUwWC 0 0#t<I	   B C'0,C"C'"C'c                r   )r   r9   rb   r   r   r   r   r   r   r   0  s3      5+;+; # $uO_O_J` r   c                r   )zCReturns the row headers of the indexed row via the table interface.z3AXTable: Exception in _get_row_headers_from_table: TNz$AXTable: Table iface header for row r   r<   )r   r=   r   r@   Zget_row_headerr   rB   r   r#   r$   rC   )r9   rb   r   rD   r3   rE   rR   r   _get_row_headers_from_tableZ#AXTable._get_row_headers_from_table/  s     &&u--I7I	[[//;F 9SA5$PVW5++VT:8O	 {{ 	GwOC 0 0#t<I	r   c                r   r   r   r   r   r   r   r   H  s,      u/?/? DIYIYDZ r   c                r   )z>Returns the row headers for cell via the table cell interface.z8AXTable: Exception in _get_row_headers_from_table_cell: TNz(AXTable: get_row_header_cells failed forz2AXTable: TableCell iface row headers for cell are:)r   r   r   r   Zget_row_header_cellsr   rB   r   r#   r$   rC   r   rF   r    _get_row_headers_from_table_cellZ(AXTable._get_row_headers_from_table_cellG  s     ++D11I	oo::4@G ?@$GFu//>IFP5++VT: {{ 	LUGTC 0 0#t<I	r   c                   < V ^8  d   QhRS[ P                  RS[ P                  R,          RS[S[ P                  ,          /# r   r}   old_cellNr   r   r   r   r   r   r   _  C     ? ??""T)? 
e	?r   c                L   V'       dB   \         P                  ! V4      '       g&   \        P                  ! V\         P                  4      p\        P                  V 4      pVf   V# \        P                  V4      p\        \        V4      P                  \        V4      4      4      # )zCReturns row headers of cell that are not also headers of old_cell. )	r	   r   r   find_ancestorr   get_row_headersrn   set
differencer}   r   r   Zold_headers   &&  r   get_new_row_headersZAXTable.get_new_row_headers^  sy     OCCHMM--h8_8_`H))$/N--h7CL++C,<=>>r   c                r   r   r   r   r   r   r   r   p  r   r   c                r   )zFReturns column headers of cell that are not also headers of old_cell. )	r	   r   r   r   r   get_column_headersrn   r   r   r   r   r   get_new_column_headersZAXTable.get_new_column_headerso  sy     OCCHMM--h8_8_`H,,T2N00:CL++C,<=>>r   c                r   r   r   r   r   r   r   r     s,     & &e.. &48H8H3I &r   c                v   \         P                  ! V 4      '       g   . # \        P                  V 4      pVe   V.# \        P                  P                  \        V 4      4      pVe   V# \        P                  V 4      p\        V4      ^8w  d   V\        P                  \        V 4      &   V# \        P                  V^ ,          4      p\        V4      ^8X  dF   V^ ,          V9  d8   VP                  ^ V^ ,          4       \        P                  V^ ,          4      pKU  V\        P                  \        V 4      &   V# )zNReturns the row headers for cell, doing extra work to ensure we have them all.)
r	   is_table_cellr   get_dynamic_row_headerr2   r?   r>   _get_row_headersleninsertr}   Zdynamic_headerr   Zothers   &   r   r   ZAXTable.get_row_headers  s     ,,T22I 77=%"## --11$t*=M))$/v;!7=G((d4M))&)4&kQ6!9F#:MM!VAY'--fQi8F39$$T$Z0r   c                r   r   r   r   r   r   r   r     s,      u// D9I9I4J r   c                s   \         P                  ! V 4      '       d   \        P                  V 4      # \        P	                  V 4      w  rV^ 8  g   V^ 8  d   . # \        P                  V 4      pVf   . # . p\        P                  V 4      ^ ,          p\        WV,           4       F'  pVP                  \        P                  W64      4       K)  	  V# )z!Returns the row headers for cell.)
r   r   r   r    _get_cell_coordinates_from_tabler   r   r`   extendr   )r}   rb   rz   r9   r   r   r      &      r   r   ZAXTable._get_row_headers  s     ''--;;DAA>>tD7fqjI!!$'=I44T:1=3g.ENN7>>uLM / r   c                rG   r   r9   
stop_afterr   r_   r   r   r   r   r     s(      u// S $ r   c                    \         P                  ! V 4      '       g   R# \        V^,           \        P	                  V 4      4      p\        V4       F!  p\        P                  W4      '       g   K    R# 	  R# )z<Returns True if table has any headers for rows 0-stop_after.FT)r   r=   ra   r   r\   r`   r   r9   r   i   && r   has_row_headersZAXTable.has_row_headers  s[     &&u--a)>)>u)EF
z"A225<< # r   c                r   r   r   r   r   r   r   r     s,     & &!1!1 &d5;K;K6L &r   c                r   )zQReturns the column headers for cell, doing extra work to ensure we have them all.)
r	   r   r   get_dynamic_column_headerr1   r?   r>   _get_column_headersr   r   r   r   r   r   ZAXTable.get_column_headers  s     ,,T22I ::4@%"## 0044T$Z@M,,T2v;!:@G++DJ7M,,VAY7&kQ6!9F#:MM!VAY'00;F6<''T
3r   c                r   r   r   r   r   r   r   r     s,      %"2"2 tE<L<L7M r   c                s   \         P                  ! V 4      '       d   \        P                  V 4      # \        P	                  V 4      w  rV^ 8  g   V^ 8  d   . # \        P                  V 4      pVf   . # . p\        P                  V 4      ^,          p\        W"V,           4       F'  pVP                  \        P                  W64      4       K)  	  V# )z$Returns the column headers for cell.)
r   r   r   r   r   r   r   r`   r   r   )r}   rb   rz   r9   r   r   r   r   r   r   ZAXTable._get_column_headers  s     ''-->>tDD>>tD7fqjI!!$'=I44T:1=6G#34ENN7AA%OP 5 r   c                rG   r   r_   r   r   r   r   r     s(      %"2"2  T r   c                r   )z?Returns True if table has any headers for columns 0-stop_after.FT)r   r=   ra   r   rS   r`   r   r   r   r   has_column_headersZAXTable.has_column_headers  s[     &&u--a)A)A%)HI
z"A55e?? # r   c          
      s\   < V ^8  d   QhRS[ P                  RS[RS[RS[S[S[3,          /# )r   r}   rI   	find_cellr   r   r   r   r   r   r     s?        
sCx	r   c                s   \         P                  ! V 4      '       g.   V'       d&   \        P                  ! V \         P                  4      p \         P                  ! V 4      '       g   R# \        P                  ! V 4      '       d   \
        P                  V 4      w  r4M\
        P                  V 4      w  r4V'       g   W43# \
        P                  V 4      w  rVVe   \        V4      ^,
          pVe   \        V4      ^,
          pW43# )z+Returns the 0-based row and column indices.r   )
r	   r   r   r   r   r   %_get_cell_coordinates_from_table_cellr   $_get_cell_coordinates_from_attributerL   )r}   rI   r   rb   rc   	row_index	col_indexrd   r   get_cell_coordinatesZAXTable.get_cell_coordinates  s     66t<<))$0W0WXD66t<<M''--DDTJHC??EHC8O&KKDQ	 i.1$C i.1$Cxr   c                r   r   r   r   r   r   r   r   9  s)      u/?/? E#s(O r   c                s   \        V 4      \        P                  9   d*   \        P                  P                  \        V 4      R4      # \        P	                  V 4      pV^ 8  d   R# \        P                  V 4      pVf-   RV .p\        P                  ! \        P                  VR4       R#  \        P                  P                  W!4      p\        P                  P                  W!4      pRT RT RT 2.p\        P                  ! \        P                  TR4       YE3\        P                  \        T 4      &   YE3#   \        P                   d8   pRT 2p\        P                  ! \        P                  TR4       Ru Rp?# Rp?ii ; i)	zCReturns the row and column indices of cell via the table interface.Nz6AXTable: Couldn't find table-implementing ancestor forTz8AXTable: Exception in _get_cell_coordinates_from_table: zAXTable: Table iface coords for	are row: , col: r   )r>   r   r(   r?   r   r   r   rC   r$   r   r@   Zget_row_at_indexZget_column_at_indexr   rB   r#   )r}   r   r9   rE   rb   rz   rD   r3      &       r   r   Z(AXTable._get_cell_coordinates_from_table8  sK    :@@@::>>tDz8TT''-19M!!$'=NPTUFu//>M	++..u<C[[44UBF 4TYse7SYRZ;[\5++VT:>Ak//T
;{ {{ 	LUGTC 0 0#t<M	s   ,>D; ;F,F<FFc                r   r   r   r   r   r   r   r   W  s*      E4D4D sTWx r   c                sf   \        V 4      \        P                  9   d*   \        P                  P                  \        V 4      R4      # \        P
                  ! V 4      '       g   R#  \        P                  P                  V 4      w  rpT'       g   R# RT RT RT 2.p\        P                  ! \        P                  TR4       Y#3\        P                  \        T 4      &   Y#3#   \        P                   d8   pRT 2p\        P                  ! \        P                  TR4       Ru Rp?# Rp?ii ; i)zHReturns the row and column indices of cell via the table cell interface.z=AXTable: Exception in _get_cell_coordinates_from_table_cell: TNz#AXTable: TableCell iface coords forr   r   r   )r>   r   r'   r?   r   r   r   r   Zget_positionr   rB   r   r#   r$   rC   )r}   Zsuccessrb   rz   rD   r3   rE   r   r   r   Z-AXTable._get_cell_coordinates_from_table_cellV  s    :???99==d4j(SS++D11M	#(??#?#?#E G& M73%wW]V^?_`5++VT:=@[..tDz:{ {{ 	QRWQXYC 0 0#t<M		s   '"C$ $D09,D+%D0+D0c                r   r   r   r   r   r   r   r   q  s5      $  $ $	sTz3:%	& $r   c                s   V f   R# \        V 4      \        P                  9   d*   \        P                  P                  \        V 4      R4      # \        P
                  ! V 4      pVP                  R4      pVP                  R4      pRV RVRV.p\        P                  ! \        P                  VR4       W#3\        P                  \        V 4      &   Ve   Ve   W#3# \        P                  ! V \        P                  4      pVf   W#3# \        P
                  ! V4      pVP                  RV4      pVP                  RV4      pRVRW#.p\        P                  ! \        P                  VR4       W#3\        P                  \        V 4      &   W#3# )	zQReturns the 1-based indices for cell exposed via object attribute, or None, None.ZrowindexZcolindexz)AXTable: Row and col index attributes forr|   r   Tz$AXTable: Updated attributes based onr   )r>   r   r-   r?   r   rX   r   rC   r$   r   r	   is_table_row)r}   rZ   r   r   rE   rb   r   r   r   Z,AXTable._get_cell_coordinates_from_attributep  s]    <:8882266tDz<PP,,T2IIj)	IIj)	=tS)UXZcd5++VT:6?6J''T
3 Y%:''$$T?+G+GH;'',,S1IIj)4	IIj)4	8#sIY5++VT:6?6J''T
3##r   c                rG   )r   objinclude_namer   )r   r;   rK   r"   r   r   r   r   r     s-       
r   c                sn   \         P                  ! V 4      '       g   R# \        P                  ! V RR4      pV'       d   VR8X  d   R# VR8X  d   \        P
                  pM(VR8X  d   \        P                  pM\        P                  pV'       d&   \        P                  ! V 4      pV'       d   V RV 2pV# )zFReturns the end-user-consumable row/column sort order from its header.r   ZsortFZnoneZ	ascendingZ
descendingz. )	r	   Zis_table_headerr   r   r   ZSORT_ORDER_ASCENDINGZSORT_ORDER_DESCENDINGZSORT_ORDER_OTHERget_name)r   r   Z
sort_orderr   Znames   &&   r   &get_presentable_sort_order_from_headerZ.AXTable.get_presentable_sort_order_from_header  s     ..s33++C?
Z61$&;;F<'&<<F&77F$$S)D 6F8,r   c                r7   )r   r   r   Nr:   r   r   r   r   r     s,     5 5u'' 5E,<,<t,C 5r   c                s   V f   R# \         P                  ! V 4      '       d@    \        P                  P	                  V 4      p\         P
                  ! V4      '       d   V#  R pV! V 4      '       d   V # \         P                  ! W4      #   \        P                   d6   pRT 2p\        P                  ! \        P                  TR4        Rp?LnRp?ii ; i)zJReturns obj if it is a table, otherwise returns the ancestor table of obj.Nz!AXTable: Exception in get_table: Tc                 s    \         P                  ! V 4      '       g9   \         P                  ! V 4      '       g   \         P                  ! V 4      '       d   \        P
                  ! V 4      # R # F)r	   is_tableZis_tree_tabler   r   r=   )xr5   r   r   Z#AXTable.get_table.<locals>.is_table  sH    ''**!//22o6M6Ma6P6P..q11r   )r   r   r   r   r   r=   r   rB   r   r#   r$   r   )r   r9   rD   r3   r   rF   r   r   ZAXTable.get_table  s     ;'',,!11#6
 **511 L 2	 C==J%%c44! ;; A9%A##E$4$4c4@@As   B C +CCc                rf   rg   r   r;   r"   r   r   r   r   r     s!     	 	e6F6F 	3 	r   c                s   \         P                  ! V 4      '       g   R# \        P                  ! \        P                  V 4      \        P                  V 4      4      p\        P                  V 4      '       d   \        P                   RV 2pV# )z@Returns an end-user-consumable string which describes the table.r   Z )	r   r=   r   Z
table_sizer   r\   rS   re   ZTABLE_NON_UNIFORM)r9   r   r4   r   &get_table_description_for_presentationZ.AXTable.get_table_description_for_presentation  sn     &&u--$$W%:%:5%A7C[C[\aCbc''.. 2231VH=Fr   c                r7   r8   r:   r   r   r   r   r     s,     4 4e.. 453C3Cd3J 4r   c                s4    ^ ^ r!\         P                  WV4      # )z Returns the first cell in table.)r   r~   r9   rb   rc   rx   r   get_first_cellZAXTable.get_first_cell  s     aS""5s33r   c                r7   r8   r:   r   r   r   r   r     s,     4 4U-- 4%2B2BT2I 4r   c                s    \         P                  V 4      ^,
          \         P                  V 4      ^,
          r!\         P                  WV4      # )zReturns the last cell in table.)r   r\   rS   r~   r   rx   r   get_last_cellZAXTable.get_last_cell  s?     ((/!3W5M5Me5TWX5XS""5s33r   c                r7   r   r:   r   r   r   r   r     0     F FU-- F%2B2BT2I Fr   c                s    \         P                  V RR7      w  rV^,          p\         P                  \         P                  V 4      W4      # )z%Returns the cell above cell in table.Frw   r   r   r~   r   r}   rb   rc   rx   r   get_cell_aboveZAXTable.get_cell_above  B     //u/Mq""7#4#4T#:CEEr   c                r7   r   r:   r   r   r   r   r     r   r   c                s    \         P                  V RR7      w  rV\         P                  V RR7      ^ ,          ,          p\         P                  \         P	                  V 4      W4      # )z%Returns the cell below cell in table.Frw   r   r   r   r~   r   r   rx   r   get_cell_belowZAXTable.get_cell_below  X     //u/Mw%%dU%CAFF""7#4#4T#:CEEr   c                r7   r   r:   r   r   r   r   r     s0     F Fu// FE4D4Dt4K Fr   c                s    \         P                  V RR7      w  rV^,          p\         P                  \         P                  V 4      W4      # )zReturns the cell to the left.Frw   r   r   rx   r   get_cell_on_leftZAXTable.get_cell_on_left  r   r   c                r7   r   r:   r   r   r   r   r     s0     F F 0 0 FU5E5E5L Fr   c                s    \         P                  V RR7      w  rV\         P                  V RR7      ^,          ,          p\         P                  \         P	                  V 4      W4      # )zReturns the cell to the right.Frw   r   r   rx   r   get_cell_on_rightZAXTable.get_cell_on_right  r   r   c                r7   r   r:   r   r   r   r   r     s0     D Du// DE4D4Dt4K Dr   c                s    \         P                  V RR7      ^ ,          p\         P                  \         P                  V 4      V^ 4      # )z,Returns the cell at the start of cell's row.Frw   r   r}   rb   r4   r   get_start_of_rowZAXTable.get_start_of_row  s>     **4%*HK""7#4#4T#:CCCr   c                r7   r   r:   r   r   r   r   r     s0     F FU-- F%2B2BT2I Fr   c                s    \         P                  V RR7      ^ ,          p\         P                  V 4      p\         P                  V4      ^,
          p\         P	                  \         P                  V 4      W4      # )z*Returns the cell at the end of cell's row.Frw   )r   r   r   rS   r~   )r}   rb   r9   rc   r   r   get_end_of_rowZAXTable.get_end_of_row  sa     **4%*HK!!$'&&u-1""7#4#4T#:CEEr   c                r7   r   r:   r   r   r   r   r     s0     D D 0 0 DU5E5E5L Dr   c                s    \         P                  V RR7      ^,          p\         P                  \         P                  V 4      ^ V4      # )z-Returns the cell at the top of cell's column.Frw   r   r}   rc   r4   r   get_top_of_columnZAXTable.get_top_of_column  s>     **4%*HK""7#4#4T#:AsCCr   c                r7   r   r:   r   r   r   r   r     s0     F F5#3#3 F8H8H48O Fr   c                s    \         P                  V RR7      ^,          p\         P                  V 4      p\         P                  V4      ^,
          p\         P	                  \         P                  V 4      W14      # )z0Returns the cell at the bottom of cell's column.Frw   )r   r   r   r\   r~   )r}   rc   r9   rb   r   r   get_bottom_of_columnZAXTable.get_bottom_of_column  sa     **4%*HK!!$'##E*Q.""7#4#4T#:CEEr   c                rU   r   r   r   r   r   r   r   &  s%     : :u// :C$J :r   c                st    \         P                  ! V RR7      pVP                  RVP                  R4      4      # )z.Returns the formula associated with this cell.F)Z	use_cacheZformulaZFormula)r   rX   r?   )r}   rZ   r4   r   get_cell_formulaZAXTable.get_cell_formula%  s0     ,,TUCyyEIIi$899r   c                rf   r   rv   r   r   r   r   r   -  s!     % %E,, % %r   c                sX    \         P                  V RR7      w  rV^ 8H  ;'       d    V^ 8H  # )z4Returns True if this is the first cell in its table.Frw   r   r   r   rx   r   is_first_cellZAXTable.is_first_cell,  s1     //u/Max$$C1H$r   c                rf   r   rv   r   r   r   r   r   4  s%     S S5++ S Sr   c                s   \         P                  V RR7      w  rV^ 8  g   V^ 8  d   R# \         P                  V 4      pVf   R# V^,           \         P                  VRR7      8H  ;'       d"    V^,           \         P	                  VRR7      8H  # )z3Returns True if this is the last cell in its table.Frw   )r   r   r   r\   rS   )r}   rb   rc   r9   r   r   is_last_cellZAXTable.is_last_cell3  s     //u/M7cAg!!$'=Qw'///NN S Sa733EE3RR	Sr   c                rf   r   rv   r   r   r   r   r   C  s!      e.. 4 r   c                sH    \         P                  V RR7      ^,          pV^ 8H  # )z2Returns True if this is the first cell in its row.Frw   r   r   r4   r   is_start_of_rowZAXTable.is_start_of_rowB  '     **4%*HKaxr   c                rf   r   rv   r   r   r   r   r   J  s%     R RE,, R Rr   c                s    \         P                  V RR7      ^,          pV^ 8  d   R# \         P                  V 4      pVf   R# V^,           \         P                  VRR7      8H  # )z1Returns True if this is the last cell in its row.Frw   )r   r   r   rS   )r}   rc   r9   rx   r   is_end_of_rowZAXTable.is_end_of_rowI  s_     **4%*HK7!!$'=Qw'22552QQQr   c                rf   r   rv   r   r   r   r   r   X  s!      u// D r   c                sH    \         P                  V RR7      ^ ,          pV^ 8H  # )z5Returns True if this is the first cell in its column.Frw   r   r   r4   r   is_top_of_columnZAXTable.is_top_of_columnW  r   r   c                rf   r   rv   r   r   r   r   r   _  s%     O O%"2"2 Ot Or   c                s    \         P                  V RR7      ^ ,          pV^ 8  d   R# \         P                  V 4      pVf   R# V^,           \         P                  VRR7      8H  # )z4Returns True if this is the last cell in its column.Frw   )r   r   r   r\   )r}   rb   r9   rx   r   is_bottom_of_columnZAXTable.is_bottom_of_column^  s_     **4%*HK7!!$'=Qw'///NNNr   c                rf   rg   rv   r   r   r   r   r   m  s!      u// D r   c                s   RRr!\         P                  ! V 4      p\        P                  ! V 4      '       d   VP	                  R4      R8X  d   RRr!M\         P
                  ! V 4      '       g   RRr!MVP	                  R4      R	8X  g   VP	                  R
4      R	8X  d   RRr!M\        P                  V 4      '       g   \        P                  V 4      '       d   RRr!MZ\         P                  ! V 4      '       g   \         P                  ! V 4      '       d   RRr!M\        P                  V 4      '       d   RRr!RV RV RV R2.p\        P                  ! \        P                  VR4       V# )z<Returns True if this table should be treated as layout only.FzNot enough informationzlayout-guessZtrueTz#The layout-guess attribute is true.z Doesn't support table interface.z	xml-rolesr9   Ztagz0Is a web table without layout-guess set to true.zHas headerszHas name or descriptionzHas captionzAXTable:zis layout only: z (Z))r   rX   r	   r   r?   r=   r   r   r   r   Zget_descriptionrA   r   rC   r$   )r9   r   r    rZ   rE   rF   r   is_layout_tableZAXTable.is_layout_tablel  s*     8,,U3##E**yy(F2!%'L,,U33!%'I;'72eii6F'6Q!&(Z++E22g6M6Me6T6T!&""5))X-E-Ee-L-L!&(A$$U++!&e'7xr&%KL5++VT:r   c                rf   r   r   r   r   r   r   r     s!     # #U-=-= ## #r   c                s   \        V 4      \        P                  9   d*   \        P                  P                  \        V 4      R4      # \        P
                  ! V 4      pRpVP                  RVP                  R4      4      pVP                  RVP                  R4      4      pVe   Ve   V V 2pRV RV 2.p\        P                  ! \        P                  VR4       V\        P                  \        V 4      &   V'       d   V# \        P                  ! V \        P                  4      pVf   V# \        P
                  ! V4      pVP                  RVP                  RV4      4      pVP                  RVP                  RV4      4      pVe   Ve   V V 2pR	VRV 2.p\        P                  ! \        P                  VR4       V\        P                  \        V 4      &   V# )
zDReturns the text that should be used instead of the numeric indices.r   ZcolindextextZcoltextZrowindextextZrowtextzAXTable: Coordinates label forz: Tz+AXTable: Updated coordinates label based on)r>   r   r.   r?   r   rX   r   rC   r$   r   r	   r   )r}   rZ   r   Z	col_labelZ	row_labelrE   rb   r   r   get_label_for_cell_coordinatesZ&AXTable.get_label_for_cell_coordinates  s    :???99==d4j"MM,,T2 IIneii	.BC	IIneii	.BC	 Y%:!{9+.F2DBvh-H5++VT:=C..tDz:M$$T?+G+GH;M,,S1IIneii	9.MN	IIneii	9.MN	 Y%:!{9+.F?6(mT5++VT:=C..tDz:r   c                r7   r   r:   r   r   r   r   r     s0     D DU%5%5 D%:J:JT:Q Dr   c                s    \         P                  V 4      p\         P                  P                  \	        V4      4      pVf   R# \         P                  V 4      w  r4WB8X  d   R# \         P                  WV4      # )z)Returns the user-set row header for cell.N)r   r   DYNAMIC_ROW_HEADERS_COLUMNr?   r>   r   r~   )r}   r9   Zheaders_columncell_rowcell_columnrF   r   r   ZAXTable.get_dynamic_row_header  sf     !!$' ;;??UL! ' < <T B(""5NCCr   c                r7   r   r:   r   r   r   r   r     s1     D D(8(8 DU=M=MPT=T Dr   c                s    \         P                  V 4      p\         P                  P                  \	        V4      4      pVf   R# \         P                  V 4      w  r4W28X  d   R# \         P                  WV4      # )z,Returns the user-set column header for cell.N)r   r   DYNAMIC_COLUMN_HEADERS_ROWr?   r>   r   r~   )r}   r9   Zheaders_rowr  r  rF   r   r   Z!AXTable.get_dynamic_column_header  sf     !!$'88<<T%[I ' < <T B"""5{CCr   c                >   < V ^8  d   QhRS[ P                  RS[RR/# )r   r9   rz   r   NrV   r   r   r   r   r     s.     A Ae.>.> A APT Ar   c                >    V\         P                  \        V 4      &   R# )z7Sets the dynamic row headers column of table to column.N)r   r  r>   )r9   rz      &&r   set_dynamic_row_headers_columnZ&AXTable.set_dynamic_row_headers_column  s     ;A**4;7r   c                r	  )r   r9   rb   r   NrV   r   r   r   r   r     s(     > >e.>.> >S >T >r   c                r
  )z4Sets the dynamic column headers row of table to row.N)r   r  r>   )r9   rb   r  r   set_dynamic_column_headers_rowZ&AXTable.set_dynamic_column_headers_row  s     ;>**4;7r   c                8   < V ^8  d   QhRS[ P                  RR/# r8   r:   r   r   r   r   r     !     < <0@0@ <T <r   c                    \        V 4      \        P                  9  d   R# \        P                  P                  \        V 4      4       R# )z/Clears the dynamic row headers column of table.N)r>   r   r  popr9   r5   r    clear_dynamic_row_headers_columnZ(AXTable.clear_dynamic_row_headers_column  1     ;g@@@**..tE{;r   c                r  r8   r:   r   r   r   r   r     r  r   c                r  )z/Clears the dynamic column headers row of table.N)r>   r   r  r  r  r5   r    clear_dynamic_column_headers_rowZ(AXTable.clear_dynamic_column_headers_row  r  r   c                s|   < V ^8  d   QhRS[ P                  RS[S[S[S[3,          S[S[S[3,          3,          /# rg   r   r   r   r   r   r     s@     7 7u'7'7 7E%S/SXY\^aYaSbBb<c 7r   c                s   \         P                  ! V 4      '       g   R# \        P                  ! V 4      pRV RV.p\        P
                  ! \        P                  VR4       \        P                  ! WP                  ^,           VP                  ^,           4      pRV RV.p\        P
                  ! \        P                  VR4       \        P                  VRR7      pRV^ ,          RV^,          .p\        P
                  ! \        P                  VR4       \        P                  ! WP                  VP                  ,           ^,
          VP                  VP                  ,           ^,
          4      pR	V RV.p\        P
                  ! \        P                  VR4       \        P                  VRR7      pR
V^ ,          RV^,          .p\        P
                  ! \        P                  VR4       VR8X  d   \        P                  V 4      pRV RV.p\        P
                  ! \        P                  VR4       \        P                  VRR7      pRV^ ,          RV^,          .p\        P
                  ! \        P                  VR4       \        P                   ! V4      '       Ed?   \        P"                  ! V4      '       Eg"   \        P%                  V4      pV'       d6   \        P&                  ! Wq4      '       d   Tp\        P%                  V4      pK=  \        P)                  V4      pV'       d6   \        P&                  ! Wq4      '       d   Tp\        P)                  V4      pK=  RV RV.p\        P
                  ! \        P                  VR4       \        P                  VRR7      pRV^ ,          RV^,          .p\        P
                  ! \        P                  VR4       WF3# )zDReturns the (row, col) of the first and last visible cells in table.zAXTable: Rect forr<   TzAXTable: First visible cell forFrw   z%AXTable: First visible cell is at rowrz   zAXTable: Last visible cell forz$AXTable: Last visible cell is at rowz(AXTable: Adjusted lasat visible cell forz%AXTable: Adjusted last cell is at rowz(AXTable: Adjusted first visible cell forz&AXTable: Adjusted first cell is at rowr   )r   r   )r   r=   r   get_rectr   rC   r$   get_descendant_at_pointr   yr   r   widthZheightr   r	   r   r   r   Zobject_intersects_rectr   )r9   rectrE   Z
first_cellr   Z	last_cellendZ	candidater   r   _get_visible_cell_rangeZAXTable._get_visible_cell_range  s    &&u--%%##E*%udD95++VT: 88
DFFUVJW
3UD*M5++VT:,,Z%,P958XuUVxX5++VT:7766DJJ&*DFFT[[,@1,DF	2E4K5++VT:**9u*M8#a&(CPQFS5++VT:(?--e4I@%yYFu//>..y5.QC=s1vxQTUVQWXFu//>((33":::FF..y9I B B9 S S&
#22:>	00<I B B9 S S&
#44Z@	@%zZFu//>00e0TE>a(TYZ[T\]Fu//>zr   c                sd   < V ^8  d   QhRS[ P                  RS[S[ P                  RR3,          /# r8   )r   r;   r   r   r   r   r   r   !  s5      %"2"2 yAQAQSWY]A]7^ r   c              #  s(  "   \         P                  V 4      w  rV^ ,          ^ 8  g+   V^,          ^ 8  g   V^ ,          ^ 8  g   V^,          ^ 8  d   R# \        V^ ,          V^ ,          ^,           4       F  p\        V^,          V^,          ^,           4       Fo  p\         P                  WV4      pVf   K  \        P
                  ! V\        P                  4       F#  p\        P                  ! V4      '       g   K!  Tp M	  Vx  Kq  	  K  	  R# 5i)z"Yields the visible cells in table.N)	r   r  r`   r~   r   Ziter_childrenr	   r   r   )r9   r   r  rb   rc   r}   Zchildr   r   iter_visible_cellsZAXTable.iter_visible_cells   s      44U;
8a<58a<3q6A:Q!q3q6A:.CU1Xs1vz2**5s;<%33D/:W:WXE((//$ Y 
 3 /s   C7D>Dc                r   )r   r}   clip_to_windowr   )r   r;   rK   rn   r   r   r   r   r   4  s8     & &&& 
e	&r   c                sn   \         P                  V RR7      ^ ,          pVR8X  d   . # \         P                  V 4      p^ \         P                  VR4      rTV'       d   \        P
                  ! V4      p\        P                  ! W6P                  ^,           VP                  4      ;p '       d   \         P                  V RR7      ^,          p\        P                  ! W6P                  VP                  ,           ^,
          VP                  4      ;p '       d&   \         P                  V RR7      ^,          ^,           pWE8X  d   . # . p\        WE4       FH  p\         P                  W2V4      p \        P                  ! V 4      '       g   K7  VP                  V 4       KJ  	  V'       g-   RV .p	\        P                   ! \        P"                  V	R4       . # RV RV^ ,          .p	\        P                   ! \        P"                  V	R4       RV RVR,          .p	\        P                   ! \        P"                  V	R4       V# )	zHReturns a list of all the cells in the same row as obj that are showing.Frw   z+AXTable: No visible cells found in row withTz'AXTable: First visible cell in row withr<   z&AXTable: Last visible cell in row withrN   )r   r   r   rS   r   r  r  r   r  r  r`   r~   r
   Z
is_showingZappendr   rC   r$   )
r}   r  rb   r9   Zstart_indexZ	end_indexr  Zcellsr   rE   s
   &&        r   get_showing_cells_in_same_rowZ%AXTable.get_showing_cells_in_same_row3  s    **4%*HK"9I!!$'!"G$<$<UE$JY''.D#;;E66A:tvvVVV%::4RW:XYZ[#;;66DJJ.2DFF< < <#88PU8VWXY\]]	#I{.A&&u15D**400T" /
 CTJFu//>I;T4qR5++VT::D$b	R5++VT:r   c                sn  < V ^8  d   Qh/ S[ S[S[P                  3,          ;R&   S[ S[S[S[S[3,          3,          ;R&   S[ S[S[S[S[3,          3,          ;R&   S[ S[S[S[S[3,          3,          ;R&   S[ S[S[S[S[3,          3,          ;R&   S[ S[S[3,          ;R&   S[ S[S[3,          ;R&   S[ S[S[S[R,          S[R,          3,          3,          ;R	&   S[ S[S[3,          ;R
&   S[ S[S[S[R,          S[R,          3,          3,          ;R&   S[ S[S[R,          3,          ;R&   S[ S[S[R,          3,          ;R&   S[ S[S[S[P                  ,          3,          ;R&   S[ S[S[S[P                  ,          3,          ;R&   S[ S[S[3,          ;R&   S[ S[S[3,          ;R&   # )r   r&   r'   r(   r)   r*   r+   r,   Nr-   r.   r   r/   r0   r1   r2   r  r  )ZdictrL   r   r;   r   r"   rn   r   r   r   r   r   6   s     3((().	 
 %)eCHo)=$>C  &*#uS#X*>%?D  #3c3h#78=   $CsCx$89>   S>.  S#X+  "#uS4Zt-C'D"DEJ  %)cN7  CsTz3:'=!>>?D  #3d
?38   S4Z05   "#tE,<,<'="=>C! " sD)9)9$::;@# ( !%S#X3) * !%S#X3+ r   r   N)r   )T)   r   )i
   )TFr   )`Z__name__Z
__module__Z__qualname__Z__firstlineno____doc__r&   r'   r(   r)   r*   r+   r,   r-   r.   r   r/   r0   r1   r2   r  r  r   ZLockr%   Zstaticmethodr   r   r   r6   rA   rS   rO   r\   r[   re   rj   rq   rs   rt   ry   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   r   r  r  r  r  r  r  r  Z__annotate_func__Z__static_attributes__Z__classdictcell__)r   s   @r   r   r   6   s(    F -/HAC"BD#;=<>,.)+HJ57"BD6835AC>@ 2413NNE  . . 1 1 1* 0 0 0
  *   6  "   6  "   &  "  "  "  " @ @   $ 2 2  " " ", " "" :" :"x " "2  2  ,  .  , ? ?  ? ?  & &P  *    & &P  *      :  :  2  $  $D   6 5 56 	 	 4 4 4 4 F F F F F F F F D D F F D D F F : : % % S S   R R   O O  . # #J D D D D A A
 > >
 < < < < 7 7r  $ & & &}'  r   r   )r!  Z__id__Z__version__Z__date__Z__copyright__Z__license__r   r   Ztypingr   ZgiZrequire_versionZgi.repositoryr   r   r   r   r   r   Z	ax_objectr   Zax_componentr   Zax_utilities_roler	   Zax_utilities_stater
   r   r   r   r   r   <module>r"     sx   6 C;    	   7E "       % . 0d dN)  # # %r   