U
    :g=                     @   sr  d dl mZ dgZddddddd	d
dddddddddhZdGddZdHddZdd Zdd Zdd Zdd  Z	d!d" Z
dId#d$ZG d%d& d&eZG d'd( d(ZG d)d* d*ZG d+d, d,ZG d-d. d.ZG d/d0 d0ZG d1d2 d2ZG d3d4 d4ZG d5d6 d6ZG d7d8 d8ZG d9d: d:ZG d;d< d<ZG d=d> d>ZG d?d@ d@ZG dAdB dBZG dCdD dDZG dEdF dFZdS )J    )parse_component_value_listparse
first-linefirst-letterprefixZpostfixZ	selectionztarget-textzspelling-errorzgrammar-errorbeforeaftermarkerplaceholderzfile-selector-buttonzfootnote-callzfootnote-markercontentZshadowNFc              
   c   s   t | trt| } t| }|p i }zt|||V  W n4 tk
rh } z|rTW Y dS |W 5 d}~X Y nX | }|dkr~dS |dkrzt|||V  W q tk
r } z|s|W 5 d}~X Y qX qj|sjt|d|j dqjdS )zYield tinycss2 selectors found in given ``input``.

    :param input:
        A string, or an iterable of tinycss2 component values.

    N,unexpected  token.)
isinstancestrr   TokenStreamparse_selectorSelectorErrornexttype)input
namespaces	forgivingrelativetokens	exceptionr    r   5/tmp/pip-unpacked-wheel-xeg67qda/cssselect2/parser.pyr      s*    

c                 C   s   |    |r8|  }|dkr,|j}|   nd}|    t| |\}}|  }|  rd|  p`|}qNt||}|r|t||}|d k	r|S |  }|d ks|dkr|S |dkr|j}	|   n|rd}	n|S t| |\}
}t	||	|
}qFd S )N)>+~ r   )
skip_whitespace_and_commentpeekvaluer   parse_compound_selectorskip_whitespaceskip_commentSelectorRelativeSelectorCombinedSelector)r   r   r   r#   Zinitial_combinatorresultpseudo_elementZhas_whitespaceselector
combinatorZcompoundr   r   r   r   1   s8    



r   c                 C   s   t | |}|d k	r|ng }t| |\}}|d k	sF|d kr:qF|| q|sV||fdkrbt||fS |  }|rt|jnd}t|d| d S )NNNEOFz"expected a compound selector, got )parse_type_selectorparse_simple_selectorappendCompoundSelectorr#   r   r   )r   r   Ztype_selectorssimple_selectorsZsimple_selectorr,   r#   Z	peek_typer   r   r   r%   S   s    
 r%   c                 C   sZ   |    t| |}|d krd S g }|\}}|d k	r@|t| |d k	rV|t| |S N)r&   parse_qualified_namer3   LocalNameSelectorNamespaceSelector)r   r   qualified_namer5   	namespace
local_namer   r   r   r1   e   s    
r1   c                 C   s  |   }|d krdS |jdkr:|jr:|   t|jd fS |dkr|   |  }|d ksd|jdkrtt|d| t|jd fS |jdkr|   tt	|j
|}|d fS |dkr|   |  }|dkr$|  }|d ks|jdk rt|d| |j}|tkrt|d	| d |fS |d k	r`|jdkr`|j}|d
krRd |fS t|d fS nZ|d k	r|jdkr|j}|dkrt|||d fS t||jd fS nt|d| dndS d S )Nr/   hash.identzExpected a class name, got z[] block:z$Expected a pseudo-element name, got z)Expected a supported pseudo-element, got )r   r   r   r   function)iswherenothasr   r   )r#   r   Zis_identifierr   
IDSelectorr$   r   ClassSelectorparse_attribute_selectorr   r   lower_valueSUPPORTED_PSEUDO_ELEMENTSPseudoClassSelector
lower_nameparse_logical_combinationFunctionalPseudoClassSelector	arguments)r   r   r#   r   attrr$   namer   r   r   r2   t   s^    


 
 


 r2   c                 C   sh   d}d}|dkrt }n0|dkr$t}n"|dkr6d}t}n|dkrFd}t}dd t| j|||D }||S )	NTFrB   rC   rD   rE   c                 S   s   g | ]}|j d kr|qS r6   )r,   .0r-   r   r   r   
<listcomp>   s   
z-parse_logical_combination.<locals>.<listcomp>)MatchesAnySelectorSpecificityAdjustmentSelectorNegationSelectorRelationalSelectorr   rO   )Zmatches_any_tokenr   rQ   r   r   Zselector_class	selectorsr   r   r   rM      s     rM   c           
      C   s
  |    t| |dd}|d kr6|  }t|d| |\}}|    |  }|d kr`d }d }nr|dkr|j}|   |    |  }|d ks|jdkr|d krdn|j}	t|d|	 |j}nt|d| |    |  }|d k	rt|d	|j t||||S )
