ó
™‚Mc        +   @   s  d  Z  d d l Z d d l m Z d d d d d d	 d
 d d d d d d d d d d d d d d d d d d d d d d  d! d" d# d$ d% d& d' d( d) d* d+ d, d- d. g+ Z e j d/ „  ƒ i d0 d1 6d2 d3 6d4 d5 6d6 d7 6d8 d9 6Z d e j d: ƒ f d e j d; ƒ f d< e j d= ƒ f d> e j d? ƒ f d@ e j dA ƒ f dB e j dC ƒ f dD e j dE d j	 e
 e j e ƒ ƒ ƒ f dF e j dG ƒ f g Z e j dH ƒ Z e j dI ƒ Z e j dJ ƒ Z e j dK e j ƒ Z e j dL ƒ Z dM e f dN „  ƒ  YZ dO „  Z dP „  Z dQ „  Z d S(R   sJ   A simple JavaScript 1.5 lexer which is used for the JavaScript
extractor.
iÿÿÿÿN(   t
   itemgettert   +t   -t   *t   %s   !=s   ==t   <t   >s   <=s   >=t   =s   +=s   -=s   *=s   %=s   <<s   >>s   >>>s   <<=s   >>=s   >>>=t   &s   &=t   |s   |=s   &&s   ||t   ^s   ^=t   (t   )t   [t   ]t   {t   }t   !s   --s   ++t   ~t   ,t   ;t   .t   :c         C   s   t  t |  ƒ t | ƒ ƒ S(   N(   t   cmpt   len(   t   at   b(    (    s:   /usr/lib/python2.7/site-packages/babel/messages/jslexer.pyt   <lambda>   s    s   R   s   t   fs   
t   ns   t   rs   	t   ts   \s+(?u)s   <!--.*t   linecomments   //.*t   multilinecomments   /\*.*?\*/(?us)t   names   (\$+\w*|[^\W\d]\w*)(?u)t   numbersf   (?x)(
        (?:0|[1-9]\d*)
        (\.\d+)?
        ([eE][-+]?\d+)? |
        (0x[a-fA-F0-9]+)
    )t   operators   (%s)t   stringsY   (?xs)(
        '(?:[^'\\]*(?:\\.[^'\\]*)*)'  |
        "(?:[^"\\]*(?:\\.[^"\\]*)*)"
    )s   /=?s)   /(?:[^/\\]*(?:\\.[^/\\]*)*)/[a-zA-Z]*(?s)s   (\r\n|\n|\r)s   \\s   [a-fA-F0-9]{1,4}t   Tokenc           B   sS   e  Z d  Z d Z d „  Z e e d ƒ ƒ Z e e d ƒ ƒ Z e e d ƒ ƒ Z	 RS(   s-   Represents a token as returned by `tokenize`.c         C   s   t  j |  | | | f ƒ S(   N(   t   tuplet   __new__(   t   clst   typet   valuet   lineno(    (    s:   /usr/lib/python2.7/site-packages/babel/messages/jslexer.pyR(   ?   s    i    i   i   (    (
   t   __name__t
   __module__t   __doc__t	   __slots__R(   t   propertyR    R*   R+   R,   (    (    (    s:   /usr/lib/python2.7/site-packages/babel/messages/jslexer.pyR&   ;   s   	c         C   s)   |  j  d k r |  j d k S|  j  d k S(   sz   A helper function that helps the tokenizer to decide if the current
    token may be followed by a division operator.
    R$   R   R   R   s   ++s   --R"   R#   R%   t   regexp(   R   R   R   s   ++s   --(   s   nameR#   s   stringR2   (   R*   R+   (   t   token(    (    s:   /usr/lib/python2.7/site-packages/babel/messages/jslexer.pyt   indicates_divisionG   s    c         C   s  t  j d |  d d !ƒ }  g  } | j } d } x/|  j d | ƒ } | d k  rS Pn  | |  | | !ƒ |  | d } | t k r | t | ƒ nÄ | d k rIt j |  | d ƒ } | d k	 r<| j ƒ  } t	 | ƒ d k ry | t
 t | d	 ƒ ƒ ƒ Wn t k
 rqX| d
 } q1 n  | | | ƒ | j ƒ  } q1 qS| | ƒ n
 | | ƒ | d } q1 | t	 |  ƒ k  rƒ| |  | ƒ n  d j | ƒ S(   s‰   Unquote a string with JavaScript rules.  The string has to start with
    string delimiters (``'`` or ``"``.)

    :return: a string
    s   \1i   iÿÿÿÿi    s   \t   uUi   i   i   i   u    N(   t   line_join_ret   subt   appendt   findt   escapest   uni_escape_ret   matcht   Nonet   groupR   t   unichrt   intt
   ValueErrort   endt   join(   R%   t   resultt   addt   post
   escape_post	   next_chart   escapedt   escaped_value(    (    s:   /usr/lib/python2.7/site-packages/babel/messages/jslexer.pyt   unquote_stringP   s@    	

c   
      c   s&  t  } d } d } t |  ƒ } x| | k  r!x‹ t D]. \ } } | j |  | ƒ } | d k	 r4 Pq4 q4 W| r‡ t j |  | ƒ } d } n t j |  | ƒ } d } | d k r» | d 7} q! n  | j ƒ  } | d k	 rù t | | | ƒ }	 t	 |	 ƒ } |	 Vn  | t t
 j | ƒ ƒ 7} | j ƒ  } q! Wd S(   sG   Tokenize a JavaScript source.

    :return: generator of `Token`\s
    i    i   R$   R2   N(   t   FalseR   t   rulesR<   R=   t   division_ret   regex_reR>   R&   R4   t   line_ret   findallRB   (
   t   sourcet
   may_divideRF   R,   RB   t
   token_typet   ruleR<   t   token_valueR3   (    (    s:   /usr/lib/python2.7/site-packages/babel/messages/jslexer.pyt   tokenizeŠ   s0    	
(   R/   t   ret
   babel.utilR    t	   operatorst   sortR:   R=   t   compileRC   t   mapt   escapeRM   RN   RO   RP   t   patternR6   R;   R'   R&   R4   RK   RW   (    (    (    s:   /usr/lib/python2.7/site-packages/babel/messages/jslexer.pyt   <module>   s6   !!*)		+				: