o
    ‡ÎÖaŒX  ã                   @   s¾   d Z ddlZddlmZmZmZ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mZ ddlmZ g d¢Ze d¡ZdZG d	d
„ d
eƒZG dd„ deƒZG dd„ deƒZdS )zÓ
    pygments.lexers.ruby
    ~~~~~~~~~~~~~~~~~~~~

    Lexers for Ruby and related languages.

    :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
é    N)	ÚLexerÚ
RegexLexerÚExtendedRegexLexerÚincludeÚbygroupsÚdefaultÚLexerContextÚdo_insertionsÚwords)
ÚTextÚCommentÚOperatorÚKeywordÚNameÚStringÚNumberÚPunctuationÚErrorÚGeneric©Úshebang_matches)Ú	RubyLexerÚRubyConsoleLexerÚ
FancyLexerz.*?
)Ú*z**ú-ú+z-@z+@ú/ú%ú&ú|ú^ú`ú~z[]z[]=ú<<z>>ú<ú<>z<=>ú>z>=z==z===c                   @   s‚  e Zd ZdZdZg d¢Zg d¢ZddgZej	ej
B Zdd„ Zd	d
„ Zg dejf‘dejf‘dejf‘eddd�ef‘deeeejƒf‘deeeƒdf‘dedf‘deeeƒdf‘eddd�ejf‘dejf‘eddd�ejf‘de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j$j%f‘d-ej$j&f‘d.ej$j'f‘d/ej$j'f‘d0ej$j'f‘d1ef‘e(d2ƒ‘d3ej)f‘d4ej*f‘ee+d5d6�eeejƒf‘d7eeeƒf‘d8ef‘d9ef‘d:ef‘d;e,f‘d<ef‘d=e,d>fd?eej%eej-ƒd@fe.d@ƒgd=e,d>fdAed@fdBej%d@fe.d@ƒgdCee,eƒd@fd=edDfe(dEƒgdFej/dDfdGej/d@fe(dEƒgdHej/dIfdJej/fdKej/fge(dLƒdMej0fge(dLƒdNejfdOejfge(dLƒdNej1fdOej1fge(dLƒdPejfdQejfdNejfdRejfdSejd@fgdTejd@fgdUœZ2e2 3eƒ ¡ dVdW„ Z4dXS )Yr   z=
    For `Ruby <http://www.ruby-lang.org>`_ source code.
    ÚRuby)ÚrubyÚrbÚduby)	z*.rbz*.rbwÚRakefilez*.rakez	*.gemspecz*.rbxz*.dubyÚGemfileÚVagrantfileztext/x-rubyzapplication/x-rubyc                 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v | 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é   é   é   é   Úheredocstack)z<<-z<<~é   éd   ©Úcontext)Ústartr   Úgroupr   ÚHeredocÚ	DelimiterÚ__dict__Ú
setdefaultÚboolÚappendÚposÚendÚlenÚget_tokens_unprocessedÚline_reÚfinditerÚtextÚstripÚrstripr   )ÚselfÚmatchÚctxr8   r3   Ú	outermostÚtolerantÚhdnameÚlinesÚcheckÚamatch© rR   ú6/usr/lib/python3/dist-packages/pygments/lexers/ruby.pyÚheredoc_callback+   sF   €