NT)is_attributezexpected attribute name, got )=z~=z|=z^=z$=z*=)r?   stringNonezexpected attribute value, got z*expected attribute selector operator, got zexpected ], got )r&   r7   r   r   r#   r$   r   AttributeSelector)
r   r   r:   r   r;   r<   r#   operatorr$   Z	next_typer   r   r   rH      sH        rH   c                 C   sJ  |   }|dkrdS |jdkr|  }|   }|dkrZ|r>dn
|dd}||j|jffS |   ||j}|dkrt|d|j nn|dkr|  }|   }|dkr|rt|d|j |dddfS |   d}n|dkr|   d}ndS |  }|jdkr||j|jffS |dkr4|s4|dfS t|d|j dS )zReturn ``(namespace, local)`` for given tokens.

    Can also return ``None`` for a wildcard.

    The empty string for ``namespace`` means "no namespace".

    Nr?   | zundefined namespace prefix: *zexpected local name, got )r#   r   r   getr$   rI   r   )r   r   rZ   r#   Zfirst_identr;   r   r   r   r   r7      sL    

 
r7   c                   @   s   e Zd ZdZdS )r   z3A specialized ``ValueError`` for invalid selectors.N)__name__
__module____qualname____doc__r   r   r   r   r     s   r   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )r   c                 C   s   t || _g | _d S r6   )iterr   peeked)selfr   r   r   r   __init__  s    
zTokenStream.__init__c                 C   s    | j r| j  S t| jd S d S r6   )ri   popr   r   rj   r   r   r   r     s    
zTokenStream.nextc                 C   s$   | j s| j t| jd  | j d S )N)ri   r3   r   r   rm   r   r   r   r#     s    zTokenStream.peekc                 C   s2   d}|   }|d ks.|j|kr q.|   d}q|S )NFT)r#   r   r   )rj   Z
skip_typesfoundr#   r   r   r   skip"  s    zTokenStream.skipc                 C   s   |  dgS )N
whitespacerp   rm   r   r   r   r&   ,  s    zTokenStream.skip_whitespacec                 C   s   |  dgS )Ncommentrr   rm   r   r   r   r'   /  s    zTokenStream.skip_commentc                 C   s   |  ddgS )Nrs   rq   rr   rm   r   r   r   r"   2  s    z'TokenStream.skip_whitespace_and_commentN)
rd   re   rf   rk   r   r#   rp   r&   r'   r"   r   r   r   r   r     s   
r   c                   @   s   e Zd ZdddZdd ZdS )r(   Nc                 C   s>   || _ || _|d kr|j| _n|j\}}}|||d f| _d S )N   )parsed_treer,   specificity)rj   treer,   abcr   r   r   rk   7  s    
zSelector.__init__c                 C   s$   | j rd| j  nd}| j| S )Nz::ra   )r,   ru   )rj   Zpseudor   r   r   __repr__A  s    zSelector.__repr__)N)rd   re   rf   rk   r{   r   r   r   r   r(   6  s   

r(   c                   @   s4   e Zd Zdd Zedd Zedd Zdd Zd	S )
r)   c                 C   s   || _ || _d S r6   r.   r-   )rj   r.   r-   r   r   r   rk   G  s    zRelativeSelector.__init__c                 C   s   | j jS r6   )r-   rv   rm   r   r   r   rv   K  s    zRelativeSelector.specificityc                 C   s   | j jS r6   )r-   r,   rm   r   r   r   r,   O  s    zRelativeSelector.pseudo_elementc                 C   s$   | j dkr| jS | j  d| jS )Nr!   r|   rm   r   r   r   r{   S  s    zRelativeSelector.__repr__N)rd   re   rf   rk   propertyrv   r,   r{   r   r   r   r   r)   F  s   

