
    Mh=                         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dS )z
    pygments.lexers.crystal
    ~~~~~~~~~~~~~~~~~~~~~~~

    Lexer for Crystal.

    :copyright: Copyright 2006-2025 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dZ	e
j        e
j        z  Zd	 Zd
 Zg dej        f ed                                d          ef ed                                dd          ej        fdej        f e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 ed                                dd          ej        fdej        j        f ed                                dd          ej        fdej        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d0ej&        j)        fd1ej&        j)        fd2e!f e*d3          d4ej+        fd5ej        fd6ej,        d7fd8ej,        d9fd: ee!eej-                  d;f ee.d<=           ee!ej!                  fd> ee!e          fd?efd@e!fdAe!fdBe/fdCefdD eej'        e!ej0                  dEf e1dE          gdFej'        fdG ee/eej'        ee/          f e1dE          gdHej,        dIfdJej,        dEf e*dK          gdLej,        dMfgdNej2        fg e*dO           e*dP          g e*dO          dQej        fdRej        fg e*dO          dQej3        fdRej3        fg e*dO          dSej        fdTej        fdQej        fdUej        fdVej        dEfgdWej        dEfgd6ej,        dIfdXej,        dEfdYef e*dK          gd8ej,        dIfdZej,        dEf e*dK          gd[e!dIfd\e!dEf e*dK          gd]Z4e45                     e                       d^S )_r   z"
    For Crystal source code.
    Crystalzhttps://crystal-lang.orgcrcrystalz*.crztext/x-crystalz2.2c              #     K   |                     d          }|t          |                    d          fV  |                     d          t          j        |                    d          fV  |                     d          t          j        |                    d          fV  |                     d          t          j        |                    d          fV  |j                            dg           }t          |           }|	                    |                    d          dk    |                    d          f           |                     d          |_
        |                    d          |_        t          |          dk     r|                     |	          E d {V  n)|j
        t          j        |                    d          fV  |                                |_
        |rw|D ]S\  }}g }t          j        |j        |j
                  D ]}|r'|                                                                }	n&|                                                                }	|	|k    r|D ]7}
|
                                 t          j        |
                                fV  8|                                 t          j        |                                fV  |                                |_
         nK|	                    |           |D ]2}
|
                                 t&          |
                                fV  3Ut          |j                  |_        |d d = d S d S )
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              W/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pygments/lexers/crystal.pyheredoc_callbackzCrystalLexer.heredoc_callback)   s      AXu{{1~~----kk!nnfnekk!nn<<<<kk!nnf.A>>>>kk!nnfnekk!nn<<<<|..~rBB\***	U[[^^u4ekk!nnEFFF++a..))A,,|s""2232??????????'6>5;;q>>9999))++ 	 $0 D D &$-ch@@ D DE 7 % 3 3 5 5 % 4 4 6 6&+ Q QF"(,,..&.&,,.."PPPPP#kkmmV-=u{{}}LLLL"'))++U++++ #( D D$llnneV\\^^CCCCC#(mmCGQQQ-	  	     c            
         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 ]2\  }}}t          |dk    rdnd          d| d|fd|f||dfg| d|z   <   3dD ]\  }}}}d|z   t           j
        fg||k    |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                             d!|z   t           j
        |d z   f           d"|z   dz   t           j
        fg||k    |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                             d$|z   t           j
        |d#z   f           d"|z   dz   t           j        fg||k    |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                             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[^\\z#]+[\\#]#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_rulesX   s   FM*$U333V]C)6=9+V[9FM<0&(L(LM6=/2&/+<=
y "*6=# >!&s ;!+V_c B!C 	 	D% DEMM((?TUU!!!!5)5!eV$	&F9T>"",)	6 )	6)FFGT .+6!w/& +
 v.-..7"S(&,7G#d*FL9			+F4&' 9$$fvov|&*>&9&; < < < G#c)6<8&6!w/& &
 v.7"S(&,7G#d*FL9	&F4	>" 9$$i&&8&,&*9n&6 7 7 7 G#c)6<8%6!w/& %
 )#V\6:&&7"S(&,7G#d*FL9			%F4=! 9$$efnfl&*8m&5 6 6 6 6 rH   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(?<!\.))rK   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::rM   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(\.|::)rJ   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*[!?]?|\*\*?|[-+]@?|[/%&|^`~]|\[\]=?|<<|>>|<=?>|>=?|===?)rU   z	[A-Z_]\w*z(\()(\s*)([A-Z_]\w*)(\s*)(\))rV   r`   rW   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 ]+\})rb   rR   rT   z[^\\#]+z\\\\z\\/z[^\\/#]+z/[imsx]*z.+z%\}z(for|verbatim)\bz\}\}rY   rZ   )r}   ru   rv   r~   rb   rR   rS   zinterpolated-regexzinterpolated-stringry   rx   rz   r{   r|   N)6__name__
__module____qualname____doc__rk   urlaliases	filenames	mimetypesversion_addedreDOTALL	MULTILINEflagsrG   rp   r	   Singler   splitr   PseudoConstantr   r   r   	NamespaceBuiltinPreprocr   ri   r   Octr
   HexBinFloatIntegerVariableClassInstanceGlobalr   re   Interpol	Decoratorrd   r   Functionr   Escaperh   tokensupdate rH   rF   r   r      s"         D
$CYGI!"IMI$E-  -  - ^F F FRF
w~&F
 U  	' ' ' )0	1F
 U  
5: : : <C>KF
 9'.IF
 U+++E:::G<LMF
  CXgz4>::<!F
$ :Xgz4>::JH%F
( (*=)F
* ZXgz4>::KI+F
0 U 
5: : :;B>K1F
8 <T\=PQ9F
< U  
5: : : <@<I=F
FY\ "GF
N @OF
T *+;<UF
V *5WF
Z. $8J==?P/R[F
L v|->?MF
P "88J#E#E QF
d FXfj*h779eF
h RXfj*h779iF
l DXfj*h779mF
t,XflJ99;uF
z,XflJ99;{F
@+XflJ99;AF
F IXfnj(;;=GF
L  34MF
N t}56OF
P t}+,QF
R .t}/CDSF
T  !56UF
V HWF
X GIYF
\ []F
d (7eF
h V_&89iF
j fo7kF
n 2Xh
DN;;ZIoF
v U$Z888Xh..0wF
z =Xh%%'{F
@ +D1AF
B%&.0CF
F "8,GF
H {+IF
J Z KF
P6 Xdj(DM::FD GFOO
 4:&-Xk:tz:{SSUGFOO	
 FOW-FOV,GFOO
 V_i0

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

 GM""v|$&
 GM""v|$& 
 GM""fl#V\"v|$&,'&,/
 GOV,
 V_g.V_f- '*GFOO	
 fow/fov.GFOO
 Hg&Hf%GFOO
MK KFX MM**,,-----rH   )r   r   pygments.lexerr   r   r   r   r   r   pygments.tokenr	   r
   r   r   r   r   r   r   r   __all__rd   r   r   rH   rF   <module>r      s3    
			               # # # # # # # # # # # # # # # # # # # # # # 
   Q. Q. Q. Q. Q.% Q. Q. Q. Q. Q.rH   