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-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>=z==z===c            )   @   s@  e Zd ZdZdZdddgZ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d.fd/ejd.fd0eeejd.fd1eej eefd2eej!eefd3eej"eefd4eej#eefd5ej$j%fd6ej$j&fd7ej$j'fd8ej$j'fd9ej$j'fd:efe(d;d<ej)fd=ej*fee+d>d?eeejfd@eeefdAefdBefdCefdDe,fdEefg(dFe,dGfdHeej%eej-dIfe.dIgdFe,dGfdJedIfdKej%dIfe.dIgdLee,edIfdFedMfe(dNgdOej/dMfdPej/dIfe(dNgdQej/dRfdSej/fdTej/fge(dUdVej0fge(dUdWejfdXejfge(dUdWej1fdXej1fge(dUdYejfdZejfdWejfd[ejfd\ejdIfgd]ejdIfgd^Z2e23e  d_d` Z4daS )br   z=
    For `Ruby <http://www.ruby-lang.org>`_ source code.
    ZRubyrubyrbZdubyz*.rbz*.rbwZRakefilez*.rakez	*.gemspecz*.rbxz*.dubyZGemfilez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  | |_
|rx|D ]\}}g }xt|j|j
D ]}|r:|  }	n|  }	|	|krx$|D ]}
|
  tj|
 fV  qVW |  tj| fV  | |_
P n
|	| q"W x"|D ]}
|
  t|
 fV  qW 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linescheckZamatch rC   \/home/kop/projects/devel/pgwui/test_venv/lib/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| < qW 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 qW |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   Regexr0   r   r8   r6   r5   )r>   r?   r@   nctxitvrC   rC   rD   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   Otherr0   r   r8   r6   r5   )r>   r?   r@   rG   rH   rI   rJ   rC   rC   rD   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-singlesym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<>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   rL   r4   rF   r   )	rK   rM   ZstatesnameZttyper6   ZlbracerbraceZbraceccrC   rC   rD   gen_rubystrings_rulesZ   st    










zRubyLexer.gen_rubystrings_rulesz\A#!.+?$z#.*?$z=begin\s.*?\n=end.*?$)ZBEGINZENDaliasbeginbreakZcasezdefined?doelseZelsifr6   ZensureforifinnextZredoZrescueraiseretryreturnsuperZthenZundefZunlessZuntil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   extendrh   Zattr_readerZattr_writerZattr_accessorattrcatchthrowprivateZmodule_functionpublicZ	protectedtruefalsenilz(not|and|or)\b)autoloadZblock_givenZconst_definedZeql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callerrv   ZchompZchopZ
class_evalZclass_variablesclonezconst_defined?Z	const_getZconst_missingZ	const_set	constantsZdisplaydupevalexecexitrt   Zfailforkformat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_variablesrs   methodZmethod_missingmethodsZmodule_evalr\   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putsrh   Zrandreadline	readlinesrequirescanselectr>   sendZset_trace_funcZsingleton_methodssleepsplitZsprintfZsrandsubZsyscallsystemZtainttestrw   Zto_aZto_sZ	trace_varZtrapZuntaintZuntrace_varwarnz(?<!\.))rN   ro   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::rQ   zI\?(\\[MC]-)*(\\([\\abefnrstv#"\']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})|\S)(?!\w)z[A-Z]\w+z(\.|::))rN   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   rp   rq   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;   rC   rC   rD   analyse_text  s    zRubyLexer.analyse_textN)5__name__
__module____qualname____doc__r\   aliases	filenames	mimetypesreDOTALL	MULTILINEflagsrE   r^   r   ZHashbangr[   Z	Multiliner
   r   r   r   r   	NamespaceZPseudor   WordBuiltinZPreprocr   rF   r   OctHexBinr   VariableClassInstanceZGlobalr   CharConstantrY   r   Functionr   ZInterpolZEscaperL   tokensupdater   rC   rC   rC   rD   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 }xt|D ]}| }| j|}|d k	r~| }|t	|dt
j|d | fgf |||d  7 }q |rt|||E d H  d}g }| t
j|fV  q W |rt|||E d H  d S )N r   )r   optionsr9   r:   r0   
_prompt_rer?   r6   r4   r7   r   ZPromptr	   r8   r/   ZOutput)	r>   r;   ZrblexerZcurcodeZ
insertionsr?   linemr6   rC   rC   rD   r8     s(    
z'RubyConsoleLexer.get_tokens_unprocessedN)r   r   r   r   r\   r   r   r   compiler   r8   rC   rC   rC   rD   r     s   
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]*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Objectr   ZHashZ	DirectoryFiler   r   r   Z
EnumerableZFancyEnumerableZBlockZ	TrueClassZNilClassZ
FalseClassTuplerX   ZStackSetZ	FancySpecMethodPackageRangez\b)ro   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   r\   r   r   r   r   rF   r   r   r[   rX   r   r   r   r   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rC   rC   rC   rD   r     sf   	















) 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   r9   rY   r   r   r   rC   rC   rC   rD   <module>	   s   ,0

  p,