
    g
f]'                         d Z dZdZdZdZddlZ ej                  dd       dd	lmZ ddl	Z	ddl
mZ ddlmZ ddlmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ  G d dej4                        Zy)z$Id$z
$Revision$z$Date$zGCopyright (c) 2010 Joanmarie Diggs.Copyright (c) 2011-2012 Igalia, S.L.LGPL    NAtspiz2.0)r   )AXComponent)AXHypertext)AXObject)AXText)AXUtilitiesc                        e Zd Z fdZd Z fdZd Zd Zd Zd Z	ddZ
dd	Zdd
Zd Zd Zd Zd Zd Zd Zd ZddZ xZS )	Utilitiesc                 $    t         |   |       y)zCreates an instance of the Utilities class.

        Arguments:
        - script: the script with which this instance is associated.
        N)super__init__)selfscript	__class__s     R/usr/lib/python3/dist-packages/orca/scripts/toolkits/WebKitGtk/script_utilities.pyr   zUtilities.__init__5   s     	     c                 Z    |syt        j                  |      }|j                  dd      dv S )z2Returns True if this object is a WebKitGtk object.Ftoolkit )	WebKitGtk	WebKitGTK)r   get_attributes_dictget)r   objattrss      r   isWebKitGtkzUtilities.isWebKitGtk=   s1     ,,S1yyB'+EEEr   c                     | j                   j                  \  }}|sB| j                  t        j                         j                               rt        |          \  }}||fS N)_script_lastCaretContextr   focus_manager
getManagerget_locus_of_focusr   getCaretContext)r   r   offsetr   s      r   r%   zUtilities.getCaretContextF   sU     ll44Vt''(@(@(B(U(U(WX'13KCF{r   c                 v    ||f| j                   _        t        j                         j	                  d |d       y )NF)notify_script)r    r!   r"   r#   set_locus_of_focusr   r   r&   s      r   setCaretContextzUtilities.setCaretContextO   s2     *-f&  "55dCu5Ur   c                 L    | j                  ||       | j                  ||       y r   )r+   setCaretOffsetr*   s      r   setCaretPositionzUtilities.setCaretPositionU   s"    S&)C(r   c                     t        j                  |      syt        j                  |      ryt        j                  |      xr t        j                  |       S )z;Returns True if obj is a text entry area that is read only.FT)r	   is_entryis_read_onlyis_focusableis_editabler   r   s     r   isReadOnlyTextAreazUtilities.isReadOnlyTextAreaY   sJ     ##C(##C('',Q[5L5LS5Q1QQr   c                    t         j                  j                  | |      }|r|| j                  k7  r|S t	        j
                  |      st	        j                  |      r`t        j                  |      D cg c]  }| }}dj                  t        | j                  |            }|st        j                  |d      }|S c c}w )zReturns the text being displayed for an object.

        Arguments:
        - obj: the object

        Returns the text being displayed for an object or None if there isn't
        any text being shown.
         T)remove_extension)script_utilitiesr   displayedTextEMBEDDED_OBJECT_CHARACTERr	   is_linkis_list_itemr   iter_childrenjoinmapr   get_link_basename)r   r   textxchildrens        r   r:   zUtilities.displayedTextd   s      ))77cBDD:::Ks#{'?'?'D#+#9#9##>?a?H?88C 2 2H=>D"44S4P @s   5	C c                 X    | j                  ||t        j                  j                        S r   )getObjectsFromEOCsr   TextBoundaryType
LINE_START)r   r   r&   
layoutModeuseCaches        r   getLineContentsAtOffsetz!Utilities.getLineContentsAtOffsetz   s(    &&//::< 	<r   c                 &    | j                  ||      S r   )rF   )r   r   r&   rJ   s       r   getObjectContentsAtOffsetz#Utilities.getObjectContentsAtOffset~   s    &&sF33r   c           	         t        j                  |      rt        j                  |      s|dddfgS t        j                  |      }|s|dddfgS |t        j
                  |      }|t        j                  j                  k(  rM| j                         \  }}|t        j                  z  r
|dk(  r|dz  }t        j                  ||      dd \  }}n|dt        j                  j                  fv rt        j                  ||      dd \  }}n|t        j                  j                  k(  rt        j                   ||      dd \  }}nU|t        j                  j"                  k(  rt        j$                  ||      dd \  }}n|dt        j&                  |      f\  }}t)        j*                  | j,                        }	t)        j.                  |	|      D 
cg c]  }
|
j1                  d       }}
|D cg c]  }||cxk  r|k  sn n| }}g }g }|D ],  }t3        j4                  ||      }|s|j7                  |       . d }|D cg c]
  } ||       }}t9        |      D ]:  \  }\  }}|j7                  |||||| f       |j7                  ||   ||df       |}< |j7                  |||||| f       |D cg c]  }|d   |d   k  s| }}|S c c}
w c c}w c c}w c c}w )a  Breaks the string containing a mixture of text and embedded object
        characters into a list of (obj, startOffset, endOffset, string) tuples.

        Arguments
        - obj: the object whose EOCs we need to expand into tuples
        - offset: the character offset. If None, use the current offset.
        - boundary: the text boundary type. If None, get all text.

        Returns a list of (obj, startOffset, endOffset, string) tuples.
        r      r   NRightc                 V    t        j                  |       t        j                  |       fS r   )r   get_link_start_offsetget_link_end_offset)r   s    r   
_get_rangez0Utilities.getObjectsFromEOCs.<locals>._get_range   s$    44S9;;Z;Z[^;___r      )r   supports_textsupports_hypertextr   get_all_textget_caret_offsetr   rG   CHARlastKeyAndModifierskeybindingsSHIFT_MODIFIER_MASKget_character_at_offsetrH   get_line_at_offsetSENTENCE_STARTget_sentence_at_offset
WORD_STARTget_word_at_offsetget_character_countrecompiler;   finditerstartr   get_child_at_offsetappend	enumerate)r   r   r&   boundarystringkeymodsrh   endpatternmoffsetsrC   objectsobjschildrT   rangesifirstlasts                        r   rF   zUtilities.getObjectsFromEOCs   s    &&s+0K0KC0P!QO$$$$S)!QO$$>,,S1Fu--222002IC{666C7N!77VDQRHJE3$ 6 6 A ABB223?CJE3//>>>66sFCABGJE3//:::223?CJE3F$>$>s$CCJE3**T;;<'){{7F'CD!1771:DD%:!)9c)91:: 	#F33C@EE"	#
	` *..A*Q-.. )& 1 	A}tNNCveE/BCDNNDGUD"56E	 	UCc):;<%51!155+ E: / 6s$   K0KKK;K#K#c                 0   |yt        j                  |      rt        j                  |      }t        j                  |      }t        j
                  |      r>t        j                  |      r)t        j                  |d      }| j                  |      r|}|S )z!Finds the object before this one.N)	r	   r<   r   
