
ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­
<!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   s1   | d  k	 s t ‚ | |  _ | |  _ | |  _ d  S(   N(   R   t   AssertionErrorR   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   ,(   RL   RM   (   t   skip_whitespaceR   t   parse_selectort   peekt   next(   RJ   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyRH   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   EOFRL   RM   s4   Got pseudo-element ::%s not at the end of a selectort   +t   >t   ~R=   (   RR   N(   RL   RM   (	   t   parse_simple_selectorRN   RP   R   R
   t   is_delimRQ   R!   R:   (   RJ   t   resultR   RP   R<   t   next_selector(    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyRO   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   IDENTRL   R7   t   |t   SRR   RM   RS   RT   RU   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(   RL   R7   (   RL   R[   (   R\   RR   (   RL   R]   (   RL   R_   (   RL   R`   (   RL   Ra   (   RL   Ra   (   RL   Rb   (   s
   first-lines   first-letterRc   Rd   (   RL   Rb   (   RL   R]   (   RN   t   lent   usedRP   R#   RQ   R!   R   t   next_ident_or_starR5   RW   R
   R8   R   t
   next_identt   parse_attribR   t   parse_argumentsR   t   _unicodeR&   RV   t   Truet   posR(   R%   (   RJ   Rf   t   selector_startRP   R1   R6   RX   R   R'   t   argumentt   argument_pseudo_elementRQ   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyRV   ‘  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(   NRZ   t   STRINGt   NUMBERRL   RS   t   -R]   s   Expected an argument, got %s(   RZ   Rs   Rt   (   RL   RS   (   RL   Ru   (   RL   R]   (   RN   RQ   R#   t   appendR
   (   RJ   R    RQ   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyRl   ä  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(   NRL   R[   s   Expected '|', got %st   =s   |=t   ]R4   t   ^t   $R7   RU   t   !s   Operator expected, got %sRZ   Rs   s    Expected string or ident, got %ss   Expected ']', got %s(   RL   R[   (   RL   R[   (   RL   Rw   (   RL   Rx   (   RL   Rw   (   RL   Rw   (   RZ   Rs   (   RL   Rx   (   RN   Ri   R   RP   R
   RQ   Rj   R0   RW   R!   R#   (   R   RJ   R2   R1   t   opRQ   R!   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyRk   ó  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)``

    Rs   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   nRu   RS   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__Ro   (   t   clst   type_R!   Ro   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!   Ro   (   R   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyR   K  s    c         G   s   |  j  d k o |  j | k S(   NRL   (   R#   R!   (   R   t   values(    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyRW   N  s    i    i   (
   R   R   RŒ   R   RW   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(   NRR   (   RŠ   RŒ   R   (   R   Ro   (    (    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#   Ro   (   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   methodcallerRA   i   c         C   s   |  j  d ƒ S(   Ni   (   RA   (   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…   RA   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 ƒ} | sTt d ƒ ‚ | j ƒ  } | | k rt d	 | ƒ ‚ n  |  | | k r¢t d
 | ƒ ‚ n  t t t t t d | j	 ƒ  ƒ ƒ ƒ } t d | | ƒ V| d } q n  t |  d | ƒ} | r1| j	 ƒ  } t d | | ƒ V| j ƒ  } q n  | d } |  | | !d k r…|  j d | ƒ } | d k ru| } q | d 7} q n  t d |  | | ƒ V| d 7} q W| | k sºt ‚ t | ƒ Vd  S(   Ni    Ro   R\   R=   RZ   i   R^   s)   Should have found at least an empty matchs   Unclosed string at %ss   Invalid string at %sR   Rs   Rt   i   s   /*s   */iÿÿÿÿRL   (   Rg   t   _match_whitespaceRŠ   t   endt   _match_identR«   R¤   Rª   R©   RA   t   _match_hasht   _match_string_by_quoteR;   R
   t   _sub_newline_escapet   _match_numbert   findR“   (   Rˆ   Ro   t   len_sR@   R!   t   quotet   end_post   pos2(    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyRE     sl    


	
RD   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(   Rh   t   iterR‡   RF   R   t   peekedt   Falset   _peekingRQ   t
   next_tokent   AttributeErrort   __next__(   R   R‡   RF   (    (    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»   Rh   Rv   Rº   R½   (   R   RQ   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyRQ   Û  s    		c         C   s+   |  j  s$ |  j ƒ  |  _ t |  _  n  |  j S(   N(   R¼   R½   Rº   Rn   (   R   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyRP   å  s    	c         C   s8   |  j  ƒ  } | j d k r1 t d | f ƒ ‚ n  | j S(   NRZ   s   Expected ident, got %s(   RQ   R#   R
   R!   (   R   RQ   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyRj   ë  s    c         C   sI   |  j  ƒ  } | j d k r" | j S| d k r2 d  St d | f ƒ ‚ d  S(   NRZ   RL   R7   s   Expected ident or '*', got %s(   RL   R7   (   RQ   R#   R!   R   R
   (   R   RQ   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyRi   ñ  s    c         C   s,   |  j  ƒ  } | j d k r( |  j ƒ  n  d  S(   NR\   (   RP   R#   RQ   (   R   RP   (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyRN   û  s    N(	   R   R   R   R   RQ   RP   Rj   Ri   RN   (    (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyRD   Î  s   	
			
(    (>   R	   R¥   R›   R3   t   version_infot   unicodeRm   t   unichrR§   t   strt   chrR   t	   ExceptionR   t   SyntaxErrorR
   t   objectR   R   R   R%   R&   R(   R0   R5   R8   R:   Rœ   R?   RB   RC   RK   RH   RO   R»   RV   Rl   Rk   R‰   R‹   RŠ   R“   R”   R    R­   R³   R°   R¯   R±   t   subR«   R•   t   IRª   R²   t   hasattrR£   R¤   R©   R¬   RE   RD   (    (    (    s4   /usr/lib/python2.7/site-packages/cssselect/parser.pyt   <module>   sj   			;#		*	
	S		-	%					A