
ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­
<!DOCTYPE html>
<html>
ó
ÇaWc           @   s  d  Z  d d l Z d d l Z d d l Z e j d d k  rL e Z e Z n e	 Z e
 Z d „  Z d e f d „  ƒ  YZ d e e f d	 „  ƒ  YZ d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ e j d ƒ Z e j d ƒ Z e j d  ƒ Z d! „  Z d" „  Z  d# „  Z! e" d$ „ Z# d% „  Z$ d& „  Z% d' „  Z& d( e' f d) „  ƒ  YZ( d* e( f d+ „  ƒ  YZ) d, dB d- „  ƒ  YZ* d. „  Z+ e+ d/ ƒ Z, e+ d0 ƒ Z- e+ d1 ƒ Z. e+ d2 ƒ Z/ i e+ d3 ƒ d4 6e+ d5 ƒ d6 6Z0 e j d7 ƒ j1 Z2 e j e* j3 e j4 ƒ j1 Z5 e j d8 ƒ j1 Z6 e7 e d9 ƒ rÖe j8 d: d; ƒ Z9 n	 d< „  Z9 d= „  Z: d> „  Z; d? „  Z< d@ e f dA „  ƒ  YZ= d S(C   s  
    cssselect.parser
    ================

    Tokenizer, parser and parsed objects for CSS selectors.


    :copyright: (c) 2007-2012 Ian Bicking and contributors.
                See AUTHORS for more details.
    :license: BSD, see LICENSE for more details.

