1 | hljs.registerLanguage("ruby",(()=>{"use strict";function e(e){
|
2 | return n("(?=",e,")")}function n(...e){return e.map((e=>{
|
3 | return(n=e)?"string"==typeof n?n:n.source:null;var n})).join("")}return a=>{
|
4 | const i="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",s={
|
5 | keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor __FILE__",
|
6 | built_in:"proc lambda",literal:"true false nil"},r={className:"doctag",
|
7 | begin:"@[A-Za-z]+"},b={begin:"#<",end:">"},c=[a.COMMENT("#","$",{contains:[r]
|
8 | }),a.COMMENT("^=begin","^=end",{contains:[r],relevance:10
|
9 | }),a.COMMENT("^__END__","\\n$")],t={className:"subst",begin:/#\{/,end:/\}/,
|
10 | keywords:s},g={className:"string",contains:[a.BACKSLASH_ESCAPE,t],variants:[{
|
11 | begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:/%[qQwWx]?\(/,
|
12 | end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{begin:/%[qQwWx]?\{/,end:/\}/},{
|
13 | begin:/%[qQwWx]?</,end:/>/},{begin:/%[qQwWx]?\//,end:/\//},{begin:/%[qQwWx]?%/,
|
14 | end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{begin:/%[qQwWx]?\|/,end:/\|/},{
|
15 | begin:/\B\?(\\\d{1,3})/},{begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{
|
16 | begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{
|
17 | begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{
|
18 | begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{
|
19 | begin:n(/<<[-~]?'?/,e(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)),
|
20 | contains:[a.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,
|
21 | contains:[a.BACKSLASH_ESCAPE,t]})]}]},d="[0-9](_?[0-9])*",l={className:"number",
|
22 | relevance:0,variants:[{
|
23 | begin:`\\b([1-9](_?[0-9])*|0)(\\.(${d}))?([eE][+-]?(${d})|r)?i?\\b`},{
|
24 | begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b"
|
25 | },{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{
|
26 | begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{
|
27 | begin:"\\b0(_?[0-7])+r?i?\\b"}]},o={className:"params",begin:"\\(",end:"\\)",
|
28 | endsParent:!0,keywords:s},_=[g,{className:"class",beginKeywords:"class module",
|
29 | end:"$|;",illegal:/=/,contains:[a.inherit(a.TITLE_MODE,{
|
30 | begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|!)?"}),{begin:"<\\s*",contains:[{
|
31 | begin:"("+a.IDENT_RE+"::)?"+a.IDENT_RE,relevance:0}]}].concat(c)},{
|
32 | className:"function",begin:n(/def\s+/,e(i+"\\s*(\\(|;|$)")),relevance:0,
|
33 | keywords:"def",end:"$|;",contains:[a.inherit(a.TITLE_MODE,{begin:i
|
34 | }),o].concat(c)},{begin:a.IDENT_RE+"::"},{className:"symbol",
|
35 | begin:a.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol",
|
36 | begin:":(?!\\s)",contains:[g,{begin:i}],relevance:0},l,{className:"variable",
|
37 | begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{
|
38 | className:"params",begin:/\|/,end:/\|/,relevance:0,keywords:s},{
|
39 | begin:"("+a.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[{
|
40 | className:"regexp",contains:[a.BACKSLASH_ESCAPE,t],illegal:/\n/,variants:[{
|
41 | begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{begin:"%r\\(",
|
42 | end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]
|
43 | }].concat(b,c),relevance:0}].concat(b,c);t.contains=_,o.contains=_;const E=[{
|
44 | begin:/^\s*=>/,starts:{end:"$",contains:_}},{className:"meta",
|
45 | begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>)(?=[ ])",
|
46 | starts:{end:"$",contains:_}}];return c.unshift(b),{name:"Ruby",
|
47 | aliases:["rb","gemspec","podspec","thor","irb"],keywords:s,illegal:/\/\*/,
|
48 | contains:[a.SHEBANG({binary:"ruby"})].concat(E).concat(c).concat(_)}}})()); |
\ | No newline at end of file |