ó
xiù\c           @   s  d  Z  d d l Z d d l m Z m Z m Z m Z m Z m Z d d l	 m
 Z
 m Z m Z m Z m Z m Z m Z m Z m Z d g Z e j d ƒ 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# g Z d e f d$ „  ƒ  YZ d S(%   sÅ   
    pygments.lexers.crystal
    ~~~~~~~~~~~~~~~~~~~~~~~

    Lexer for Crystal.

    :copyright: Copyright 2006-2019 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
iÿÿÿÿN(   t   ExtendedRegexLexert   includet   bygroupst   defaultt   LexerContextt   words(	   t   Textt   Commentt   Operatort   Keywordt   Namet   Stringt   Numbert   Punctuationt   Errort   CrystalLexers   .*?
s   !=s   !~t   !t   %s   &&t   &s   **t   *t   +t   -t   /s   <=>s   <<s   <=t   <s   ===s   ==s   =~t   =s   >=s   >>t   >s   []=s   []?s   []t   ^s   ||t   |t   ~c        -   B   s£  e  Z d  Z d Z d d g Z d g Z d g Z e j e j	 BZ
 d „  Z d „  Z i d e j f e d	 j ƒ  d
 d ƒe f e d d d g d
 d ƒe j f d e e e e j ƒ f d e e e e j ƒ d f d e d f d e e e e j ƒ d f d e j f e d j ƒ  d
 d ƒe j j f d e j j f e d j ƒ  d d d
 d ƒe j f d e f d e f d e j d f d e e e j ƒ d  f d! e j d  f d" e e e j ƒ d  f d# e e j e e ƒ f d$ e e j e e ƒ f d% e e j  e e ƒ f d& e e j! e e ƒ f d' e e j! e e ƒ f d( e e j! e e ƒ f d) e e j" e e ƒ f d* e j# j$ f d+ e j# j% f d, e j# j& f d- e j# j& f d. e j# j& f d/ e f e' d0 ƒ d1 e j( f d2 e j f d3 e j) d4 f d5 e j) d6 f d7 e e e e j* ƒ d8 f e e+ d d9 ƒe e e j ƒ f d: e e e ƒ f d; e f d< e f d= e f d> e, f d? e f g+ d@ 6dA e e j$ e e j- ƒ dB f e. dB ƒ g d 6dC e j$ f dD e e, e e j$ e e, ƒ f e. dB ƒ g d 6dE e j) dF f dG e j) dB f e' d@ ƒ g dH 6dI e j) dH f g dJ 6dK e j/ f g dL 6e' dJ ƒ e' dL ƒ g dM 6e' dJ ƒ dN e j f dO e j f g dP 6e' dJ ƒ dN e j0 f dO e j0 f g dQ 6e' dJ ƒ dR e j f dS e j f dN e j f dT e j f dU e j dB f g d  6dV e j dB f g d 6d3 e j) dF f dW e j) dB f dX e f e' d@ ƒ g d4 6d5 e j) dF f dY e j) dB f e' d@ ƒ g d6 6dZ e dF f d[ e dB f e' d@ ƒ g d8 6Z1 e1 j2 e ƒ  ƒ RS(\   sZ   
    For `Crystal <http://crystal-lang.org>`_ source code.

    .. versionadded:: 2.2
    t   Crystalt   crt   crystals   *.crs   text/x-crystalc         c   su  | j  d ƒ } | t | j d ƒ f V| j  d ƒ t j | j d ƒ f V| j  d ƒ t j | j d ƒ f V| j  d ƒ t j | j d ƒ f V| j j d g  ƒ } t | ƒ } | j	 | j d ƒ d k | j d ƒ f ƒ | j  d ƒ | _
 | j d ƒ | _ x1 |  j d | ƒ D] \ } } } | | | f VqW| j ƒ  | _
 | rqx| D]\ }	 }
 g  } xï t j | j | j
 ƒ D]ª } |	 rœ| j ƒ  j ƒ  } n | j ƒ  j ƒ  } | |
 k rx+ | D]# } | j  ƒ  t j | j ƒ  f VqÁW| j  ƒ  t j | j ƒ  f V| j ƒ  | _
 Pq{| j	 | ƒ q{Wx( | D]  } | j  ƒ  t | j ƒ  f Vq0WqPWt | j ƒ | _ | 2n  d  S(	   Ni   i   i   i   t   heredocstacks   <<-i   t   context(   t   startR   t   groupR   t   Heredoct	   Delimitert   __dict__t
   setdefaultt   boolt   appendt   post   endt   get_tokens_unprocessedt   line_ret   finditert   textt   stript   rstripR   t   len(   t   selft   matcht   ctxR"   R    t	   outermostt   it   tt   vt   tolerantt   hdnamet   linest   checkt   amatch(    (    s6   lib/python2.7/site-packages/pygments/lexers/crystal.pyt   heredoc_callback,   s>    ###+"!"c    	      C   sw  d „  }  d „  } i  } d t  j f t t d d ƒt  j f d t  j f d t  j f d t  j d	 f d
 t t  j t ƒ f d t  j d f d t  j d f g | d <x d t  j d f d t  j d f d t  j d f f D]Z \ } } } t	 | d k rø d n d ƒ d | | f d | f | | d f g | d | <qÔ Wxãd> d? d@ dA f D]Ï\ } } } } d* | d+ t  j
 f | t  j
 d, f | t  j
 d f t	 d ƒ d- | d+ t  j
 f d. | d/ t  j
 f g | | d0 <| d j d1 | t  j
 | d0 f ƒ d2 | d+ t  j
 f | t  j
 d, f | t  j
 d f d- | d+ t  j
 f d. | d/ t  j
 f g | | d3 <| d j d4 | t  j
 | d3 f ƒ d2 | d+ t  j f | t  j d, f | d5 t  j d f t	 d6 ƒ d- | d+ t  j f d. | d/ t  j f g | | d7 <| d j d8 | t  j | d7 f ƒ qEW| d c d9 |  f d: | f d; t t t  j
 d  ƒ f d< t t t  j
 d  ƒ f d= | f g 7<| S(B   Nc         s   s¸   | j  d ƒ t j | j d ƒ f Vt | j d ƒ d d g ƒ } x> |  j d | ƒ D]* \ } } } | j  d ƒ | | | f VqT W| j  d ƒ t j | j d ƒ f V| j ƒ  | _ d  S(   Ni   i   i    s   interpolated-regexR!   i   (   R"   R   t   RegexR#   R   R,   R+   R*   (   R3   R4   R5   t   nctxR7   R8   R9   (    (    s6   lib/python2.7/site-packages/pygments/lexers/crystal.pyt   intp_regex_callbackZ   s    #"#c         s   s¸   | j  d ƒ t j | j d ƒ f Vt | j d ƒ d d g ƒ } x> |  j d | ƒ D]* \ } } } | j  d ƒ | | | f VqT W| j  d ƒ t j | j d ƒ f V| j ƒ  | _ d  S(   Ni   i   i    s   interpolated-stringR!   i   (   R"   R   t   OtherR#   R   R,   R+   R*   (   R3   R4   R5   RA   R7   R8   R9   (    (    s6   lib/python2.7/site-packages/pygments/lexers/crystal.pyt   intp_string_callbackb   s    #"#s   \:@{0,2}[a-zA-Z_]\w*[!?]?t   prefixs   \:@{0,2}s   :'(\\\\|\\'|[^'])*'s   '(\\\\|\\'|[^']|\\[^'\\]+)'s   :"s
   simple-syms   ([a-zA-Z_]\w*)(:)(?!:)t   "s   simple-strings   (?<!\.)`s   simple-backtickt   stringst   stringt   symt   backtickt   `s   string-escapeds   string-intp-escapeds	   [^\\%s#]+s   [\\#]s   #pops   simple-s   \{s   \}s   {}t   cbs   \[s   \]s   \[\]t   sbs   \(s   \)s   ()t   paR   R   s   <>t   abs   \\[t   ]s   #pushs   [\\#s   [^\\#s   ]+s   -intp-stringR   s   \\[\\s   -strings   %[wi]s   [imsx]*s   string-intps   -regexs   %rs)   (%r([\W_]))((?:\\\2|(?!\2).)*)(\2[imsx]*)s%   (%[wi]([\W_]))((?:\\\2|(?!\2).)*)(\2)s<   (?<=[-+/*%=<>&!^|~,(])(\s*)(%([\t ])(?:(?:\\\3|(?!\3).)*)\3)s'   ^(\s*)(%([\t ])(?:(?:\\\3|(?!\3).)*)\3)s#   (%([\[{(<]))((?:\\\2|(?!\2).)*)(\2)(   s   \{s   \}s   {}RL   (   s   \[s   \]s   \[\]RM   (   s   \(s   \)s   ()RN   (   R   R   s   <>RO   (   R   t   SymbolR   t   CRYSTAL_OPERATORSt   CharR   R   t   Doublet   BacktickR   RC   R)   R@   R   t   None(	   RB   RD   t   statest   namet   ttypeR+   t   lbracet   rbracet   bracecc(    (    s6   lib/python2.7/site-packages/pygments/lexers/crystal.pyt   gen_crystalstrings_rulesY   st    		"		""	"
s   #.*?$s  
                abstract asm as begin break case do else elsif end ensure extend ifdef if
                include instance_sizeof next of pointerof private protected rescue return
                require sizeof super then typeof unless until when while with yield
            t   suffixs   \bt   truet   falset   nils2   (module|lib)(\s+)([a-zA-Z_]\w*(?:::[a-zA-Z_]\w*)*)s)   (def|fun|macro)(\s+)((?:[a-zA-Z_]\w*::)*)t   funcnames   def(?=[*%&^`~+-/\[<>=])s>   (class|struct|union|type|alias|enum)(\s+)((?:[a-zA-Z_]\w*::)*)t	   classnames/   (self|out|uninitialized)\b|(is_a|responds_to)\?sÍ   
                debugger record pp assert_responds_to spawn parallel
                getter setter property delegate def_hash def_equals def_equals_and_hash
                forward_missing_to
            s-   getter[!?]|property[!?]|__(DIR|FILE|LINE)__\bs^  
                Object Value Struct Reference Proc Class Nil Symbol Enum Void
                Bool Number Int Int8 Int16 Int32 Int64 UInt8 UInt16 UInt32 UInt64
                Float Float32 Float64 Char String
                Pointer Slice Range Exception Regex
                Mutex StaticArray Array Hash Set Tuple Deque Box Process File
                Dir Time Channel Concurrent Scheduler
                abort at_exit caller delay exit fork future get_stack_top gets
                lazy loop main p print printf puts
                raise rand read_line sleep sprintf system with_color
            RE   s   (?<!\.)s/   (?<!\w)(<<-?)(["`\']?)([a-zA-Z_]\w*)(\2)(.*?\n)s   (<<-?)("|\')()(\2)(.*?\n)t   __END__s   end-partsb  (?:^|(?<=[=<>~!:])|(?<=(?:\s|;)when\s)|(?<=(?:\s|;)or\s)|(?<=(?:\s|;)and\s)|(?<=\.index\s)|(?<=\.scan\s)|(?<=\.sub\s)|(?<=\.sub!\s)|(?<=\.gsub\s)|(?<=\.gsub!\s)|(?<=\.match\s)|(?<=(?:\s|;)if\s)|(?<=(?:\s|;)elsif\s)|(?<=^when\s)|(?<=^index\s)|(?<=^scan\s)|(?<=^sub\s)|(?<=^gsub\s)|(?<=^sub!\s)|(?<=^gsub!\s)|(?<=^match\s)|(?<=^if\s)|(?<=^elsif\s))(\s*)(/)s   multiline-regexs   (?<=\(|,|\[)/s   (\s+)(/)(?![\s=])s5   (0o[0-7]+(?:_[0-7]+)*(?:_?[iu][0-9]+)?)\b(\s*)([/?])?sA   (0x[0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*(?:_?[iu][0-9]+)?)\b(\s*)([/?])?s3   (0b[01]+(?:_[01]+)*(?:_?[iu][0-9]+)?)\b(\s*)([/?])?sU   ((?:0(?![0-9])|[1-9][\d_]*)(?:\.\d[\d_]*)(?:e[+-]?[0-9]+)?(?:_?f[0-9]+)?)(\s*)([/?])?sU   ((?:0(?![0-9])|[1-9][\d_]*)(?:\.\d[\d_]*)?(?:e[+-]?[0-9]+)(?:_?f[0-9]+)?)(\s*)([/?])?sU   ((?:0(?![0-9])|[1-9][\d_]*)(?:\.\d[\d_]*)?(?:e[+-]?[0-9]+)?(?:_?f[0-9]+))(\s*)([/?])?s8   (0\b|[1-9][\d]*(?:_\d+)*(?:_?[iu][0-9]+)?)\b(\s*)([/?])?s   @@[a-zA-Z_]\w*s   @[a-zA-Z_]\w*s   \$\w+s   \$[!@&`\'+~=/\\,;.<>_*$?:"^-]s   \$-[0adFiIlpvw]s   ::RG   sG   \?(\\[MC]-)*(\\([\\befnrtv#"\']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})|\S)(?!\w)s   [A-Z][A-Z_]+\bs   \{%s   in-macro-controls   \{\{s   in-macro-exprs   (@\[)(\s*)([A-Z]\w*)s   in-attrs   (\.|::)s,   (\.|::)([a-zA-Z_]\w*[!?]?|[*%&^`~+\-/\[<>=])s   [a-zA-Z_]\w*(?:[!?](?!=))?s:   (\[|\]\??|\*\*|<=>?|>=|<<?|>>?|=~|===|!~|&&?|\|\||\.{1,3})s   [-+/*%=<>&!^|~]=?s   [(){};,/?:\\]s   \s+t   roots\   (?:([a-zA-Z_]\w*)(\.))?([a-zA-Z_]\w*[!?]?|\*\*?|[-+]@?|[/%&|^`~]|\[\]=?|<<|>>|<=?>|>=?|===?)s   #pops	   [A-Z_]\w*s   (\()(\s*)([A-Z_]\w*)(\s*)(\))s   \{s   #pushs   \}s   in-intps   #\{s   string-intps0   \\([\\befnstv#"\']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})s   string-escapeds   string-intp-escapeds   [\\#]s   [^\\#]+s   interpolated-regexs   interpolated-strings   \\\\s   \\/s   [^\\/#]+s   /[imsx]*s   .+s   %\}s
   for\b|in\bs   \}\}s   \[s   \](3   t   __name__t
   __module__t   __doc__RX   t   aliasest	   filenamest	   mimetypest   ret   DOTALLt	   MULTILINEt   flagsR?   R]   R   t   SingleR   t   splitR	   t   ConstantR   R   R
   t	   Namespacet   Pseudot   Builtint   PreprocR   R@   R   t   OctR   t   Hext   Bint   Floatt   Integert   Variablet   Classt   Instancet   GlobalR   RS   t   Interpolt	   DecoratorRR   R   t   FunctionR   t   EscapeRC   t   tokenst   update(    (    (    s6   lib/python2.7/site-packages/pygments/lexers/crystal.pyR      sÞ   			-	f!
!													(   Rh   Rl   t   pygments.lexerR    R   R   R   R   R   t   pygments.tokenR   R   R   R	   R
   R   R   R   R   t   __all__t   compileR-   RR   R   (    (    (    s6   lib/python2.7/site-packages/pygments/lexers/crystal.pyt   <module>
   s   .@	-0