iÿÿÿÿNi    i   c         C   s   |  j  d ƒ j ƒ  j d ƒ S(   s(   Lower-case, but only in the ASCII range.t   utf8(   t   encodet   lowert   decode(   t   string(    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyt   ascii_lower   s    t   SelectorErrorc           B   s   e  Z d  Z RS(   sá   Common parent for :class:`SelectorSyntaxError` and
    :class:`ExpressionError`.

    You can just use ``except SelectorError:`` when calling
    :meth:`~GenericTranslator.css_to_xpath` and handle both exceptions types.

    (   t   __name__t
   __module__t   __doc__(    (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   !   s   t   SelectorSyntaxErrorc           B   s   e  Z d  Z RS(   s3   Parsing a selector that does not match the grammar.(   R   R   R	   (    (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR
   *   s   t   Selectorc           B   s,   e  Z d  Z d d „ Z d „  Z d „  Z RS(   s"  
    Represents a parsed selector.

    :meth:`~GenericTranslator.selector_to_xpath` accepts this object,
    but ignores :attr:`pseudo_element`. It is the userâ€™s responsibility
    to account for pseudo-elements and reject selectors with unknown
    or unsupported pseudo-elements.

    c         C   sA   | |  _  | d  k	 r4 t | t ƒ r4 t | ƒ } n  | |  _ d  S(   N(   t   parsed_treet   Nonet
   isinstancet   FunctionalPseudoElementR   t   pseudo_element(   t   selft   treeR   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyt   __init__:   s
    	c         C   s]   t  |  j t ƒ r$ t |  j ƒ } n |  j r= d |  j } n d } d |  j j |  j | f S(   Ns   ::%st    s   %s[%r%s](   R   R   R   t   reprt	   __class__R   R   (   R   R   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyt   __repr__U   s    	c         C   s;   |  j  j ƒ  \ } } } |  j r. | d 7} n  | | | f S(   s’   Return the specificity_ of this selector as a tuple of 3 integers.

        .. _specificity: http://www.w3.org/TR/selectors/#specificity

        i   (   R   t   specificityR   (   R   t   at   bt   c(    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   _   s    	N(   R   R   R	   R   R   R   R   (    (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   0   s   		
t   Classc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s(   
    Represents selector.class_name
    c         C   s   | |  _  | |  _ d  S(   N(   t   selectort
   class_name(   R   R   R   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   o   s    	c         C   s   d |  j  j |  j |  j f S(   Ns	   %s[%r.%s](   R   R   R   R   (   R   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   s   s    c         C   s/   |  j  j ƒ  \ } } } | d 7} | | | f S(   Ni   (   R   R   (   R   R   R   R   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   w   s    
(   R   R   R	   R   R   R   (    (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   k   s   		R   c           B   s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   sx  
    Represents selector::name(arguments)

    .. attribute:: name

        The name (identifier) of the pseudo-element, as a string.

    .. attribute:: arguments

        The arguments of the pseudo-element, as a list of tokens.

        **Note:** tokens are not part of the public API,
        and may change between cssselect versions.
        Use at your own risks.

    c         C   s   t  | ƒ |  _ | |  _ d  S(   N(   R   t   namet	   arguments(   R   R   R    (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   Ž   s    c         C   s3   d |  j  j |  j g  |  j D] } | j ^ q f S(   Ns   %s[::%s(%r)](   R   R   R   R    t   value(   R   t   token(    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   ’   s    c         C   s   g  |  j  D] } | j ^ q
 S(   N(   R    t   type(   R   R"   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyt   argument_types—   s    c         C   s/   |  j  j ƒ  \ } } } | d 7} | | | f S(   Ni   (   R   R   (   R   R   R   R   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   š   s    
(   R   R   R	   R   R   R$   R   (    (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   }   s
   			t   Functionc           B   s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   s(   
    Represents selector:name(expr)
    c         C   s%   | |  _  t | ƒ |  _ | |  _ d  S(   N(   R   R   R   R    (   R   R   R   R    (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   ¤   s    	c         C   s9   d |  j  j |  j |  j g  |  j D] } | j ^ q" f S(   Ns   %s[%r:%s(%r)](   R   R   R   R   R    R!   (   R   R"   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   ©   s    c         C   s   g  |  j  D] } | j ^ q
 S(   N(   R    R#   (   R   R"   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR$   ®   s    c         C   s/   |  j  j ƒ  \ } } } | d 7} | | | f S(   Ni   (   R   R   (   R   R   R   R   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   ±   s    
(   R   R   R	   R   R   R$   R   (    (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR%       s
   			t   Pseudoc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s#   
    Represents selector:ident
    c         C   s   | |  _  t | ƒ |  _ d  S(   N(   R   R   t   ident(   R   R   R'   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   »   s    	c         C   s   d |  j  j |  j |  j f S(   Ns	   %s[%r:%s](   R   R   R   R'   (   R   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   ¿   s    c         C   s/   |  j  j ƒ  \ } } } | d 7} | | | f S(   Ni   (   R   R   (   R   R   R   R   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   Ã   s    
(   R   R   R	   R   R   R   (    (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR&   ·   s   		t   Negationc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s.   
    Represents selector:not(subselector)
    c         C   s   | |  _  | |  _ d  S(   N(   R   t   subselector(   R   R   R)   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   Í   s    	c         C   s   d |  j  j |  j |  j f S(   Ns   %s[%r:not(%r)](   R   R   R   R)   (   R   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   Ñ   s    c         C   sI   |  j  j ƒ  \ } } } |  j j ƒ  \ } } } | | | | | | f S(   N(   R   R   R)   (   R   t   a1t   b1t   c1t   a2t   b2t   c2(    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   Õ   s    (   R   R   R	   R   R   R   (    (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR(   É   s   		t   Attribc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s>   
    Represents selector[namespace|attrib operator value]
    c         C   s1   | |  _  | |  _ | |  _ | |  _ | |  _ d  S(   N(   R   t	   namespacet   attribt   operatorR!   (   R   R   R1   R2   R3   R!   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   ß   s
    				c         C   s~   |  j  r" d |  j  |  j f } n	 |  j } |  j d k rT d |  j j |  j | f Sd |  j j |  j | |  j |  j f Sd  S(   Ns   %s|%st   existss
   %s[%r[%s]]s   %s[%r[%s %s %r]](   R1   R2   R3   R   R   R   R!   (   R   R2   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   æ   s    		c         C   s/   |  j  j ƒ  \ } } } | d 7} | | | f S(   Ni   (   R   R   (   R   R   R   R   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   ó   s    
(   R   R   R	   R   R   R   (    (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR0   Û   s   		t   Elementc           B   s/   e  Z d  Z d d d „ Z d „  Z d „  Z RS(   sU   
    Represents namespace|element

    `None` is for the universal selector '*'

    c         C   s   | |  _  | |  _ d  S(   N(   R1   t   element(   R   R1   R6   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR      s    	c         C   sB   |  j  p d } |  j r. d |  j | f } n  d |  j j | f S(   Nt   *s   %s|%ss   %s[%s](   R6   R1   R   R   (   R   R6   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR     s    	c         C   s   |  j  r d Sd Sd  S(   Ni    i   (   i    i    i   (   i    i    i    (   R6   (   R   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   
  s    	N(   R   R   R	   R   R   R   R   (    (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR5   ù   s   	t   Hashc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s    
    Represents selector#id
    c         C   s   | |  _  | |  _ d  S(   N(   R   t   id(   R   R   R9   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR     s    	c         C   s   d |  j  j |  j |  j f S(   Ns	   %s[%r#%s](   R   R   R   R9   (   R   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR     s    c         C   s/   |  j  j ƒ  \ } } } | d 7} | | | f S(   Ni   (   R   R   (   R   R   R   R   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR     s    
(   R   R   R	   R   R   R   (    (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR8     s   		t   CombinedSelectorc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s   | |  _  | |  _ | |  _ d  S(   N(   R   t
   combinatorR)   (   R   R   R;   R)   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   $  s    		c         C   sA   |  j  d k r d } n	 |  j  } d |  j j |  j | |  j f S(   Nt    s
   <followed>s   %s[%r %s %r](   R;   R   R   R   R)   (   R   t   comb(    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   *  s
    		c         C   sI   |  j  j ƒ  \ } } } |  j j ƒ  \ } } } | | | | | | f S(   N(   R   R   R)   (   R   R*   R+   R,   R-   R.   R/   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   2  s    (   R   R   R   R   R   (    (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR:   #  s   		s%   ^[ \t\r\n\f]*([a-zA-Z]+)[ \t\r\n\f]*$s6   ^[ \t\r\n\f]*([a-zA-Z]*)#([a-zA-Z0-9_-]+)[ \t\r\n\f]*$s?   ^[ \t\r\n\f]*([a-zA-Z]*)\.([a-zA-Z][a-zA-Z0-9_-]*)[ \t\r\n\f]*$c         C   s  t  j |  ƒ } | r4 t t d | j d ƒ ƒ ƒ g St j |  ƒ } | d k	 r† t t t d | j d ƒ pm d ƒ | j d ƒ ƒ ƒ g St j |  ƒ } | d k	 rØ t t	 t d | j d ƒ p¿ d ƒ | j d ƒ ƒ ƒ g St
 t |  ƒ ƒ } |  | _ t t | ƒ ƒ S(   sÀ  Parse a CSS *group of selectors*.

    If you don't care about pseudo-elements or selector specificity,
    you can skip this and use :meth:`~GenericTranslator.css_to_xpath`.

    :param css:
        A *group of selectors* as an Unicode string.
    :raises:
        :class:`SelectorSyntaxError` on invalid selectors.
    :returns:
        A list of parsed :class:`Selector` objects, one for each
        selector in the comma-separated group.

    R6   i   i   N(   t   _el_ret   matchR   R5   t   groupt   _id_reR   R8   t	   _class_reR   t   TokenStreamt   tokenizet   sourcet   listt   parse_selector_group(   t   cssR?   t   stream(    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyt   parseE  s    !!	c         c   sP   |  j  ƒ  x? t t |  ƒ Œ  V|  j ƒ  d k rG |  j ƒ  |  j  ƒ  q Pq Wd  S(   Nt   DELIMt   ,(   RK   RL   (   t   skip_whitespaceR   t   parse_selectort   peekt   next(   RI   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyRG   o  s    

c         C   sÃ   t  |  ƒ \ } } x¤ |  j ƒ  |  j ƒ  } | d	 d
 f k rA Pn  | rZ t d | ƒ ‚ n  | j d d d ƒ r‹ |  j ƒ  j } |  j ƒ  n d } t  |  ƒ \ } } t | | | ƒ } q W| | f S(   Nt   EOFRK   RL   s4   Got pseudo-element ::%s not at the end of a selectort   +t   >t   ~R<   (   RQ   N(   RK   RL   (	   t   parse_simple_selectorRM   RO   R   R
   t   is_delimRP   R!   R:   (   RI   t   resultR   RO   R;   t   next_selector(    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyRN   y  s"    
c         C   s   |  j  ƒ  t |  j ƒ } |  j ƒ  } | j d k s@ | d k r« | j d k ra |  j ƒ  j } n |  j ƒ  d  } |  j ƒ  d k rœ |  j ƒ  |  j ƒ  } qµ | } d  } n
 d  } } t	 | | ƒ } d  } x˜|  j ƒ  } | j d k s| j
 d d d	 d
 ƒ s| r| d k rPn  | r/t d | ƒ ‚ n  | j d k rYt | |  j ƒ  j ƒ } qÍ | d  k r‡|  j ƒ  t | |  j ƒ  ƒ } qÍ | d! k r¯|  j ƒ  t | |  ƒ } qÍ | d" k rN|  j ƒ  |  j ƒ  d# k r'|  j ƒ  |  j ƒ  } |  j ƒ  d$ k rÍ |  j ƒ  t | t |  ƒ ƒ } qÍ qÍ n  |  j ƒ  } | j ƒ  d% k rWt | ƒ } qÍ n  |  j ƒ  d& k r~t | | ƒ } qÍ n  |  j ƒ  |  j  ƒ  | j ƒ  d k r3| r¹t d ƒ ‚ n  t |  d t ƒ\ }	 }
 |  j ƒ  } |
 rÿt d |
 | j f ƒ ‚ n  | d' k r!t d | f ƒ ‚ n  t | |	 ƒ } qat | | t |  ƒ ƒ } qÍ t d | f ƒ ‚ qÍ Wt |  j ƒ | k r–t d |  j ƒ  f ƒ ‚ n  | | f S((   Nt   IDENTRK   R7   t   |t   SRQ   RL   RR   RS   RT   t   )s4   Got pseudo-element ::%s not at the end of a selectort   HASHt   .t   [t   :t   (s
   first-lines   first-lettert   beforet   aftert   nots   Got nested :not()t   inside_negations+   Got pseudo-element ::%s inside :not() at %ss   Expected ')', got %ss   Expected selector, got %s(   RK   R7   (   RK   RZ   (   R[   RQ   (   RK   R\   (   RK   R^   (   RK   R_   (   RK   R`   (   RK   R`   (   RK   Ra   (   s
   first-lines   first-letterRb   Rc   (   RK   Ra   (   RK   R\   (   RM   t   lent   usedRO   R#   RP   R!   R   t   next_ident_or_starR5   RV   R
   R8   R   t
   next_identt   parse_attribR   t   parse_argumentsR   t   _unicodeR&   RU   t   Truet   posR(   R%   (   RI   Re   t   selector_startRO   R1   R6   RW   R   R'   t   argumentt   argument_pseudo_elementRP   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyRU   ‘  s’    


	
'




		

c         C   s{   g  } xn |  j  ƒ  |  j ƒ  } | j d	 k s@ | d
 d g k rP | j | ƒ q	 | d k r` | St d | f ƒ ‚ q	 Wd  S(   NRY   t   STRINGt   NUMBERRK   RR   t   -R\   s   Expected an argument, got %s(   RY   Rr   Rs   (   RK   RR   (   RK   Rt   (   RK   R\   (   RM   RP   R#   t   appendR
   (   RI   R    RP   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyRk   ä  s    
c         C   s  | j  ƒ  | j ƒ  } | d  k rP | j ƒ  d k rP t d | j ƒ  f ƒ ‚ n  | j ƒ  d k r² | j ƒ  | j ƒ  d k r— d  } | j ƒ  d } q¼ | } | j ƒ  } d  } n
 d  } } | d  k ru| j  ƒ  | j ƒ  } | d k r t |  | | d d  ƒ S| d k rd } qu| j d d	 d
 d d d ƒ r_| j ƒ  d k r_| j	 d } | j ƒ  qut d | f ƒ ‚ n  | j  ƒ  | j ƒ  } | j
 d k r°t d | f ƒ ‚ n  | j  ƒ  | j ƒ  } | d k rèt d | f ƒ ‚ n  t |  | | | | j	 ƒ S(   NRK   RZ   s   Expected '|', got %st   =s   |=t   ]R4   t   ^t   $R7   RT   t   !s   Operator expected, got %sRY   Rr   s    Expected string or ident, got %ss   Expected ']', got %s(   RK   RZ   (   RK   RZ   (   RK   Rv   (   RK   Rw   (   RK   Rv   (   RK   Rv   (   RY   Rr   (   RK   Rw   (   RM   Rh   R   RO   R
   RP   Ri   R0   RV   R!   R#   (   R   RI   R2   R1   t   opRP   R!   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyRj   ó  sN    


		

	

c         C   s  x, |  D]$ } | j  d k r t d ƒ ‚ q q Wd j d „  |  Dƒ ƒ j ƒ  } | d k r^ d S| d k rn d S| d
 k r~ d Sd
 | k rš d	 t | ƒ f S| j d
 d ƒ \ } } | sÁ d } n7 | d k sÙ | d k rì t | d ƒ } n t | ƒ } | sd	 } n t | ƒ } | | f S(   sv   
    Parses the arguments for :nth-child() and friends.

    :raises: A list of tokens
    :returns: :``(a, b)``

    Rr   s$   String tokens not allowed in series.R   c         s   s   |  ] } | j  Vq d  S(   N(   R!   (   t   .0R"   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pys	   <genexpr>+  s    t   oddi   i   t   eveni    t   nRt   RR   t   1(   i   i   (   i   i    (   i   i    (   R#   t
   ValueErrort   joint   stript   intt   split(   t   tokensR"   t   sR   R   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyt   parse_series   s,    		t   Tokenc           B   sM   e  Z d  „  Z d „  Z d „  Z e e j d ƒ ƒ Z e e j d ƒ ƒ Z	 RS(   c         C   s%   t  j |  | | f ƒ } | | _ | S(   N(   t   tuplet   __new__Rn   (   t   clst   type_R!   Rn   t   obj(    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR‹   F  s    	c         C   s   d |  j  |  j |  j f S(   Ns   <%s '%s' at %i>(   R#   R!   Rn   (   R   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   K  s    c         G   s   |  j  d k o |  j | k S(   NRK   (   R#   R!   (   R   t   values(    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyRV   N  s    i    i   (
   R   R   R‹   R   RV   t   propertyR3   t
   itemgetterR#   R!   (    (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR‰   E  s
   			t   EOFTokenc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   t  j |  d d  | ƒ S(   NRQ   (   R‰   R‹   R   (   RŒ   Rn   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR‹   V  s    c         C   s   d |  j  |  j f S(   Ns
   <%s at %i>(   R#   Rn   (   R   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   Y  s    (   R   R   R‹   R   (    (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR’   U  s   	t   TokenMacrosc           B   sH   e  Z d  Z e d Z d e Z d Z d e e f Z d e e f Z RS(   s&   \\([0-9a-f]{1,6})(?:\r\n|[ \n\r\t\f])?s   |\\[^\n\r\f0-9a-f]s   \\(?:\n|\r\n|\r|\f)|s
   [^\0-\177]s   [_a-z0-9-]|%s|%ss   [_a-z]|%s|%s(   R   R   t   unicode_escapet   escapet   string_escapet   nonasciit   nmchart   nmstart(    (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR“   `  s   

c         C   s    t  j |  t t ƒ t  j ƒ j S(   N(   t   ret   compilet   varsR“   t
   IGNORECASER?   (   t   pattern(    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyt   _compileh  s    s   [ \t\r\n\f]+s   [+-]?(?:[0-9]*\.[0-9]+|[0-9]+)s   #(?:%(nmchar)s)+s    -?(?:%(nmstart)s)(?:%(nmchar)s)*s!   ([^\n\r\f\\']|%(string_escape)s)*t   's!   ([^\n\r\f\\"]|%(string_escape)s)*t   "s   \\(.)s   \\(?:\n|\r\n|\r|\f)t   methodcallerR@   i   c         C   s   |  j  d ƒ S(   Ni   (   R@   (   R?   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyt   _replace_simple}  s    c         C   s:   t  |  j d ƒ d ƒ } | t j k r0 d } n  t | ƒ S(   Ni   i   iýÿ  (   R„   R@   t   syst
   maxunicodet   _unichr(   R?   t	   codepoint(    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyt   _replace_unicode€  s    	c         C   s"   t  t |  ƒ }  t t |  ƒ }  |  S(   N(   t   _sub_unicode_escapeR¨   t   _sub_simple_escapeR£   (   R!   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyt   unescape_ident‡  s    c         c   s¥  d } t  |  ƒ } x| | k  r•t |  d | ƒ} | r\ t d d | ƒ V| j ƒ  } q n  t |  d | ƒ} | rµ t t t t | j	 ƒ  ƒ ƒ } t d | | ƒ V| j ƒ  } q n  t
 |  d | ƒ} | rt t t t | j	 ƒ  d ƒ ƒ } t d | | ƒ V| j ƒ  } q n  |  | } | t k rØt | |  d | d ƒ} | j ƒ  } | | k rmt d | ƒ ‚ n  |  | | k rt d	 | ƒ ‚ n  t t t t t d
 | j	 ƒ  ƒ ƒ ƒ } t d | | ƒ V| d } q n  t |  d | ƒ} | r| j	 ƒ  } t d | | ƒ V| j ƒ  } q n  | d } |  | | !d k rs|  j d | ƒ } | d k rc| } q | d 7} q n  t d |  | | ƒ V| d 7} q Wt | ƒ Vd  S(   Ni    Rn   R[   R<   RY   i   R]   s   Unclosed string at %ss   Invalid string at %sR   Rr   Rs   i   s   /*s   */iÿÿÿÿRK   (   Rf   t   _match_whitespaceR‰   t   endt   _match_identRª   R£   R©   R¨   R@   t   _match_hasht   _match_string_by_quoteR
   t   _sub_newline_escapet   _match_numbert   findR’   (   R‡   Rn   t   len_sR?   R!   t   quotet   end_post   pos2(    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyRD     sh    


	
RC   c           B   sA   e  Z d d  „ Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   sm   g  |  _  t | ƒ |  _ | |  _ d  |  _ t |  _ y |  j j |  _	 Wn  t
 k
 rh |  j j |  _	 n Xd  S(   N(   Rg   t   iterR†   RE   R   t   peekedt   Falset   _peekingRP   t
   next_tokent   AttributeErrort   __next__(   R   R†   RE   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   Ï  s    				c         C   sP   |  j  r, t |  _  |  j j |  j ƒ |  j S|  j ƒ  } |  j j | ƒ | Sd  S(   N(   R»   Rº   Rg   Ru   R¹   R¼   (   R   RP   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyRP   Û  s    		c         C   s+   |  j  s$ |  j ƒ  |  _ t |  _  n  |  j S(   N(   R»   R¼   R¹   Rm   (   R   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyRO   å  s    	c         C   s8   |  j  ƒ  } | j d k r1 t d | f ƒ ‚ n  | j S(   NRY   s   Expected ident, got %s(   RP   R#   R
   R!   (   R   RP   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyRi   ë  s    c         C   sI   |  j  ƒ  } | j d k r" | j S| d k r2 d  St d | f ƒ ‚ d  S(   NRY   RK   R7   s   Expected ident or '*', got %s(   RK   R7   (   RP   R#   R!   R   R
   (   R   RP   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyRh   ñ  s    c         C   s,   |  j  ƒ  } | j d k r( |  j ƒ  n  d  S(   NR[   (   RO   R#   RP   (   R   RO   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyRM   û  s    N(	   R   R   R   R   RP   RO   Ri   Rh   RM   (    (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyRC   Î  s   	
			
(    (>   R	   R¤   Rš   R3   t   version_infot   unicodeRl   t   unichrR¦   t   strt   chrR   t	   ExceptionR   t   SyntaxErrorR
   t   objectR   R   R   R%   R&   R(   R0   R5   R8   R:   R›   R>   RA   RB   RJ   RG   RN   Rº   RU   Rk   Rj   Rˆ   RŠ   R‰   R’   R“   RŸ   R¬   R²   R¯   R®   R°   t   subRª   R”   t   IR©   R±   t   hasattrR¢   R£   R¨   R«   RD   RC   (    (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyt   <module>   sj   			;#		*	
	S		-	%					A