a
    ;@bX                     @   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                )   @   s2  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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g(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Z2e23e  dVdW Z4dXS )Yr   z=
    For `Ruby <http://www.ruby-lang.org>`_ source code.
    ZRuby)ZrubyrbZduby)	z*.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v |df | d|_
|d|_t|dk r| j|d	E d H  n|j
tj|dfV  | |_
|r|D ]\}}g }t|j|j
D ]}|r6|  }	n|  }	|	|kr|D ]}
|
  tj|
 fV  qP|  tj| fV  | |_
 qn
|	| q|D ]}
|
  t|
 fV  qq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ctxr2   r-   Z	outermostZtolerantZhdnamelinescheckZamatch rF   3lib/python3.9/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< d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| < qd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|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}| j|dD ] \}}}| d| ||fV  q:| dtj|dfV  | |_d S )Nr)   r+   r   interpolated-regexr0   r,   )r2   r   Regexr3   r   r;   r9   r8   rA   rB   rC   ZnctxitvrF   rF   rG   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}| j|dD ] \}}}| d| ||fV  q:| dtj|dfV  | |_d S )Nr)   r+   r   interpolated-stringr0   r,   )r2   r   Otherr3   r   r;   r9   r8   rK   rF   rF   rG   intp_string_callbackc   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"   string-intp-escapedz	[^\\%s#]+[\\#]#popzsimple-))\{\}z{}cb)z\[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SingleZBacktickr   rQ   r7   rJ   r   )	rO   rR   ZstatesnameZttyper9   ZlbracerbraceZbraceccrF   rF   rG   gen_rubystrings_rulesZ   s    









	




zRubyLexer.gen_rubystrings_rulesz\A#!.+?$z#.*?$z=begin\s.*?\n=end.*?$)ZBEGINZENDaliasZbeginbreakZcasezdefined?ZdoelseZelsifr9   ZensureforifinnextZredoZrescueraiseZretryreturnsuperZthenZundefZunlessZuntilZwhenwhileyield\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   extendrr   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_definedr   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_exitr   ZbindingZcallccZcallerr   ZchompZchopZ
class_evalZclass_variablesZclonezconst_defined?Z	const_getZconst_missingZ	const_setZ	constantsZdisplaydupevalexecexitr~   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_variablesr}   methodZmethod_missingmethodsZmodule_evalrh   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putsrr   Zrandreadline	readlinesZrequirescanZselectrA   sendZset_trace_funcZsingleton_methodssleepsplitZsprintfZsrandsubZsyscallsystemZtainttestr   Zto_aZto_sZ	trace_varZtrapZuntaintZuntrace_varwarnz(?<!\.))rT   ry   z__(FILE|LINE)__\bz2(?<!\w)(<<[-~]?)(["`\']?)([a-zA-Z_]\w*)(\2)(.*?\n)z(<<[-~]?)("|\')()(\2)(.*?\n)Z__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::rW   zI\?(\\[MC]-)*(\\([\\abefnrstv#"\']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})|\S)(?!\w)z[A-Z]\w+z(\.|::)rS   z,(\.|::)([a-zA-Z_]\w*[!?]?|[*%&^`~+\-/\[<>=])z[a-zA-Z_]\w*[!?]?z:(\[|\]|\*\*|<<?|>>?|>=|<=|<=>|=~|={3}|!~|&&?|\|\||\.{1,3})z[-+/*%=<>&!^|~]=?z[(){};,/?:\\]\s+r^   defexprz(?:([a-zA-Z_]\w*)(\.))?([a-zA-Z\u0080-\uffff][a-zA-Z0-9_\u0080-\uffff]*[!?=]?|!=|!~|=~|\*\*?|[-+!~]@?|[/%&|^]|<=>|<[<=]?|>[>=]?|===?|\[\]=?|`)rZ   r$   z	[A-Z_]\w*z(\))(\.|::)?rb   rootr[   r\   z#\{in-intpz#@@?[a-zA-Z_]\w*z#\$[a-zA-Z_]\w*rc   z2\\([\\abefnrstv#"\']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})rY   z[^\\#]+z\\\\z\\/z[^\\/#]+z/[mixounse]*z.+)r   rz   r{   r   r   rc   rX   rI   rP   r   r   c                 C   s
   t | dS )Nzruby(1\.\d)?r   )r>   rF   rF   rG   analyse_text  s    zRubyLexer.analyse_textN)5__name__
__module____qualname____doc__rh   aliases	filenames	mimetypesreDOTALL	MULTILINEflagsrH   rj   r   ZHashbangrg   Z	Multiliner
   r   r   r   r   	NamespaceZPseudor   ZWordBuiltinZPreprocr   rJ   r   OctHexBinr   VariableClassInstanceZGlobalr   ZCharConstantre   r   Functionr   ZInterpolZEscaperQ   tokensupdater   rF   rF   rF   rG   r      s  /i










  





	
  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 sessionZrbconZirbztext/x-ruby-shellsessionz.irb\([a-zA-Z_]\w*\):\d{3}:\d+[>*"\'] |>> |\?> c           	   	   c   s   t f i | j}d}g }t|D ]}| }| j|}|d ur| }|t	|dt
j|d | fgf |||d  7 }q"|rt|||E d H  d}g }| t
j|fV  q"|rt|||E d H  d S )N r   )r   optionsr<   r=   r3   
_prompt_rerB   r9   r7   r:   r   ZPromptr	   r;   r2   ZOutput)	rA   r>   ZrblexerZcurcodeZ
insertionsrB   linemr9   rF   rF   rG   r;     s.    



z'RubyConsoleLexer.get_tokens_unprocessedN)r   r   r   r   rh   r   r   r   compiler   r;   rF   rF   rF   rG   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
    ZFancyz*.fyz*.fancypackZfancyZfyztext/x-fancysrcz"/(\\\\|\\[^\\]|[^/\\])*/[egimosx]*rZ   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[(){};,/?|:\\])ZObjectr   ZHashZ	DirectoryZFiler   r   r   Z
EnumerableZFancyEnumerableZBlockZ	TrueClassZNilClassZ
FalseClassTuplerd   ZStackSetZ	FancySpecZMethodZPackageZRangerw   rx   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   rh   r   r   r   r   rJ   r   r   rg   rd   r   r   r   r   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rF   rF   rF   rG   r     sx   	
















r   ) 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   r<   re   r   r   r   rF   rF   rF   rG   <module>   s   
,0
  p,