U
    cc=                     @   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   K/var/www/html/project/venv/lib/python3.8/site-packages/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NNZ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_namer2   LocalNameSelectorNamespaceSelector)r   r   qualified_namer4   	namespace
local_namer   r   r   r0   e   s    
r0   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   r1   t   s^    


 
 


 r1   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 )	NTFrA   rB   rC   rD   c                 S   s   g | ]}|j d kr|qS r5   )r,   .0r-   r   r   r   
<listcomp>   s   
z-parse_logical_combination.<locals>.<listcomp>)MatchesAnySelectorSpecificityAdjustmentSelectorNegationSelectorRelationalSelectorr   rN   )Zmatches_any_tokenr   rP   r   r   Zselector_class	selectorsr   r   r   rL      s     rL   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&   r6   r   r   r#   r$   r   AttributeSelector)
r   r   r9   r   r:   r;   r#   operatorr$   Z	next_typer   r   r   rG      sH        rG   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$   rH   r   )r   r   rY   r#   Zfirst_identr:   r   r   r   r   r6      sL    

 
r6   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 r5   )iterr   peeked)selfr   r   r   r   __init__  s    
zTokenStream.__init__c                 C   s    | j r| j  S t| jd S d S r5   )rh   popr   r   ri   r   r   r   r     s    
zTokenStream.nextc                 C   s$   | j s| j t| jd  | j d S )N)rh   r2   r   r   rl   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   )ri   Z
skip_typesfoundr#   r   r   r   skip"  s    zTokenStream.skipc                 C   s   |  dgS )N
whitespacero   rl   r   r   r   r&   ,  s    zTokenStream.skip_whitespacec                 C   s   |  dgS )Ncommentrq   rl   r   r   r   r'   /  s    zTokenStream.skip_commentc                 C   s   |  ddgS )Nrr   rp   rq   rl   r   r   r   r"   2  s    z'TokenStream.skip_whitespace_and_commentN)
rc   rd   re   rj   r   r#   ro   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)ri   treer,   abcr   r   r   rj   7  s    
zSelector.__init__c                 C   s$   | j rd| j  nd}| j| S )Nz::r`   )r,   rt   )ri   Zpseudor   r   r   __repr__A  s    zSelector.__repr__)N)rc   rd   re   rj   rz   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 r5   r.   r-   )ri   r.   r-   r   r   r   rj   G  s    zRelativeSelector.__init__c                 C   s   | j jS r5   )r-   ru   rl   r   r   r   ru   K  s    zRelativeSelector.specificityc                 C   s   | j jS r5   )r-   r,   rl   r   r   r   r,   O  s    zRelativeSelector.pseudo_elementc                 C   s$   | j dkr| jS | j  d| jS )Nr!   r{   rl   r   r   r   rz   S  s    zRelativeSelector.__repr__N)rc   rd   re   rj   propertyru   r,   rz   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 r5   leftr.   right)ri   r~   r.   r   r   r   r   rj   Z  s    zCombinedSelector.__init__c                 C   s2   | j j\}}}| jj\}}}|| || || fS r5   )r~   ru   r   )ri   Za1b1c1Za2b2c2r   r   r   ru   b  s    zCombinedSelector.specificityc                 C   s   | j | j | jS r5   r}   rl   r   r   r   rz   h  s    zCombinedSelector.__repr__Nrc   rd   re   rj   r|   ru   rz   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 )r3   c                 C   s
   || _ d S r5   )r4   )ri   r4   r   r   r   rj   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 r5   ru   rR   selr   r   r   	<genexpr>v  s     z/CompoundSelector.specificity.<locals>.<genexpr>r   r   r   )r4   tuplemapsumziprl   r   r   r   ru   p  s
    zCompoundSelector.specificityc                 C   s   d tt| jS )Nr`   )joinr   reprr4   rl   r   r   r   rz   z  s    zCompoundSelector.__repr__Nr   r   r   r   r   r3   l  s   
	r3   c                   @   s    e Zd ZdZdd Zdd ZdS )r7   )r   r   rs   c                 C   s   |\| _ | _d S r5   )r;   Zlower_local_name)ri   r;   r   r   r   rj     s    zLocalNameSelector.__init__c                 C   s   | j S r5   )r;   rl   r   r   r   rz     s    zLocalNameSelector.__repr__Nrc   rd   re   ru   rj   rz   r   r   r   r   r7   ~  s   r7   c                   @   s    e Zd ZdZdd Zdd ZdS )r8   r   c                 C   s
   || _ d S r5   r:   ri   r:   r   r   r   rj     s    zNamespaceSelector.__init__c                 C   s    | j dkrdS d| j  dS d S )Nr`   r_   {z}|r   rl   r   r   r   rz     s    
zNamespaceSelector.__repr__Nr   r   r   r   r   r8     s   r8   c                   @   s    e Zd ZdZdd Zdd ZdS )rE   )rs   r   r   c                 C   s
   || _ d S r5   r>   )ri   r>   r   r   r   rj     s    zIDSelector.__init__c                 C   s   d| j  S )N#r   rl   r   r   r   rz     s    zIDSelector.__repr__Nr   r   r   r   r   rE     s   rE   c                   @   s    e Zd ZdZdd Zdd ZdS )rF   r   rs   r   c                 C   s
   || _ d S r5   
class_name)ri   r   r   r   r   rj     s    zClassSelector.__init__c                 C   s   d| j  S )Nr=   r   rl   r   r   r   rz     s    zClassSelector.__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 )r]   r   c                 C   s"   || _ |\| _| _|| _|| _d S r5   )r:   rP   rK   r^   r$   )ri   r:   rP   r^   r$   r   r   r   rj     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:   rP   r^   r$   r   r   r   r   rz     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 )rJ   r   c                 C   s
   || _ d S r5   rP   )ri   rP   r   r   r   rj     s    zPseudoClassSelector.__init__c                 C   s
   d| j  S Nr?   r   rl   r   r   r   rz     s    zPseudoClassSelector.__repr__Nr   r   r   r   r   rJ     s   rJ   c                   @   s    e Zd ZdZdd Zdd ZdS )rM   r   c                 C   s   || _ || _d S r5   )rP   rN   )ri   rP   rN   r   r   r   rj     s    z&FunctionalPseudoClassSelector.__init__c                 C   s   d| j  t| jS r   )rP   r   rN   rl   r   r   r   rz     s    z&FunctionalPseudoClassSelector.__repr__Nr   r   r   r   r   rM     s   rM   c                   @   s(   e Zd Zdd Zedd Zdd ZdS )rV   c                 C   s
   || _ d S r5   selector_listri   r   r   r   r   rj     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 r5   r   rQ   r   r   r   r     s     z/NegationSelector.specificity.<locals>.<genexpr>r   r   maxrl   r   r   r   ru     s    zNegationSelector.specificityc                 C   s   dd dd | jD  dS )Nz:not(, c                 s   s   | ]}t |V  qd S r5   r   r   r   r   r   r     s     z,NegationSelector.__repr__.<locals>.<genexpr>)r   r   rl   r   r   r   rz     s    zNegationSelector.__repr__Nr   r   r   r   r   rV     s   
rV   c                   @   s(   e Zd Zdd Zedd Zdd ZdS )rW   c                 C   s
   || _ d S r5   r   r   r   r   r   rj     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 r5   r   rQ   r   r   r   r     s     z1RelationalSelector.specificity.<locals>.<genexpr>r   r   rl   r   r   r   ru     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 r5   r   r   r   r   r   r     s     z.RelationalSelector.__repr__.<locals>.<genexpr>r   r   rl   r   r   r   rz     s    zRelationalSelector.__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 )rT   c                 C   s
   || _ d S r5   r   r   r   r   r   rj     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 r5   r   rQ   r   r   r   r     s     z1MatchesAnySelector.specificity.<locals>.<genexpr>r   r   rl   r   r   r   ru     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 r5   r   r   r   r   r   r     s     z.MatchesAnySelector.__repr__.<locals>.<genexpr>r   r   rl   r   r   r   rz     s    zMatchesAnySelector.__repr__Nr   r   r   r   r   rT     s   
rT   c                   @   s(   e Zd Zdd Zedd Zdd ZdS )rU   c                 C   s
   || _ d S r5   r   r   r   r   r   rj     s    z&SpecificityAdjustmentSelector.__init__c                 C   s   dS )Nr   r   rl   r   r   r   ru     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 r5   r   r   r   r   r   r     s     z9SpecificityAdjustmentSelector.__repr__.<locals>.<genexpr>r   r   rl   r   r   r   rz     s    z&SpecificityAdjustmentSelector.__repr__Nr   r   r   r   r   rU     s   
rU   )NFF)F)F)Ztinycss2r   __all__rI   r   r   r%   r0   r1   rL   rG   r6   
ValueErrorr   r   r(   r)   r*   r3   r7   r8   rE   rF   r]   rJ   rM   rV   rW   rT   rU   r   r   r   r   <module>   sX               
 
"1#
1$