get_parentget_previous_objectis_listget_child_count	get_childisTextListItem)r   r   prevObjrv   s       r   findPreviousObjectzUtilities.findPreviousObject   s     ;s#%%c*C..s3w'H,D,DW,M&&w3E""5)r   c                 0   |yt        j                  |      rt        j                  |      }t        j                  |      }t        j
                  |      r>t        j                  |      r)t        j                  |d      }| j                  |      r|}|S )z Finds the object after this one.Nr   )	r	   r<   r   r}   get_next_objectr   r   r   r   )r   r   nextObjrv   s       r   findNextObjectzUtilities.findNextObject   s     ;s#%%c*C**3/w'H,D,DW,M&&w2E""5)r   c                     t        j                  |      syt        j                  |      }|yt        j                  |       S )z8Returns True if obj is an item in a non-selectable list.F)r	   r=   r   r}   r2   r   r   parents      r   r   zUtilities.isTextListItem   sA     '',$$S)>++F333r   c                    t        j                  |      rWt        j                  |      dkD  r>t	        j
                  t        j                  |d      t        j                  |d            S yt        j                  |      rt        j                  |      ryt        j                  |      }|st        j                  |      S |dk(  ryt	        j
                  t        j                  |d      t        j                  |d            S y)z7Returns True if obj is an inline/non-wrapped container.rO   r   F)
r	   
is_sectionr   r   r   on_same_liner   r   r2   rV   )r   r   
childCounts      r   isInlineContainerzUtilities.isInlineContainer   s     !!#&'',q0"//&&sA.0B0B30JL Ls#'',!11#6J--c22Q++H,>,>sA,FHZHZ[^`aHbccr   c                     | j                  |      syt        j                  |      syt        j                  |      }|r| j                  |      syt        j                  |      }|r| j                  |      ryy)NFT)r   r	   is_documentr   r}   r   s      r   isEmbeddedDocumentzUtilities.isEmbeddedDocument   sm    $&&s+$$S)4++F3$$V,t//7r   c                 b    | j                  |      \  }}|t        j                  ||       ||fS r   )getFirstCaretPositionr   set_caret_offset)r   r   rv   indexs       r   setCaretAtStartzUtilities.setCaretAtStart  s6    11#6u##E51e|r   c                 $    | j                  |      S r   )r   r4   s     r   treatAsBrowserzUtilities.treatAsBrowser  s    &&s++r   c                 p    |xs" t        j                         j                         }| j                  |      S r   )r"   r#   r$   r   r4   s     r   inDocumentContentzUtilities.inDocumentContent  s/    D]--/BBD$$r   )TT)r   T)NNr   )__name__
__module____qualname__r   r   r%   r+   r.   r5   r:   rK   rM   rF   r   r   r   r   r   r   r   r   __classcell__)r   s   @r   r   r   3   sa    !FV)	R,<49v""
4*",%r   r   )__id____version____date____copyright____license__girequire_versiongi.repositoryr   re   orca.focus_managerr"   orca.keybindingsr\   orca.script_utilitiesr9   orca.ax_componentr   orca.ax_hypertextr   orca.ax_objectr   orca.ax_textr   orca.ax_utilitiesr	   r    r   r   <module>r      sj   . 
7 	   7E "  	 * & 0 ) ) #  )h% ** h%r   