/* Language: Ruby Author: Anton Kovalyov Contributors: Peter Leonov , Vasily Polovnyov , Loren Segal , Pascal Hurni */ function(hljs) { var RUBY_METHOD_RE = '[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?'; var RUBY_KEYWORDS = 'and false then defined module in return redo if BEGIN retry end for true self when ' + 'next until do begin unless END rescue nil else break undef not super class case ' + 'require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor'; var YARDOCTAG = { className: 'yardoctag', begin: '@[A-Za-z]+' }; var IRB_OBJECT = { className: 'value', begin: '#<', end: '>' }; var COMMENT = { className: 'comment', variants: [ { begin: '#', end: '$', contains: [YARDOCTAG] }, { begin: '^\\=begin', end: '^\\=end', contains: [YARDOCTAG], relevance: 10 }, { begin: '^__END__', end: '\\n$' } ] }; var SUBST = { className: 'subst', begin: '#\\{', end: '}', keywords: RUBY_KEYWORDS }; var STRING = { className: 'string', contains: [hljs.BACKSLASH_ESCAPE, SUBST], variants: [ {begin: /'/, end: /'/}, {begin: /"/, end: /"/}, {begin: '%[qw]?\\(', end: '\\)'}, {begin: '%[qw]?\\[', end: '\\]'}, {begin: '%[qw]?{', end: '}'}, {begin: '%[qw]?<', end: '>'}, {begin: '%[qw]?/', end: '/'}, {begin: '%[qw]?%', end: '%'}, {begin: '%[qw]?-', end: '-'}, {begin: '%[qw]?\\|', end: '\\|'}, { // \B in the beginning suppresses recognition of ?-sequences where ? // is the last character of a preceding identifier, as in: `func?4` begin: /\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/ } ] }; var PARAMS = { className: 'params', begin: '\\(', end: '\\)', keywords: RUBY_KEYWORDS }; var RUBY_DEFAULT_CONTAINS = [ STRING, IRB_OBJECT, COMMENT, { className: 'class', beginKeywords: 'class module', end: '$|;', illegal: /=/, contains: [ hljs.inherit(hljs.TITLE_MODE, {begin: '[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?'}), { className: 'inheritance', begin: '<\\s*', contains: [{ className: 'parent', begin: '(' + hljs.IDENT_RE + '::)?' + hljs.IDENT_RE }] }, COMMENT ] }, { className: 'function', beginKeywords: 'def', end: ' |$|;', relevance: 0, contains: [ hljs.inherit(hljs.TITLE_MODE, {begin: RUBY_METHOD_RE}), PARAMS, COMMENT ] }, { className: 'constant', begin: '(::)?(\\b[A-Z]\\w*(::)?)+', relevance: 0 }, { className: 'symbol', begin: ':', contains: [STRING, {begin: RUBY_METHOD_RE}], relevance: 0 }, { className: 'symbol', begin: hljs.UNDERSCORE_IDENT_RE + '(\\!|\\?)?:', relevance: 0 }, { className: 'number', begin: '(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b', relevance: 0 }, { className: 'variable', begin: '(\\$\\W)|((\\$|\\@\\@?)(\\w+))' }, { // regexp container begin: '(' + hljs.RE_STARTERS_RE + ')\\s*', contains: [ IRB_OBJECT, COMMENT, { className: 'regexp', contains: [hljs.BACKSLASH_ESCAPE, SUBST], illegal: /\n/, variants: [ {begin: '/', end: '/[a-z]*'}, {begin: '%r{', end: '}[a-z]*'}, {begin: '%r\\(', end: '\\)[a-z]*'}, {begin: '%r!', end: '![a-z]*'}, {begin: '%r\\[', end: '\\][a-z]*'} ] } ], relevance: 0 } ]; SUBST.contains = RUBY_DEFAULT_CONTAINS; PARAMS.contains = RUBY_DEFAULT_CONTAINS; var IRB_DEFAULT = [ { relevance: 1, className: 'output', begin: '^\\s*=> ', end: "$", returnBegin: true, contains: [ { className: 'status', begin: '^\\s*=>' }, { begin: ' ', end: '$', contains: RUBY_DEFAULT_CONTAINS } ] }, { relevance: 1, className: 'input', begin: '^[^ ][^=>]*>+ ', end: "$", returnBegin: true, contains: [ { className: 'prompt', begin: '^[^ ][^=>]*>+' }, { begin: ' ', end: '$', contains: RUBY_DEFAULT_CONTAINS } ] } ]; return { aliases: ['rb', 'gemspec', 'podspec', 'thor', 'irb'], keywords: RUBY_KEYWORDS, contains: IRB_DEFAULT.concat(RUBY_DEFAULT_CONTAINS) }; }