B
    ¿Âûb¡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 dddg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-2022 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>=z==z===c            )   @   sF  e Zd ZdZdZdZdddgZddd	d
dddddg	ZddgZe	j
e	jB Zdd„ Zdd„ Z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ƒd0fd1ejd0fd2eeejƒd0fd3ee j!eeƒfd4ee j"eeƒfd5ee j#eeƒfd6ee j$eeƒfd7ej%j&fd8ej%j'fd9ej%j(fd:ej%j(fd;ej%j(fd<efe)d=ƒd>ej*fd?ej+fee,d@dAeeejƒfdBeeeƒfdCefdDefdEefdFe-fdGefg(dHe-dIfdJeej&eej.ƒdKfe/dKƒgdHe-dIfdLedKfdMej&dKfe/dKƒgdNee-eƒdKfdHedOfe)dPƒgdQej0dOfdRej0dKfe)dPƒgdSej0dTfdUej0fdVej0fge)dWƒdXej1fge)dWƒdYejfdZejfge)dWƒdYej2fdZej2fge)dWƒd[ejfd\ejfdYejfd]ejfd^ejdKfgd_ejdKfgd`œZ3e3 4eƒ ¡ dadb„ Z5dcS )dr   z
    For Ruby source code.
    ZRubyzhttp://www.ruby-lang.orgZrubyÚrbZdubyz*.rbz*.rbwZRakefilez*.rakez	*.gemspecz*.rbxz*.dubyZGemfileZ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k| d¡f¡ |  d¡|_
| d¡|_t|ƒdk rØ| j|d	E d H  n|j
tj| d¡fV  | ¡ |_
|rêxÔ|D ]Ì\}}g }x¼t |j|j
¡D ]„}|r:| ¡  ¡ }	n| ¡  ¡ }	|	|kršx$|D ]}
|
  ¡ tj|
 ¡ fV  qVW |  ¡ tj| ¡ fV  | ¡ |_
P n
| 	|¡ q"W x"|D ]}
|
  ¡ t|
 ¡ fV  q°W qW t|jƒ|_|d d …= d S )
