3

V'íc÷Xã@s¾dZddlZddlmZmZmZmZmZmZm	Z	m
Z
mZmZddl
mZmZmZmZmZmZmZmZmZmZmZddlmZdddgZd$ZGd!d„deƒZGd"d„deƒZGd#d„deƒZdS)%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Úline_re)ÚTextÚCommentÚOperatorÚKeywordÚNameÚStringÚNumberÚPunctuationÚErrorÚGenericÚ
Whitespace)Úshebang_matchesÚ	RubyLexerÚRubyConsoleLexerÚ
FancyLexerÚ*ú**ú-ú+ú-@ú+@ú/ú%ú&ú|ú^ú`ú~ú[]ú[]=ú<<ú>>ú<ú<>ú<=>ú>ú>=ú==ú===cr@sJeZdZdZdZdZdddgZddd	d
ddd
ddg	ZddgZe	j
e	jBZdd„Z
dd„Zdejfdejfdejfedþd6d7efd8eeeejƒfd9eeeƒd:fd;ed:fd<eeeƒd=fedÿd6d7ejfdPejfeddad7ejfdbejfeddÂd6dÍejfdÄejjfdÅe
fdÆe
fdÇejdÈfdÉeeej ƒdÊfdËej dÊfdÌeeej ƒdÊfdÍee!j"eeƒfdÎee!j#eeƒfdÏee!j$eeƒfdÐee!j%eeƒfdÑej&j'fdÒej&j(fdÓej&j)fdÔej&j)fdÕej&j)fdÖefe*d׃dØej+fdÙej,fee-dÚdۍeeejƒfdÜeeeƒfdÝefdÞefdßefdàe.fdáefg(dâe.dãfdäeej'eej/ƒdåfe0dåƒgdâe.dãfdæedåfdçej'dåfe0dåƒgdèee.eƒdåfdâedéfe*dêƒgdëej1défdìej1dåfe*dêƒgdíej1dîfdïej1fdðej1fge*dñƒdòej2fge*dñƒdóej fdôej fge*dñƒdóej3fdôej3fge*dñƒdõej fdöej fdóej fd÷ej fdøej dåfgdùejdåfgdúœZ4e4j5eƒƒdûdü„Z6dýS(rz
    For Ruby source code.
    ZRubyzhttp://www.ruby-lang.orgÚrubyÚrbZdubyz*.rbz*.rbwZRakefilez*.rakez	*.gemspecz*.rbxz*.dubyZGemfileZVagrantfileztext/x-rubyzapplication/x-rubyccsî|jdƒ}|t|jdƒfV|jdƒtj|jdƒfV|jdƒtj|jdƒfV|jdƒtj|jdƒfV|jjdgƒ}t|ƒ}|j	|jdƒdk|jdƒfƒ|jdƒ|_
|jdƒ|_t|ƒd	krØ|j
|d
EdHn|j
tj|jdƒfV|jƒ|_
|rêxÔ|D]Ì\}}g}x¼tj|j|j
ƒD]„}|r:|jƒjƒ}	n|jƒjƒ}	|	|kršx$|D]}
|
jƒtj|
jƒfVqVW|jƒtj|jƒfV|jƒ|_
Pn
|j	|ƒq"Wx"|D]}
|
jƒt|
jƒfVq°WqWt|jƒ|_|dd…=dS)NééééÚheredocstackú<<-ú<<~ééd)Úcontext)r:r;)ÚstartrÚgrouprZHeredocZ	DelimiterÚ__dict__Ú
setdefaultÚboolÚappendÚposÚendÚlenÚget_tokens_unprocessedrÚfinditerÚtextÚstripÚrstripr)ÚselfÚmatchÚctxr?r9Z	outermostZtolerantZhdnameÚlinesÚcheckZamatch©rRú8/tmp/pip-build-gk9425m9/Pygments/pygments/lexers/ruby.pyÚheredoc_callback*s@






 zRubyLexer.heredoc_callbackc	Csœdd„}dd„}i}dtjfttddtjfdtjfd	tjd
fdttjtƒfdtjd
fdtjdfdtjdfg|d<xddtjdfdtjdfdtjdfdtjdffD]4\}}}t	dƒd||fd|f||dfg|d|<q WxrdED]h\}}}}d-|d.tj
f|tj
d/f|tj
dft	dƒd0|d.tj
fd1|d2tj
fg||d3<|djd4|tj
|d3fƒd-|d.tj
f|tj
d/f|tj
dfd0|d.tj
fd1|d2tj
fg||d5<|djd6|tj
|d5fƒd-|d.tjf|tjd/f|d7tjdft	d8ƒd0|d.tjfd1|d2tjfg||d9<|djd:|tj|d9fƒqàW|dd;|fd<tj
fd=|fd>tt
tj
dƒfd?tt
tj
dƒfd@|fg7<|S)FNcssˆ|jdƒtj|jdƒfVt|jdƒddgƒ}x0|j|dD] \}}}|jdƒ|||fVq<W|jdƒtj|jdƒfV|jƒ|_dS)Nr5r7rzinterpolated-regex)r>r8)r?rÚRegexr@rrHrFrE)rMrNrOÚnctxÚiÚtÚvrRrRrSÚintp_regex_callbackZsz<RubyLexer.gen_rubystrings_rules.<locals>.intp_regex_callbackcssˆ|jdƒtj|jdƒfVt|jdƒddgƒ}x0|j|dD] \}}}|jdƒ|||fVq<W|jdƒtj|jdƒfV|jƒ|_dS)Nr5r7rzinterpolated-string)r>r8)r?rÚOtherr@rrHrFrE)rMrNrOrVrWrXrYrRrRrSÚintp_string_callbackbs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*)(:)(?!:)ú"zsimple-string-doubleú'zsimple-string-singlez(?<!\.)`zsimple-backtickÚstringsz
string-doublez
string-singleÚsymZbacktickr&zstring-intp-escapedz	[^\\%s#]+z[\\#]z#popzsimple-ú\{ú\}ú{}Úcbú\[ú\]ú\[\]Úsbú\(ú\)ú()Úpar,r/ú<>Úabz\\[\\ú]z#pushz[\\#z[^\\#z]+z-intp-stringz%[QWx]?z-stringz%[qsw]z[mixounse]*zstring-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)©rbrcrdre©rfrgrhri©rjrkrlrm©r,r/rnro)rqrrrsrt)rÚSymbolr
ÚRUBY_OPERATORSrrÚDoubleÚSingleZBacktickrr[rDrUr)	rZr\ZstatesÚnameZttyperFZlbraceZrbraceZbraceccrRrRrSÚgen_rubystrings_rulesYsz










zRubyLexer.gen_rubystrings_rulesz\A#!.+?$z#.*?$z=begin\s.*?\n=end.*?$ÚBEGINÚENDÚaliasÚbeginÚbreakÚcaseúdefined?ÚdoÚelseÚelsifrFÚensureÚforÚifÚinÚnextÚredoÚrescueÚraiseÚretryÚreturnÚsuperÚthenÚundefÚunlessÚuntilÚwhenÚwhileÚyieldz\b)Úsuffixz.(module)(\s+)([a-zA-Z_]\w*(?:::[a-zA-Z_]\w*)*)z
(def)(\s+)Úfuncnamezdef(?=[*%&^`~+-/\[<>=])z(class)(\s+)Ú	classnameÚ
initializeÚnewÚlooprÚextendÚ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ÚfrozenÚinstance_ofÚis_aÚiteratorÚkind_ofÚmethod_definedÚprivate_method_definedÚprotected_method_definedÚpublic_method_definedÚ
respond_toÚtaintedz\?z(chomp|chop|exit|gsub|sub)!ÚArrayÚFloatÚIntegerrÚ__id__Ú__send__ÚabortÚ	ancestorsÚat_exitÚbindingÚcallccÚcallerÚchompÚchopÚ
class_evalÚclass_variablesÚcloneúconst_defined?Ú	const_getÚ
const_missingÚ	const_setÚ	constantsÚdisplayÚdupÚevalÚexecÚexitÚ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_variablesÚmethodÚmethod_missingÚmethodsÚmodule_evalryÚ	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ÚputsÚrandÚreadlineÚ	readlinesÚrequireÚscanÚselectrMÚsendÚset_trace_funcÚsingleton_methodsÚsleepÚsplitÚsprintfÚsrandÚsubÚsyscallÚsystemÚtaintÚtestÚto_aÚto_sÚ	trace_varÚtrapÚuntaintÚuntrace_varÚwarnz(?<!\.))r]r—z__(FILE|LINE)__\bz2(?<!\w)(<<[-~]?)(["`\']?)([a-zA-Z_]\w*)(\2)(.*?\n)z(<<[-~]?)("|\')()(\2)(.*?\n)Z__END__zend-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*)(/)zmultiline-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::r`zI\?(\\[MC]-)*(\\([\\abefnrstv#"\']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})|\S)(?!\w)z[A-Z]\w+z(\.|::))r]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#\{zin-intpz#@@?[a-zA-Z_]\w*z#\$[a-zA-Z_]\w*zstring-intpz2\\([\\abefnrstv#"\']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})z[\\#]z[^\\#]+z\\\\z\\/z[^\\/#]+z/[mixounse]*z.+)rr˜r™rzin-intpzstring-intpzstring-intp-escapedzinterpolated-regexzinterpolated-stringzmultiline-regexzend-partcCs
t|dƒS)Nzruby(1\.\d)?)r)rJrRrRrSÚanalyse_text‡szRubyLexer.analyse_textN)r{r|r}r~rr€rr‚rƒr„rFr…r†r‡rˆr‰rŠr‹rŒrrŽrrr‘r’r“r”r•r–)ršr›rœrrrŒržrŸr r¡r¢r£r¤r¥r¦r§r¨r©rª)r«r¬r­r®r¯r°rr±r²r³r´rµrªr¶r·r¸r¹rº)er»r¼r½rr¾r¿rÀrÁrÂr«rÃrÄrÅr¢rÆrÇrÈrÉrÊrËrÌrÍrÎrÏrÐrÑrÒrÓrÔrrÕrÖr×rØrÙrÚrÛrÜrÝrÞrßràrárârãrärårærçrèrérœrêrërìríryrîrïrðrñròrórôrõrör÷rørùrúrûrürýrŒrþrÿrrrrrMrrrrrr	r
rrr
rrr£rrrrrrr)7Ú__name__Ú
__module__Ú__qualname__Ú__doc__ryÚurlÚaliasesÚ	filenamesÚ	mimetypesÚreÚDOTALLÚ	MULTILINEÚflagsrTrzr
ZHashbangrxZ	Multiliner
rrrrÚ	NamespaceZPseudorÚWordÚBuiltinZPreprocrrrUrÚOctÚHexÚBinr½ÚVariableÚClassÚInstanceÚGlobalrZCharÚConstantrvrÚFunctionrZInterpolZEscaper[ÚtokensÚupdaterrRrRrRrSrs

/i



	













c@s4eZdZdZdZddgZdgZejdƒZ	dd„Z
d	S)
rz¾
    For Ruby interactive console (**irb**) output like:

    .. sourcecode:: rbcon

        irb(main):001:0> a = 1
        => 1
        irb(main):002:0> puts a
        1
        => nil
    zRuby irb sessionZrbconZirbztext/x-ruby-shellsessionz.irb\([a-zA-Z_]\w*\):\d{3}:\d+[>*"\'] |>> |\?> c	csÔtf|jŽ}d}g}x tj|ƒD]’}|jƒ}|jj|ƒ}|dk	r~|jƒ}|jt	|ƒdt
j|d|…fgfƒ|||d…7}q |r t||j
|ƒƒEdHd}g}|jƒt
j|fVq W|rÐt||j
|ƒƒEdHdS)NÚr)rÚoptionsrrIr@Ú
_prompt_rerNrFrDrGrZPromptr	rHr?ZOutput)	rMrJZrblexerZcurcodeZ
insertionsrNÚlineÚmrFrRrRrSrHžs(
z'RubyConsoleLexer.get_tokens_unprocessedN)rrrrryrr!r"Úcompiler6rHrRrRrRrSr‹s
c&@s¢eZdZdZdZdZddgZddgZdgZd	e	j
d
fde	j
d
fde	j
d
fd
e	j
d
fde	j
d
fde	j
d
fde	j
d
fde	j
d
fde	j
d
fde	j
d
fg
defde	j
dfde	j
dfde	j
dfde	j
dfde	j
fde	j
dfdej
fde	jfde	fde	fd efd!ejfd"efedJd9d:ejfd;ejfd<efd=ejfd>ejjfd?ejjfd@efdAefdBeejeeƒfdCeejeeƒfdDeejeeƒfdEeejeeƒfdFej fdGejfgdHœZ!dIS)Krzá
    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
    ZFancyz!https://github.com/bakkdoor/fancyz*.fyz*.fancypackZfancyZfyztext/x-fancysrcz"/(\\\\|\\[^\\]|[^/\\])*/[egimosx]*z#popz"!(\\\\|\\[^\\]|[^!\\])*![egimosx]*z\\(\\\\|[^\\])*\\[egimosx]*z$\{(\\\\|\\[^\\]|[^}\\])*\}[egimosx]*z"<(\\\\|\\[^\\]|[^>\\])*>[egimosx]*z%\[(\\\\|\\[^\\]|[^\]\\])*\][egimosx]*z$\((\\\\|\\[^\\]|[^)\\])*\)[egimosx]*z"@(\\\\|\\[^\\]|[^@\\])*@[egimosx]*z"%(\\\\|\\[^\\]|[^%\\])*%[egimosx]*z$\$(\\\\|\\[^\\]|[^$\\])*\$[egimosx]*z\s+zs\{(\\\\|\\[^\\]|[^}\\])*\}\s*zbalanced-regexzs<(\\\\|\\[^\\]|[^>\\])*>\s*zs\[(\\\\|\\[^\\]|[^\]\\])*\]\s*zs\((\\\\|\\[^\\]|[^)\\])*\)\s*z&m?/(\\\\|\\[^\\]|[^///\n])*/[gcimosx]*zm(?=[/!\\{<\[(@%$])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-rrÚ
EnumerableÚFancyEnumerableÚBlockÚ	TrueClassÚNilClassÚ
FalseClassÚTupleruÚStackÚSetÚ	FancySpecÚMethodÚPackageÚRangez\b)r—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+)zbalanced-regexrN)r:r»r;r<r=r-rrr>r?r@rArBrCrDrurErFrGrHrIrJ)"rrrrryrr rr!rrUrr
rxrurrr0rr
r(r1rr,r.r-rrr)r*r+r½r¼r2rRrRrRrSr·sl	















)rrrrrr r!r"r#r$r%r&r'r(r)r*r+r,r-r.r/r0r1r2) rr"Zpygments.lexerrrrrrrrr	r
rZpygments.tokenrr
rrrrrrrrrZ
pygments.utilrÚ__all__rvrrrrRrRrRrSÚ<module>	s04
q,