
    =                         S r SSKrSSKJrJrJrJrJrJr  SSK	J
r
JrJrJrJrJrJrJrJr  S/r/ SQr " S S\5      rg)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                    
   \ rS rSrSrSrSrSS/rS/rS/r	\
R                  \
R                  -  rS	 rS
 r/ S\R"                  4P\" SR'                  5       SS9\4P\" SR'                  5       SSS9\R*                  4PS\R*                  4P\" / SQSS9\R,                  4PS\" \\\R4                  5      4PS\" \\\R4                  5      S4PS\S4PS\" \\\R4                  5      S4P\" SR'                  5       SSS9\R*                  4PS\R6                  R*                  4P\" SR'                  5       SSS9\R6                  4PS\R6                  R*                  4PS\4PS\4PS \R8                  S!4PS"\" \\R<                  5      S#4PS$\R<                  S#4PS%\" \\R<                  5      S#4PS&\" \R@                  \\!5      4PS'\" \RD                  \\!5      4PS(\" \RF                  \\!5      4PS)\" \RH                  \\!5      4PS*\" \RH                  \\!5      4PS+\" \RH                  \\!5      4PS,\" \RJ                  \\!5      4PS-\RL                  RN                  4PS.\RL                  RP                  4PS/\RL                  RR                  4PS0\RL                  RR                  4PS1\RL                  RR                  4PS2\!4P\*" S35      PS4\RV                  4PS5\R,                  4PS6\RX                  S74PS8\RX                  S94PS:\" \!\\RZ                  5      S;4P\" \.S<S=9\" \!\RB                  5      4PS>\" \!\5      4PS?\4PS@\!4PSA\!4PSB\/4PSC\4PSD\" \RN                  \!\R`                  5      SE4\1" SE5      /SF\RN                  4SG\" \/\\RN                  \\/5      4\1" SE5      /SH\RX                  SI4SJ\RX                  SE4\*" SK5      /SL\RX                  SM4/SN\Rd                  4/\*" SO5      \*" SP5      /\*" SO5      SQ\R<                  4SR\R<                  4/\*" SO5      SQ\Rf                  4SR\Rf                  4/\*" SO5      SS\R<                  4ST\R<                  4SQ\R<                  4SU\R<                  4SV\R<                  SE4/SW\R8                  SE4/S6\RX                  SI4SX\RX                  SE4SY\4\*" SK5      /S8\RX                  SI4SZ\RX                  SE4\*" SK5      /S[\!SI4S\\!SE4\*" SK5      /S].r4\4Rk                  \" 5       5        S^r6g_)`r      z1
For Crystal source code.

.. versionadded:: 2.2
Crystalzhttp://crystal-lang.orgcrcrystalz*.crztext/x-crystalc              #   t  #    UR                  S5      nU[        UR                  S5      4v   UR                  S5      [        R                  UR                  S5      4v   UR                  S5      [        R
                  UR                  S5      4v   UR                  S5      [        R                  UR                  S5      4v   UR                  R                  S/ 5      n[        U5      (       + nUR                  UR                  S5      S:H  UR                  S5      45        UR                  S5      Ul
        UR                  S5      Ul        [        U5      S:  a  U R                  US	9 S h  vN   O.UR                  [        R                  UR                  S5      4v   UR                  5       Ul
        U(       Gao  U GHH  u  pg/ n[        R                  " UR                   UR                  5       H  nU(       a  UR                  5       R#                  5       n	OUR                  5       R%                  5       n	X:X  a  U H4  n
U
R                  5       [        R                  U
R                  5       4v   M6     UR                  5       [        R
                  UR                  5       4v   UR                  5       Ul
          GM  UR                  U5        M     U H*  n
U
R                  5       [&        U
R                  5       4v   M,     GMK     [        UR                   5      Ul        US S 2	 g g  GN7f)
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              *lib/third_party/pygments/lexers/crystal.pyheredoc_callback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 $--chh@E % 3 3 5 % 4 4 6&+F"(,,.&..&,,."PP ',#kkmV-=-=u{{}LL"'))+U+ A #($llneV\\^CC #(# %1& #((mCGQ-  @s   E2L84L55GL8c            
      V   0 n S[         R                  4[        [        SS9[         R                  4S[         R                  4S[         R                  4S[         R                  S4S[        [         R                  [        5      4S	[         R                  S
4S[         R                  S4/U S'   S[         R                  S	4S[         R                  S	4S[         R                  S44 H,  u  pn[        US:X  a  SOS5      SU-  U4SU4X2S4/U SU-   '   M.     S GH  u  pEpaSU-   [         R                  4/XE:g  U[         R                  S4/-  -   U[         R                  S4[        S5      SU-   S-   [         R                  4SU-   S-   [         R                  4/-   XS-   '   U S   R                  S U-   [         R                  US-   45        S!U-   S-   [         R                  4/XE:g  U[         R                  S4/-  -   U[         R                  S4SU-   S-   [         R                  4SU-   S-   [         R                  4/-   XS"-   '   U S   R                  S#U-   [         R                  US"-   45        S!U-   S-   [         R                  4/XE:g  U[         R                  S4/-  -   US$-   [         R                  S4[        S%5      SU-   S-   [         R                  4SU-   S-   [         R                  4/-   XS&-   '   U S   R                  S'U-   [         R                  US&-   45        GM     U $ )(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   Otherr5   Regex)statesnamettyper7   lbracerbracebraceccs          rG   gen_crystalstrings_rules%CrystalLexer.gen_crystalstrings_rulesY   sl   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!V$	&F9T>"!C, *FG .+!w/& +
 v.-.7"S(&,,7G#d*FLL9			+F&' 9$$fvov||&*>&9&; < G#c)6<<8&!w/& &
 v.7"S(&,,7G#d*FLL9	&F	>" 9$$i&&8&,,&*9n&6 7 G#c)6<<8%!w/& %
 )#V\\6:&7"S(&,,7G#d*FLL9			%F=! 9$$efnfll&*8m&5 6O,T     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(?<!\.))rL   rt   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::rN   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(\.|::)rK   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*[!?]?|\*\*?|[-+]@?|[/%&|^`~]|\[\]=?|<<|>>|<=?>|>=?|===?)rV   z	[A-Z_]\w*z(\()(\s*)([A-Z_]\w*)(\s*)(\))rW   ra   rX   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 ]+\})rc   rS   rU   z[^\\#]+z\\\\z\\/z[^\\/#]+z/[imsx]*z.+z%\}z(for|verbatim)\bz\}\}rZ   r[   )r   rx   ry   r   rc   rS   rT   zinterpolated-regexzinterpolated-stringr|   r{   r}   r~   r    N)7__name__
__module____qualname____firstlineno____doc__rl   urlaliases	filenames	mimetypesreDOTALL	MULTILINEflagsrH   rq   r	   Singler   splitr   PseudoConstantr   r   r   	NamespaceBuiltinPreprocr   rj   r   Octr
   HexBinFloatIntegerVariableClassInstanceGlobalr   rf   Interpol	Decoratorre   r   Functionr   Escaperi   tokensupdate__static_attributes__r   rs   rG   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*,-rs   )r   r   pygments.lexerr   r   r   r   r   r   pygments.tokenr	   r
   r   r   r   r   r   r   r   __all__re   r   r   rs   rG   <module>r      sI    
 # # # 
 R.% R.rs   