xref: /vim-8.2.3635/runtime/syntax/ruby.vim (revision d09091d4)
1071d4279SBram Moolenaar" Vim syntax file
2071d4279SBram Moolenaar" Language:		Ruby
3c6249bb2SBram Moolenaar" Maintainer:		Doug Kearns <[email protected]>
4ec7944aaSBram Moolenaar" URL:			https://github.com/vim-ruby/vim-ruby
5c6249bb2SBram Moolenaar" Release Coordinator:	Doug Kearns <[email protected]>
6*d09091d4SBram Moolenaar" Last Change:		2018 Jul 09
76b730e11SBram Moolenaar" ----------------------------------------------------------------------------
86b730e11SBram Moolenaar"
9071d4279SBram Moolenaar" Previous Maintainer:	Mirko Nasato
10071d4279SBram Moolenaar" Thanks to perl.vim authors, and to Reimer Behrends. :-) (MN)
116b730e11SBram Moolenaar" ----------------------------------------------------------------------------
12071d4279SBram Moolenaar
1389bcfda6SBram Moolenaar" Prelude {{{1
14c1762ccbSBram Moolenaarif exists("b:current_syntax")
15071d4279SBram Moolenaar  finish
16071d4279SBram Moolenaarendif
17071d4279SBram Moolenaar
1889bcfda6SBram Moolenaar" this file uses line continuations
1989bcfda6SBram Moolenaarlet s:cpo_sav = &cpo
2089bcfda6SBram Moolenaarset cpo&vim
2189bcfda6SBram Moolenaar
2289bcfda6SBram Moolenaar" Folding Config {{{1
236b730e11SBram Moolenaarif has("folding") && exists("ruby_fold")
246b730e11SBram Moolenaar  setlocal foldmethod=syntax
256b730e11SBram Moolenaarendif
266b730e11SBram Moolenaar
2789bcfda6SBram Moolenaarlet s:foldable_groups = split(
2889bcfda6SBram Moolenaar      \	  get(
2989bcfda6SBram Moolenaar      \	    b:,
3089bcfda6SBram Moolenaar      \	    'ruby_foldable_groups',
3189bcfda6SBram Moolenaar      \	    get(g:, 'ruby_foldable_groups', 'ALL')
3289bcfda6SBram Moolenaar      \	  )
3389bcfda6SBram Moolenaar      \	)
3489bcfda6SBram Moolenaar
3589bcfda6SBram Moolenaarfunction! s:foldable(...) abort
3689bcfda6SBram Moolenaar  if index(s:foldable_groups, 'ALL') > -1
3789bcfda6SBram Moolenaar    return 1
3889bcfda6SBram Moolenaar  endif
3989bcfda6SBram Moolenaar
4089bcfda6SBram Moolenaar  for l:i in a:000
4189bcfda6SBram Moolenaar    if index(s:foldable_groups, l:i) > -1
4289bcfda6SBram Moolenaar      return 1
4389bcfda6SBram Moolenaar    endif
4489bcfda6SBram Moolenaar  endfor
4589bcfda6SBram Moolenaar
4689bcfda6SBram Moolenaar  return 0
4789bcfda6SBram Moolenaarendfunction " }}}
4889bcfda6SBram Moolenaar
49*d09091d4SBram Moolenaarsyn cluster rubyNotTop contains=@rubyExtendedStringSpecial,@rubyRegexpSpecial,@rubyDeclaration,rubyConditional,rubyExceptional,rubyMethodExceptional,rubyTodo,rubyModuleName,rubyClassName,rubySymbolDelimiter
50c236c16dSBram Moolenaar
5189bcfda6SBram Moolenaar" Whitespace Errors {{{1
526b730e11SBram Moolenaarif exists("ruby_space_errors")
536b730e11SBram Moolenaar  if !exists("ruby_no_trail_space_error")
546b730e11SBram Moolenaar    syn match rubySpaceError display excludenl "\s\+$"
556b730e11SBram Moolenaar  endif
566b730e11SBram Moolenaar  if !exists("ruby_no_tab_space_error")
576b730e11SBram Moolenaar    syn match rubySpaceError display " \+\t"me=e-1
586b730e11SBram Moolenaar  endif
596b730e11SBram Moolenaarendif
606b730e11SBram Moolenaar
6189bcfda6SBram Moolenaar" Operators {{{1
629964e468SBram Moolenaarif exists("ruby_operators")
6389bcfda6SBram Moolenaar  syn match  rubyOperator "[~!^|*/%+-]\|&\.\@!\|\%(class\s*\)\@<!<<\|<=>\|<=\|\%(<\|\<class\s\+\u\w*\s*\)\@<!<[^<]\@=\|===\|==\|=\~\|>>\|>=\|=\@1<!>\|\*\*\|\.\.\.\|\.\.\|::"
64ec7944aaSBram Moolenaar  syn match  rubyOperator "->\|-=\|/=\|\*\*=\|\*=\|&&=\|&=\|&&\|||=\||=\|||\|%=\|+=\|!\~\|!="
6589bcfda6SBram Moolenaar  syn region rubyBracketOperator matchgroup=rubyOperator start="\%(\w[?!]\=\|[]})]\)\@2<=\[\s*" end="\s*]" contains=ALLBUT,@rubyNotTop
669964e468SBram Moolenaarendif
679964e468SBram Moolenaar
6889bcfda6SBram Moolenaar" Expression Substitution and Backslash Notation {{{1
69c236c16dSBram Moolenaarsyn match rubyStringEscape "\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}"						    contained display
70c236c16dSBram Moolenaarsyn match rubyStringEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)" contained display
711d68952aSBram Moolenaarsyn match rubyQuoteEscape  "\\[\\']"											    contained display
729964e468SBram Moolenaar
73c236c16dSBram Moolenaarsyn region rubyInterpolation	      matchgroup=rubyInterpolationDelimiter start="#{" end="}" contained contains=ALLBUT,@rubyNotTop
749964e468SBram Moolenaarsyn match  rubyInterpolation	      "#\%(\$\|@@\=\)\w\+"    display contained contains=rubyInterpolationDelimiter,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable,rubyPredefinedVariable
759964e468SBram Moolenaarsyn match  rubyInterpolationDelimiter "#\ze\%(\$\|@@\=\)\w\+" display contained
76c1762ccbSBram Moolenaarsyn match  rubyInterpolation	      "#\$\%(-\w\|\W\)"       display contained contains=rubyInterpolationDelimiter,rubyPredefinedVariable,rubyInvalidVariable
77c1762ccbSBram Moolenaarsyn match  rubyInterpolationDelimiter "#\ze\$\%(-\w\|\W\)"    display contained
789964e468SBram Moolenaarsyn region rubyNoInterpolation	      start="\\#{" end="}"	      contained
799964e468SBram Moolenaarsyn match  rubyNoInterpolation	      "\\#{"		      display contained
809964e468SBram Moolenaarsyn match  rubyNoInterpolation	      "\\#\%(\$\|@@\=\)\w\+"  display contained
81c1762ccbSBram Moolenaarsyn match  rubyNoInterpolation	      "\\#\$\W"		      display contained
826b730e11SBram Moolenaar
8389bcfda6SBram Moolenaarsyn match rubyDelimiterEscape	"\\[(<{\[)>}\]]" transparent display contained contains=NONE
846b730e11SBram Moolenaar
85c236c16dSBram Moolenaarsyn region rubyNestedParentheses    start="("  skip="\\\\\|\\)"  matchgroup=rubyString end=")"	transparent contained
86c236c16dSBram Moolenaarsyn region rubyNestedCurlyBraces    start="{"  skip="\\\\\|\\}"  matchgroup=rubyString end="}"	transparent contained
87c236c16dSBram Moolenaarsyn region rubyNestedAngleBrackets  start="<"  skip="\\\\\|\\>"  matchgroup=rubyString end=">"	transparent contained
88c236c16dSBram Moolenaarsyn region rubyNestedSquareBrackets start="\[" skip="\\\\\|\\\]" matchgroup=rubyString end="\]"	transparent contained
896b730e11SBram Moolenaar
9089bcfda6SBram Moolenaar" Regular Expression Metacharacters {{{1
91c236c16dSBram Moolenaar" These are mostly Oniguruma ready
92c236c16dSBram Moolenaarsyn region rubyRegexpComment	matchgroup=rubyRegexpSpecial   start="(?#"								  skip="\\)"  end=")"  contained
93c236c16dSBram Moolenaarsyn region rubyRegexpParens	matchgroup=rubyRegexpSpecial   start="(\(?:\|?<\=[=!]\|?>\|?<[a-z_]\w*>\|?[imx]*-[imx]*:\=\|\%(?#\)\@!\)" skip="\\)"  end=")"  contained transparent contains=@rubyRegexpSpecial
94c236c16dSBram Moolenaarsyn region rubyRegexpBrackets	matchgroup=rubyRegexpCharClass start="\[\^\="								  skip="\\\]" end="\]" contained transparent contains=rubyStringEscape,rubyRegexpEscape,rubyRegexpCharClass oneline
95c236c16dSBram Moolenaarsyn match  rubyRegexpCharClass	"\\[DdHhSsWw]"	       contained display
96c236c16dSBram Moolenaarsyn match  rubyRegexpCharClass	"\[:\^\=\%(alnum\|alpha\|ascii\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|xdigit\):\]" contained
971d68952aSBram Moolenaarsyn match  rubyRegexpEscape	"\\[].*?+^$|\\/(){}[]" contained
98c236c16dSBram Moolenaarsyn match  rubyRegexpQuantifier	"[*?+][?+]\="	       contained display
99c236c16dSBram Moolenaarsyn match  rubyRegexpQuantifier	"{\d\+\%(,\d*\)\=}?\=" contained display
100c236c16dSBram Moolenaarsyn match  rubyRegexpAnchor	"[$^]\|\\[ABbGZz]"     contained display
101c236c16dSBram Moolenaarsyn match  rubyRegexpDot	"\."		       contained display
102c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	"|"		       contained display
103c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	"\\[1-9]\d\=\d\@!"     contained display
104c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	"\\k<\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\=>" contained display
105c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	"\\k'\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\='" contained display
106c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	"\\g<\%([a-z_]\w*\|-\=\d\+\)>" contained display
107c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	"\\g'\%([a-z_]\w*\|-\=\d\+\)'" contained display
108c236c16dSBram Moolenaar
109c236c16dSBram Moolenaarsyn cluster rubyStringSpecial	      contains=rubyInterpolation,rubyNoInterpolation,rubyStringEscape
1106b730e11SBram Moolenaarsyn cluster rubyExtendedStringSpecial contains=@rubyStringSpecial,rubyNestedParentheses,rubyNestedCurlyBraces,rubyNestedAngleBrackets,rubyNestedSquareBrackets
111c236c16dSBram Moolenaarsyn cluster rubyRegexpSpecial	      contains=rubyInterpolation,rubyNoInterpolation,rubyStringEscape,rubyRegexpSpecial,rubyRegexpEscape,rubyRegexpBrackets,rubyRegexpCharClass,rubyRegexpDot,rubyRegexpQuantifier,rubyRegexpAnchor,rubyRegexpParens,rubyRegexpComment
112071d4279SBram Moolenaar
11389bcfda6SBram Moolenaar" Numbers and ASCII Codes {{{1
11489bcfda6SBram Moolenaarsyn match rubyASCIICode "\%(\w\|[]})\"'/]\)\@1<!\%(?\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\=\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)\)"
11589bcfda6SBram Moolenaarsyn match rubyInteger	"\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[xX]\x\+\%(_\x\+\)*r\=i\=\>"								display
11689bcfda6SBram Moolenaarsyn match rubyInteger	"\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0[dD]\)\=\%(0\|[1-9]\d*\%(_\d\+\)*\)r\=i\=\>"						display
11789bcfda6SBram Moolenaarsyn match rubyInteger	"\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[oO]\=\o\+\%(_\o\+\)*r\=i\=\>"								display
11889bcfda6SBram Moolenaarsyn match rubyInteger	"\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[bB][01]\+\%(_[01]\+\)*r\=i\=\>"								display
11989bcfda6SBram Moolenaarsyn match rubyFloat	"\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\.\d\+\%(_\d\+\)*r\=i\=\>"					display
12089bcfda6SBram Moolenaarsyn match rubyFloat	"\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\%(\.\d\+\%(_\d\+\)*\)\=\%([eE][-+]\=\d\+\%(_\d\+\)*\)r\=i\=\>"	display
121071d4279SBram Moolenaar
12289bcfda6SBram Moolenaar" Identifiers {{{1
1236b730e11SBram Moolenaarsyn match rubyLocalVariableOrMethod "\<[_[:lower:]][_[:alnum:]]*[?!=]\=" contains=NONE display transparent
1246b730e11SBram Moolenaarsyn match rubyBlockArgument	    "&[_[:lower:]][_[:alnum:]]"		 contains=NONE display transparent
125071d4279SBram Moolenaar
126*d09091d4SBram Moolenaarsyn match  rubyClassName	"\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" contained
127*d09091d4SBram Moolenaarsyn match  rubyModuleName	"\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" contained
12889bcfda6SBram Moolenaarsyn match  rubyConstant		"\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!"
129ec7944aaSBram Moolenaarsyn match  rubyClassVariable	"@@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display
130ec7944aaSBram Moolenaarsyn match  rubyInstanceVariable "@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*"	display
131ec7944aaSBram Moolenaarsyn match  rubyGlobalVariable	"$\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\|-.\)"
132*d09091d4SBram Moolenaarsyn match  rubySymbolDelimiter	":" contained
133*d09091d4SBram Moolenaarsyn match  rubySymbol		"[]})\"':]\@1<!:\%(\^\|\~@\|\~\|<<\|<=>\|<=\|<\|===\|[=!]=\|[=!]\~\|!@\|!\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)" contains=rubySymbolDelimiter
134*d09091d4SBram Moolenaarsyn match  rubySymbol		"[]})\"':]\@1<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)" contains=rubySymbolDelimiter
135*d09091d4SBram Moolenaarsyn match  rubySymbol		"[]})\"':]\@1<!:\%(\$\|@@\=\)\=\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" contains=rubySymbolDelimiter
136*d09091d4SBram Moolenaarsyn match  rubySymbol		"[]})\"':]\@1<!:\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\%([?!=]>\@!\)\=" contains=rubySymbolDelimiter
13789bcfda6SBram Moolenaar
13889bcfda6SBram Moolenaarif s:foldable(':')
139*d09091d4SBram Moolenaar  syn region rubySymbol		matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:'"  end="'"  skip="\\\\\|\\'"  contains=rubyQuoteEscape fold
140*d09091d4SBram Moolenaar  syn region rubySymbol		matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial fold
14189bcfda6SBram Moolenaarelse
142*d09091d4SBram Moolenaar  syn region rubySymbol		matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:'"  end="'"  skip="\\\\\|\\'"  contains=rubyQuoteEscape
143*d09091d4SBram Moolenaar  syn region rubySymbol		matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial
14489bcfda6SBram Moolenaarendif
14589bcfda6SBram Moolenaar
14689bcfda6SBram Moolenaarsyn match  rubyCapitalizedMethod	"\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)*\s*(\@="
147071d4279SBram Moolenaar
148ec7944aaSBram Moolenaarsyn match  rubyBlockParameter	  "\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" contained
14989bcfda6SBram Moolenaarsyn region rubyBlockParameterList start="\%(\%(\<do\>\|{\)\_s*\)\@32<=|" end="|" oneline display contains=rubyBlockParameter
150c1762ccbSBram Moolenaar
151c236c16dSBram Moolenaarsyn match rubyInvalidVariable	 "$[^ A-Za-z_-]"
152ec7944aaSBram Moolenaarsyn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~]#
153ec7944aaSBram Moolenaarsyn match rubyPredefinedVariable "$\d\+"										   display
1546b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$_\>"											   display
1556b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$-[0FIKadilpvw]\>"									   display
1566b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>"					   display
1571e015460SBram Moolenaarsyn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display
15889bcfda6SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\%(ARGF\|ARGV\|ENV\|DATA\|FALSE\|NIL\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!"
15989bcfda6SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\%(RUBY_\%(VERSION\|RELEASE_DATE\|PLATFORM\|PATCHLEVEL\|REVISION\|DESCRIPTION\|COPYRIGHT\|ENGINE\)\)\>\%(\s*(\)\@!"
160071d4279SBram Moolenaar
16189bcfda6SBram Moolenaar" Normal Regular Expression {{{1
16289bcfda6SBram Moolenaarif s:foldable('/')
16389bcfda6SBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\|else\)\|[;\~=!|&(,{[<>?:*+-]\)\s*\)\@<=/" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial fold
164*d09091d4SBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\h\k*\s\+\)\@<=/\%([ \t=]\|$\)\@!" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial fold
16589bcfda6SBram Moolenaarelse
16689bcfda6SBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\|else\)\|[;\~=!|&(,{[<>?:*+-]\)\s*\)\@<=/" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial
167*d09091d4SBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\h\k*\s\+\)\@<=/\%([ \t=]\|$\)\@!" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial
16889bcfda6SBram Moolenaarendif
169c236c16dSBram Moolenaar
17089bcfda6SBram Moolenaar" Generalized Regular Expression {{{1
17189bcfda6SBram Moolenaarif s:foldable('%')
172c236c16dSBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial fold
173c236c16dSBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r{"				end="}[iomxneus]*"   skip="\\\\\|\\}"	 contains=@rubyRegexpSpecial fold
17489bcfda6SBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r<"				end=">[iomxneus]*"   skip="\\\\\|\\>"	 contains=@rubyRegexpSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape fold
175c236c16dSBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\["				end="\][iomxneus]*"  skip="\\\\\|\\\]"	 contains=@rubyRegexpSpecial fold
176c236c16dSBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r("				end=")[iomxneus]*"   skip="\\\\\|\\)"	 contains=@rubyRegexpSpecial fold
17789bcfda6SBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z(\s\)"				end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial fold
17889bcfda6SBram Moolenaarelse
17989bcfda6SBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial
18089bcfda6SBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r{"				end="}[iomxneus]*"   skip="\\\\\|\\}"	 contains=@rubyRegexpSpecial
18189bcfda6SBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r<"				end=">[iomxneus]*"   skip="\\\\\|\\>"	 contains=@rubyRegexpSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape
18289bcfda6SBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\["				end="\][iomxneus]*"  skip="\\\\\|\\\]"	 contains=@rubyRegexpSpecial
18389bcfda6SBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r("				end=")[iomxneus]*"   skip="\\\\\|\\)"	 contains=@rubyRegexpSpecial
18489bcfda6SBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z(\s\)"				end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial
18589bcfda6SBram Moolenaarendif
1866b730e11SBram Moolenaar
18789bcfda6SBram Moolenaar" Normal String {{{1
18889bcfda6SBram Moolenaarlet s:spell_cluster = exists('ruby_spellcheck_strings') ? ',@Spell' : ''
18989bcfda6SBram Moolenaarexe 'syn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" ' .
19089bcfda6SBram Moolenaar      \ (s:foldable('%') ? 'fold' : '') . ' contains=@rubyStringSpecial' . s:spell_cluster
19189bcfda6SBram Moolenaarexe 'syn region rubyString matchgroup=rubyStringDelimiter start="''" end="''" skip="\\\\\|\\''" ' .
19289bcfda6SBram Moolenaar      \ (s:foldable('%') ? 'fold' : '') . ' contains=rubyQuoteEscape'	 . s:spell_cluster
19389bcfda6SBram Moolenaar
19489bcfda6SBram Moolenaar" Shell Command Output {{{1
19589bcfda6SBram Moolenaarif s:foldable('%')
1969964e468SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@rubyStringSpecial fold
19789bcfda6SBram Moolenaarelse
19889bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@rubyStringSpecial
19989bcfda6SBram Moolenaarendif
2006b730e11SBram Moolenaar
20189bcfda6SBram Moolenaar" Generalized Single Quoted String, Symbol and Array of Strings {{{1
20289bcfda6SBram Moolenaarif s:foldable('%')
20389bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
20489bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]{"				     end="}"   skip="\\\\\|\\}"	  fold contains=rubyNestedCurlyBraces,rubyDelimiterEscape
20589bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]<"				     end=">"   skip="\\\\\|\\>"	  fold contains=rubyNestedAngleBrackets,rubyDelimiterEscape
20689bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\["				     end="\]"  skip="\\\\\|\\\]"  fold contains=rubyNestedSquareBrackets,rubyDelimiterEscape
20789bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]("				     end=")"   skip="\\\\\|\\)"	  fold contains=rubyNestedParentheses,rubyDelimiterEscape
20889bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%q\z(\s\)"			     end="\z1" skip="\\\\\|\\\z1" fold
209ec7944aaSBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)"    end="\z1" skip="\\\\\|\\\z1" fold
21089bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s{"				     end="}"   skip="\\\\\|\\}"	  fold contains=rubyNestedCurlyBraces,rubyDelimiterEscape
21189bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s<"				     end=">"   skip="\\\\\|\\>"	  fold contains=rubyNestedAngleBrackets,rubyDelimiterEscape
21289bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\["				     end="\]"  skip="\\\\\|\\\]"  fold contains=rubyNestedSquareBrackets,rubyDelimiterEscape
21389bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s("				     end=")"   skip="\\\\\|\\)"	  fold contains=rubyNestedParentheses,rubyDelimiterEscape
21489bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%s\z(\s\)"			     end="\z1" skip="\\\\\|\\\z1" fold
21589bcfda6SBram Moolenaarelse
21689bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1"
21789bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]{"				     end="}"   skip="\\\\\|\\}"	  contains=rubyNestedCurlyBraces,rubyDelimiterEscape
21889bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]<"				     end=">"   skip="\\\\\|\\>"	  contains=rubyNestedAngleBrackets,rubyDelimiterEscape
21989bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\["				     end="\]"  skip="\\\\\|\\\]"  contains=rubyNestedSquareBrackets,rubyDelimiterEscape
22089bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]("				     end=")"   skip="\\\\\|\\)"	  contains=rubyNestedParentheses,rubyDelimiterEscape
22189bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%q\z(\s\)"			     end="\z1" skip="\\\\\|\\\z1"
22289bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)"    end="\z1" skip="\\\\\|\\\z1"
22389bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s{"				     end="}"   skip="\\\\\|\\}"	  contains=rubyNestedCurlyBraces,rubyDelimiterEscape
22489bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s<"				     end=">"   skip="\\\\\|\\>"	  contains=rubyNestedAngleBrackets,rubyDelimiterEscape
22589bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\["				     end="\]"  skip="\\\\\|\\\]"  contains=rubyNestedSquareBrackets,rubyDelimiterEscape
22689bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s("				     end=")"   skip="\\\\\|\\)"	  contains=rubyNestedParentheses,rubyDelimiterEscape
22789bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%s\z(\s\)"			     end="\z1" skip="\\\\\|\\\z1"
22889bcfda6SBram Moolenaarendif
2296b730e11SBram Moolenaar
23089bcfda6SBram Moolenaar" Generalized Double Quoted String and Array of Strings and Shell Command Output {{{1
2316b730e11SBram Moolenaar" Note: %= is not matched here as the beginning of a double quoted string
23289bcfda6SBram Moolenaarif s:foldable('%')
2336b730e11SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)"	      end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
23489bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
23589bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\={"			      end="}"	skip="\\\\\|\\}"   contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimiterEscape    fold
23689bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=<"			      end=">"	skip="\\\\\|\\>"   contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape  fold
23789bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=\["			      end="\]"	skip="\\\\\|\\\]"  contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimiterEscape fold
23889bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=("			      end=")"	skip="\\\\\|\\)"   contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimiterEscape    fold
23989bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[Qx]\z(\s\)"			      end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
24089bcfda6SBram Moolenaarelse
24189bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)"	      end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial
24289bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial
24389bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\={"			      end="}"	skip="\\\\\|\\}"   contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimiterEscape
24489bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=<"			      end=">"	skip="\\\\\|\\>"   contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape
24589bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=\["			      end="\]"	skip="\\\\\|\\\]"  contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimiterEscape
24689bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=("			      end=")"	skip="\\\\\|\\)"   contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimiterEscape
24789bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[Qx]\z(\s\)"			      end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial
24889bcfda6SBram Moolenaarendif
249071d4279SBram Moolenaar
25089bcfda6SBram Moolenaar" Array of Symbols {{{1
25189bcfda6SBram Moolenaarif s:foldable('%')
25289bcfda6SBram Moolenaar  " Array of Symbols
25389bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1"	fold
25489bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i{"				  end="}"   skip="\\\\\|\\}"	fold contains=rubyNestedCurlyBraces,rubyDelimiterEscape
25589bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i<"				  end=">"   skip="\\\\\|\\>"	fold contains=rubyNestedAngleBrackets,rubyDelimiterEscape
25689bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i\["				  end="\]"  skip="\\\\\|\\\]"	fold contains=rubyNestedSquareBrackets,rubyDelimiterEscape
25789bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i("				  end=")"   skip="\\\\\|\\)"	fold contains=rubyNestedParentheses,rubyDelimiterEscape
258071d4279SBram Moolenaar
25989bcfda6SBram Moolenaar  " Array of interpolated Symbols
26089bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1"	contains=@rubyStringSpecial fold
26189bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I{"				  end="}"   skip="\\\\\|\\}"	contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimiterEscape    fold
26289bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I<"				  end=">"   skip="\\\\\|\\>"	contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape  fold
26389bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I\["				  end="\]"  skip="\\\\\|\\\]"	contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimiterEscape fold
26489bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I("				  end=")"   skip="\\\\\|\\)"	contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimiterEscape    fold
26589bcfda6SBram Moolenaarelse
26689bcfda6SBram Moolenaar  " Array of Symbols
26789bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1"
26889bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i{"				  end="}"   skip="\\\\\|\\}"	contains=rubyNestedCurlyBraces,rubyDelimiterEscape
26989bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i<"				  end=">"   skip="\\\\\|\\>"	contains=rubyNestedAngleBrackets,rubyDelimiterEscape
27089bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i\["				  end="\]"  skip="\\\\\|\\\]"	contains=rubyNestedSquareBrackets,rubyDelimiterEscape
27189bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i("				  end=")"   skip="\\\\\|\\)"	contains=rubyNestedParentheses,rubyDelimiterEscape
2726b730e11SBram Moolenaar
27389bcfda6SBram Moolenaar  " Array of interpolated Symbols
27489bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1"	contains=@rubyStringSpecial
27589bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I{"				  end="}"   skip="\\\\\|\\}"	contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimiterEscape
27689bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I<"				  end=">"   skip="\\\\\|\\>"	contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape
27789bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I\["				  end="\]"  skip="\\\\\|\\\]"	contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimiterEscape
27889bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I("				  end=")"   skip="\\\\\|\\)"	contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimiterEscape
27989bcfda6SBram Moolenaarendif
2806b730e11SBram Moolenaar
28189bcfda6SBram Moolenaar" Here Document {{{1
282*d09091d4SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<[-~]\=\zs\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)+	 end=+$+ oneline contains=ALLBUT,@rubyNotTop
283*d09091d4SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<[-~]\=\zs"\%([^"]*\)"+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
284*d09091d4SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<[-~]\=\zs'\%([^']*\)'+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
285*d09091d4SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<[-~]\=\zs`\%([^`]*\)`+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
28689bcfda6SBram Moolenaar
28789bcfda6SBram Moolenaarif s:foldable('<<')
28889bcfda6SBram Moolenaar  syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend
28989bcfda6SBram Moolenaar  syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend
29089bcfda6SBram Moolenaar  syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc		    fold keepend
29189bcfda6SBram Moolenaar  syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend
29289bcfda6SBram Moolenaar
29389bcfda6SBram Moolenaar  syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3    matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
29489bcfda6SBram Moolenaar  syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
29589bcfda6SBram Moolenaar  syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart		    fold keepend
29689bcfda6SBram Moolenaar  syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
29789bcfda6SBram Moolenaarelse
29889bcfda6SBram Moolenaar  syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial keepend
29989bcfda6SBram Moolenaar  syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial keepend
30089bcfda6SBram Moolenaar  syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc		    keepend
30189bcfda6SBram Moolenaar  syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial keepend
30289bcfda6SBram Moolenaar
30389bcfda6SBram Moolenaar  syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3    matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend
30489bcfda6SBram Moolenaar  syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend
30589bcfda6SBram Moolenaar  syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart		    keepend
30689bcfda6SBram Moolenaar  syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend
30789bcfda6SBram Moolenaarendif
30889bcfda6SBram Moolenaar
30989bcfda6SBram Moolenaar" eRuby Config {{{1
3106b730e11SBram Moolenaarif exists('main_syntax') && main_syntax == 'eruby'
311d5cdbeb8SBram Moolenaar  let b:ruby_no_expensive = 1
312*d09091d4SBram Moolenaarendif
313071d4279SBram Moolenaar
31489bcfda6SBram Moolenaar" Module, Class, Method and Alias Declarations {{{1
3159964e468SBram Moolenaarsyn match  rubyAliasDeclaration    "[^[:space:];#.()]\+" contained contains=rubySymbol,rubyGlobalVariable,rubyPredefinedVariable nextgroup=rubyAliasDeclaration2 skipwhite
3169964e468SBram Moolenaarsyn match  rubyAliasDeclaration2   "[^[:space:];#.()]\+" contained contains=rubySymbol,rubyGlobalVariable,rubyPredefinedVariable
3179964e468SBram Moolenaarsyn match  rubyMethodDeclaration   "[^[:space:];#(]\+"	 contained contains=rubyConstant,rubyBoolean,rubyPseudoVariable,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable
318*d09091d4SBram Moolenaarsyn match  rubyClassDeclaration    "[^[:space:];#<]\+"	 contained contains=rubyClassName,rubyOperator
319*d09091d4SBram Moolenaarsyn match  rubyModuleDeclaration   "[^[:space:];#<]\+"	 contained contains=rubyModuleName,rubyOperator
320*d09091d4SBram Moolenaarsyn match  rubyMethodName "\<[_[:alpha:]][_[:alnum:]]*[?!=]\=[[:alnum:]_.:?!=]\@!" contained containedin=rubyMethodDeclaration
321*d09091d4SBram Moolenaarsyn match  rubyMethodName "\%(\s\|^\)\@1<=[_[:alpha:]][_[:alnum:]]*[?!=]\=\%(\s\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2
322*d09091d4SBram Moolenaarsyn match  rubyMethodName "\%([[:space:].]\|^\)\@2<=\%(\[\]=\=\|\*\*\|[-+!~]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|[=!]=\|[=!]\~\|!\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration
323c1762ccbSBram Moolenaar
324*d09091d4SBram Moolenaarsyn cluster rubyDeclaration contains=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration,rubyModuleDeclaration,rubyClassDeclaration,rubyMethodName,rubyBlockParameter
325c236c16dSBram Moolenaar
32689bcfda6SBram Moolenaar" Keywords {{{1
3271d68952aSBram Moolenaar" Note: the following keywords have already been defined:
3281d68952aSBram Moolenaar" begin case class def do end for if module unless until while
3291d68952aSBram Moolenaarsyn match   rubyControl	       "\<\%(and\|break\|in\|next\|not\|or\|redo\|rescue\|retry\|return\)\>[?!]\@!"
3301d68952aSBram Moolenaarsyn match   rubyOperator       "\<defined?" display
3311d68952aSBram Moolenaarsyn match   rubyKeyword	       "\<\%(super\|yield\)\>[?!]\@!"
3321d68952aSBram Moolenaarsyn match   rubyBoolean	       "\<\%(true\|false\)\>[?!]\@!"
33389bcfda6SBram Moolenaarsyn match   rubyPseudoVariable "\<\%(nil\|self\|__ENCODING__\|__dir__\|__FILE__\|__LINE__\|__callee__\|__method__\)\>[?!]\@!" " TODO: reorganise
3341d68952aSBram Moolenaarsyn match   rubyBeginEnd       "\<\%(BEGIN\|END\)\>[?!]\@!"
3351d68952aSBram Moolenaar
33689bcfda6SBram Moolenaar" Expensive Mode {{{1
33789bcfda6SBram Moolenaar" Match 'end' with the appropriate opening keyword for syntax based folding
33889bcfda6SBram Moolenaar" and special highlighting of module/class/method definitions
339d5cdbeb8SBram Moolenaarif !exists("b:ruby_no_expensive") && !exists("ruby_no_expensive")
3409964e468SBram Moolenaar  syn match  rubyDefine "\<alias\>"  nextgroup=rubyAliasDeclaration  skipwhite skipnl
3419964e468SBram Moolenaar  syn match  rubyDefine "\<def\>"    nextgroup=rubyMethodDeclaration skipwhite skipnl
342*d09091d4SBram Moolenaar  syn match  rubyDefine "\<undef\>"  nextgroup=rubyMethodName	     skipwhite skipnl
3439964e468SBram Moolenaar  syn match  rubyClass	"\<class\>"  nextgroup=rubyClassDeclaration  skipwhite skipnl
3449964e468SBram Moolenaar  syn match  rubyModule "\<module\>" nextgroup=rubyModuleDeclaration skipwhite skipnl
3451d68952aSBram Moolenaar
34689bcfda6SBram Moolenaar  if s:foldable('def')
3471d68952aSBram Moolenaar    syn region rubyMethodBlock start="\<def\>"	matchgroup=rubyDefine end="\%(\<def\_s\+\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop fold
34889bcfda6SBram Moolenaar  else
34989bcfda6SBram Moolenaar    syn region rubyMethodBlock start="\<def\>"	matchgroup=rubyDefine end="\%(\<def\_s\+\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop
35089bcfda6SBram Moolenaar  endif
35189bcfda6SBram Moolenaar
35289bcfda6SBram Moolenaar  if s:foldable('class')
353c236c16dSBram Moolenaar    syn region rubyBlock start="\<class\>"	matchgroup=rubyClass end="\<end\>" contains=ALLBUT,@rubyNotTop fold
35489bcfda6SBram Moolenaar  else
35589bcfda6SBram Moolenaar    syn region rubyBlock start="\<class\>"	matchgroup=rubyClass end="\<end\>" contains=ALLBUT,@rubyNotTop
35689bcfda6SBram Moolenaar  endif
35789bcfda6SBram Moolenaar
35889bcfda6SBram Moolenaar  if s:foldable('module')
359c236c16dSBram Moolenaar    syn region rubyBlock start="\<module\>" matchgroup=rubyModule end="\<end\>" contains=ALLBUT,@rubyNotTop fold
36089bcfda6SBram Moolenaar  else
36189bcfda6SBram Moolenaar    syn region rubyBlock start="\<module\>" matchgroup=rubyModule end="\<end\>" contains=ALLBUT,@rubyNotTop
36289bcfda6SBram Moolenaar  endif
363071d4279SBram Moolenaar
3646b730e11SBram Moolenaar  " modifiers
36589bcfda6SBram Moolenaar  syn match rubyLineContinuation    "\\$" nextgroup=rubyConditionalModifier,rubyRepeatModifier skipwhite skipnl
36689bcfda6SBram Moolenaar  syn match rubyConditionalModifier "\<\%(if\|unless\)\>"
36789bcfda6SBram Moolenaar  syn match rubyRepeatModifier	    "\<\%(while\|until\)\>"
368071d4279SBram Moolenaar
36989bcfda6SBram Moolenaar  if s:foldable('do')
370c236c16dSBram Moolenaar    syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold
37189bcfda6SBram Moolenaar  else
37289bcfda6SBram Moolenaar    syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" end="\<end\>" contains=ALLBUT,@rubyNotTop
37389bcfda6SBram Moolenaar  endif
37489bcfda6SBram Moolenaar
375c1762ccbSBram Moolenaar  " curly bracket block or hash literal
37689bcfda6SBram Moolenaar  if s:foldable('{')
377ec7944aaSBram Moolenaar    syn region rubyCurlyBlock matchgroup=rubyCurlyBlockDelimiter start="{" end="}" contains=ALLBUT,@rubyNotTop fold
37889bcfda6SBram Moolenaar  else
37989bcfda6SBram Moolenaar    syn region rubyCurlyBlock matchgroup=rubyCurlyBlockDelimiter start="{" end="}" contains=ALLBUT,@rubyNotTop
38089bcfda6SBram Moolenaar  endif
38189bcfda6SBram Moolenaar
38289bcfda6SBram Moolenaar  if s:foldable('[')
383c236c16dSBram Moolenaar    syn region rubyArrayLiteral	matchgroup=rubyArrayDelimiter start="\%(\w\|[\]})]\)\@<!\[" end="]" contains=ALLBUT,@rubyNotTop fold
38489bcfda6SBram Moolenaar  endif
385071d4279SBram Moolenaar
386c1762ccbSBram Moolenaar  " statements without 'do'
38789bcfda6SBram Moolenaar  if s:foldable('begin')
388c236c16dSBram Moolenaar    syn region rubyBlockExpression matchgroup=rubyControl start="\<begin\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold
38989bcfda6SBram Moolenaar  else
39089bcfda6SBram Moolenaar    syn region rubyBlockExpression matchgroup=rubyControl start="\<begin\>" end="\<end\>" contains=ALLBUT,@rubyNotTop
39189bcfda6SBram Moolenaar  endif
39289bcfda6SBram Moolenaar
39389bcfda6SBram Moolenaar  if s:foldable('case')
394c236c16dSBram Moolenaar    syn region rubyCaseExpression matchgroup=rubyConditional start="\<case\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold
39589bcfda6SBram Moolenaar  else
39689bcfda6SBram Moolenaar    syn region rubyCaseExpression matchgroup=rubyConditional start="\<case\>" end="\<end\>" contains=ALLBUT,@rubyNotTop
39789bcfda6SBram Moolenaar  endif
39889bcfda6SBram Moolenaar
39989bcfda6SBram Moolenaar  if s:foldable('if')
40089bcfda6SBram Moolenaar    syn region rubyConditionalExpression matchgroup=rubyConditional start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*%&^|+=-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![?!]\)\s*\)\@<=\%(if\|unless\)\>" end="\%(\%(\%(\.\@1<!\.\)\|::\)\s*\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop fold
40189bcfda6SBram Moolenaar  else
40289bcfda6SBram Moolenaar    syn region rubyConditionalExpression matchgroup=rubyConditional start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*%&^|+=-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![?!]\)\s*\)\@<=\%(if\|unless\)\>" end="\%(\%(\%(\.\@1<!\.\)\|::\)\s*\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop
40389bcfda6SBram Moolenaar  endif
404071d4279SBram Moolenaar
405c236c16dSBram Moolenaar  syn match rubyConditional "\<\%(then\|else\|when\)\>[?!]\@!"	contained containedin=rubyCaseExpression
406c236c16dSBram Moolenaar  syn match rubyConditional "\<\%(then\|else\|elsif\)\>[?!]\@!" contained containedin=rubyConditionalExpression
407c1762ccbSBram Moolenaar
4081d68952aSBram Moolenaar  syn match rubyExceptional	  "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>[?!]\@!" contained containedin=rubyBlockExpression
4091d68952aSBram Moolenaar  syn match rubyMethodExceptional "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>[?!]\@!" contained containedin=rubyMethodBlock
4101d68952aSBram Moolenaar
411c1762ccbSBram Moolenaar  " statements with optional 'do'
412c236c16dSBram Moolenaar  syn region rubyOptionalDoLine   matchgroup=rubyRepeat start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyOptionalDo end="\%(\<do\>\)" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyNotTop
41389bcfda6SBram Moolenaar
41489bcfda6SBram Moolenaar  if s:foldable('for')
415c236c16dSBram Moolenaar    syn region rubyRepeatExpression start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyRepeat end="\<end\>" contains=ALLBUT,@rubyNotTop nextgroup=rubyOptionalDoLine fold
41689bcfda6SBram Moolenaar  else
41789bcfda6SBram Moolenaar    syn region rubyRepeatExpression start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyRepeat end="\<end\>" contains=ALLBUT,@rubyNotTop nextgroup=rubyOptionalDoLine
41889bcfda6SBram Moolenaar  endif
419071d4279SBram Moolenaar
420071d4279SBram Moolenaar  if !exists("ruby_minlines")
421ec7944aaSBram Moolenaar    let ruby_minlines = 500
422071d4279SBram Moolenaar  endif
423071d4279SBram Moolenaar  exec "syn sync minlines=" . ruby_minlines
424071d4279SBram Moolenaar
4256b730e11SBram Moolenaarelse
426c236c16dSBram Moolenaar  syn match rubyControl "\<def\>[?!]\@!"    nextgroup=rubyMethodDeclaration skipwhite skipnl
427c236c16dSBram Moolenaar  syn match rubyControl "\<class\>[?!]\@!"  nextgroup=rubyClassDeclaration  skipwhite skipnl
428c236c16dSBram Moolenaar  syn match rubyControl "\<module\>[?!]\@!" nextgroup=rubyModuleDeclaration skipwhite skipnl
4291d68952aSBram Moolenaar  syn match rubyControl "\<\%(case\|begin\|do\|for\|if\|unless\|while\|until\|else\|elsif\|ensure\|then\|when\|end\)\>[?!]\@!"
430c236c16dSBram Moolenaar  syn match rubyKeyword "\<\%(alias\|undef\)\>[?!]\@!"
4316b730e11SBram Moolenaarendif
432071d4279SBram Moolenaar
43389bcfda6SBram Moolenaar" Special Methods {{{1
4346b730e11SBram Moolenaarif !exists("ruby_no_special_methods")
435ec7944aaSBram Moolenaar  syn keyword rubyAccess    public protected private public_class_method private_class_method public_constant private_constant module_function
436c236c16dSBram Moolenaar  " attr is a common variable name
437c236c16dSBram Moolenaar  syn match   rubyAttribute "\%(\%(^\|;\)\s*\)\@<=attr\>\(\s*[.=]\)\@!"
438c236c16dSBram Moolenaar  syn keyword rubyAttribute attr_accessor attr_reader attr_writer
439c236c16dSBram Moolenaar  syn match   rubyControl   "\<\%(exit!\|\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>[?!]\@!\)"
4406b730e11SBram Moolenaar  syn keyword rubyEval	    eval class_eval instance_eval module_eval
4416b730e11SBram Moolenaar  syn keyword rubyException raise fail catch throw
442*d09091d4SBram Moolenaar  syn keyword rubyInclude   autoload gem load require require_relative
4436b730e11SBram Moolenaar  syn keyword rubyKeyword   callcc caller lambda proc
444*d09091d4SBram Moolenaar  " false positive with 'include?'
445*d09091d4SBram Moolenaar  syn match   rubyMacro     "\<include\>[?!]\@!"
446*d09091d4SBram Moolenaar  syn keyword rubyMacro     extend prepend refine using
447*d09091d4SBram Moolenaar  syn keyword rubyMacro     alias_method define_method define_singleton_method remove_method undef_method
448071d4279SBram Moolenaarendif
449071d4279SBram Moolenaar
45089bcfda6SBram Moolenaar" Comments and Documentation {{{1
4516b730e11SBram Moolenaarsyn match   rubySharpBang "\%^#!.*" display
45289bcfda6SBram Moolenaarsyn keyword rubyTodo	  FIXME NOTE TODO OPTIMIZE HACK REVIEW XXX todo contained
4536b730e11SBram Moolenaarsyn match   rubyComment   "#.*" contains=rubySharpBang,rubySpaceError,rubyTodo,@Spell
45489bcfda6SBram Moolenaarif !exists("ruby_no_comment_fold") && s:foldable('#')
45589bcfda6SBram Moolenaar  syn region rubyMultilineComment start="^\s*#.*\n\%(^\s*#\)\@=" end="^\s*#.*\n\%(^\s*#\)\@!" contains=rubyComment transparent fold keepend
456ec7944aaSBram Moolenaar  syn region rubyDocumentation	  start="^=begin\ze\%(\s.*\)\=$" end="^=end\%(\s.*\)\=$" contains=rubySpaceError,rubyTodo,@Spell fold
4579964e468SBram Moolenaarelse
4589964e468SBram Moolenaar  syn region rubyDocumentation	  start="^=begin\s*$" end="^=end\s*$" contains=rubySpaceError,rubyTodo,@Spell
4599964e468SBram Moolenaarendif
4606b730e11SBram Moolenaar
46189bcfda6SBram Moolenaar" Keyword Nobbling {{{1
4626b730e11SBram Moolenaar" Note: this is a hack to prevent 'keywords' being highlighted as such when called as methods with an explicit receiver
46389bcfda6SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@1<!\.\)\|::\)\_s*\%([_[:lower:]][_[:alnum:]]*\|\<\%(BEGIN\|END\)\>\)" transparent contains=NONE
46489bcfda6SBram Moolenaarsyn match rubyKeywordAsMethod "\(defined?\|exit!\)\@!\<[_[:lower:]][_[:alnum:]]*[?!]"			       transparent contains=NONE
4656b730e11SBram Moolenaar
46689bcfda6SBram Moolenaar" More Symbols {{{1
46789bcfda6SBram Moolenaarsyn match  rubySymbol		"\%([{(,]\_s*\)\zs\l\w*[!?]\=::\@!"he=e-1
468*d09091d4SBram Moolenaarsyn match  rubySymbol		"[]})\"':]\@1<!\<\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],]\@="he=e-1
46989bcfda6SBram Moolenaarsyn match  rubySymbol		"\%([{(,]\_s*\)\zs[[:space:],{]\l\w*[!?]\=::\@!"hs=s+1,he=e-1
47089bcfda6SBram Moolenaarsyn match  rubySymbol		"[[:space:],{(]\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],]\@="hs=s+1,he=e-1
471c236c16dSBram Moolenaar
47289bcfda6SBram Moolenaar" __END__ Directive {{{1
47389bcfda6SBram Moolenaarif s:foldable('__END__')
4746b730e11SBram Moolenaar  syn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" fold
47589bcfda6SBram Moolenaarelse
47689bcfda6SBram Moolenaar  syn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$"
47789bcfda6SBram Moolenaarendif
478071d4279SBram Moolenaar
47989bcfda6SBram Moolenaar" Default Highlighting {{{1
480c1762ccbSBram Moolenaarhi def link rubyClass			rubyDefine
481c1762ccbSBram Moolenaarhi def link rubyModule			rubyDefine
4821d68952aSBram Moolenaarhi def link rubyMethodExceptional	rubyDefine
483c1762ccbSBram Moolenaarhi def link rubyDefine			Define
484*d09091d4SBram Moolenaarhi def link rubyAccess			rubyMacro
485*d09091d4SBram Moolenaarhi def link rubyAttribute		rubyMacro
486*d09091d4SBram Moolenaarhi def link rubyMacro			Macro
487*d09091d4SBram Moolenaarhi def link rubyMethodName		rubyFunction
488c1762ccbSBram Moolenaarhi def link rubyFunction		Function
489c1762ccbSBram Moolenaarhi def link rubyConditional		Conditional
490c1762ccbSBram Moolenaarhi def link rubyConditionalModifier	rubyConditional
4911d68952aSBram Moolenaarhi def link rubyExceptional		rubyConditional
492c1762ccbSBram Moolenaarhi def link rubyRepeat			Repeat
493c1762ccbSBram Moolenaarhi def link rubyRepeatModifier		rubyRepeat
494c1762ccbSBram Moolenaarhi def link rubyOptionalDo		rubyRepeat
495c1762ccbSBram Moolenaarhi def link rubyControl			Statement
496c1762ccbSBram Moolenaarhi def link rubyInclude			Include
497c1762ccbSBram Moolenaarhi def link rubyInteger			Number
498c1762ccbSBram Moolenaarhi def link rubyASCIICode		Character
499c1762ccbSBram Moolenaarhi def link rubyFloat			Float
500c1762ccbSBram Moolenaarhi def link rubyBoolean			Boolean
501c1762ccbSBram Moolenaarhi def link rubyException		Exception
5026b730e11SBram Moolenaarif !exists("ruby_no_identifiers")
503c1762ccbSBram Moolenaar  hi def link rubyIdentifier		Identifier
5046b730e11SBram Moolenaarelse
505c1762ccbSBram Moolenaar  hi def link rubyIdentifier		NONE
5066b730e11SBram Moolenaarendif
507c1762ccbSBram Moolenaarhi def link rubyClassVariable		rubyIdentifier
508c1762ccbSBram Moolenaarhi def link rubyConstant		Type
509*d09091d4SBram Moolenaarhi def link rubyClassName		rubyConstant
510*d09091d4SBram Moolenaarhi def link rubyModuleName		rubyConstant
511c1762ccbSBram Moolenaarhi def link rubyGlobalVariable		rubyIdentifier
512c1762ccbSBram Moolenaarhi def link rubyInstanceVariable	rubyIdentifier
513c1762ccbSBram Moolenaarhi def link rubyPredefinedIdentifier	rubyIdentifier
514c1762ccbSBram Moolenaarhi def link rubyPredefinedConstant	rubyPredefinedIdentifier
515c1762ccbSBram Moolenaarhi def link rubyPredefinedVariable	rubyPredefinedIdentifier
516c1762ccbSBram Moolenaarhi def link rubySymbol			Constant
517c1762ccbSBram Moolenaarhi def link rubyKeyword			Keyword
518c1762ccbSBram Moolenaarhi def link rubyOperator		Operator
519c1762ccbSBram Moolenaarhi def link rubyBeginEnd		Statement
520c1762ccbSBram Moolenaarhi def link rubyEval			Statement
521c1762ccbSBram Moolenaarhi def link rubyPseudoVariable		Constant
52289bcfda6SBram Moolenaarhi def link rubyCapitalizedMethod	rubyLocalVariableOrMethod
523071d4279SBram Moolenaar
524c1762ccbSBram Moolenaarhi def link rubyComment			Comment
525c1762ccbSBram Moolenaarhi def link rubyData			Comment
526c1762ccbSBram Moolenaarhi def link rubyDataDirective		Delimiter
527c1762ccbSBram Moolenaarhi def link rubyDocumentation		Comment
528c236c16dSBram Moolenaarhi def link rubyTodo			Todo
529c236c16dSBram Moolenaar
5301d68952aSBram Moolenaarhi def link rubyQuoteEscape		rubyStringEscape
531c236c16dSBram Moolenaarhi def link rubyStringEscape		Special
532c1762ccbSBram Moolenaarhi def link rubyInterpolationDelimiter	Delimiter
533c1762ccbSBram Moolenaarhi def link rubyNoInterpolation		rubyString
534c1762ccbSBram Moolenaarhi def link rubySharpBang		PreProc
535c1762ccbSBram Moolenaarhi def link rubyRegexpDelimiter		rubyStringDelimiter
53689bcfda6SBram Moolenaarhi def link rubySymbolDelimiter		rubySymbol
537c1762ccbSBram Moolenaarhi def link rubyStringDelimiter		Delimiter
538ec7944aaSBram Moolenaarhi def link rubyHeredoc			rubyString
539c1762ccbSBram Moolenaarhi def link rubyString			String
540c236c16dSBram Moolenaarhi def link rubyRegexpEscape		rubyRegexpSpecial
541c236c16dSBram Moolenaarhi def link rubyRegexpQuantifier	rubyRegexpSpecial
542c236c16dSBram Moolenaarhi def link rubyRegexpAnchor		rubyRegexpSpecial
543c236c16dSBram Moolenaarhi def link rubyRegexpDot		rubyRegexpCharClass
544c236c16dSBram Moolenaarhi def link rubyRegexpCharClass		rubyRegexpSpecial
545c236c16dSBram Moolenaarhi def link rubyRegexpSpecial		Special
546c236c16dSBram Moolenaarhi def link rubyRegexpComment		Comment
547c236c16dSBram Moolenaarhi def link rubyRegexp			rubyString
5486b730e11SBram Moolenaar
549c1762ccbSBram Moolenaarhi def link rubyInvalidVariable		Error
550c1762ccbSBram Moolenaarhi def link rubyError			Error
551c1762ccbSBram Moolenaarhi def link rubySpaceError		rubyError
552071d4279SBram Moolenaar
55389bcfda6SBram Moolenaar" Postscript {{{1
554071d4279SBram Moolenaarlet b:current_syntax = "ruby"
555071d4279SBram Moolenaar
55689bcfda6SBram Moolenaarlet &cpo = s:cpo_sav
55789bcfda6SBram Moolenaarunlet! s:cpo_sav
55889bcfda6SBram Moolenaar
55989bcfda6SBram Moolenaar" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:
560