€êzRubyLexer.heredoc_callbackc            	      C   sŽ  dd„ } dd„ }i }dt jfttd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dt jdfg|d< dt jdfdt jdfdt jdfdt jdffD ]\}}}t	dƒd| |fd|f||dfg|d| < qOd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||d$ < |d  d%| t j
|d$ f¡ d| d t j
f|t j
d f|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|t jd f|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¡ ql|d  d,| fd-t j
fd.|fd/ttt j
d ƒfd0ttt j
d ƒfd1|fg7  < |S )2Nc                 s   ó†   � |  d¡tj| d¡fV  t| d¡ddgƒ}| j|d�D ]\}}}|  d¡| ||fV  q|  d¡tj| d¡fV  | ¡ |_d S )Nr/   r1   r   úinterpolated-regexr6   r2   )r8   r   ÚRegexr9   r   rC   rA   r@   ©rI   rJ   rK   ÚnctxÚiÚtÚvrR   rR   rS   Úintp_regex_callback[   ó   €z<RubyLexer.gen_rubystrings_rules.<locals>.intp_regex_callbackc                 s   rU   )Nr/   r1   r   úinterpolated-stringr6   r2   )r8   r   ÚOtherr9   r   rC   rA   r@   rX   rR   rR   rS   Úintp_string_callbackc   r^   z=RubyLexer.gen_rubystrings_rules.<locals>.intp_string_callbackz\:@{0,2}[a-zA-Z_]\w*[!?]?z\:@{0,2}©Úprefixz:'(\\\\|\\[^\\]|[^'\\])*'z:"z
simple-symz([a-zA-Z_]\w*)(:)(?!:)ú"zsimple-string-doubleú'zsimple-string-singlez(?<!\.)`zsimple-backtickÚstringszstring-doublezstring-singleÚsymÚbacktickr"   ústring-intp-escapedz	[^\\%s#]+ú[\\#]ú#popzsimple-))ú\{ú\}z{}Úcb)z\[z\]z\[\]Úsb)ú\(z\)z()Úpa)r%   r'   r&   Úabz\\[\\ú]ú#pushz[\\#z[^\\#z]+z-intp-stringz%[QWx]?z-stringz%[qsw]z[mixounse]*ústring-intpz-regexz%rz-(%r([\W_]))((?:\\\2|(?!\2).)*)(\2[mixounse]*)z"%[qsw]([\W_])((?:\\\1|(?!\1).)*)\1z&(%[QWx]([\W_]))((?:\\\2|(?!\2).)*)(\2)z<(?<=[-+/*%=<>&!^|~,(])(\s*)(%([\t ])(?:(?:\\\3|(?!\3).)*)\3)z'^(\s*)(%([\t ])(?:(?:\\\3|(?!\3).)*)\3)z*(%([^a-zA-Z0-9\s]))((?:\\\2|(?!\2).)*)(\2))r   ÚSymbolr
   ÚRUBY_OPERATORSr   r   ÚDoubleÚSingleÚBacktickr   r`   r?   rW   r   )	r]   ra   ÚstatesÚnameÚttyperA   ÚlbraceÚrbraceÚbraceccrR   rR   rS   Úgen_rubystrings_rulesZ   s”   

ÿ


ö



ý
ü	ÿ

úÿ

ûÿ
úÿÿÿÿÿÿïzRubyLexer.gen_rubystrings_rulesz\A#!.+?$z#.*?$z=begin\s.*?\n=end.*?$)ÚBEGINÚENDÚaliasÚbeginÚbreakÚcasezdefined?ÚdoÚelseÚelsifrA   ÚensureÚforÚifÚinÚnextÚredoÚrescueÚraiseÚretryÚreturnÚsuperÚthenÚundefÚunlessÚuntilÚwhenÚwhileÚyieldú\b©Úsuffixz.(module)(\s+)([a-zA-Z_]\w*(?:::[a-zA-Z_]\w*)*)z
(def)(\s+)Úfuncnamezdef(?=[*%&^`~+-/\[<>=])z(class)(\s+)Ú	classname)Ú
initializeÚnewÚloopr   Úextendr’   Úattr_readerÚattr_writerÚattr_accessorÚattrÚcatchÚthrowÚprivateÚmodule_functionÚpublicÚ	protectedÚtrueÚfalseÚnilz(not|and|or)\b)ÚautoloadÚblock_givenÚconst_definedÚeqlÚequalÚfrozenr   Úinstance_ofÚis_aÚiteratorÚkind_ofÚmethod_definedr²   Úprivate_method_definedÚprotected_method_definedÚpublic_method_definedÚ
respond_toÚtaintedz\?z(chomp|chop|exit|gsub|sub)!)eÚArrayÚFloatÚIntegerr   Ú__id__Ú__send__ÚabortÚ	ancestorsÚat_exitr³   ÚbindingÚcallccÚcallerrª   ÚchompÚchopÚ
class_evalÚclass_variablesÚclonezconst_defined?Ú	const_getÚconst_missingÚ	const_setÚ	constantsÚdisplayÚdupÚevalÚexecÚexitr¥   ÚfailÚforkÚformatÚfreezeÚgetcÚgetsÚglobal_variablesÚgsubÚhashÚidÚincluded_modulesÚinspectÚinstance_evalÚinstance_methodÚinstance_methodsÚinstance_variable_getÚinstance_variable_setÚinstance_variablesÚlambdaÚloadÚlocal_variablesr¤   ÚmethodÚmethod_missingÚmethodsÚmodule_evalr|   Ú	object_idÚopenÚpÚprintÚprintfÚprivate_class_methodÚprivate_instance_methodsÚprivate_methodsÚprocÚprotected_instance_methodsÚprotected_methodsÚpublic_class_methodÚpublic_instance_methodsÚpublic_methodsÚputcÚputsr’   ÚrandÚreadlineÚ	readlinesÚrequireÚscanÚselectrI   ÚsendÚset_trace_funcÚsingleton_methodsÚsleepÚsplitÚsprintfÚsrandÚsubÚsyscallÚsystemÚtaintÚtestr«   Úto_aÚto_sÚ	trace_varÚtrapÚuntaintÚuntrace_varÚwarnz(?<!\.))rc   rŸ   z__(FILE|LINE)__\bz2(?<!\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=])z#(0_?[0-7]+(?:_[0-7]+)*)(\s*)([/?])?z.(0x[0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*)(\s*)([/?])?z (0b[01]+(?:_[01]+)*)(\s*)([/?])?ú([\d]+(?:_\d+)*)(\s*)([/?])?ú@@[a-zA-Z_]\w*ú@[a-zA-Z_]\w*z\$\w+z\$[!@&`\'+~=/\\,;.<>_*$?:"^-]z\$-[0adFiIlpvw]z::rf   zI\?(\\[MC]-)*(\\([\\abefnrstv#"\']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})|\S)(?!\w)z[A-Z]\w+z(\.|::)rb   z,(\.|::)([a-zA-Z_]\w*[!?]?|[*%&^`~+\-/\[<>=])z[a-zA-Z_]\w*[!?]?z:(\[|\]|\*\*|<<?|>>?|>=|<=|<=>|=~|={3}|!~|&&?|\|\||\.{1,3})z[-+/*%=<>&!^|~]=?z[(){};,/?:\\]ú\s+rp   ÚdefexprzŽ(?:([a-zA-Z_]\w*)(\.))?([a-zA-Z\u0080-\uffff][a-zA-Z0-9_\u0080-\uffff]*[!?=]?|!=|!~|=~|\*\*?|[-+!~]@?|[/%&|^]|<=>|<[<=]?|>[>=]?|===?|\[\]=?|`)rk   r$   z	[A-Z_]\w*z(\))(\.|::)?rt   Úrootrl   rm   z#\{úin-intpz#@@?[a-zA-Z_]\w*z#\$[a-zA-Z_]\w*ru   z2\\([\\abefnrstv#"\']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})rj   z[^\\#]+z\\\\z\\/z[^\\/#]+z/[mixounse]*z.+)r&  r    r¡   r%  r'  ru   ri   rV   r_   r   r  c                 C   s
   t | dƒS )Nzruby(1\.\d)?r   )rF   rR   rR   rS   Úanalyse_textˆ  s   
