o
    ‡ÎÖa¡=  ã                   @   s„   d Z ddlZddl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mZ dgZe d¡Zg d¢ZG dd„ deƒZdS )	zÅ
    pygments.lexers.crystal
    ~~~~~~~~~~~~~~~~~~~~~~~

    Lexer for Crystal.

    :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
é    N)ÚExtendedRegexLexerÚincludeÚbygroupsÚdefaultÚwords)
ÚTextÚCommentÚOperatorÚKeywordÚNameÚStringÚNumberÚPunctuationÚErrorÚ
WhitespaceÚCrystalLexerz.*?
)z!=z!~ú!ú%z&&ú&z**Ú*ú+ú-ú/z<=>z<<z<=ú<z===z==z=~ú=z>=z>>ú>z[]=z[]?z[]ú^z||ú|ú~c                   @   s"  e Zd ZdZdZddgZdgZdgZej	ej
B Zdd„ Zd	d
„ Zg dejf‘ed ¡ dd�ef‘ed ¡ ddd�ejf‘dejf‘eg d¢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d�ejf‘dejjf‘ed ¡ 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<d=�eeejƒf‘d>eeeƒf‘d?ef‘d@ef‘dAef‘dBe-f‘dCef‘dDeej%eej.ƒdEfe/dEƒgdFej%fdGee-eej%ee-ƒfe/dEƒgdHej*dIfdJej*dEfe(dKƒgdLej*dMfgdNej0fge(dOƒe(dPƒge(dOƒdQejfdRejfge(dOƒdQej1fdRej1f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]œZ2e2 3eƒ ¡ d^S )_r   zZ
    For `Crystal <http://crystal-lang.org>`_ source code.

    .. versionadded:: 2.2
    ÚCrystalÚcrÚcrystalz*.crztext/x-crystalc                 c   sÖ  � |  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 rm| j|d	�E d H  n|j
tj| d¡fV  | ¡ |_
|ré|D ]Z\}}g }t |j|j
¡D ]<}|rš| ¡  ¡ }	n| ¡  ¡ }	|	|krÆ|D ]}
|
  ¡ tj|
 ¡ fV  q¦|  ¡ tj| ¡ fV  | ¡ |_
 n| 	|¡ q�|D ]}
|
  ¡ t|
 ¡ fV  qÎq�t|jƒ|_|d d …= d S d S )
Né   é   é   é   Úheredocstackz<<-é   éd   )Úcontext)Ústartr	   Úgroupr   ÚHeredocÚ	DelimiterÚ__dict__Ú
setdefaultÚboolÚappendÚposÚendÚlenÚget_tokens_unprocessedÚline_reÚfinditerÚtextÚstripÚrstripr   )ÚselfÚmatchÚctxr*   r&   Ú	outermostÚtolerantÚhdnameÚlinesÚcheckÚamatch© rD   ú9/usr/lib/python3/dist-packages/pygments/lexers/crystal.pyÚheredoc_callback+   sF   €



€êzCrystalLexer.heredoc_callbackc               
   C   s`  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< dt jd	fdt jd	fdt jdffD ] \}}}t	|dkrMdndƒd| |fd|f||dfg| d| < qAdD ]É\}}}}d| t j
fg||k|t j
dfg  |t j
dft	dƒd| d t j
fd| d t j
fg | |d < | d  d | t j
|d f¡ d!| d t j
fg||k|t j
dfg  |t j
dfd| d t j
fd| d t j
fg | |d" < | d  d#| t j
|d" f¡ d!| d t jfg||k|t jdfg  |d$ t jdft	d%ƒd| d t jfd| d t jfg | |d& < | d  d'| t j|d& f¡ qd| 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   ÚOtherr1   ÚRegex)ÚstatesÚnameÚttyper3   ÚlbraceÚrbraceÚbraceccrD   rD   rE   Úgen_crystalstrings_rulesZ   s„   


ö


þ
ü	ÿÿ
ÿþ
üü
ÿÿ
ÿþ
ýü
ÿÿ
ÿþüü
ÿz%CrystalLexer.gen_crystalstrings_rulesz#.*?$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(?<!\.))rH   rn   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::rJ   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(\.|::)rG   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*[!?]?|\*\*?|[-+]@?|[/%&|^`~]|\[\]=?|<<|>>|<=?>|>=?|===?)rR   z	[A-Z_]\w*z(\()(\s*)([A-Z_]\w*)(\s*)(\))rS   r]   rT   Ú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 ]+\})r_   rO   rQ   z[^\\#]+z\\\\z\\/z[^\\/#]+z/[imsx]*z.+z%\}z(for|verbatim)\bz\}\}rV   rW   )rz   rr   rs   r{   r_   rO   rP   zinterpolated-regexzinterpolated-stringrv   ru   rw   rx   ry   N)4Ú__name__Ú
__module__Ú__qualname__Ú__doc__rh   ÚaliasesÚ	filenamesÚ	mimetypesÚreÚDOTALLÚ	MULTILINEÚflagsrF   rm   r   ÚSingler   Úsplitr
   ÚPseudoÚConstantr   r   r   Ú	NamespaceÚBuiltinÚPreprocr   rf   r   ÚOctr	   ÚHexÚBinÚFloatÚIntegerÚVariableÚClassÚInstanceÚGlobalr   rb   ÚInterpolÚ	Decoratorra   r   ÚFunctionr   ÚEscapere   ÚtokensÚupdaterD   rD   rD   rE   r      s¾   /Iÿüüýýýøóòÿðÿîìÿëþþè
äýýâ#þÝ'ÿÙ*Ö
+Õ-éÓ
FºHÿ¸Rÿ®Tÿ¬VÿªZþ¦]þ£`þ cÿ�
fš
g™
h˜
i—
j–k•l”ný’rŽ
tŒ
u‹wÿ‰
{
ÿ…}ÿƒ  �ÿ ÿ �þ  �ü  �û  �ú 	ýûÿü

ý
ÿÿþþýý
ú
	ÿ

ü

ýý �¹ M)r   rƒ   Úpygments.lexerr   r   r   r   r   Úpygments.tokenr   r   r	   r
   r   r   r   r   r   r   Ú__all__Úcompiler6   ra   r   rD   rD   rD   rE   Ú<module>   s    
0
