
    X                         S r SSKrSSKJrJrJrJr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JrJr  SSKJr  / SQrSr " S S	\5      r " S
 S\5      r " S S\5      rg)z
pygments.lexers.ruby
~~~~~~~~~~~~~~~~~~~~

Lexers for Ruby and related languages.

:copyright: Copyright 2006-2023 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)*z**-+z-@z+@/%&|^`~z[]z[]=<<z>><<>z<=>>z>=z==z===c                      \ rS rSrSrSrSr/ SQr/ SQrSS/r	\
R                  \
R                  -  rS	 rS
 r/ S\R"                  4PS\R$                  4PS\R&                  4P\" SSS9\4PS\" \\\R2                  5      4PS\" \\5      S4PS\S4PS\" \\5      S4P\" SSS9\R4                  4PS\R8                  4P\" SSS9\R:                  4PS\R:                  4P\" SSSS9\R:                  4PS\R:                  R4                  4PS \4PS!\4PS"\R<                  S#4PS$\" \\ RB                  5      S%4PS&\ RB                  S%4PS'\" \\ RB                  5      S%4PS(\" \"RF                  \\5      4PS)\" \"RH                  \\5      4PS*\" \"RJ                  \\5      4PS+\" \"RL                  \\5      4PS,\RN                  RP                  4PS-\RN                  RR                  4PS.\RN                  RT                  4PS/\RN                  RT                  4PS0\RN                  RT                  4PS1\4P\+" S25      PS3\ RX                  4PS4\RZ                  4P\" \.S5S69\" \\R6                  5      4PS7\" \\5      4PS8\4PS9\4PS:\4PS;\/4PS<\4PS=\/S>4S?\" \RP                  \\R`                  5      S@4\1" S@5      /S=\/S>4SA\S@4SB\RP                  S@4\1" S@5      /SC\" \/\5      S@4S=\SD4\+" SE5      /SF\ Rd                  SD4SG\ Rd                  S@4\+" SE5      /SH\ Rd                  SI4SJ\ Rd                  4SK\ Rd                  4/\+" SL5      SM\ Rf                  4/\+" SL5      SN\ RB                  4SO\ RB                  4/\+" SL5      SN\ Rh                  4SO\ Rh                  4/\+" SL5      SP\ RB                  4SQ\ RB                  4SN\ RB                  4SR\ RB                  4SS\ RB                  S@4/ST\R<                  S@4/SU.r5\5Rm                  \" 5       5        SV r7SWr8gX)Yr      z
