xref: /vim-8.2.3635/runtime/syntax/ruby.vim (revision 1d68952a)
1071d4279SBram Moolenaar" Vim syntax file
2071d4279SBram Moolenaar" Language:		Ruby
3c6249bb2SBram Moolenaar" Maintainer:		Doug Kearns <[email protected]>
4*1d68952aSBram Moolenaar" Last Change:		2009 Dec 2
5a5792f58SBram Moolenaar" URL:			http://vim-ruby.rubyforge.org
66b730e11SBram Moolenaar" Anon CVS:		See above site
7c6249bb2SBram Moolenaar" Release Coordinator:	Doug Kearns <[email protected]>
86b730e11SBram Moolenaar" ----------------------------------------------------------------------------
96b730e11SBram Moolenaar"
10071d4279SBram Moolenaar" Previous Maintainer:	Mirko Nasato
11071d4279SBram Moolenaar" Thanks to perl.vim authors, and to Reimer Behrends. :-) (MN)
126b730e11SBram Moolenaar" ----------------------------------------------------------------------------
13071d4279SBram Moolenaar
14c1762ccbSBram Moolenaarif exists("b:current_syntax")
15071d4279SBram Moolenaar  finish
16071d4279SBram Moolenaarendif
17071d4279SBram Moolenaar
186b730e11SBram Moolenaarif has("folding") && exists("ruby_fold")
196b730e11SBram Moolenaar  setlocal foldmethod=syntax
206b730e11SBram Moolenaarendif
216b730e11SBram Moolenaar
22*1d68952aSBram Moolenaarsyn cluster rubyNotTop contains=@rubyExtendedStringSpecial,@rubyRegexpSpecial,@rubyDeclaration,rubyConditional,rubyExceptional,rubyMethodExceptional,rubyTodo
23c236c16dSBram Moolenaar
246b730e11SBram Moolenaarif exists("ruby_space_errors")
256b730e11SBram Moolenaar  if !exists("ruby_no_trail_space_error")
266b730e11SBram Moolenaar    syn match rubySpaceError display excludenl "\s\+$"
276b730e11SBram Moolenaar  endif
286b730e11SBram Moolenaar  if !exists("ruby_no_tab_space_error")
296b730e11SBram Moolenaar    syn match rubySpaceError display " \+\t"me=e-1
306b730e11SBram Moolenaar  endif
316b730e11SBram Moolenaarendif
326b730e11SBram Moolenaar
339964e468SBram Moolenaar" Operators
349964e468SBram Moolenaarif exists("ruby_operators")
35c1762ccbSBram Moolenaar  syn match  rubyOperator	 "\%([~!^&|*/%+-]\|\%(class\s*\)\@<!<<\|<=>\|<=\|\%(<\|\<class\s\+\u\w*\s*\)\@<!<[^<]\@=\|===\|==\|=\~\|>>\|>=\|=\@<!>\|\*\*\|\.\.\.\|\.\.\|::\)"
36c1762ccbSBram Moolenaar  syn match  rubyPseudoOperator  "\%(-=\|/=\|\*\*=\|\*=\|&&=\|&=\|&&\|||=\||=\|||\|%=\|+=\|!\~\|!=\)"
37c236c16dSBram Moolenaar  syn region rubyBracketOperator matchgroup=rubyOperator start="\%(\w[?!]\=\|[]})]\)\@<=\[\s*" end="\s*]" contains=ALLBUT,@rubyNotTop
389964e468SBram Moolenaarendif
399964e468SBram Moolenaar
40071d4279SBram Moolenaar" Expression Substitution and Backslash Notation
41c236c16dSBram Moolenaarsyn match rubyStringEscape "\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}"						    contained display
42c236c16dSBram Moolenaarsyn match rubyStringEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)" contained display
43*1d68952aSBram Moolenaarsyn match rubyQuoteEscape  "\\[\\']"											    contained display
449964e468SBram Moolenaar
45c236c16dSBram Moolenaarsyn region rubyInterpolation	      matchgroup=rubyInterpolationDelimiter start="#{" end="}" contained contains=ALLBUT,@rubyNotTop
469964e468SBram Moolenaarsyn match  rubyInterpolation	      "#\%(\$\|@@\=\)\w\+"    display contained contains=rubyInterpolationDelimiter,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable,rubyPredefinedVariable
479964e468SBram Moolenaarsyn match  rubyInterpolationDelimiter "#\ze\%(\$\|@@\=\)\w\+" display contained
48c1762ccbSBram Moolenaarsyn match  rubyInterpolation	      "#\$\%(-\w\|\W\)"       display contained contains=rubyInterpolationDelimiter,rubyPredefinedVariable,rubyInvalidVariable
49c1762ccbSBram Moolenaarsyn match  rubyInterpolationDelimiter "#\ze\$\%(-\w\|\W\)"    display contained
509964e468SBram Moolenaarsyn region rubyNoInterpolation	      start="\\#{" end="}"            contained
519964e468SBram Moolenaarsyn match  rubyNoInterpolation	      "\\#{"		      display contained
529964e468SBram Moolenaarsyn match  rubyNoInterpolation	      "\\#\%(\$\|@@\=\)\w\+"  display contained
53c1762ccbSBram Moolenaarsyn match  rubyNoInterpolation	      "\\#\$\W"		      display contained
546b730e11SBram Moolenaar
556b730e11SBram Moolenaarsyn match rubyDelimEscape	"\\[(<{\[)>}\]]" transparent display contained contains=NONE
566b730e11SBram Moolenaar
57c236c16dSBram Moolenaarsyn region rubyNestedParentheses    start="("  skip="\\\\\|\\)"  matchgroup=rubyString end=")"	transparent contained
58c236c16dSBram Moolenaarsyn region rubyNestedCurlyBraces    start="{"  skip="\\\\\|\\}"  matchgroup=rubyString end="}"	transparent contained
59c236c16dSBram Moolenaarsyn region rubyNestedAngleBrackets  start="<"  skip="\\\\\|\\>"  matchgroup=rubyString end=">"	transparent contained
60c236c16dSBram Moolenaarsyn region rubyNestedSquareBrackets start="\[" skip="\\\\\|\\\]" matchgroup=rubyString end="\]"	transparent contained
616b730e11SBram Moolenaar
62c236c16dSBram Moolenaar" These are mostly Oniguruma ready
63c236c16dSBram Moolenaarsyn region rubyRegexpComment	matchgroup=rubyRegexpSpecial   start="(?#"								  skip="\\)"  end=")"  contained
64c236c16dSBram Moolenaarsyn region rubyRegexpParens	matchgroup=rubyRegexpSpecial   start="(\(?:\|?<\=[=!]\|?>\|?<[a-z_]\w*>\|?[imx]*-[imx]*:\=\|\%(?#\)\@!\)" skip="\\)"  end=")"  contained transparent contains=@rubyRegexpSpecial
65c236c16dSBram Moolenaarsyn region rubyRegexpBrackets	matchgroup=rubyRegexpCharClass start="\[\^\="								  skip="\\\]" end="\]" contained transparent contains=rubyStringEscape,rubyRegexpEscape,rubyRegexpCharClass oneline
66c236c16dSBram Moolenaarsyn match  rubyRegexpCharClass	"\\[DdHhSsWw]"	       contained display
67c236c16dSBram Moolenaarsyn match  rubyRegexpCharClass	"\[:\^\=\%(alnum\|alpha\|ascii\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|xdigit\):\]" contained
68*1d68952aSBram Moolenaarsyn match  rubyRegexpEscape	"\\[].*?+^$|\\/(){}[]" contained
69c236c16dSBram Moolenaarsyn match  rubyRegexpQuantifier	"[*?+][?+]\="	       contained display
70c236c16dSBram Moolenaarsyn match  rubyRegexpQuantifier	"{\d\+\%(,\d*\)\=}?\=" contained display
71c236c16dSBram Moolenaarsyn match  rubyRegexpAnchor	"[$^]\|\\[ABbGZz]"     contained display
72c236c16dSBram Moolenaarsyn match  rubyRegexpDot	"\."		       contained display
73c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	"|"		       contained display
74c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	"\\[1-9]\d\=\d\@!"     contained display
75c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	"\\k<\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\=>" contained display
76c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	"\\k'\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\='" contained display
77c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	"\\g<\%([a-z_]\w*\|-\=\d\+\)>" contained display
78c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	"\\g'\%([a-z_]\w*\|-\=\d\+\)'" contained display
79c236c16dSBram Moolenaar
80c236c16dSBram Moolenaarsyn cluster rubyStringSpecial	      contains=rubyInterpolation,rubyNoInterpolation,rubyStringEscape
816b730e11SBram Moolenaarsyn cluster rubyExtendedStringSpecial contains=@rubyStringSpecial,rubyNestedParentheses,rubyNestedCurlyBraces,rubyNestedAngleBrackets,rubyNestedSquareBrackets
82c236c16dSBram Moolenaarsyn cluster rubyRegexpSpecial	      contains=rubyInterpolation,rubyNoInterpolation,rubyStringEscape,rubyRegexpSpecial,rubyRegexpEscape,rubyRegexpBrackets,rubyRegexpCharClass,rubyRegexpDot,rubyRegexpQuantifier,rubyRegexpAnchor,rubyRegexpParens,rubyRegexpComment
83071d4279SBram Moolenaar
84071d4279SBram Moolenaar" Numbers and ASCII Codes
85c1762ccbSBram Moolenaarsyn match rubyASCIICode	"\%(\w\|[]})\"'/]\)\@<!\%(?\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\=\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)\)"
86*1d68952aSBram Moolenaarsyn match rubyInteger	"\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[xX]\x\+\%(_\x\+\)*\>"								display
87*1d68952aSBram Moolenaarsyn match rubyInteger	"\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0[dD]\)\=\%(0\|[1-9]\d*\%(_\d\+\)*\)\>"						display
88*1d68952aSBram Moolenaarsyn match rubyInteger	"\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[oO]\=\o\+\%(_\o\+\)*\>"								display
89*1d68952aSBram Moolenaarsyn match rubyInteger	"\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[bB][01]\+\%(_[01]\+\)*\>"								display
90*1d68952aSBram Moolenaarsyn match rubyFloat	"\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\.\d\+\%(_\d\+\)*\>"					display
91*1d68952aSBram Moolenaarsyn match rubyFloat	"\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\%(\.\d\+\%(_\d\+\)*\)\=\%([eE][-+]\=\d\+\%(_\d\+\)*\)\>"	display
92071d4279SBram Moolenaar
936b730e11SBram Moolenaar" Identifiers
946b730e11SBram Moolenaarsyn match rubyLocalVariableOrMethod "\<[_[:lower:]][_[:alnum:]]*[?!=]\=" contains=NONE display transparent
956b730e11SBram Moolenaarsyn match rubyBlockArgument	    "&[_[:lower:]][_[:alnum:]]"		 contains=NONE display transparent
96071d4279SBram Moolenaar
979964e468SBram Moolenaarsyn match  rubyConstant		"\%(\%([.@$]\@<!\.\)\@<!\<\|::\)\_s*\zs\u\w*\%(\>\|::\)\@=\%(\s*(\)\@!"
986b730e11SBram Moolenaarsyn match  rubyClassVariable	"@@\h\w*" display
996b730e11SBram Moolenaarsyn match  rubyInstanceVariable "@\h\w*"  display
1006b730e11SBram Moolenaarsyn match  rubyGlobalVariable	"$\%(\h\w*\|-.\)"
101c1762ccbSBram Moolenaarsyn match  rubySymbol		"[]})\"':]\@<!:\%(\^\|\~\|<<\|<=>\|<=\|<\|===\|==\|=\~\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)"
102c1762ccbSBram Moolenaarsyn match  rubySymbol		"[]})\"':]\@<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)"
103c1762ccbSBram Moolenaarsyn match  rubySymbol		"[]})\"':]\@<!:\%(\$\|@@\=\)\=\h\w*"
104c236c16dSBram Moolenaarsyn match  rubySymbol		"[]})\"':]\@<!:\h\w*\%([?!=]>\@!\)\="
105*1d68952aSBram Moolenaarsyn match  rubySymbol		"\%([{(,]\_s*\)\@<=\l\w*[!?]\=::\@!"he=e-1
106*1d68952aSBram Moolenaarsyn match  rubySymbol		"[]})\"':]\@<!\h\w*[!?]\=:\s\@="he=e-1
107*1d68952aSBram Moolenaarsyn region rubySymbol		start="[]})\"':]\@<!:'"  end="'"  skip="\\\\\|\\'"  contains=rubyQuoteEscape fold
108c1762ccbSBram Moolenaarsyn region rubySymbol		start="[]})\"':]\@<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial fold
109071d4279SBram Moolenaar
110c1762ccbSBram Moolenaarsyn match  rubyBlockParameter	  "\h\w*" contained
111c1762ccbSBram Moolenaarsyn region rubyBlockParameterList start="\%(\%(\<do\>\|{\)\s*\)\@<=|" end="|" oneline display contains=rubyBlockParameter
112c1762ccbSBram Moolenaar
113c236c16dSBram Moolenaarsyn match rubyInvalidVariable	 "$[^ A-Za-z_-]"
1146b730e11SBram Moolenaarsyn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~1-9]#
1156b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$_\>"											   display
1166b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$-[0FIKadilpvw]\>"									   display
1176b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>"					   display
1181e015460SBram Moolenaarsyn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display
1196b730e11SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(MatchingData\|ARGF\|ARGV\|ENV\)\>\%(\s*(\)\@!"
1206b730e11SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(DATA\|FALSE\|NIL\|RUBY_PLATFORM\|RUBY_RELEASE_DATE\)\>\%(\s*(\)\@!"
1216b730e11SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(RUBY_VERSION\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!"
122071d4279SBram Moolenaar"Obsolete Global Constants
1236b730e11SBram Moolenaar"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(PLATFORM\|RELEASE_DATE\|VERSION\)\>"
1246b730e11SBram Moolenaar"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(NotImplementError\)\>"
125071d4279SBram Moolenaar
126071d4279SBram Moolenaar" Normal Regular Expression
127c236c16dSBram Moolenaarsyn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\|else\)\|[;\~=!|&(,[>]\)\s*\)\@<=/" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial keepend fold
128c236c16dSBram Moolenaarsyn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\h\k*\s\+\)\@<=/[ \t=]\@!" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial fold
129c236c16dSBram Moolenaar
130c236c16dSBram Moolenaar" Generalized Regular Expression
131c236c16dSBram Moolenaarsyn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)"	end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial fold
132c236c16dSBram Moolenaarsyn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r{"				end="}[iomxneus]*"   skip="\\\\\|\\}"	contains=@rubyRegexpSpecial fold
133c236c16dSBram Moolenaarsyn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r<"				end=">[iomxneus]*"   skip="\\\\\|\\>"	contains=@rubyRegexpSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold
134c236c16dSBram Moolenaarsyn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\["				end="\][iomxneus]*"  skip="\\\\\|\\\]"	contains=@rubyRegexpSpecial fold
135c236c16dSBram Moolenaarsyn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r("				end=")[iomxneus]*"   skip="\\\\\|\\)"	contains=@rubyRegexpSpecial fold
1366b730e11SBram Moolenaar
1376b730e11SBram Moolenaar" Normal String and Shell Command Output
1389964e468SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial fold
139*1d68952aSBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="'"	end="'"  skip="\\\\\|\\'"  contains=rubyQuoteEscape    fold
1409964e468SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="`"	end="`"  skip="\\\\\|\\`"  contains=@rubyStringSpecial fold
1416b730e11SBram Moolenaar
1426b730e11SBram Moolenaar" Generalized Single Quoted String, Symbol and Array of Strings
143c1762ccbSBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
144c1762ccbSBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qw]{"				   end="}"   skip="\\\\\|\\}"	fold contains=rubyNestedCurlyBraces,rubyDelimEscape
145c1762ccbSBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qw]<"				   end=">"   skip="\\\\\|\\>"	fold contains=rubyNestedAngleBrackets,rubyDelimEscape
146c1762ccbSBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\["				   end="\]"  skip="\\\\\|\\\]"	fold contains=rubyNestedSquareBrackets,rubyDelimEscape
147c1762ccbSBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qw]("				   end=")"   skip="\\\\\|\\)"	fold contains=rubyNestedParentheses,rubyDelimEscape
148c236c16dSBram Moolenaarsyn region rubySymbol matchgroup=rubySymbolDelimiter start="%[s]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)"  end="\z1" skip="\\\\\|\\\z1" fold
149c236c16dSBram Moolenaarsyn region rubySymbol matchgroup=rubySymbolDelimiter start="%[s]{"				   end="}"   skip="\\\\\|\\}"	fold contains=rubyNestedCurlyBraces,rubyDelimEscape
150c236c16dSBram Moolenaarsyn region rubySymbol matchgroup=rubySymbolDelimiter start="%[s]<"				   end=">"   skip="\\\\\|\\>"	fold contains=rubyNestedAngleBrackets,rubyDelimEscape
151c236c16dSBram Moolenaarsyn region rubySymbol matchgroup=rubySymbolDelimiter start="%[s]\["				   end="\]"  skip="\\\\\|\\\]"	fold contains=rubyNestedSquareBrackets,rubyDelimEscape
152c236c16dSBram Moolenaarsyn region rubySymbol matchgroup=rubySymbolDelimiter start="%[s]("				   end=")"   skip="\\\\\|\\)"	fold contains=rubyNestedParentheses,rubyDelimEscape
1536b730e11SBram Moolenaar
1546b730e11SBram Moolenaar" Generalized Double Quoted String and Array of Strings and Shell Command Output
1556b730e11SBram Moolenaar" Note: %= is not matched here as the beginning of a double quoted string
1566b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)"	    end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
1576b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
1586b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\={"				    end="}"   skip="\\\\\|\\}"	 contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape    fold
1596b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=<"				    end=">"   skip="\\\\\|\\>"	 contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape  fold
1606b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=\["				    end="\]"  skip="\\\\\|\\\]"	 contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold
1616b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=("				    end=")"   skip="\\\\\|\\)"	 contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape    fold
162071d4279SBram Moolenaar
163071d4279SBram Moolenaar" Here Document
164c236c16dSBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs\%(\h\w*\)+	 end=+$+ oneline contains=ALLBUT,@rubyNotTop
165c236c16dSBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs"\%([^"]*\)"+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
166c236c16dSBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs'\%([^']*\)'+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
167c236c16dSBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs`\%([^`]*\)`+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
168071d4279SBram Moolenaar
169c1762ccbSBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<\z(\h\w*\)\ze+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
170c1762ccbSBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<"\z([^"]*\)"\ze+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
171c1762ccbSBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<'\z([^']*\)'\ze+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart			fold keepend
172c1762ccbSBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<`\z([^`]*\)`\ze+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
1736b730e11SBram Moolenaar
174c1762ccbSBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-\z(\h\w*\)\ze+hs=s+3    matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
175c1762ccbSBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-"\z([^"]*\)"\ze+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
176c1762ccbSBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-'\z([^']*\)'\ze+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart		     fold keepend
177c1762ccbSBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-`\z([^`]*\)`\ze+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
1786b730e11SBram Moolenaar
1796b730e11SBram Moolenaarif exists('main_syntax') && main_syntax == 'eruby'
180d5cdbeb8SBram Moolenaar  let b:ruby_no_expensive = 1
1816b730e11SBram Moolenaarend
182071d4279SBram Moolenaar
1839964e468SBram Moolenaarsyn match  rubyAliasDeclaration    "[^[:space:];#.()]\+" contained contains=rubySymbol,rubyGlobalVariable,rubyPredefinedVariable nextgroup=rubyAliasDeclaration2 skipwhite
1849964e468SBram Moolenaarsyn match  rubyAliasDeclaration2   "[^[:space:];#.()]\+" contained contains=rubySymbol,rubyGlobalVariable,rubyPredefinedVariable
1859964e468SBram Moolenaarsyn match  rubyMethodDeclaration   "[^[:space:];#(]\+"	 contained contains=rubyConstant,rubyBoolean,rubyPseudoVariable,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable
186c236c16dSBram Moolenaarsyn match  rubyClassDeclaration    "[^[:space:];#<]\+"	 contained contains=rubyConstant,rubyOperator
187c236c16dSBram Moolenaarsyn match  rubyModuleDeclaration   "[^[:space:];#<]\+"	 contained contains=rubyConstant,rubyOperator
188*1d68952aSBram Moolenaarsyn match  rubyFunction "\<[_[:alpha:]][_[:alnum:]]*[?!=]\=[[:alnum:]_.:?!=]\@!" contained containedin=rubyMethodDeclaration
1899964e468SBram Moolenaarsyn match  rubyFunction "\%(\s\|^\)\@<=[_[:alpha:]][_[:alnum:]]*[?!=]\=\%(\s\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2
1909964e468SBram Moolenaarsyn match  rubyFunction "\%([[:space:].]\|^\)\@<=\%(\[\]=\=\|\*\*\|[+-]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|==\|=\~\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration
191c1762ccbSBram Moolenaar
192c236c16dSBram Moolenaarsyn cluster rubyDeclaration contains=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration,rubyModuleDeclaration,rubyClassDeclaration,rubyFunction,rubyBlockParameter
193c236c16dSBram Moolenaar
194*1d68952aSBram Moolenaar" Keywords
195*1d68952aSBram Moolenaar" Note: the following keywords have already been defined:
196*1d68952aSBram Moolenaar" begin case class def do end for if module unless until while
197*1d68952aSBram Moolenaarsyn match   rubyControl	       "\<\%(and\|break\|in\|next\|not\|or\|redo\|rescue\|retry\|return\)\>[?!]\@!"
198*1d68952aSBram Moolenaarsyn match   rubyOperator       "\<defined?" display
199*1d68952aSBram Moolenaarsyn match   rubyKeyword	       "\<\%(super\|yield\)\>[?!]\@!"
200*1d68952aSBram Moolenaarsyn match   rubyBoolean	       "\<\%(true\|false\)\>[?!]\@!"
201*1d68952aSBram Moolenaarsyn match   rubyPseudoVariable "\<\%(nil\|self\|__FILE__\|__LINE__\)\>[?!]\@!"
202*1d68952aSBram Moolenaarsyn match   rubyBeginEnd       "\<\%(BEGIN\|END\)\>[?!]\@!"
203*1d68952aSBram Moolenaar
204c1762ccbSBram Moolenaar" Expensive Mode - match 'end' with the appropriate opening keyword for syntax
205c1762ccbSBram Moolenaar" based folding and special highlighting of module/class/method definitions
206d5cdbeb8SBram Moolenaarif !exists("b:ruby_no_expensive") && !exists("ruby_no_expensive")
2079964e468SBram Moolenaar  syn match  rubyDefine "\<alias\>"  nextgroup=rubyAliasDeclaration  skipwhite skipnl
2089964e468SBram Moolenaar  syn match  rubyDefine "\<def\>"    nextgroup=rubyMethodDeclaration skipwhite skipnl
209c236c16dSBram Moolenaar  syn match  rubyDefine "\<undef\>"  nextgroup=rubyFunction	     skipwhite skipnl
2109964e468SBram Moolenaar  syn match  rubyClass	"\<class\>"  nextgroup=rubyClassDeclaration  skipwhite skipnl
2119964e468SBram Moolenaar  syn match  rubyModule "\<module\>" nextgroup=rubyModuleDeclaration skipwhite skipnl
212*1d68952aSBram Moolenaar
213*1d68952aSBram Moolenaar  syn region rubyMethodBlock start="\<def\>"	matchgroup=rubyDefine end="\%(\<def\_s\+\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop fold
214c236c16dSBram Moolenaar  syn region rubyBlock	     start="\<class\>"	matchgroup=rubyClass  end="\<end\>"		       contains=ALLBUT,@rubyNotTop fold
215c236c16dSBram Moolenaar  syn region rubyBlock	     start="\<module\>" matchgroup=rubyModule end="\<end\>"		       contains=ALLBUT,@rubyNotTop fold
216071d4279SBram Moolenaar
2176b730e11SBram Moolenaar  " modifiers
218c1762ccbSBram Moolenaar  syn match rubyConditionalModifier "\<\%(if\|unless\)\>"    display
219c1762ccbSBram Moolenaar  syn match rubyRepeatModifier	     "\<\%(while\|until\)\>" display
220071d4279SBram Moolenaar
221c236c16dSBram Moolenaar  syn region rubyDoBlock      matchgroup=rubyControl start="\<do\>" end="\<end\>"                 contains=ALLBUT,@rubyNotTop fold
222c1762ccbSBram Moolenaar  " curly bracket block or hash literal
223c236c16dSBram Moolenaar  syn region rubyCurlyBlock   start="{" end="}"							  contains=ALLBUT,@rubyNotTop fold
224c236c16dSBram Moolenaar  syn region rubyArrayLiteral matchgroup=rubyArrayDelimiter start="\%(\w\|[\]})]\)\@<!\[" end="]" contains=ALLBUT,@rubyNotTop fold
225071d4279SBram Moolenaar
226c1762ccbSBram Moolenaar  " statements without 'do'
227c236c16dSBram Moolenaar  syn region rubyBlockExpression       matchgroup=rubyControl	  start="\<begin\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold
228c236c16dSBram Moolenaar  syn region rubyCaseExpression	       matchgroup=rubyConditional start="\<case\>"  end="\<end\>" contains=ALLBUT,@rubyNotTop fold
229c236c16dSBram Moolenaar  syn region rubyConditionalExpression matchgroup=rubyConditional start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+=-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![?!]\)\s*\)\@<=\%(if\|unless\)\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold
230071d4279SBram Moolenaar
231c236c16dSBram Moolenaar  syn match rubyConditional "\<\%(then\|else\|when\)\>[?!]\@!"	contained containedin=rubyCaseExpression
232c236c16dSBram Moolenaar  syn match rubyConditional "\<\%(then\|else\|elsif\)\>[?!]\@!" contained containedin=rubyConditionalExpression
233c1762ccbSBram Moolenaar
234*1d68952aSBram Moolenaar  syn match rubyExceptional	  "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>[?!]\@!" contained containedin=rubyBlockExpression
235*1d68952aSBram Moolenaar  syn match rubyMethodExceptional "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>[?!]\@!" contained containedin=rubyMethodBlock
236*1d68952aSBram Moolenaar
237c1762ccbSBram Moolenaar  " statements with optional 'do'
238c236c16dSBram Moolenaar  syn region rubyOptionalDoLine   matchgroup=rubyRepeat start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyOptionalDo end="\%(\<do\>\)" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyNotTop
239c236c16dSBram Moolenaar  syn region rubyRepeatExpression start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyRepeat end="\<end\>" contains=ALLBUT,@rubyNotTop nextgroup=rubyOptionalDoLine fold
240071d4279SBram Moolenaar
241071d4279SBram Moolenaar  if !exists("ruby_minlines")
242071d4279SBram Moolenaar    let ruby_minlines = 50
243071d4279SBram Moolenaar  endif
244071d4279SBram Moolenaar  exec "syn sync minlines=" . ruby_minlines
245071d4279SBram Moolenaar
2466b730e11SBram Moolenaarelse
247c236c16dSBram Moolenaar  syn match rubyControl "\<def\>[?!]\@!"    nextgroup=rubyMethodDeclaration skipwhite skipnl
248c236c16dSBram Moolenaar  syn match rubyControl "\<class\>[?!]\@!"  nextgroup=rubyClassDeclaration  skipwhite skipnl
249c236c16dSBram Moolenaar  syn match rubyControl "\<module\>[?!]\@!" nextgroup=rubyModuleDeclaration skipwhite skipnl
250*1d68952aSBram Moolenaar  syn match rubyControl "\<\%(case\|begin\|do\|for\|if\|unless\|while\|until\|else\|elsif\|ensure\|then\|when\|end\)\>[?!]\@!"
251c236c16dSBram Moolenaar  syn match rubyKeyword "\<\%(alias\|undef\)\>[?!]\@!"
2526b730e11SBram Moolenaarendif
253071d4279SBram Moolenaar
2546b730e11SBram Moolenaar" Special Methods
2556b730e11SBram Moolenaarif !exists("ruby_no_special_methods")
256c236c16dSBram Moolenaar  syn keyword rubyAccess    public protected private module_function
257c236c16dSBram Moolenaar  " attr is a common variable name
258c236c16dSBram Moolenaar  syn match   rubyAttribute "\%(\%(^\|;\)\s*\)\@<=attr\>\(\s*[.=]\)\@!"
259c236c16dSBram Moolenaar  syn keyword rubyAttribute attr_accessor attr_reader attr_writer
260c236c16dSBram Moolenaar  syn match   rubyControl   "\<\%(exit!\|\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>[?!]\@!\)"
2616b730e11SBram Moolenaar  syn keyword rubyEval	    eval class_eval instance_eval module_eval
2626b730e11SBram Moolenaar  syn keyword rubyException raise fail catch throw
263c236c16dSBram Moolenaar  " false positive with 'include?'
264c236c16dSBram Moolenaar  syn match   rubyInclude   "\<include\>[?!]\@!"
265c236c16dSBram Moolenaar  syn keyword rubyInclude   autoload extend load require
2666b730e11SBram Moolenaar  syn keyword rubyKeyword   callcc caller lambda proc
267071d4279SBram Moolenaarendif
268071d4279SBram Moolenaar
2696b730e11SBram Moolenaar" Comments and Documentation
2706b730e11SBram Moolenaarsyn match   rubySharpBang "\%^#!.*" display
271c1762ccbSBram Moolenaarsyn keyword rubyTodo	  FIXME NOTE TODO OPTIMIZE XXX contained
2726b730e11SBram Moolenaarsyn match   rubyComment   "#.*" contains=rubySharpBang,rubySpaceError,rubyTodo,@Spell
2739964e468SBram Moolenaarif !exists("ruby_no_comment_fold")
2749964e468SBram Moolenaar  syn region rubyMultilineComment start="\%(\%(^\s*#.*\n\)\@<!\%(^\s*#.*\n\)\)\%(\(^\s*#.*\n\)\{1,}\)\@=" end="\%(^\s*#.*\n\)\@<=\%(^\s*#.*\n\)\%(^\s*#\)\@!" contains=rubyComment transparent fold keepend
275c1762ccbSBram Moolenaar  syn region rubyDocumentation	  start="^=begin\ze\%(\s.*\)\=$" end="^=end\s*$" contains=rubySpaceError,rubyTodo,@Spell fold
2769964e468SBram Moolenaarelse
2779964e468SBram Moolenaar  syn region rubyDocumentation	  start="^=begin\s*$" end="^=end\s*$" contains=rubySpaceError,rubyTodo,@Spell
2789964e468SBram Moolenaarendif
2796b730e11SBram Moolenaar
2806b730e11SBram Moolenaar" Note: this is a hack to prevent 'keywords' being highlighted as such when called as methods with an explicit receiver
2816b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(alias\|and\|begin\|break\|case\|class\|def\|defined\|do\|else\)\>"		  transparent contains=NONE
2826b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(elsif\|end\|ensure\|false\|for\|if\|in\|module\|next\|nil\)\>"		  transparent contains=NONE
2836b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(not\|or\|redo\|rescue\|retry\|return\|self\|super\|then\|true\)\>"		  transparent contains=NONE
2846b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(undef\|unless\|until\|when\|while\|yield\|BEGIN\|END\|__FILE__\|__LINE__\)\>" transparent contains=NONE
2856b730e11SBram Moolenaar
286c236c16dSBram Moolenaarsyn match rubyKeywordAsMethod "\<\%(alias\|begin\|case\|class\|def\|do\|end\)[?!]" transparent contains=NONE
287c236c16dSBram Moolenaarsyn match rubyKeywordAsMethod "\<\%(if\|module\|undef\|unless\|until\|while\)[?!]" transparent contains=NONE
288c236c16dSBram Moolenaar
2896b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(abort\|at_exit\|attr\|attr_accessor\|attr_reader\)\>"   transparent contains=NONE
2906b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(attr_writer\|autoload\|callcc\|catch\|caller\)\>"	    transparent contains=NONE
2916b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(eval\|class_eval\|instance_eval\|module_eval\|exit\)\>" transparent contains=NONE
2926b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(extend\|fail\|fork\|include\|lambda\)\>"		    transparent contains=NONE
2936b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(load\|loop\|private\|proc\|protected\)\>"		    transparent contains=NONE
2946b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(public\|require\|raise\|throw\|trap\)\>"		    transparent contains=NONE
295071d4279SBram Moolenaar
296071d4279SBram Moolenaar" __END__ Directive
2976b730e11SBram Moolenaarsyn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" fold
298071d4279SBram Moolenaar
299c1762ccbSBram Moolenaarhi def link rubyClass			rubyDefine
300c1762ccbSBram Moolenaarhi def link rubyModule			rubyDefine
301*1d68952aSBram Moolenaarhi def link rubyMethodExceptional	rubyDefine
302c1762ccbSBram Moolenaarhi def link rubyDefine			Define
303c1762ccbSBram Moolenaarhi def link rubyFunction		Function
304c1762ccbSBram Moolenaarhi def link rubyConditional		Conditional
305c1762ccbSBram Moolenaarhi def link rubyConditionalModifier	rubyConditional
306*1d68952aSBram Moolenaarhi def link rubyExceptional		rubyConditional
307c1762ccbSBram Moolenaarhi def link rubyRepeat			Repeat
308c1762ccbSBram Moolenaarhi def link rubyRepeatModifier		rubyRepeat
309c1762ccbSBram Moolenaarhi def link rubyOptionalDo		rubyRepeat
310c1762ccbSBram Moolenaarhi def link rubyControl			Statement
311c1762ccbSBram Moolenaarhi def link rubyInclude			Include
312c1762ccbSBram Moolenaarhi def link rubyInteger			Number
313c1762ccbSBram Moolenaarhi def link rubyASCIICode		Character
314c1762ccbSBram Moolenaarhi def link rubyFloat			Float
315c1762ccbSBram Moolenaarhi def link rubyBoolean			Boolean
316c1762ccbSBram Moolenaarhi def link rubyException		Exception
3176b730e11SBram Moolenaarif !exists("ruby_no_identifiers")
318c1762ccbSBram Moolenaar  hi def link rubyIdentifier		Identifier
3196b730e11SBram Moolenaarelse
320c1762ccbSBram Moolenaar  hi def link rubyIdentifier		NONE
3216b730e11SBram Moolenaarendif
322c1762ccbSBram Moolenaarhi def link rubyClassVariable		rubyIdentifier
323c1762ccbSBram Moolenaarhi def link rubyConstant		Type
324c1762ccbSBram Moolenaarhi def link rubyGlobalVariable		rubyIdentifier
325c1762ccbSBram Moolenaarhi def link rubyBlockParameter		rubyIdentifier
326c1762ccbSBram Moolenaarhi def link rubyInstanceVariable	rubyIdentifier
327c1762ccbSBram Moolenaarhi def link rubyPredefinedIdentifier	rubyIdentifier
328c1762ccbSBram Moolenaarhi def link rubyPredefinedConstant	rubyPredefinedIdentifier
329c1762ccbSBram Moolenaarhi def link rubyPredefinedVariable	rubyPredefinedIdentifier
330c1762ccbSBram Moolenaarhi def link rubySymbol			Constant
331c1762ccbSBram Moolenaarhi def link rubyKeyword			Keyword
332c1762ccbSBram Moolenaarhi def link rubyOperator		Operator
333c1762ccbSBram Moolenaarhi def link rubyPseudoOperator		rubyOperator
334c1762ccbSBram Moolenaarhi def link rubyBeginEnd		Statement
335c1762ccbSBram Moolenaarhi def link rubyAccess			Statement
336c1762ccbSBram Moolenaarhi def link rubyAttribute		Statement
337c1762ccbSBram Moolenaarhi def link rubyEval			Statement
338c1762ccbSBram Moolenaarhi def link rubyPseudoVariable		Constant
339071d4279SBram Moolenaar
340c1762ccbSBram Moolenaarhi def link rubyComment			Comment
341c1762ccbSBram Moolenaarhi def link rubyData			Comment
342c1762ccbSBram Moolenaarhi def link rubyDataDirective		Delimiter
343c1762ccbSBram Moolenaarhi def link rubyDocumentation		Comment
344c236c16dSBram Moolenaarhi def link rubyTodo			Todo
345c236c16dSBram Moolenaar
346*1d68952aSBram Moolenaarhi def link rubyQuoteEscape		rubyStringEscape
347c236c16dSBram Moolenaarhi def link rubyStringEscape		Special
348c1762ccbSBram Moolenaarhi def link rubyInterpolationDelimiter	Delimiter
349c1762ccbSBram Moolenaarhi def link rubyNoInterpolation		rubyString
350c1762ccbSBram Moolenaarhi def link rubySharpBang		PreProc
351c1762ccbSBram Moolenaarhi def link rubyRegexpDelimiter		rubyStringDelimiter
352c236c16dSBram Moolenaarhi def link rubySymbolDelimiter		rubyStringDelimiter
353c1762ccbSBram Moolenaarhi def link rubyStringDelimiter		Delimiter
354c1762ccbSBram Moolenaarhi def link rubyString			String
355c236c16dSBram Moolenaarhi def link rubyRegexpEscape		rubyRegexpSpecial
356c236c16dSBram Moolenaarhi def link rubyRegexpQuantifier	rubyRegexpSpecial
357c236c16dSBram Moolenaarhi def link rubyRegexpAnchor		rubyRegexpSpecial
358c236c16dSBram Moolenaarhi def link rubyRegexpDot		rubyRegexpCharClass
359c236c16dSBram Moolenaarhi def link rubyRegexpCharClass		rubyRegexpSpecial
360c236c16dSBram Moolenaarhi def link rubyRegexpSpecial		Special
361c236c16dSBram Moolenaarhi def link rubyRegexpComment		Comment
362c236c16dSBram Moolenaarhi def link rubyRegexp			rubyString
3636b730e11SBram Moolenaar
364c1762ccbSBram Moolenaarhi def link rubyInvalidVariable		Error
365c1762ccbSBram Moolenaarhi def link rubyError			Error
366c1762ccbSBram Moolenaarhi def link rubySpaceError		rubyError
367071d4279SBram Moolenaar
368071d4279SBram Moolenaarlet b:current_syntax = "ruby"
369071d4279SBram Moolenaar
370a7241f5fSBram Moolenaar" vim: nowrap sw=2 sts=2 ts=8 noet:
371