zRubyLexer.analyse_textN)5Ú__name__Ú
__module__Ú__qualname__Ú__doc__r|   ÚaliasesÚ	filenamesÚ	mimetypesÚreÚDOTALLÚ	MULTILINEÚflagsrT   r�   r   ÚHashbangry   Ú	Multiliner
   r   r   r   r   Ú	NamespaceÚPseudor   ÚWordÚBuiltinÚPreprocr   rW   r   ÚOctÚHexÚBinrÅ   ÚVariableÚClassÚInstanceÚGlobalr   ÚCharÚConstantrw   r   ÚFunctionr   ÚInterpolÚEscaper`   ÚtokensÚupdater(  rR   rR   rR   rS   r      s~   /hÿþýüûûþôñðïüûíçüûæ à!ëêß
8È:ÿÆ=Ã
>Â@éÀ
Y§[ÿ¥eÿ›gÿ™iÿ—kÿ•
n’
o‘
p�
q�
rŽs�tŒvýŠz†
}
ÿƒÿ�  �þ ÿ �ý  �û  �ú  �ù 
ùö
üý

ý
ýÿþýý
ú
	ÿ �¾ Fr   c                   @   s4   e Zd ZdZdZddgZdgZe d¡Z	dd„ Z
d	S )
r   z¾
    For Ruby interactive console (**irb**) output like:

    .. sourcecode:: rbcon

        irb(main):001:0> a = 1
        => 1
        irb(main):002:0> puts a
        1
        => nil
    zRuby irb sessionÚrbconÚirbztext/x-ruby-shellsessionz.irb\([a-zA-Z_]\w*\):\d{3}:\d+[>*"\'] |>> |\?> c           	   	   c   sÚ   � t di | j¤Ž}d}g }t |¡D ]I}| ¡ }| j |¡}|d urA| ¡ }| t	|ƒdt
j|d |… fgf¡ |||d … 7 }q|rRt|| |¡ƒE d H  d}g }| ¡ t
j|fV  q|rkt|| |¡ƒE d H  d S d S )NÚ r   rR   )r   ÚoptionsrD   rE   r9   Ú
_prompt_rerJ   rA   r?   rB   r   ÚPromptr	   rC   r8   ÚOutput)	rI   rF   ÚrblexerÚcurcodeÚ
insertionsrJ   ÚlineÚmrA   rR   rR   rS   rC   Ÿ  s2   €
ÿ

ÿ
ÿÿz'RubyConsoleLexer.get_tokens_unprocessedN)r)  r*  r+  r,  r|   r-  r/  r0  ÚcompilerM  rC   rR   rR   rR   rS   r   Œ  s    
r   c                   @   sž  e Zd ZdZdZddgZddgZdgZdej	d	fd
ej	d	fdej	d	fdej	d	fdej	d	fdej	d	fdej	d	fdej	d	fdej	d	fdej	d	fg
de
fdej	dfdej	dfdej	dfdej	dfdej	fdej	dfdejfdejfdefdefdefd ejfd!efed"d#d$�ejfd%ejfd&efd'ejfd(ejjfd)ejjfd*efd+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d0ejfd1ejfgd2œZ d3S )4r   a  
    Pygments Lexer For `Fancy <http://www.fancy-lang.org/>`_.

    Fancy is a self-hosted, pure object-oriented, dynamic,
    class-based, concurrent general-purpose programming language
    running on Rubinius, the Ruby VM.

    .. versionadded:: 1.5
    ÚFancyz*.fyz*.fancypackÚfancyÚfyztext/x-fancysrcz"/(\\\\|\\[^\\]|[^/\\])*/[egimosx]*rk   z"!(\\\\|\\[^\\]|[^!\\])*![egimosx]*z\\(\\\\|[^\\])*\\[egimosx]*z$\{(\\\\|\\[^\\]|[^}\\])*\}[egimosx]*z"<(\\\\|\\[^\\]|[^>\\])*>[egimosx]*z%\[(\\\\|\\[^\\]|[^\]\\])*\][egimosx]*z$\((\\\\|\\[^\\]|[^)\\])*\)[egimosx]*z"@(\\\\|\\[^\\]|[^@\\])*@[egimosx]*z"%(\\\\|\\[^\\]|[^%\\])*%[egimosx]*z$\$(\\\\|\\[^\\]|[^$\\])*\$[egimosx]*r$  zs\{(\\\\|\\[^\\]|[^}\\])*\}\s*úbalanced-regexzs<(\\\\|\\[^\\]|[^>\\])*>\s*zs\[(\\\\|\\[^\\]|[^\]\\])*\]\s*zs\((\\\\|\\[^\\]|[^)\\])*\)\s*z&m?/(\\\\|\\[^\\]|[^///\n])*/[gcimosx]*zm(?=[/!\\{<\[(@%$])z#(.*?)\nz\'([^\'\s\[\](){}]+|\[\])z"""(\\\\|\\[^\\]|[^\\])*?"""z"(\\\\|\\[^\\]|[^"\\])*"zJ(def|class|try|catch|finally|retry|return|return_local|match|case|->|=>)\bz(self|super|nil|false|true)\bz[(){};,/?|:\\])ÚObjectrÃ   ÚHashÚ	DirectoryÚFiler?  r   r   Ú
EnumerableÚFancyEnumerableÚBlockÚ	TrueClassÚNilClassÚ
FalseClassÚTuplerv   ÚStackÚSetÚ	FancySpecÚMethodÚPackageÚRanger�   rž   z[a-zA-Z](\w|[-+?!=*/^><%])*:z[-+*/~,<>=&!?%^\[\].$]+z[A-Z]\w*r#  r"  z@@?z[a-zA-Z_]\w*z&(0[oO]?[0-7]+(?:_[0-7]+)*)(\s*)([/?])?z1(0[xX][0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*)(\s*)([/?])?z#(0[bB][01]+(?:_[01]+)*)(\s*)([/?])?r!  z/\d+([eE][+-]?[0-9]+)|\d+\.\d+([eE][+-]?[0-9]+)?z\d+)rY  r&  N)!r)  r*  r+  r,  r|   r.  r-  r/  r   rW   r   r   ry   rv   r   r   rC  r   r
   r9  rD  r   r>  r@  r?  r   r   r;  r<  r=  rÅ   rÄ   rG  rR   rR   rR   rS   r   ¸  sz    	









ö




ÿüû

ÿÿÿÿÌ
òr   ) r,  r0  Úpygments.lexerr   r   r   r   r   r   r   r	   r
   Úpygments.tokenr   r   r   r   r   r   r   r   r   r   Úpygments.utilr   Ú__all__rU  rD   rw   r   r   r   rR   rR   rR   rS   Ú<module>   s    
,0
  p,