For Ruby source code.
Rubyzhttp://www.ruby-lang.org)rubyrbduby)	z*.rbz*.rbwRakefilez*.rakez	*.gemspecz*.rbxz*.dubyGemfileVagrantfileztext/x-rubyzapplication/x-rubyc              #   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;   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            heredocstack)z<<-z<<~   d   context)startr   groupr   Heredoc	Delimiter__dict__
setdefaultboolappendposendlenget_tokens_unprocessedr   finditertextstriprstripr   )selfmatchctxr>   r9   	outermosttoleranthdnamelinescheckamatchs              'lib/third_party/pygments/lexers/ruby.pyheredoc_callbackRubyLexer.heredoc_callback*   sT     AXu{{1~--kk!nfnnekk!n<<kk!nf..A>>kk!nfnnekk!n<<||..~rB\**	U[[^~=u{{1~NO++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                  
   S n S n0 nS[         R                  4[        [        SS9[         R                  4S[         R                  4S[         R                  S4S	[	        [         R                  [
        5      4S
[         R                  S4S[         R                  S4S[         R                  S4/US'   S[         R                  S
4S[         R                  S4S[         R                  S
4S[         R                  S44 H$  u  p4n[        S5      SU-  U4SU4XTS4/USU-   '   M&     S GH  u  pgpSU-   S-   [         R                  4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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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S==   S*U 4S+[         R                  4S,U4S-[	        [        [         R                  S 5      4S.[	        [        [         R                  S 5      4S/U4/-  ss'   U$ )0Nc              3     #    UR                  S5      [        R                  UR                  S5      4v   [	        UR                  S5      SS/5      nU R                  US9 H  u  pEnUR                  S5      U-   XV4v   M      UR                  S5      [        R                  UR                  S5      4v   UR                  5       Ul        g 7f)Nr5   r7   r   interpolated-regexr<   r8   )r>   r   Regexr?   r	   rI   rG   rF   rN   rO   rP   nctxitvs          rW   intp_regex_callback<RubyLexer.gen_rubystrings_rules.<locals>.intp_regex_callbackZ   s     ++a.&,,A>>A4H3IJD66t6Dakk!nQ&,, E++a.&,,A>>iikCG   CCc              3     #    UR                  S5      [        R                  UR                  S5      4v   [	        UR                  S5      SS/5      nU R                  US9 H  u  pEnUR                  S5      U-   XV4v   M      UR                  S5      [        R                  UR                  S5      4v   UR                  5       Ul        g 7f)Nr5   r7   r   interpolated-stringr<   r8   )r>   r   Otherr?   r	   rI   rG   rF   r^   s          rW   intp_string_callback=RubyLexer.gen_rubystrings_rules.<locals>.intp_string_callbackb   s     ++a.&,,A>>A4I3JKD66t6Dakk!nQ&,, E++a.&,,A>>iikCGre   z\:@{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   rh   rE   r]   r   )	rc   ri   statesnamettyperG   lbracerbracebraceccs	            rW   gen_rubystrings_rulesRubyLexer.gen_rubystrings_rulesY   s   	"	"  *6==9>+6F)6==9FMM<0&fmm[136=="896=="89&//+<=
y "1&-- E!0&-- E!&s ;!+V__c B!CD
 -.#U+5!V$	&F9T>"	!C' *FG G#c)6<<8w/v.-.7"S(&,,7G#d*FLL9+F&' 9$$j6&96<<&*>&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>&7"S(&,,7G#d*FLL9%F=! 9$$efnfll&*8m&5 6?'F 	y= " 3FLLA6!# Mj&,,57 8j&,,57 ;!##
 	
*     z\A#!.+?$z#.*?$z=begin\s.*?\n=end.*?$)BEGINENDaliasbeginbreakcasezdefined?doelseelsifrG   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selectrN   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(?<!\.))rl   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::ro   zI\?(\\[MC]-)*(\\([\\abefnrstv#"\']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})|\S)(?!\w)z[A-Z]\w+z(\.|::)rk   z,(\.|::)([a-zA-Z_]\w*[!?]?|[*%&^`~+\-/\[<>=])z[a-zA-Z_]\w*[!?]?z:(\[|\]|\*\*|<<?|>>?|>=|<=|<=>|=~|={3}|!~|&&?|\|\||\.{1,3})z[-+/*%=<>&!^|~]=?z[(){};,/?:\\]\s+ry   defexprz(?:([a-zA-Z_]\w*)(\.))?([a-zA-Z\u0080-\uffff][a-zA-Z0-9_\u0080-\uffff]*[!?=]?|!=|!~|=~|\*\*?|[-+!~]@?|[/%&|^]|<=>|<[<=]?|>[>=]?|===?|\[\]=?|`)rt   r'   z	[A-Z_]\w*z(\))(\.|::)?r}   rootru   rv   z#\{in-intpz#@@?[a-zA-Z_]\w*z#\$[a-zA-Z_]\w*r~   z2\\([\\abefnrstv#"\']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})rs   z[^\\#]+z\\\\z\\/z[^\\/#]+z/[mixounse]*z.+)r1  r   r   r0  r2  r~   rr   r\   rg   r+  r*  c                     [        U S5      $ )Nzruby(1\.\d)?r   )rK   s    rW   analyse_textRubyLexer.analyse_text  s    t_55r    N)9__name__
__module____qualname____firstlineno____doc__r   urlaliases	filenames	mimetypesreDOTALL	MULTILINEflagsrX   r   r   Hashbangr   	Multiliner   r   r   r   r   	NamespacePseudor   WordBuiltinPreprocr   r   r]   r   OctHexBinr   VariableClassInstanceGlobalr   CharConstantr   r   Functionr   InterpolEscaperh   tokensupdater4  __static_attributes__r6  r   rW   r   r      sf    D
$C$G>I 45III$E- ^ePG
'**+G
w~~&G
 &w'8'89G

  = FK	L
 G
%gz4>>:<G
 HWj9:FG
  (*=!G
" hw
;[I#G
&  R 	
 ^^'G
2 .3G
4  B KP	Q
 \\5G
@ ,T\\:AG
B  '* 0:%+I, \\-CG
p "4<<#6#67qG
t CuG
z -.>?{G
| *5}G
@. $D&,,79J/LAG
r v||->?sG
v "8J#E wG
J 4fjj*h79KG
N ?fjj*h79OG
R 1fjj*h79SG
V -fnnj(;=WG
\  3 34]G
^ t}}556_G
` t}}++,aG
b .t}}/C/CDcG
d  !5!56eG
f HgG
h IiG
l [[mG
t $--(uG
z >*5h.0{G
~ =h%'G
B "4(CG
D%&.0EG
H "8,IG
J {+KG
L Z MG
R K+ djj(DMM:FD FO
 K+Hf%4::v.FO	
 h{H=vFHg&FO
 FOOW-FOOV,FO
 V__i0 &//21
 M"B]] 
 M"v||$&
 M"v||$& 
 M"fll#V\\"v||$&,,'fllF3
 GOOV,
CDFJ MM')*6r   r   c                   X    \ rS rSrSrSrSS/rS/rSr\	R                  " S5      rS	 rS
rg)r   i  z0
For Ruby interactive console (**irb**) output.
zRuby irb sessionrbconirbztext/x-ruby-shellsessionzrbcon/consolez.irb\([a-zA-Z_]\w*\):\d{3}:\d+[>*"\'] |>> |\?> c           	   #   d  #    [        S0 U R                  D6nSn/ n[        R                  " U5       H  nUR	                  5       nU R
                  R                  U5      nUbJ  UR                  5       nUR                  [        U5      S[        R                  US U 4/45        X6US  -  nM{  U(       a&  [        XBR                  U5      5       S h  vN   Sn/ nUR                  5       [        R                  U4v   M     U(       a#  [        XBR                  U5      5       S h  vN   g g  NZ N7f)N r   r6  )r   optionsr   rJ   r?   
_prompt_rerO   rG   rE   rH   r   Promptr
   rI   r>   Output)	rN   rK   rblexercurcode
insertionsrO   linemrG   s	            rW   rI   'RubyConsoleLexer.get_tokens_unprocessed  s$    +dll+
%%d+E;;=D%%d+A}eeg!!3w<%&Tc
$C#D#F G:%,"$B$B7$K M M M G!#JkkmW^^T99 , $::7CE E E MEs%   CD0D,AD0%D.&D0.D0r6  N)r7  r8  r9  r:  r;  r   r=  r?  _exampler@  compiler`  rI   rY  r6  r   rW   r   r     s>     DG+,IH ) *JEr   r   c                       \ rS rSrSrSrSrSS/rSS/rS	/r	S
\
R                  S4S\
R                  S4S\
R                  S4S\
R                  S4S\
R                  S4S\
R                  S4S\
R                  S4S\
R                  S4S\
R                  S4S\
R                  S4/
S\4S\
R                  S4S\
R                  S4S\
R                  S4S\
R                  S4S\
R                  4S\
R                  S4S\R                  4S\
R                  4S\
4S \
4S!\4S"\R$                  4S#\4\" S$S%S&9\R*                  4S'\R,                  4S(\4S)\R$                  4S*\R0                  R2                  4S+\R0                  R4                  4S,\4S-\4S.\" \R:                  \\5      4S/\" \R<                  \\5      4S0\" \R>                  \\5      4S1\" \R@                  \\5      4S2\RB                  4S3\R@                  4/S4.r"S5r#g6)7r   i  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
Fancyz!https://github.com/bakkdoor/fancyz*.fyz*.fancypackfancyfyztext/x-fancysrcz"/(\\\\|\\[^\\]|[^/\\])*/[egimosx]*rt   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FilerO  r   r   
EnumerableFancyEnumerableBlock	TrueClassNilClass
FalseClassTupler   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+)ro  r1  r6  N)$r7  r8  r9  r:  r;  r   r<  r>  r=  r?  r   r]   r   r   r   r   r   r   rS  r   r   rI  rT  r   rN  rP  rO  r   r   rK  rL  rM  r   r   rW  rY  r6  r   rW   r   r     sr    D
-C'IoG"#I
 3FLL&I2FLL&I+V\\6B4fllFK2FLL&I5v||VL4fllFK2FLL&I2FLL&I4fllFK
 Z  />NO,fll<LM/?OP.>NO6E#V\\3CD '..))6==9,f5(&1&( .t}}=, ; DI	J
 \\ -dmm<'2$--(t}}556 3 34Hd# 7fjj*h79Afjj*h793fjj*h79,fnnj(;=?NV^^$i5
DFr   r   ) r;  r@  pygments.lexerr   r   r   r   r   r   r	   r
   r   r   pygments.tokenr   r   r   r   r   r   r   r   r   r   r   pygments.utilr   __all__r   r   r   r   r6  r   rW   <module>r     sq    
C C C4 4 4 4 )
9l6" l6^"Eu "EJT Tr   