r)   c                   @   s(   e Zd Zdd Zedd Zdd ZdS )r*   c                 C   s   || _ || _|| _d S r6   leftr.   right)rj   r   r.   r   r   r   r   rk   Z  s    zCombinedSelector.__init__c                 C   s2   | j j\}}}| jj\}}}|| || || fS r6   )r   rv   r   )rj   Za1Zb1Zc1Za2Zb2c2r   r   r   rv   b  s    zCombinedSelector.specificityc                 C   s   | j | j | jS r6   r~   rm   r   r   r   r{   h  s    zCombinedSelector.__repr__Nrd   re   rf   rk   r}   rv   r{   r   r   r   r   r*   Y  s   
r*   c                   @   s(   e Zd Zdd Zedd Zdd ZdS )r4   c                 C   s
   || _ d S r6   )r5   )rj   r5   r   r   r   rk   m  s    zCompoundSelector.__init__c                 C   s,   | j r$ttttdd | j D  S dS d S )Nc                 s   s   | ]}|j V  qd S r6   rv   rS   selr   r   r   	<genexpr>v  s     z/CompoundSelector.specificity.<locals>.<genexpr>r   r   r   )r5   tuplemapsumziprm   r   r   r   rv   p  s
    zCompoundSelector.specificityc                 C   s   d tt| jS )Nra   )joinr   reprr5   rm   r   r   r   r{   z  s    zCompoundSelector.__repr__Nr   r   r   r   r   r4   l  s   
	r4   c                   @   s    e Zd ZdZdd Zdd ZdS )r8   )r   r   rt   c                 C   s   |\| _ | _d S r6   )r<   Zlower_local_name)rj   r<   r   r   r   rk     s    zLocalNameSelector.__init__c                 C   s   | j S r6   )r<   rm   r   r   r   r{     s    zLocalNameSelector.__repr__Nrd   re   rf   rv   rk   r{   r   r   r   r   r8   ~  s   r8   c                   @   s    e Zd ZdZdd Zdd ZdS )r9   r   c                 C   s
   || _ d S r6   r;   rj   r;   r   r   r   rk     s    zNamespaceSelector.__init__c                 C   s    | j dkrdS d| j  dS d S )Nra   r`   {z}|r   rm   r   r   r   r{     s    
zNamespaceSelector.__repr__Nr   r   r   r   r   r9     s   r9   c                   @   s    e Zd ZdZdd Zdd ZdS )rF   )rt   r   r   c                 C   s
   || _ d S r6   r?   )rj   r?   r   r   r   rk     s    zIDSelector.__init__c                 C   s   d| j  S )N#r   rm   r   r   r   r{     s    zIDSelector.__repr__Nr   r   r   r   r   rF     s   rF   c                   @   s    e Zd ZdZdd Zdd ZdS )rG   r   rt   r   c                 C   s
   || _ d S r6   
class_name)rj   r   r   r   r   rk     s    zClassSelector.__init__c                 C   s   d| j  S )Nr>   r   rm   r   r   r   r{     s    zClassSelector.__repr__Nr   r   r   r   r   rG     s   rG   c                   @   s    e Zd ZdZdd Zdd ZdS )r^   r   c                 C   s"   || _ |\| _| _|| _|| _d S r6   )r;   rQ   rL   r_   r$   )rj   r;   rQ   r_   r$   r   r   r   rk     s    zAttributeSelector.__init__c                 C   s:   | j d krdnd| j  d}d| | j | j | jdS )Nz*|r   }[])r;   rQ   r_   r$   r   r   r   r   r{     s    zAttributeSelector.__repr__Nr   r   r   r   r   r^     s   r^   c                   @   s    e Zd ZdZdd Zdd ZdS )rK   r   c                 C   s
   || _ d S r6   rQ   )rj   rQ   r   r   r   rk     s    zPseudoClassSelector.__init__c                 C   s
   d| j  S Nr@   r   rm   r   r   r   r{     s    zPseudoClassSelector.__repr__Nr   r   r   r   r   rK     s   rK   c                   @   s    e Zd ZdZdd Zdd ZdS )rN   r   c                 C   s   || _ || _d S r6   )rQ   rO   )rj   rQ   rO   r   r   r   rk     s    z&FunctionalPseudoClassSelector.__init__c                 C   s   d| j  t| jS r   )rQ   r   rO   rm   r   r   r   r{     s    z&FunctionalPseudoClassSelector.__repr__Nr   r   r   r   r   rN     s   rN   c                   @   s(   e Zd Zdd Zedd Zdd ZdS )rW   c                 C   s
   || _ d S r6   selector_listrj   r   r   r   r   rk     s    zNegationSelector.__init__c                 C   s"   | j rtdd | j D S dS d S )Nc                 s   s   | ]}|j V  qd S r6   r   rR   r   r   r   r     s     z/NegationSelector.specificity.<locals>.<genexpr>r   r   maxrm   r   r   r   rv     s    zNegationSelector.specificityc                 C   s   dd dd | jD  dS )Nz:not(, c                 s   s   | ]}t |V  qd S r6   r   r   r   r   r   r     s     z,NegationSelector.__repr__.<locals>.<genexpr>)r   r   rm   r   r   r   r{     s    zNegationSelector.__repr__Nr   r   r   r   r   rW     s   
rW   c                   @   s(   e Zd Zdd Zedd Zdd ZdS )rX   c                 C   s
   || _ d S r6   r   r   r   r   r   rk     s    zRelationalSelector.__init__c                 C   s"   | j rtdd | j D S dS d S )Nc                 s   s   | ]}|j V  qd S r6   r   rR   r   r   r   r     s     z1RelationalSelector.specificity.<locals>.<genexpr>r   r   rm   r   r   r   rv     s    zRelationalSelector.specificityc                 C   s   dd dd | jD  dS )Nz:has(r   c                 s   s   | ]}t |V  qd S r6   r   r   r   r   r   r     s     z.RelationalSelector.__repr__.<locals>.<genexpr>r   r   rm   r   r   r   r{     s    zRelationalSelector.__repr__Nr   r   r   r   r   rX     s   
rX   c                   @   s(   e Zd Zdd Zedd Zdd ZdS )rU   c                 C   s
   || _ d S r6   r   r   r   r   r   rk     s    zMatchesAnySelector.__init__c                 C   s"   | j rtdd | j D S dS d S )Nc                 s   s   | ]}|j V  qd S r6   r   rR   r   r   r   r     s     z1MatchesAnySelector.specificity.<locals>.<genexpr>r   r   rm   r   r   r   rv     s    zMatchesAnySelector.specificityc                 C   s   dd dd | jD  dS )Nz:is(r   c                 s   s   | ]}t |V  qd S r6   r   r   r   r   r   r     s     z.MatchesAnySelector.__repr__.<locals>.<genexpr>r   r   rm   r   r   r   r{     s    zMatchesAnySelector.__repr__Nr   r   r   r   r   rU     s   
rU   c                   @   s(   e Zd Zdd Zedd Zdd ZdS )rV   c                 C   s
   || _ d S r6   r   r   r   r   r   rk     s    z&SpecificityAdjustmentSelector.__init__c                 C   s   dS )Nr   r   rm   r   r   r   rv     s    z)SpecificityAdjustmentSelector.specificityc                 C   s   dd dd | jD  dS )Nz:where(r   c                 s   s   | ]}t |V  qd S r6   r   r   r   r   r   r     s     z9SpecificityAdjustmentSelector.__repr__.<locals>.<genexpr>r   r   rm   r   r   r   r{     s    z&SpecificityAdjustmentSelector.__repr__Nr   r   r   r   r   rV     s   
rV   )NFF)F)F)Ztinycss2r   __all__rJ   r   r   r%   r1   r2   rM   rH   r7   
ValueErrorr   r   r(   r)   r*   r4   r8   r9   rF   rG   r^   rK   rN   rW   rX   rU   rV   r   r   r   r   <module>   sX               
 
"1#
1$



