
    |e=                         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g dZ G d de      Zy)z
    pygments.lexers.crystal
    ~~~~~~~~~~~~~~~~~~~~~~~

    Lexer for Crystal.

    :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    N)ExtendedRegexLexerincludebygroupsdefaultwordsline_re)	CommentOperatorKeywordNameStringNumberPunctuationError
WhitespaceCrystalLexer)z!=z!~!%z&&&z***+-/z<=>z<<z<=<z===z==z=~=z>=z>>>z[]=z[]?z[]^z|||~c                   <
   e Zd ZdZdZdZddgZdgZdgZe	j                  e	j                  z  Zd Zd	 Zg d
ej                   f edj%                         d      ef edj%                         dd      ej(                  fdej(                  f eg dd      ej*                  fd eeeej2                        fd eeeej2                        dfdedfd eeeej2                        df edj%                         dd      ej(                  fdej4                  j(                  f edj%                         dd      ej4                  fdej4                  j(                  fdefdefdej6                  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jB                  ee       fd' eejD                  ee       fd( eejF                  ee       fd) eejF                  ee       fd* eejF                  ee       fd+ eejH                  ee       fd,ejJ                  jL                  fd-ejJ                  jN                  fd.ejJ                  jP                  fd/ejJ                  jP                  fd0ejJ                  jP                  fd1e f e)d2      d3ejT                  fd4ej*                  fd5ejV                  d6fd7ejV                  d8fd9 ee eejX                        d:f ee-d;<       ee ej@                        fd= ee e      fd>efd?e fd@e fdAe.fdBefdC eejL                  e ej^                        dDf e0dD      gdEejL                  fdF ee.eejL                  ee.      f e0dD      gdGejV                  dHfdIejV                  dDf e)dJ      gdKejV                  dLfgdMejb                  fg e)dN       e)dO      g e)dN      dPej:                  fdQej:                  fg e)dN      dPejd                  fdQejd                  fg e)dN      dRej:                  fdSej:                  fdPej:                  fdTej:                  fdUej:                  dDfgdVej6                  dDfgd5ejV                  dHfdWejV                  dDfdXef e)dJ      gd7ejV                  dHfdYejV                  dDf e)dJ      gdZe dHfd[e dDf e)dJ      gd\Z3e3ji                   e              y])^r   z=
    For Crystal source code.

    .. versionadded:: 2.2
    Crystalzhttps://crystal-lang.orgcrcrystalz*.crztext/x-crystalc              #   H  K   |j                  d      }|t        |j                  d      f |j                  d      t        j                  |j                  d      f |j                  d      t        j
                  |j                  d      f |j                  d      t        j                  |j                  d      f |j                  j                  dg       }t        |       }|j                  |j                  d      dk(  |j                  d      f       |j                  d      |_
        |j                  d      |_        t        |      dk  r| j                  |	      E d {    n.|j                  t        j                  |j                  d      f |j                         |_
        |r`|D ]:  \  }}g }t        j                  |j                   |j                        D ]  }|r|j                         j#                         }	n|j                         j%                         }	|	|k(  r|D ]3  }
|
j                         t        j                  |
j                         f 5 |j                         t        j
                  |j                         f |j                         |_
         |j                  |        |D ])  }
|
j                         t&        |
j                         f + = t        |j                         |_        |d d = y y 7 w)
N            heredocstackz<<-   d   )context)startr
   groupr   Heredoc	Delimiter__dict__
setdefaultboolappendposendlenget_tokens_unprocessedr   finditertextstriprstripr   )selfmatchctxr-   r)   	outermosttoleranthdnamelinescheckamatchs              9/usr/lib/python3/dist-packages/pygments/lexers/crystal.pyheredoc_callbackzCrystalLexer.heredoc_callback*   st     AXu{{1~--kk!nfnnekk!n<<kk!nf..A>>kk!nfnnekk!n<<||..~rB\**	U[[^u4ekk!nEF++a.))A,|s"2232???''6>>5;;q>99))+$0 D &$--chh@ DE % 3 3 5 % 4 4 6&+ QF"(,,.&..&,,."PPQ#kkmV-=-=u{{}LL"'))+U+D #( D$llneV\\^CCD#D& #((mCGQ-  @s   E0L"2L3F-L"c            
      f   i } dt         j                  ft        t        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<   dt         j                  d	fdt         j                  d	fdt         j                  dffD ],  \  }}}t        |dk(  rdnd      d|z  |fd|f||dfg| d|z   <   . dD ]  \  }}}}d|z   t         j                  fg||k7  |t         j                  dfgz  z   |t         j                  dft        d      d|z   dz   t         j                  fd|z   dz   t         j                  fgz   | |dz   <   | d   j                  d |z   t         j                  |dz   f       d!|z   dz   t         j                  fg||k7  |t         j                  dfgz  z   |t         j                  dfd|z   dz   t         j                  fd|z   dz   t         j                  fgz   | |d"z   <   | d   j                  d#|z   t         j                  |d"z   f       d!|z   dz   t         j                  fg||k7  |t         j                  dfgz  z   |d$z   t         j                  dft        d%      d|z   dz   t         j                  fd|z   dz   t         j                  fgz   | |d&z   <   | d   j                  d'|z   t         j                  |d&z   f        | S )(Nz
\:\w+[!?]?z\:prefixz:'(\\\\|\\[^\\]|[^'\\])*'z'(\\\\|\\'|[^']|\\[^'\\]+)'z:"z
simple-symz([a-zA-Z_]\w*)(:)(?!:)"zsimple-stringz(?<!\.)`zsimple-backtickstringsstringsymbacktick`string-escapedstring-intp-escapedz	[^\\%s#]+[\\#]#popzsimple-))\{\}z{}cb)\[\]z\[\]sb)z\(z\)z()pa)r   r   z<>ab)\|r]   r]   piz\\#pushz[\\#]z[^\\#z]+z-intp-stringz%Q?z\\[\\z-stringz%[qwi]z[imsx]*string-intpz-regexz%r)r   Symbolr   CRYSTAL_OPERATORSCharr   r   DoubleBacktickr   Otherr4   Regex)statesnamettyper6   lbracerbracebraceccs          rF   gen_crystalstrings_rulesz%CrystalLexer.gen_crystalstrings_rulesY   s   FMM*$U3V]]C)6==9+V[[9FMM<0&(LM6==/2&//+<=
y "*6==# >!&s ;!+V__c B!C 	D% DEM(?TU#U+5!eV$	&F9T>"	,)	6)FFGT .+6!w/& +
 v.-.7"S(&,,7G#d*FLL9			+F4&' 9$$fvov||&*>&9&; < G#c)6<<8&6!w/& &
 v.7"S(&,,7G#d*FLL9	&F4	>" 9$$i&&8&,,&*9n&6 7 G#c)6<<8%6!w/& %
 )#V\\6:&7"S(&,,7G#d*FLL9			%F4=! 9$$efnfll&*8m&5 6Q)	6V     z#.*?$z
                abstract asm begin break case do else elsif end ensure extend if in
                include next of private protected require rescue return select self super
                then unless until when while with yield
            z\b)suffixzz
                previous_def forall out uninitialized __DIR__ __FILE__ __LINE__
                __END_LINE__
            z(?<!\.))rJ   rq   z(\.(is_a\?|nil\?|responds_to\?|as\?|as\b))truefalsenilz2(module|lib)(\s+)([a-zA-Z_]\w*(?:::[a-zA-Z_]\w*)*)z)(def|fun|macro)(\s+)((?:[a-zA-Z_]\w*::)*)funcnamezdef(?=[*%&^`~+-/\[<>=])zI(annotation|class|struct|union|type|alias|enum)(\s+)((?:[a-zA-Z_]\w*::)*)	classnamezN
                instance_sizeof offsetof pointerof sizeof typeof
            z+(?<!\.)(debugger\b|p!|pp!|record\b|spawn\b)z
                abort at_exit caller exit gets loop main p pp print printf puts
                raise rand read_line sleep spawn sprintf system
            z(?<!\.)(((class_)?((getter|property)\b[!?]?|setter\b))|(def_(clone|equals|equals_and_hash|hash)|delegate|forward_missing_to)\b)z/(?<!\w)(<<-?)(["`\']?)([a-zA-Z_]\w*)(\2)(.*?\n)z(<<-?)("|\')()(\2)(.*?\n)__END__end-partab  (?:^|(?<=[=<>~!:])|(?<=(?:\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*)(/)multiline-regexz(?<=\(|,|\[)/z(\s+)(/)(?![\s=])z5(0o[0-7]+(?:_[0-7]+)*(?:_?[iu][0-9]+)?)\b(\s*)([/?])?zA(0x[0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*(?:_?[iu][0-9]+)?)\b(\s*)([/?])?z3(0b[01]+(?:_[01]+)*(?:_?[iu][0-9]+)?)\b(\s*)([/?])?zU((?:0(?![0-9])|[1-9][\d_]*)(?:\.\d[\d_]*)(?:e[+-]?[0-9]+)?(?:_?f[0-9]+)?)(\s*)([/?])?zU((?:0(?![0-9])|[1-9][\d_]*)(?:\.\d[\d_]*)?(?:e[+-]?[0-9]+)(?:_?f[0-9]+)?)(\s*)([/?])?zU((?:0(?![0-9])|[1-9][\d_]*)(?:\.\d[\d_]*)?(?:e[+-]?[0-9]+)?(?:_?f[0-9]+))(\s*)([/?])?z8(0\b|[1-9][\d]*(?:_\d+)*(?:_?[iu][0-9]+)?)\b(\s*)([/?])?z@@[a-zA-Z_]\w*z@[a-zA-Z_]\w*z\$\w+z\$[!@&`\'+~=/\\,;.<>_*$?:"^-]z\$-[0adFiIlpvw]z::rL   zi\?(\\[MC]-)*(\\([\\abefnrtv#"\']|[0-7]{1,3}|x[a-fA-F0-9]{2}|u[a-fA-F0-9]{4}|u\{[a-fA-F0-9 ]+\})|\S)(?!\w)z[A-Z][A-Z_]+\b(?!::|\.)z\{%in-macro-controlz\{\{in-macro-exprz!(@\[)(\s*)([A-Z]\w*(::[A-Z]\w*)*)in-annotz(\.|::)rI   z,(\.|::)([a-zA-Z_]\w*[!?]?|[*%&^`~+\-/\[<>=])z[a-zA-Z_]\w*(?:[!?](?!=))?z:(\[|\]\??|\*\*|<=>?|>=|<<?|>>?|=~|===|!~|&&?|\|\||\.{1,3})z[-+/*%=<>&!^|~]=?z[(){};,/?:\\]z\s+z\(?:([a-zA-Z_]\w*)(\.))?([a-zA-Z_]\w*[!?]?|\*\*?|[-+]@?|[/%&|^`~]|\[\]=?|<<|>>|<=?>|>=?|===?)rT   z	[A-Z_]\w*z(\()(\s*)([A-Z_]\w*)(\s*)(\))rU   r_   rV   rootz#\{in-intpzR\\([\\abefnrtv#"\']|[0-7]{1,3}|x[a-fA-F0-9]{2}|u[a-fA-F0-9]{4}|u\{[a-fA-F0-9 ]+\})ra   rQ   rS   z[^\\#]+z\\\\z\\/z[^\\/#]+z/[imsx]*z.+z%\}z(for|verbatim)\bz\}\}rX   rY   )r}   ru   rv   r~   ra   rQ   rR   zinterpolated-regexzinterpolated-stringry   rx   rz   r{   r|   N)5__name__
__module____qualname____doc__rj   urlaliases	filenames	mimetypesreDOTALL	MULTILINEflagsrG   ro   r	   Singler   splitr   PseudoConstantr   r   r   	NamespaceBuiltinPreprocr   rh   r   Octr
   HexBinFloatIntegerVariableClassInstanceGlobalr   rd   Interpol	Decoratorrc   r   Functionr   Escaperg   tokensupdate rp   rF   r   r      s    D
$CYGI!"III$E- ^FRF
w~~&F
   	' )0	1F
   
5: <C>>KF
 9'..IF
 +E:G<L<LMF
  Cgz4>>:<!F
$ :gz4>>:JH%F
( (*=)F
* Zgz4>>:KI+F
0  
5:;B>>K1F
8 <T\\=P=PQ9F
<   
5: <@<<I=F
FY\\  "GF
N @OF
T *+;<UF
V *5WF
Z. $J=?P/R[F
L v||->?MF
P "8J#E QF
d Ffjj*h79eF
h Rfjj*h79iF
l Dfjj*h79mF
t,fllJ9;uF
z,fllJ9;{F
@+fllJ9;AF
F Ifnnj(;=GF
L  3 34MF
N t}}556OF
P t}}++,QF
R .t}}/C/CDSF
T  !5!56UF
V HWF
X IYF
\ [[]F
d (7eF
h V__&89iF
j foo7kF
n 2h
DNN;ZIoF
v $Z8h.0wF
z =h%'{F
@ +D1AF
B%&.0CF
F "8,GF
H {+IF
J Z KF
P6 djj(DMM:FD FO
 4::&-k:tzz:{SUFO	
 FOOW-FOOV,FO
 V__i0

 c]]
 M"$% 

 M"v||$&
 M"v||$& 
 M"fll#V\\"v||$&,,'&,,/
 GOOV,
 V__g.V__f- '*FO	
 foow/foov.FO
 Hg&Hf%FO
MKFX MM*,-rp   )r   r   pygments.lexerr   r   r   r   r   r   pygments.tokenr	   r
   r   r   r   r   r   r   r   __all__rc   r   r   rp   rF   <module>r      sI    
 # # # 
 R.% R.rp   