o aX@sdZddlZddlmZmZmZmZmZmZm Z m Z m Z ddl m Z mZmZmZmZmZmZmZmZmZddlmZgdZedZdZGd d d eZGd d d eZGd ddeZdS)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 RegexLexerExtendedRegexLexerincludebygroupsdefault LexerContext do_insertionswords) TextCommentOperatorKeywordNameStringNumber PunctuationErrorGenericshebang_matches) RubyLexerRubyConsoleLexer FancyLexerz.*? )*z**-+z-@z+@/%&|^`~z[]z[]=<><<>z<=>>z>=z==z===c@seZdZdZdZgdZgdZddgZej ej BZ ddZ d d Z gd ejfd ejfd ejfedddefdeeeejfdeeedfdedfdeeedfedddejfdejfedddejfdejfeddddejfdejjfd e fd!e fd"ejd#fd$eeejd%fd&ejd%fd'eeejd%fd(eej eefd)eej!eefd*eej"eefd+eej#eefd,ej$j%fd-ej$j&fd.ej$j'fd/ej$j'fd0ej$j'fd1efe(d2d3ej)fd4ej*fee+d5d6eeejfd7eeefd8efd9efd:efd;e,fdfd?eej%eej-d@fe.d@gd=e,d>fdAed@fdBej%d@fe.d@gdCee,ed@fd=edDfe(dEgdFej/dDfdGej/d@fe(dEgdHej/dIfdJej/fdKej/fge(dLdMej0fge(dLdNejfdOejfge(dLdNej1fdOej1fge(dLdPejfdQejfdNejfdRejfdSejd@fgdTejd@fgdU Z2e23e dVdWZ4dXS)Yrz= For `Ruby `_ source code. Ruby)rubyrbduby) z*.rbz*.rbwRakefilez*.rakez *.gemspecz*.rbxz*.dubyGemfile Vagrantfilez text/x-rubyzapplication/x-rubyc cs|d}|t|dfV|dtj|dfV|dtj|dfV|dtj|dfV|jdg}t| }| |ddv|df|d|_ | d|_ t |dkrm|j |d EdHn |j tj|dfV| |_ |r|D]Z\}}g}t|j|j D]<}|r|} n|} | |kr|D] } | tj| fVq|tj|fV| |_ n| |q|D] } | t| fVqqt |j|_ |dd=dSdS) N heredocstack)z<<-z<<~dcontext)startr grouprHeredoc Delimiter__dict__ setdefaultboolappendposendlenget_tokens_unprocessedline_refinditertextstriprstripr) selfmatchctxr8r3 outermosttoleranthdnamelinescheckamatchrR6/usr/lib/python3/dist-packages/pygments/lexers/ruby.pyheredoc_callback+sF           zRubyLexer.heredoc_callbackc Csdd}dd}i}dtjfttddtjfdtjfd tjd fd ttjtfd tjd fdtjdfdtjdfg|d<dtjd fdtjdfdtjd fdtjdffD]\}}}t dd||fd|f||dfg|d|<qOdD]\}}}}d|dtj f|tj d f|tj dft dd!|dtj fd"|d#tj fg||d$<|d d%|tj |d$fd|dtj f|tj d f|tj dfd!|dtj fd"|d#tj fg||d&<|d d'|tj |d&fd|dtj f|tj d f|d(tj dft d)d!|dtj fd"|d#tj fg||d*<|d d+|tj |d*fql|dd,|fd-tj fd.|fd/tt tj dfd0tt tj dfd1|fg7<|S)2Ncs|dtj|dfVt|dddg}|j|dD]\}}}|d|||fVq|dtj|dfV||_dS)Nr/r1rinterpolated-regexr6r2)r8rRegexr9rrCrAr@rIrJrKnctxitvrRrRrSintp_regex_callback[z.intp_regex_callbackcsrU)Nr/r1rinterpolated-stringr6r2)r8rOtherr9rrCrAr@rXrRrRrSintp_string_callbackcr^z=RubyLexer.gen_rubystrings_rules..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(?&!^|~,(])(\s*)(%([\t ])(?:(?:\\\3|(?!\3).)*)\3)z'^(\s*)(%([\t ])(?:(?:\\\3|(?!\3).)*)\3)z*(%([^a-zA-Z0-9\s]))((?:\\\2|(?!\2).)*)(\2))rSymbolr RUBY_OPERATORSrrDoubleSingleBacktickrr`r?rWr ) r]rastatesnamettyperAlbracerbracebraceccrRrRrSgen_rubystrings_rulesZs                     zRubyLexer.gen_rubystrings_rulesz\A#!.+?$z#.*?$z=begin\s.*?\n=end.*?$)BEGINENDaliasbeginbreakcasezdefined?doelseelsifrAensureforifinnextredorescueraiseretryreturnsuperthenundefunlessuntilwhenwhileyield\bsuffixz.(module)(\s+)([a-zA-Z_]\w*(?:::[a-zA-Z_]\w*)*)z (def)(\s+)funcnamezdef(?=[*%&^`~+-/\[<>=])z (class)(\s+) classname) initializenewlooprextendr attr_reader attr_writer attr_accessorattrcatchthrowprivatemodule_functionpublic protectedtruefalsenilz(not|and|or)\b)autoload block_given const_definedeqlequalfrozenr instance_ofis_aiteratorkind_ofmethod_definedrprivate_method_definedprotected_method_definedpublic_method_defined respond_totaintedz\?z(chomp|chop|exit|gsub|sub)!)eArrayFloatIntegerr__id____send__abort ancestorsat_exitrbindingcallcccallerrchompchop class_evalclass_variablesclonezconst_defined? const_get const_missing const_set constantsdisplaydupevalexecexitrfailforkformatfreezegetcgetsglobal_variablesgsubhashidincluded_modulesinspect instance_evalinstance_methodinstance_methodsinstance_variable_getinstance_variable_setinstance_variableslambdaloadlocal_variablesrmethodmethod_missingmethods module_evalr| object_idopenpprintprintfprivate_class_methodprivate_instance_methodsprivate_methodsprocprotected_instance_methodsprotected_methodspublic_class_methodpublic_instance_methodspublic_methodsputcputsrrandreadline readlinesrequirescanselectrIsendset_trace_funcsingleton_methodssleepsplitsprintfsrandsubsyscallsystemtainttestrto_ato_s trace_vartrapuntaint untrace_varwarnz(?~!:])|(?<=(?:\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::rfzI\?(\\[MC]-)*(\\([\\abefnrstv#"\']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})|\S)(?!\w)z[A-Z]\w+z(\.|::)rbz,(\.|::)([a-zA-Z_]\w*[!?]?|[*%&^`~+\-/\[<>=])z[a-zA-Z_]\w*[!?]?z:(\[|\]|\*\*|<>?|>=|<=|<=>|=~|={3}|!~|&&?|\|\||\.{1,3})z[-+/*%=<>&!^|~]=?z [(){};,/?:\\]\s+rpdefexprz(?:([a-zA-Z_]\w*)(\.))?([a-zA-Z\u0080-\uffff][a-zA-Z0-9_\u0080-\uffff]*[!?=]?|!=|!~|=~|\*\*?|[-+!~]@?|[/%&|^]|<=>|<[<=]?|>[>=]?|===?|\[\]=?|`)rkr$z [A-Z_]\w*z (\))(\.|::)?rtrootrlrmz#\{in-intpz#@@?[a-zA-Z_]\w*z#\$[a-zA-Z_]\w*ruz2\\([\\abefnrstv#"\']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})rjz[^\\#]+z\\\\z\\/z[^\\/#]+z /[mixounse]*z.+) r&rrr%r'rurirVr_r rcCs t|dS)Nz ruby(1\.\d)?r)rFrRrRrS analyse_texts zRubyLexer.analyse_textN)5__name__ __module__ __qualname____doc__r|aliases filenames mimetypesreDOTALL MULTILINEflagsrTrr Hashbangry Multiliner rrr r NamespacePseudor WordBuiltinPreprocrrWrOctHexBinrVariableClassInstanceGlobalrCharConstantrwrFunctionrInterpolEscaper`tokensupdater(rRrRrRrSrs~ /h  ! 8:= >@  Y [e g i k  n o p q rstvz }          F rc@s4eZdZdZdZddgZdgZedZ ddZ 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 sessionrbconirbztext/x-ruby-shellsessionz.irb\([a-zA-Z_]\w*\):\d{3}:\d+[>*"\'] |>> |\?> c cstdi|j}d}g}t|D]I}|}|j|}|durA|}|t |dt j |d|fgf|||d7}q|rRt || |EdHd}g}|t j|fVq|rkt || |EdHdSdS)NrrR)roptionsrDrEr9 _prompt_rerJrAr?rBrPromptr rCr8Output) rIrFrblexercurcode insertionsrJlinemrArRrRrSrCs2     z'RubyConsoleLexer.get_tokens_unprocessedN) r)r*r+r,r|r-r/r0compilerMrCrRrRrRrSrs   rc@seZdZdZdZddgZddgZdgZdej d fd ej d fd ej d fd ej d fd ej d fdej d fdej d fdej d fdej d fdej d fg de fdej dfdej dfdej dfdej dfdej fdej dfde j fdej fdefdefdefd ejfd!efed"d#d$ejfd%ejfd&efd'ejfd(ejjfd)ejjfd*efd+efd,eeje efd-eeje efd.eeje efd/eeje efd0ejfd1ejfgd2Z d3S)4ra 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*.fyz *.fancypackfancyfyztext/x-fancysrcz"/(\\\\|\\[^\\]|[^/\\])*/[egimosx]*rkz"!(\\\\|\\[^\\]|[^!\\])*![egimosx]*z\\(\\\\|[^\\])*\\[egimosx]*z$\{(\\\\|\\[^\\]|[^}\\])*\}[egimosx]*z"<(\\\\|\\[^\\]|[^>\\])*>[egimosx]*z%\[(\\\\|\\[^\\]|[^\]\\])*\][egimosx]*z$\((\\\\|\\[^\\]|[^)\\])*\)[egimosx]*z"@(\\\\|\\[^\\]|[^@\\])*@[egimosx]*z"%(\\\\|\\[^\\]|[^%\\])*%[egimosx]*z$\$(\\\\|\\[^\\]|[^$\\])*\$[egimosx]*r$zs\{(\\\\|\\[^\\]|[^}\\])*\}\s*balanced-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[(){};,/?|:\\])ObjectrHash DirectoryFiler?rr EnumerableFancyEnumerableBlock TrueClassNilClass FalseClassTuplervStackSet FancySpecMethodPackageRangerrz[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+)rYr&N)!r)r*r+r,r|r.r-r/rrWr r ryrvrrrCrr r9rDr r>r@r?rrr;r<r=rrrGrRrRrRrSrsz                       r) r,r0pygments.lexerrrrrrrrr r pygments.tokenr r r rrrrrrr pygments.utilr__all__rUrDrwrrrrRrRrRrSs ,0  p,