o
    3IhX                     @   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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mZ ddlmZ g 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-2025 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                   @   s  e Zd ZdZdZdZg dZg dZddgZd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d0ej'j*fd1ej'j*fd2ej'j*fd3efe+d4d5e j,fd6ej-fee.d7d8eeejfd9eeefd:efd;efd<efd=e/fd>efd?e/d@fdAeej(eej0dBfe1dBgd?e/d@fdCedBfdDej(dBfe1dBgdEee/edBfd?edFfe+dGgdHe j2dFfdIe j2dBfe+dGgdJe j2dKfdLe j2fdMe j2fge+dNdOe j3fge+dNdPe j!fdQe j!fge+dNdPe j4fdQe j4fge+dNdRe j!fdSe j!fdPe j!fdTe j!fdUe j!dBfgdVejdBfgdWZ5e56e  dXdY Z7dZS )[r   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-ruby c                 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  qqt|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_unprocessedr   finditertextstriprstripr   )selfmatchctxr;   r6   	outermosttoleranthdnamelinescheckamatch rT   T/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-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| 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 qn|d  d-| fd.t j
fd/|fd0ttt j
d fd1ttt j
d fd2|fg7  < |S )3Nc                 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 )Nr2   r4   r   interpolated-regexr9   r5   )r;   r   Regexr<   r   rF   rD   rC   rK   rL   rM   nctxitvrT   rT   rU   intp_regex_callback[      z<RubyLexer.gen_rubystrings_rules.<locals>.intp_regex_callbackc                 s   rW   )Nr2   r4   r   interpolated-stringr9   r5   )r;   r   Otherr<   r   rF   rD   rC   rZ   rT   rT   rU   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[^\\z#]+[\\#]#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   rb   rB   rY   r   )	r_   rc   statesnamettyperD   lbracerbracebraceccrT   rT   rU   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elsifrD   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selectrK   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(?<!\.))re   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::rh   zI\?(\\[MC]-)*(\\([\\abefnrstv#"\']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})|\S)(?!\w)z[A-Z]\w+z(\.|::)rd   z,(\.|::)([a-zA-Z_]\w*[!?]?|[*%&^`~+\-/\[<>=])z[a-zA-Z_]\w*[!?]?z:(\[|\]|\*\*|<<?|>>?|>=|<=|<=>|=~|={3}|!~|&&?|\|\||\.{1,3})z[-+/*%=<>&!^|~]=?z[(){};,/?:\\]\s+rr   defexprz(?:([a-zA-Z_]\w*)(\.))?([a-zA-Z\u0080-\uffff][a-zA-Z0-9_\u0080-\uffff]*[!?=]?|!=|!~|=~|\*\*?|[-+!~]@?|[/%&|^]|<=>|<[<=]?|>[>=]?|===?|\[\]=?|`)rm   r&   z	[A-Z_]\w*z(\))(\.|::)?rv   rootrn   ro   z#\{in-intpz#@@?[a-zA-Z_]\w*z#\$[a-zA-Z_]\w*rw   z2\\([\\abefnrstv#"\']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})rl   z[^\\#]+z\\\\z\\/z[^\\/#]+z/[mixounse]*z.+)r(  r   r   r'  r)  rw   rk   rX   ra   r"  r!  c                 C   s
   t | dS )Nzruby(1\.\d)?r   )rH   rT   rT   rU   analyse_text  s   
zRubyLexer.analyse_textN)8__name__
__module____qualname____doc__r~   urlaliases	filenames	mimetypesversion_addedreDOTALL	MULTILINEflagsrV   r   r   Hashbangr{   	Multiliner
   r   r   r   r   	NamespacePseudor   WordBuiltinPreprocr   r   rY   r   OctHexBinr   VariableClassInstanceGlobalr   CharConstantry   r   Functionr   InterpolEscaperb   tokensupdater*  rT   rT   rT   rU   r      s   /h !
8:=
>@
Y[egik
n
o
p
q
rstvz
}
           






	  Fr   c                   @   s@   e Zd ZdZdZddgZdgZdZdZdZ	e
d	Zd
d ZdS )r   z8
    For Ruby interactive console (**irb**) output.
    zRuby irb sessionrbconirbztext/x-ruby-shellsessionzhttps://www.ruby-lang.orgr1   zrbcon/consolez.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 )Nr1   r   rT   )r   optionsr   rG   r<   
_prompt_rerL   rD   rB   rE   r   Promptr	   rF   r;   Output)	rK   rH   rblexercurcode
insertionsrL   linemrD   rT   rT   rU   rF     s2   



z'RubyConsoleLexer.get_tokens_unprocessedN)r+  r,  r-  r.  r~   r0  r2  r/  r3  _exampler4  compilerP  rF   rT   rT   rT   rU   r     s    
r   c                   @   s  e Zd ZdZdZdZddgZddgZdgZd	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d0eejeefd1eej eefd2ej!fd3ej fgd4Z"d5S )6r   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.
    Fancyz!https://github.com/bakkdoor/fancyz*.fyz*.fancypackfancyfyztext/x-fancysrcz1.5z"/(\\\\|\\[^\\]|[^/\\])*/[egimosx]*rm   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FilerC  r   r   
EnumerableFancyEnumerableBlock	TrueClassNilClass
FalseClassTuplerx   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+)r]  r(  N)#r+  r,  r-  r.  r~   r/  r1  r0  r2  r3  r   rY   r   r   r{   rx   r   r   rG  r   r
   r=  rH  r   rB  rD  rC  r   r   r?  r@  rA  r   r   rK  rT   rT   rT   rU   r     s~    

















r   ) r.  r4  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__ry   r   r   r   rT   rT   rT   rU   <module>   s    
04  r'