Né   é   é   é   Úheredocstack)z<<-z<<~é   éd   )Úcontext)Ústartr   Úgroupr   ZHeredocZ	DelimiterÚ__dict__Ú
setdefaultÚboolÚappendÚposÚendÚlenÚget_tokens_unprocessedÚline_reÚfinditerÚtextÚstripÚrstripr   )ÚselfÚmatchÚctxr.   r*   Z	outermostZtolerantZhdnameÚlinesZcheckZamatch© rA   ú3lib/python3.7/site-packages/pygments/lexers/ruby.pyÚheredoc_callback,   s@    






 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< xddt jdfdt jdfdt jdfdt jdffD ]4\}}}t	dƒd| |fd|f||dfg|d| < q W xpdD ]f\}}}}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¡ qàW |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   sˆ   |  d¡tj| d¡fV  t| d¡ddgƒ}x0| j|dD ] \}}}|  d¡| ||fV  q<W |  d¡tj| d¡fV  | ¡ |_d S )Nr&   r(   r   zinterpolated-regex)r-   r)   )r.   r   ÚRegexr/   r   r7   r5   r4   )r=   r>   r?   ÚnctxÚiÚtÚvrA   rA   rB   Úintp_regex_callback\   s    z<RubyLexer.gen_rubystrings_rules.<locals>.intp_regex_callbackc             s   sˆ   |  d¡tj| d¡fV  t| d¡ddgƒ}x0| j|dD ] \}}}|  d¡| ||fV  q<W |  d¡tj| d¡fV  | ¡ |_d S )Nr&   r(   r   zinterpolated-string)r-   r)   )r.   r   ÚOtherr/   r   r7   r5   r4   )r=   r>   r?   rE   rF   rG   rH   rA   rA   rB   Úintp_string_callbackd   s    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-singleZsymZbacktickr!   zstring-intp-escapedz	[^\\%s#]+z[\\#]z#popzsimple-))z\{z\}z{}Úcb)z\[z\]z\[\]Zsb)z\(z\)z()Úpa)r#   r$   z<>Zabz\\[\\ú]z#pushz[\\#z[^\\#z]+z-intp-stringz%[QWx]?z-stringz%[qsw]z[mixounse]*z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ÚSingleZBacktickr   rJ   r3   rD   r   )	rI   rK   ZstatesÚnameZttyper5   ZlbraceZrbraceZbraceccrA   rA   rB   Úgen_rubystrings_rules[   st    










zRubyLexer.gen_rubystrings_rulesz\A#!.+?$z#.*?$z=begin\s.*?\n=end.*?$)ZBEGINZENDÚaliasZbeginÚbreakZcasezdefined?ZdoÚelseZelsifr5   ZensureÚforÚifÚinÚnextZredoZrescueÚraiseZretryÚreturnÚsuperZthenZundefZunlessZuntilZwhenÚwhileÚyieldz\b)Úsuffixz.(module)(\s+)([a-zA-Z_]\w*(?:::[a-zA-Z_]\w*)*)z
(def)(\s+)Úfuncnamezdef(?=[*%&^`~+-/\[<>=])z(class)(\s+)Ú	classname)Z
initializeÚnewÚloopr   Úextendr`   Zattr_readerZattr_writerZattr_accessorÚattrÚcatchÚthrowZprivateZmodule_functionZpublicZ	protectedÚtrueZfalseÚnilz(not|and|or)\b)ÚautoloadZblock_givenZconst_definedZeqlZequalÚfrozenr   Zinstance_ofZis_aÚiteratorZkind_ofZmethod_definedro   Zprivate_method_definedZprotected_method_definedZpublic_method_definedZ
respond_toZtaintedz\?z(chomp|chop|exit|gsub|sub)!)eÚArrayÚFloatÚIntegerr   Z__id__Z__send__ÚabortZ	ancestorsZat_exitrp   ZbindingZcallccZcallerrl   ZchompZchopZ
class_evalZclass_variablesZclonezconst_defined?Z	const_getZconst_missingZ	const_setZ	constantsZdisplayÚdupÚevalÚexecÚexitrj   ZfailÚforkÚformatZfreezeZgetcZgetsZglobal_variablesZgsubÚhashÚidZincluded_modulesÚinspectZinstance_evalZinstance_methodZinstance_methodsZinstance_variable_getZinstance_variable_setZinstance_variablesÚlambdaÚloadZlocal_variablesri   ÚmethodZmethod_missingÚmethodsZmodule_evalrW   Z	object_idÚopenÚpÚprintZprintfZprivate_class_methodZprivate_instance_methodsZprivate_methodsÚprocZprotected_instance_methodsZprotected_methodsZpublic_class_methodZpublic_instance_methodsZpublic_methodsZputcZputsr`   ZrandÚreadlineÚ	readlinesZrequireÚscanZselectr=   ÚsendZset_trace_funcZsingleton_methodsZsleepÚsplitZsprintfZsrandÚsubZsyscallÚsystemZtaintZtestrm   Zto_aZto_sZ	trace_varZtrapZuntaintZuntrace_varÚwarnz(?<!\.))rL   re   z__(FILE|LINE)__\bz2(?<!\w)(<<[-~]?)(["`\']?)([a-zA-Z_]\w*)(\2)(.*?\n)z(<<[-~]?)("|\')()(\2)(.*?\n)Z__END__z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*)(/)z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*)([/?])?z([\d]+(?:_\d+)*)(\s*)([/?])?z@@[a-zA-Z_]\w*z@[a-zA-Z_]\w*z\$\w+z\$[!@&`\'+~=/\\,;.<>_*$?:"^-]z\$-[0adFiIlpvw]z::rO   zI\?(\\[MC]-)*(\\([\\abefnrstv#"\']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})|\S)(?!\w)z[A-Z]\w+z(\.|::))rL   z,(\.|::)([a-zA-Z_]\w*[!?]?|[*%&^`~+\-/\[<>=])z[a-zA-Z_]\w*[!?]?z:(\[|\]|\*\*|<<?|>>?|>=|<=|<=>|=~|={3}|!~|&&?|\|\||\.{1,3})z[-+/*%=<>&!^|~]=?z[(){};,/?:\\]z\s+z\(ÚdefexprzŽ(?:([a-zA-Z_]\w*)(\.))?([a-zA-Z\u0080-\uffff][a-zA-Z0-9_\u0080-\uffff]*[!?=]?|!=|!~|=~|\*\*?|[-+!~]@?|[/%&|^]|<=>|<[<=]?|>[>=]?|===?|\[\]=?|`)z#popz<<z	[A-Z_]\w*z(\))(\.|::)?z#pushÚrootz\{z\}z#\{zin-intpz#@@?[a-zA-Z_]\w*z#\$[a-zA-Z_]\w*zstring-intpz2\\([\\abefnrstv#"\']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})z[\\#]z[^\\#]+z\\\\z\\/z[^\\/#]+z/[mixounse]*z.+)r‘   rf   rg   r   zin-intpzstring-intpzstring-intp-escapedzinterpolated-regexzinterpolated-stringzmultiline-regexzend-partc             C   s
   t | dƒS )Nzruby(1\.\d)?)r   )r:   rA   rA   rB   Úanalyse_text‰  s    zRubyLexer.analyse_textN)6Ú__name__Ú
