a
    7ñ»j¬"  ã                   @   s^   d Z ddlZddddœZde Ze e¡ZG dd	„ d	eƒZd
d„ Zdd„ Z	dd„ Z
dd„ ZdS )z*Convert XPath selectors into CSS selectorsé    Nz([a-zA-Z][-a-zA-Z0-9]{0,40}|\*)z[.a-zA-Z_:][-\w:.]*(\(\))?)z\s*[\w/:][-/\w\s,:;.\S]*)ÚtagÚ	attributeÚvaluea  (?P<node>(^id\([\"\']?(?P<idvalue>%(value)s)[\"\']?\)|(?P<nav>//?)(?P<tag>%(tag)s)(\[((?P<matched>(?P<mattr>@?%(attribute)s=[\"\'](?P<mvalue>%(value)s))[\"\']|(?P<contained>contains\((?P<cattr>@?%(attribute)s,\s*[\"\'](?P<cvalue>%(value)s)[\"\']\)))\])?(\[(?P<nth>\d+)\])?))c                   @   s   e Zd ZdS )ÚXpathExceptionN)Ú__name__Ú
__module__Ú__qualname__© r	   r	   úHE:\soccer\ml_env\Lib\site-packages\seleniumbase/fixtures/xpath_to_css.pyr      s   r   c                 C   s|   d}|   d¡}t|ƒ}t|ƒD ]X}|d dkrV||  dd¡||< ||  dd¡||< ||| 7 }||d	 kr|d7 }q|S )
NÚ ú"é   r   ú[Ú_STR_L_bracket_ú]Ú_STR_R_bracket_é   )ÚsplitÚlenÚrangeÚreplace)ÚxpathZ	new_xpathÚchunksZ
len_chunksZ	chunk_numr	   r	   r
   Ú_handle_brackets_in_strings#   s    
ÿÿ
r   c                 C   sN   | dd… } |   d¡}|d }|dkr2td| ƒ‚| d|… | |d…  } | S )zÌ
    This method removes the outer parentheses for xpath grouping.
    The xpath converter will break otherwise.
    Example:
    "(//button[@type='submit'])[1]" becomes "//button[@type='submit'][1]"
    r   Nú)éÿÿÿÿúT
Invalid or unsupported XPath:
%s
(Unable to convert XPath Selector to CSS Selector))Úrfindr   )r   ÚoriginalÚindexZindex_p1r	   r	   r
   Ú_filter_xpath_grouping9   s    	
þÿr    c                 C   sú  d}d}d}|t | ƒk �rît | |d … ¡}|d u r@td| ƒ‚| ¡ }|dkrf|d dkr`dnd}nd}|d d	krzdn
|d p„d}|d
 r¦d|d
  dd¡ }�n|d �r8|d dkrÒd|d  dd¡ }nd|d dkrôd|d  dd¡ }nB|d dv �rd|d  }n&|d �r¬d|d  dd¡|d f }nt|d �r¨|d  d¡�rpd|d  dd¡|d f }n6|d dk�rŒd|d  }n|d dk�r¬d|d  }nd}|d �rÄd|d  }	nd}	|| | |	 }
||
7 }|| ¡ 7 }q| ¡ }|S ) Nr   r   r   Únavú//ú z > r   Ú*Zidvaluez#%sú#ZmatchedZmattrú@idZmvalueú@classz.%sÚ.)útext()r(   z:contains('%s')z	[%s="%s"]ú@Z	containedZcattrz
[%s*="%s"]Zcvaluer)   z:contains("%s")Únthz:nth-of-type(%s))	r   ÚprogÚmatchr   Ú	groupdictr   Ú
startswithÚendÚstrip)r   r   ÚcssÚattrÚpositionÚnoder-   r!   r   r+   Znode_cssr	   r	   r
   Ú_get_raw_css_from_xpathQ   sb    þÿ

þ
þ
r6   c                 C   sv  | }|   dd¡} d}|| v rÆ|  |¡dkrÆ|  d¡dkrÆd}|  |¡dkrÆ|  d¡rÆ|  d¡dkrÆ|  d	¡dkrÆ|  |¡d  d¡d
 }|  d¡d  d¡d
 }|  |¡d  d	¡d
 }d|||f S t d| ¡}|�r| d¡}| d¡}| d¡}	| d¡}d|||	|f S t d| ¡}|�rf| d¡}| d¡}
| d¡}| d¡}| d¡}d||
|||f S | d
 dk�rž| d dk�rž|  d¡d d
k�ržt| ƒ} |   dd¡} t| ƒdk�rØ| d
d… | dd …   dd¡ } d| v �r‚|  d¡dk�r‚|  	d¡}|tdƒ }|  	d|¡}| ||… }d| }|| v �r‚|  	|¡}|  	d|¡d }|d }|dk�r‚| d |… | |d …  } |   |d¡} |  
d¡�r˜t| |ƒ} d }d| v �rd!| v �sºd"| v �rg }|  d¡}|D ]*}| 
d¡�säd| }| t||ƒ¡ �qÌd |¡}n
t| |ƒ}t d#|¡}|D ]ª}| d$¡dk�r| d¡dk�r| d%¡dk�r| d¡d
k�r| d&¡d
k�r| d'¡d
k�r| 	d%¡d }| 	d¡}|d |… d& |||…  d( }|  ||¡}�q|  d)d*¡}|  d+d,¡}|  d-d'¡}|  d.d'¡}|  d/d'¡}|  dd'¡}|  d0d ¡}|  dd'¡}|  d1d'¡}|  dd2¡}|  d3d4¡}|  d5d6¡}|  d&d¡}|  dd$¡}|S )7Nz = 'z='zA@class and contains(concat(' ', normalize-space(@class), ' '), ' r   z[@z ') and (contains(., 'z'))]r"   z	 ') and (r   z[@classz%s.%s:contains("%s")zB^\s*//(\S+)\[@(\S+)='(\S+)'\s+and\s+\(contains\(\.,\s'(\S+)'\)\)\]r   é   é   z%s[%s="%s"]:contains("%s")z8^\s*//(\S+)\[@(\S+)='(\S+)'\s+and\s+\(@(\S+)='(\S+)'\)\]é   z%s[%s="%s"][%s="%s"]r   r   zdescendant-or-self::*/zdescORself/z/descORself/z and contains(@ú,z and contains(@%s, r   z_STAR_=ú(r   r&   r'   z(\[\w+\=\S+\])r   ú=ú'r#   z']r   z\[r   z\]z > descORself > z descORself > z/descORself/*zdescORself > Z
descORselfz*=z]/z] z] *[z] > [)r   ÚcountÚendswithr   Úrer-   Úgroupr   r   Úfindr/   r    Úappendr6   ÚjoinÚfindall)r   r   Úc3Zp2Z
s_containsZs_tagZs_classÚdataZs_atrZs_valZs_atr1Zs_val1Zs_atr2Zs_val2Zspot1Zspot2r3   ZswapZ	swap_spotÚclose_parenZclose_paren_p1r2   Zcss_sectionsZxpath_sectionsZxpath_sectionZattribute_defsZattr_defÚq1Úq2Znew_attr_defr	   r	   r
   Úconvert_xpath_to_css�   sÎ    $ÿþýüý



ý




0 





ÿ
ÿþýüûú	
 rK   )Ú__doc__r@   Z_sub_regexesZ_validation_reÚcompiler,   Ú	Exceptionr   r   r    r6   rK   r	   r	   r	   r
   Ú<module>   s   ýòÿ
>