__module__Ú__qualname__Ú__doc__rW   ÚurlÚaliasesÚ	filenamesÚ	mimetypesÚreÚDOTALLÚ	MULTILINEÚflagsrC   rX   r   ZHashbangrV   Z	Multiliner
   r   r   r   r   Ú	NamespaceZPseudor   ZWordÚBuiltinZPreprocr   rD   r   ÚOctÚHexÚBinru   ÚVariableÚClassÚInstanceZGlobalr   ZCharÚConstantrT   r   ÚFunctionr   ZInterpolZEscaperJ   ÚtokensÚupdater’   rA   rA   rA   rB   r      sÚ   

/i


	













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 sessionZrbconZirbztext/x-ruby-shellsessionz.irb\([a-zA-Z_]\w*\):\d{3}:\d+[>*"\'] |>> |\?> c       	   	   c   sÔ   t f | jŽ}d}g }x t |¡D ]’}| ¡ }| j |¡}|d k	r~| ¡ }| t	|ƒdt
j|d |… fgf¡ |||d … 7 }q |r t|| |¡ƒE d H  d}g }| ¡ t
j|fV  q W |rÐt|| |¡ƒE d H  d S )NÚ r   )r   Úoptionsr8   r9   r/   Ú
_prompt_rer>   r5   r3   r6   r   ZPromptr	   r7   r.   ZOutput)	r=   r:   ZrblexerZcurcodeZ
insertionsr>   ÚlineÚmr5   rA   rA   rB   r7      s(    
z'RubyConsoleLexer.get_tokens_unprocessedN)r“   r”   r•   r–   rW   r˜   rš   r›   Úcompiler­   r7   rA   rA   rA   rB   r     s   
c               @   s¢  e Zd 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d0eejeeƒfd1ej fd2ejfgd3œZ!d4S )5r   zá
    Pygments Lexer For Fancy.

    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
    ZFancyz!https://github.com/bakkdoor/fancyz*.fyz*.fancypackZfancyZfyztext/x-fancysrcz"/(\\\\|\\[^\\]|[^/\\])*/[egimosx]*z#popz"!(\\\\|\\[^\\]|[^!\\])*![egimosx]*z\\(\\\\|[^\\])*\\[egimosx]*z$\{(\\\\|\\[^\\]|[^}\\])*\}[egimosx]*z"<(\\\\|\\[^\\]|[^>\\])*>[egimosx]*z%\[(\\\\|\\[^\\]|[^\]\\])*\][egimosx]*z$\((\\\\|\\[^\\]|[^)\\])*\)[egimosx]*z"@(\\\\|\\[^\\]|[^@\\])*@[egimosx]*z"%(\\\\|\\[^\\]|[^%\\])*%[egimosx]*z$\$(\\\\|\\[^\\]|[^$\\])*\$[egimosx]*z\s+zs\{(\\\\|\\[^\\]|[^}\\])*\}\s*z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[(){};,/?|:\\])ZObjectrs   ZHashZ	DirectoryZFiler¥   r   r   Z
EnumerableZFancyEnumerableZBlockZ	TrueClassZNilClassZ
FalseClassZTuplerS   ZStackÚSetZ	FancySpecZMethodZPackageZRangez\b)re   z[a-zA-Z](\w|[-+?!=*/^><%])*:z[-+*/~,<>=&!?%^\[\].$]+z[A-Z]\w*z@[a-zA-Z_]\w*z@@[a-zA-Z_]\w*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*)([/?])?z([\d]+(?:_\d+)*)(\s*)([/?])?z/\d+([eE][+-]?[0-9]+)|\d+\.\d+([eE][+-]?[0-9]+)?z\d+)zbalanced-regexr‘   N)"r“   r”   r•   r–   rW   r—   r™   r˜   rš   r   rD   r   r   rV   rS   r   r   r§   r   r
   r    r¨   r   r¤   r¦   r¥   r   r   r¡   r¢   r£   ru   rt   r©   rA   rA   rA   rB   r   ¹  sh   	















) r–   r›   Zpygments.lexerr   r   r   r   r   r   r   r	   r
   Zpygments.tokenr   r   r   r   r   r   r   r   r   r   Zpygments.utilr   Ú__all__r°   r8   rT   r   r   r   rA   rA   rA   rB   Ú<module>	   s   ,0

  q,