xref: /vim-8.2.3635/runtime/syntax/ruby.vim (revision 89bcfda6)
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]>
66b730e11SBram Moolenaar" ----------------------------------------------------------------------------
76b730e11SBram Moolenaar"
8071d4279SBram Moolenaar" Previous Maintainer:	Mirko Nasato
9071d4279SBram Moolenaar" Thanks to perl.vim authors, and to Reimer Behrends. :-) (MN)
106b730e11SBram Moolenaar" ----------------------------------------------------------------------------
11071d4279SBram Moolenaar
12*89bcfda6SBram Moolenaar" Prelude {{{1
13c1762ccbSBram Moolenaarif exists("b:current_syntax")
14071d4279SBram Moolenaar  finish
15071d4279SBram Moolenaarendif
16071d4279SBram Moolenaar
17*89bcfda6SBram Moolenaar" this file uses line continuations
18*89bcfda6SBram Moolenaarlet s:cpo_sav = &cpo
19*89bcfda6SBram Moolenaarset cpo&vim
20*89bcfda6SBram Moolenaar
21*89bcfda6SBram Moolenaar" Folding Config {{{1
226b730e11SBram Moolenaarif has("folding") && exists("ruby_fold")
236b730e11SBram Moolenaar  setlocal foldmethod=syntax
246b730e11SBram Moolenaarendif
256b730e11SBram Moolenaar
26*89bcfda6SBram Moolenaarlet s:foldable_groups = split(
27*89bcfda6SBram Moolenaar      \	  get(
28*89bcfda6SBram Moolenaar      \	    b:,
29*89bcfda6SBram Moolenaar      \	    'ruby_foldable_groups',
30*89bcfda6SBram Moolenaar      \	    get(g:, 'ruby_foldable_groups', 'ALL')
31*89bcfda6SBram Moolenaar      \	  )
32*89bcfda6SBram Moolenaar      \	)
33*89bcfda6SBram Moolenaar
34*89bcfda6SBram Moolenaarfunction! s:foldable(...) abort
35*89bcfda6SBram Moolenaar  if index(s:foldable_groups, 'ALL') > -1
36*89bcfda6SBram Moolenaar    return 1
37*89bcfda6SBram Moolenaar  endif
38*89bcfda6SBram Moolenaar
39*89bcfda6SBram Moolenaar  for l:i in a:000
40*89bcfda6SBram Moolenaar    if index(s:foldable_groups, l:i) > -1
41*89bcfda6SBram Moolenaar      return 1
42*89bcfda6SBram Moolenaar    endif
43*89bcfda6SBram Moolenaar  endfor
44*89bcfda6SBram Moolenaar
45*89bcfda6SBram Moolenaar  return 0
46*89bcfda6SBram Moolenaarendfunction " }}}
47*89bcfda6SBram Moolenaar
481d68952aSBram Moolenaarsyn cluster rubyNotTop contains=@rubyExtendedStringSpecial,@rubyRegexpSpecial,@rubyDeclaration,rubyConditional,rubyExceptional,rubyMethodExceptional,rubyTodo
49c236c16dSBram Moolenaar
50*89bcfda6SBram Moolenaar" Whitespace Errors {{{1
516b730e11SBram Moolenaarif exists("ruby_space_errors")
526b730e11SBram Moolenaar  if !exists("ruby_no_trail_space_error")
536b730e11SBram Moolenaar    syn match rubySpaceError display excludenl "\s\+$"
546b730e11SBram Moolenaar  endif
556b730e11SBram Moolenaar  if !exists("ruby_no_tab_space_error")
566b730e11SBram Moolenaar    syn match rubySpaceError display " \+\t"me=e-1
576b730e11SBram Moolenaar  endif
586b730e11SBram Moolenaarendif
596b730e11SBram Moolenaar
60*89bcfda6SBram Moolenaar" Operators {{{1
619964e468SBram Moolenaarif exists("ruby_operators")
62*89bcfda6SBram Moolenaar  syn match  rubyOperator "[~!^|*/%+-]\|&\.\@!\|\%(class\s*\)\@<!<<\|<=>\|<=\|\%(<\|\<class\s\+\u\w*\s*\)\@<!<[^<]\@=\|===\|==\|=\~\|>>\|>=\|=\@1<!>\|\*\*\|\.\.\.\|\.\.\|::"
63ec7944aaSBram Moolenaar  syn match  rubyOperator "->\|-=\|/=\|\*\*=\|\*=\|&&=\|&=\|&&\|||=\||=\|||\|%=\|+=\|!\~\|!="
64*89bcfda6SBram Moolenaar  syn region rubyBracketOperator matchgroup=rubyOperator start="\%(\w[?!]\=\|[]})]\)\@2<=\[\s*" end="\s*]" contains=ALLBUT,@rubyNotTop
659964e468SBram Moolenaarendif
669964e468SBram Moolenaar
67*89bcfda6SBram Moolenaar" Expression Substitution and Backslash Notation {{{1
68c236c16dSBram Moolenaarsyn match rubyStringEscape "\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}"						    contained display
69c236c16dSBram Moolenaarsyn match rubyStringEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)" contained display
701d68952aSBram Moolenaarsyn match rubyQuoteEscape  "\\[\\']"											    contained display
719964e468SBram Moolenaar
72c236c16dSBram Moolenaarsyn region rubyInterpolation	      matchgroup=rubyInterpolationDelimiter start="#{" end="}" contained contains=ALLBUT,@rubyNotTop
739964e468SBram Moolenaarsyn match  rubyInterpolation	      "#\%(\$\|@@\=\)\w\+"    display contained contains=rubyInterpolationDelimiter,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable,rubyPredefinedVariable
749964e468SBram Moolenaarsyn match  rubyInterpolationDelimiter "#\ze\%(\$\|@@\=\)\w\+" display contained
75c1762ccbSBram Moolenaarsyn match  rubyInterpolation	      "#\$\%(-\w\|\W\)"       display contained contains=rubyInterpolationDelimiter,rubyPredefinedVariable,rubyInvalidVariable
76c1762ccbSBram Moolenaarsyn match  rubyInterpolationDelimiter "#\ze\$\%(-\w\|\W\)"    display contained
779964e468SBram Moolenaarsyn region rubyNoInterpolation	      start="\\#{" end="}"	      contained
789964e468SBram Moolenaarsyn match  rubyNoInterpolation	      "\\#{"		      display contained
799964e468SBram Moolenaarsyn match  rubyNoInterpolation	      "\\#\%(\$\|@@\=\)\w\+"  display contained
80c1762ccbSBram Moolenaarsyn match  rubyNoInterpolation	      "\\#\$\W"		      display contained
816b730e11SBram Moolenaar
82*89bcfda6SBram Moolenaarsyn match rubyDelimiterEscape	"\\[(<{\[)>}\]]" transparent display contained contains=NONE
836b730e11SBram Moolenaar
84c236c16dSBram Moolenaarsyn region rubyNestedParentheses    start="("  skip="\\\\\|\\)"  matchgroup=rubyString end=")"	transparent contained
85c236c16dSBram Moolenaarsyn region rubyNestedCurlyBraces    start="{"  skip="\\\\\|\\}"  matchgroup=rubyString end="}"	transparent contained
86c236c16dSBram Moolenaarsyn region rubyNestedAngleBrackets  start="<"  skip="\\\\\|\\>"  matchgroup=rubyString end=">"	transparent contained
87c236c16dSBram Moolenaarsyn region rubyNestedSquareBrackets start="\[" skip="\\\\\|\\\]" matchgroup=rubyString end="\]"	transparent contained
886b730e11SBram Moolenaar
89*89bcfda6SBram Moolenaar" Regular Expression Metacharacters {{{1
90c236c16dSBram Moolenaar" These are mostly Oniguruma ready
91c236c16dSBram Moolenaarsyn region rubyRegexpComment	matchgroup=rubyRegexpSpecial   start="(?#"								  skip="\\)"  end=")"  contained
92c236c16dSBram Moolenaarsyn region rubyRegexpParens	matchgroup=rubyRegexpSpecial   start="(\(?:\|?<\=[=!]\|?>\|?<[a-z_]\w*>\|?[imx]*-[imx]*:\=\|\%(?#\)\@!\)" skip="\\)"  end=")"  contained transparent contains=@rubyRegexpSpecial
93c236c16dSBram Moolenaarsyn region rubyRegexpBrackets	matchgroup=rubyRegexpCharClass start="\[\^\="								  skip="\\\]" end="\]" contained transparent contains=rubyStringEscape,rubyRegexpEscape,rubyRegexpCharClass oneline
94c236c16dSBram Moolenaarsyn match  rubyRegexpCharClass	"\\[DdHhSsWw]"	       contained display
95c236c16dSBram Moolenaarsyn match  rubyRegexpCharClass	"\[:\^\=\%(alnum\|alpha\|ascii\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|xdigit\):\]" contained
961d68952aSBram Moolenaarsyn match  rubyRegexpEscape	"\\[].*?+^$|\\/(){}[]" contained
97c236c16dSBram Moolenaarsyn match  rubyRegexpQuantifier	"[*?+][?+]\="	       contained display
98c236c16dSBram Moolenaarsyn match  rubyRegexpQuantifier	"{\d\+\%(,\d*\)\=}?\=" contained display
99c236c16dSBram Moolenaarsyn match  rubyRegexpAnchor	"[$^]\|\\[ABbGZz]"     contained display
100c236c16dSBram Moolenaarsyn match  rubyRegexpDot	"\."		       contained display
101c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	"|"		       contained display
102c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	"\\[1-9]\d\=\d\@!"     contained display
103c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	"\\k<\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\=>" contained display
104c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	"\\k'\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\='" contained display
105c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	"\\g<\%([a-z_]\w*\|-\=\d\+\)>" contained display
106c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	"\\g'\%([a-z_]\w*\|-\=\d\+\)'" contained display
107c236c16dSBram Moolenaar
108c236c16dSBram Moolenaarsyn cluster rubyStringSpecial	      contains=rubyInterpolation,rubyNoInterpolation,rubyStringEscape
1096b730e11SBram Moolenaarsyn cluster rubyExtendedStringSpecial contains=@rubyStringSpecial,rubyNestedParentheses,rubyNestedCurlyBraces,rubyNestedAngleBrackets,rubyNestedSquareBrackets
110c236c16dSBram Moolenaarsyn cluster rubyRegexpSpecial	      contains=rubyInterpolation,rubyNoInterpolation,rubyStringEscape,rubyRegexpSpecial,rubyRegexpEscape,rubyRegexpBrackets,rubyRegexpCharClass,rubyRegexpDot,rubyRegexpQuantifier,rubyRegexpAnchor,rubyRegexpParens,rubyRegexpComment
111071d4279SBram Moolenaar
112*89bcfda6SBram Moolenaar" Numbers and ASCII Codes {{{1
113*89bcfda6SBram Moolenaarsyn match rubyASCIICode "\%(\w\|[]})\"'/]\)\@1<!\%(?\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\=\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)\)"
114*89bcfda6SBram Moolenaarsyn match rubyInteger	"\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[xX]\x\+\%(_\x\+\)*r\=i\=\>"								display
115*89bcfda6SBram Moolenaarsyn match rubyInteger	"\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0[dD]\)\=\%(0\|[1-9]\d*\%(_\d\+\)*\)r\=i\=\>"						display
116*89bcfda6SBram Moolenaarsyn match rubyInteger	"\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[oO]\=\o\+\%(_\o\+\)*r\=i\=\>"								display
117*89bcfda6SBram Moolenaarsyn match rubyInteger	"\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[bB][01]\+\%(_[01]\+\)*r\=i\=\>"								display
118*89bcfda6SBram Moolenaarsyn match rubyFloat	"\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\.\d\+\%(_\d\+\)*r\=i\=\>"					display
119*89bcfda6SBram Moolenaarsyn match rubyFloat	"\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\%(\.\d\+\%(_\d\+\)*\)\=\%([eE][-+]\=\d\+\%(_\d\+\)*\)r\=i\=\>"	display
120071d4279SBram Moolenaar
121*89bcfda6SBram Moolenaar" Identifiers {{{1
1226b730e11SBram Moolenaarsyn match rubyLocalVariableOrMethod "\<[_[:lower:]][_[:alnum:]]*[?!=]\=" contains=NONE display transparent
1236b730e11SBram Moolenaarsyn match rubyBlockArgument	    "&[_[:lower:]][_[:alnum:]]"		 contains=NONE display transparent
124071d4279SBram Moolenaar
125*89bcfda6SBram Moolenaarsyn match  rubyConstant		"\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!"
126ec7944aaSBram Moolenaarsyn match  rubyClassVariable	"@@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display
127ec7944aaSBram Moolenaarsyn match  rubyInstanceVariable "@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*"	display
128ec7944aaSBram Moolenaarsyn match  rubyGlobalVariable	"$\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\|-.\)"
129*89bcfda6SBram Moolenaarsyn match  rubySymbol		"[]})\"':]\@1<!:\%(\^\|\~@\|\~\|<<\|<=>\|<=\|<\|===\|[=!]=\|[=!]\~\|!@\|!\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)"
130*89bcfda6SBram Moolenaarsyn match  rubySymbol		"[]})\"':]\@1<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)"
131*89bcfda6SBram Moolenaarsyn match  rubySymbol		"[]})\"':]\@1<!:\%(\$\|@@\=\)\=\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*"
132*89bcfda6SBram Moolenaarsyn match  rubySymbol		"[]})\"':]\@1<!:\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\%([?!=]>\@!\)\="
133*89bcfda6SBram Moolenaar
134*89bcfda6SBram Moolenaarif s:foldable(':')
135*89bcfda6SBram Moolenaar  syn region rubySymbol		start="[]})\"':]\@1<!:'"  end="'"  skip="\\\\\|\\'"  contains=rubyQuoteEscape fold
136*89bcfda6SBram Moolenaar  syn region rubySymbol		start="[]})\"':]\@1<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial fold
137*89bcfda6SBram Moolenaarelse
138*89bcfda6SBram Moolenaar  syn region rubySymbol		start="[]})\"':]\@1<!:'"  end="'"  skip="\\\\\|\\'"  contains=rubyQuoteEscape
139*89bcfda6SBram Moolenaar  syn region rubySymbol		start="[]})\"':]\@1<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial
140*89bcfda6SBram Moolenaarendif
141*89bcfda6SBram Moolenaar
142*89bcfda6SBram Moolenaarsyn match  rubyCapitalizedMethod	"\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)*\s*(\@="
143071d4279SBram Moolenaar
144ec7944aaSBram Moolenaarsyn match  rubyBlockParameter	  "\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" contained
145*89bcfda6SBram Moolenaarsyn region rubyBlockParameterList start="\%(\%(\<do\>\|{\)\_s*\)\@32<=|" end="|" oneline display contains=rubyBlockParameter
146c1762ccbSBram Moolenaar
147c236c16dSBram Moolenaarsyn match rubyInvalidVariable	 "$[^ A-Za-z_-]"
148ec7944aaSBram Moolenaarsyn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~]#
149ec7944aaSBram Moolenaarsyn match rubyPredefinedVariable "$\d\+"										   display
1506b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$_\>"											   display
1516b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$-[0FIKadilpvw]\>"									   display
1526b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>"					   display
1531e015460SBram Moolenaarsyn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display
154*89bcfda6SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\%(ARGF\|ARGV\|ENV\|DATA\|FALSE\|NIL\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!"
155*89bcfda6SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\%(RUBY_\%(VERSION\|RELEASE_DATE\|PLATFORM\|PATCHLEVEL\|REVISION\|DESCRIPTION\|COPYRIGHT\|ENGINE\)\)\>\%(\s*(\)\@!"
156071d4279SBram Moolenaar
157*89bcfda6SBram Moolenaar" Normal Regular Expression {{{1
158*89bcfda6SBram Moolenaarif s:foldable('/')
159*89bcfda6SBram 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
160c236c16dSBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\h\k*\s\+\)\@<=/[ \t=]\@!" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial fold
161*89bcfda6SBram Moolenaarelse
162*89bcfda6SBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\|else\)\|[;\~=!|&(,{[<>?:*+-]\)\s*\)\@<=/" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial
163*89bcfda6SBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\h\k*\s\+\)\@<=/[ \t=]\@!" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial
164*89bcfda6SBram Moolenaarendif
165c236c16dSBram Moolenaar
166*89bcfda6SBram Moolenaar" Generalized Regular Expression {{{1
167*89bcfda6SBram Moolenaarif s:foldable('%')
168c236c16dSBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial fold
169c236c16dSBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r{"				end="}[iomxneus]*"   skip="\\\\\|\\}"	 contains=@rubyRegexpSpecial fold
170*89bcfda6SBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r<"				end=">[iomxneus]*"   skip="\\\\\|\\>"	 contains=@rubyRegexpSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape fold
171c236c16dSBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\["				end="\][iomxneus]*"  skip="\\\\\|\\\]"	 contains=@rubyRegexpSpecial fold
172c236c16dSBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r("				end=")[iomxneus]*"   skip="\\\\\|\\)"	 contains=@rubyRegexpSpecial fold
173*89bcfda6SBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z(\s\)"				end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial fold
174*89bcfda6SBram Moolenaarelse
175*89bcfda6SBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial
176*89bcfda6SBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r{"				end="}[iomxneus]*"   skip="\\\\\|\\}"	 contains=@rubyRegexpSpecial
177*89bcfda6SBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r<"				end=">[iomxneus]*"   skip="\\\\\|\\>"	 contains=@rubyRegexpSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape
178*89bcfda6SBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\["				end="\][iomxneus]*"  skip="\\\\\|\\\]"	 contains=@rubyRegexpSpecial
179*89bcfda6SBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r("				end=")[iomxneus]*"   skip="\\\\\|\\)"	 contains=@rubyRegexpSpecial
180*89bcfda6SBram Moolenaar  syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z(\s\)"				end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial
181*89bcfda6SBram Moolenaarendif
1826b730e11SBram Moolenaar
183*89bcfda6SBram Moolenaar" Normal String {{{1
184*89bcfda6SBram Moolenaarlet s:spell_cluster = exists('ruby_spellcheck_strings') ? ',@Spell' : ''
185*89bcfda6SBram Moolenaarexe 'syn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" ' .
186*89bcfda6SBram Moolenaar      \ (s:foldable('%') ? 'fold' : '') . ' contains=@rubyStringSpecial' . s:spell_cluster
187*89bcfda6SBram Moolenaarexe 'syn region rubyString matchgroup=rubyStringDelimiter start="''" end="''" skip="\\\\\|\\''" ' .
188*89bcfda6SBram Moolenaar      \ (s:foldable('%') ? 'fold' : '') . ' contains=rubyQuoteEscape'	 . s:spell_cluster
189*89bcfda6SBram Moolenaar
190*89bcfda6SBram Moolenaar" Shell Command Output {{{1
191*89bcfda6SBram Moolenaarif s:foldable('%')
1929964e468SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@rubyStringSpecial fold
193*89bcfda6SBram Moolenaarelse
194*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@rubyStringSpecial
195*89bcfda6SBram Moolenaarendif
1966b730e11SBram Moolenaar
197*89bcfda6SBram Moolenaar" Generalized Single Quoted String, Symbol and Array of Strings {{{1
198*89bcfda6SBram Moolenaarif s:foldable('%')
199*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
200*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]{"				     end="}"   skip="\\\\\|\\}"	  fold contains=rubyNestedCurlyBraces,rubyDelimiterEscape
201*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]<"				     end=">"   skip="\\\\\|\\>"	  fold contains=rubyNestedAngleBrackets,rubyDelimiterEscape
202*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\["				     end="\]"  skip="\\\\\|\\\]"  fold contains=rubyNestedSquareBrackets,rubyDelimiterEscape
203*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]("				     end=")"   skip="\\\\\|\\)"	  fold contains=rubyNestedParentheses,rubyDelimiterEscape
204*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%q\z(\s\)"			     end="\z1" skip="\\\\\|\\\z1" fold
205ec7944aaSBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)"    end="\z1" skip="\\\\\|\\\z1" fold
206*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s{"				     end="}"   skip="\\\\\|\\}"	  fold contains=rubyNestedCurlyBraces,rubyDelimiterEscape
207*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s<"				     end=">"   skip="\\\\\|\\>"	  fold contains=rubyNestedAngleBrackets,rubyDelimiterEscape
208*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\["				     end="\]"  skip="\\\\\|\\\]"  fold contains=rubyNestedSquareBrackets,rubyDelimiterEscape
209*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s("				     end=")"   skip="\\\\\|\\)"	  fold contains=rubyNestedParentheses,rubyDelimiterEscape
210*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%s\z(\s\)"			     end="\z1" skip="\\\\\|\\\z1" fold
211*89bcfda6SBram Moolenaarelse
212*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1"
213*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]{"				     end="}"   skip="\\\\\|\\}"	  contains=rubyNestedCurlyBraces,rubyDelimiterEscape
214*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]<"				     end=">"   skip="\\\\\|\\>"	  contains=rubyNestedAngleBrackets,rubyDelimiterEscape
215*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\["				     end="\]"  skip="\\\\\|\\\]"  contains=rubyNestedSquareBrackets,rubyDelimiterEscape
216*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]("				     end=")"   skip="\\\\\|\\)"	  contains=rubyNestedParentheses,rubyDelimiterEscape
217*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%q\z(\s\)"			     end="\z1" skip="\\\\\|\\\z1"
218*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)"    end="\z1" skip="\\\\\|\\\z1"
219*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s{"				     end="}"   skip="\\\\\|\\}"	  contains=rubyNestedCurlyBraces,rubyDelimiterEscape
220*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s<"				     end=">"   skip="\\\\\|\\>"	  contains=rubyNestedAngleBrackets,rubyDelimiterEscape
221*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\["				     end="\]"  skip="\\\\\|\\\]"  contains=rubyNestedSquareBrackets,rubyDelimiterEscape
222*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s("				     end=")"   skip="\\\\\|\\)"	  contains=rubyNestedParentheses,rubyDelimiterEscape
223*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%s\z(\s\)"			     end="\z1" skip="\\\\\|\\\z1"
224*89bcfda6SBram Moolenaarendif
2256b730e11SBram Moolenaar
226*89bcfda6SBram Moolenaar" Generalized Double Quoted String and Array of Strings and Shell Command Output {{{1
2276b730e11SBram Moolenaar" Note: %= is not matched here as the beginning of a double quoted string
228*89bcfda6SBram Moolenaarif s:foldable('%')
2296b730e11SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)"	      end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
230*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
231*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\={"			      end="}"	skip="\\\\\|\\}"   contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimiterEscape    fold
232*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=<"			      end=">"	skip="\\\\\|\\>"   contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape  fold
233*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=\["			      end="\]"	skip="\\\\\|\\\]"  contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimiterEscape fold
234*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=("			      end=")"	skip="\\\\\|\\)"   contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimiterEscape    fold
235*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[Qx]\z(\s\)"			      end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
236*89bcfda6SBram Moolenaarelse
237*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)"	      end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial
238*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial
239*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\={"			      end="}"	skip="\\\\\|\\}"   contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimiterEscape
240*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=<"			      end=">"	skip="\\\\\|\\>"   contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape
241*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=\["			      end="\]"	skip="\\\\\|\\\]"  contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimiterEscape
242*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=("			      end=")"	skip="\\\\\|\\)"   contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimiterEscape
243*89bcfda6SBram Moolenaar  syn region rubyString matchgroup=rubyStringDelimiter start="%[Qx]\z(\s\)"			      end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial
244*89bcfda6SBram Moolenaarendif
245071d4279SBram Moolenaar
246*89bcfda6SBram Moolenaar" Array of Symbols {{{1
247*89bcfda6SBram Moolenaarif s:foldable('%')
248*89bcfda6SBram Moolenaar  " Array of Symbols
249*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1"	fold
250*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i{"				  end="}"   skip="\\\\\|\\}"	fold contains=rubyNestedCurlyBraces,rubyDelimiterEscape
251*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i<"				  end=">"   skip="\\\\\|\\>"	fold contains=rubyNestedAngleBrackets,rubyDelimiterEscape
252*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i\["				  end="\]"  skip="\\\\\|\\\]"	fold contains=rubyNestedSquareBrackets,rubyDelimiterEscape
253*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i("				  end=")"   skip="\\\\\|\\)"	fold contains=rubyNestedParentheses,rubyDelimiterEscape
254071d4279SBram Moolenaar
255*89bcfda6SBram Moolenaar  " Array of interpolated Symbols
256*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1"	contains=@rubyStringSpecial fold
257*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I{"				  end="}"   skip="\\\\\|\\}"	contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimiterEscape    fold
258*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I<"				  end=">"   skip="\\\\\|\\>"	contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape  fold
259*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I\["				  end="\]"  skip="\\\\\|\\\]"	contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimiterEscape fold
260*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I("				  end=")"   skip="\\\\\|\\)"	contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimiterEscape    fold
261*89bcfda6SBram Moolenaarelse
262*89bcfda6SBram Moolenaar  " Array of Symbols
263*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1"
264*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i{"				  end="}"   skip="\\\\\|\\}"	contains=rubyNestedCurlyBraces,rubyDelimiterEscape
265*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i<"				  end=">"   skip="\\\\\|\\>"	contains=rubyNestedAngleBrackets,rubyDelimiterEscape
266*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i\["				  end="\]"  skip="\\\\\|\\\]"	contains=rubyNestedSquareBrackets,rubyDelimiterEscape
267*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i("				  end=")"   skip="\\\\\|\\)"	contains=rubyNestedParentheses,rubyDelimiterEscape
2686b730e11SBram Moolenaar
269*89bcfda6SBram Moolenaar  " Array of interpolated Symbols
270*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1"	contains=@rubyStringSpecial
271*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I{"				  end="}"   skip="\\\\\|\\}"	contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimiterEscape
272*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I<"				  end=">"   skip="\\\\\|\\>"	contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape
273*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I\["				  end="\]"  skip="\\\\\|\\\]"	contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimiterEscape
274*89bcfda6SBram Moolenaar  syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I("				  end=")"   skip="\\\\\|\\)"	contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimiterEscape
275*89bcfda6SBram Moolenaarendif
2766b730e11SBram Moolenaar
277*89bcfda6SBram Moolenaar" Here Document {{{1
278*89bcfda6SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<[-~]\=\zs\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)+	 end=+$+ oneline contains=ALLBUT,@rubyNotTop
279*89bcfda6SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<[-~]\=\zs"\%([^"]*\)"+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
280*89bcfda6SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<[-~]\=\zs'\%([^']*\)'+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
281*89bcfda6SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<[-~]\=\zs`\%([^`]*\)`+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
282*89bcfda6SBram Moolenaar
283*89bcfda6SBram Moolenaarif s:foldable('<<')
284*89bcfda6SBram 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
285*89bcfda6SBram 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
286*89bcfda6SBram Moolenaar  syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc		    fold keepend
287*89bcfda6SBram 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
288*89bcfda6SBram Moolenaar
289*89bcfda6SBram 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
290*89bcfda6SBram 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
291*89bcfda6SBram 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
292*89bcfda6SBram 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
293*89bcfda6SBram Moolenaarelse
294*89bcfda6SBram 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
295*89bcfda6SBram Moolenaar  syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial keepend
296*89bcfda6SBram Moolenaar  syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc		    keepend
297*89bcfda6SBram Moolenaar  syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial keepend
298*89bcfda6SBram Moolenaar
299*89bcfda6SBram 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
300*89bcfda6SBram 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
301*89bcfda6SBram Moolenaar  syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart		    keepend
302*89bcfda6SBram 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
303*89bcfda6SBram Moolenaarendif
304*89bcfda6SBram Moolenaar
305*89bcfda6SBram Moolenaar" eRuby Config {{{1
3066b730e11SBram Moolenaarif exists('main_syntax') && main_syntax == 'eruby'
307d5cdbeb8SBram Moolenaar  let b:ruby_no_expensive = 1
3086b730e11SBram Moolenaarend
309071d4279SBram Moolenaar
310*89bcfda6SBram Moolenaar" Module, Class, Method and Alias Declarations {{{1
3119964e468SBram Moolenaarsyn match  rubyAliasDeclaration    "[^[:space:];#.()]\+" contained contains=rubySymbol,rubyGlobalVariable,rubyPredefinedVariable nextgroup=rubyAliasDeclaration2 skipwhite
3129964e468SBram Moolenaarsyn match  rubyAliasDeclaration2   "[^[:space:];#.()]\+" contained contains=rubySymbol,rubyGlobalVariable,rubyPredefinedVariable
3139964e468SBram Moolenaarsyn match  rubyMethodDeclaration   "[^[:space:];#(]\+"	 contained contains=rubyConstant,rubyBoolean,rubyPseudoVariable,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable
314c236c16dSBram Moolenaarsyn match  rubyClassDeclaration    "[^[:space:];#<]\+"	 contained contains=rubyConstant,rubyOperator
315c236c16dSBram Moolenaarsyn match  rubyModuleDeclaration   "[^[:space:];#<]\+"	 contained contains=rubyConstant,rubyOperator
3161d68952aSBram Moolenaarsyn match  rubyFunction "\<[_[:alpha:]][_[:alnum:]]*[?!=]\=[[:alnum:]_.:?!=]\@!" contained containedin=rubyMethodDeclaration
317*89bcfda6SBram Moolenaarsyn match  rubyFunction "\%(\s\|^\)\@1<=[_[:alpha:]][_[:alnum:]]*[?!=]\=\%(\s\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2
318*89bcfda6SBram Moolenaarsyn match  rubyFunction "\%([[:space:].]\|^\)\@2<=\%(\[\]=\=\|\*\*\|[-+!~]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|[=!]=\|[=!]\~\|!\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration
319c1762ccbSBram Moolenaar
320c236c16dSBram Moolenaarsyn cluster rubyDeclaration contains=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration,rubyModuleDeclaration,rubyClassDeclaration,rubyFunction,rubyBlockParameter
321c236c16dSBram Moolenaar
322*89bcfda6SBram Moolenaar" Keywords {{{1
3231d68952aSBram Moolenaar" Note: the following keywords have already been defined:
3241d68952aSBram Moolenaar" begin case class def do end for if module unless until while
3251d68952aSBram Moolenaarsyn match   rubyControl	       "\<\%(and\|break\|in\|next\|not\|or\|redo\|rescue\|retry\|return\)\>[?!]\@!"
3261d68952aSBram Moolenaarsyn match   rubyOperator       "\<defined?" display
3271d68952aSBram Moolenaarsyn match   rubyKeyword	       "\<\%(super\|yield\)\>[?!]\@!"
3281d68952aSBram Moolenaarsyn match   rubyBoolean	       "\<\%(true\|false\)\>[?!]\@!"
329*89bcfda6SBram Moolenaarsyn match   rubyPseudoVariable "\<\%(nil\|self\|__ENCODING__\|__dir__\|__FILE__\|__LINE__\|__callee__\|__method__\)\>[?!]\@!" " TODO: reorganise
3301d68952aSBram Moolenaarsyn match   rubyBeginEnd       "\<\%(BEGIN\|END\)\>[?!]\@!"
3311d68952aSBram Moolenaar
332*89bcfda6SBram Moolenaar" Expensive Mode {{{1
333*89bcfda6SBram Moolenaar" Match 'end' with the appropriate opening keyword for syntax based folding
334*89bcfda6SBram Moolenaar" and special highlighting of module/class/method definitions
335d5cdbeb8SBram Moolenaarif !exists("b:ruby_no_expensive") && !exists("ruby_no_expensive")
3369964e468SBram Moolenaar  syn match  rubyDefine "\<alias\>"  nextgroup=rubyAliasDeclaration  skipwhite skipnl
3379964e468SBram Moolenaar  syn match  rubyDefine "\<def\>"    nextgroup=rubyMethodDeclaration skipwhite skipnl
338c236c16dSBram Moolenaar  syn match  rubyDefine "\<undef\>"  nextgroup=rubyFunction	     skipwhite skipnl
3399964e468SBram Moolenaar  syn match  rubyClass	"\<class\>"  nextgroup=rubyClassDeclaration  skipwhite skipnl
3409964e468SBram Moolenaar  syn match  rubyModule "\<module\>" nextgroup=rubyModuleDeclaration skipwhite skipnl
3411d68952aSBram Moolenaar
342*89bcfda6SBram Moolenaar  if s:foldable('def')
3431d68952aSBram Moolenaar    syn region rubyMethodBlock start="\<def\>"	matchgroup=rubyDefine end="\%(\<def\_s\+\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop fold
344*89bcfda6SBram Moolenaar  else
345*89bcfda6SBram Moolenaar    syn region rubyMethodBlock start="\<def\>"	matchgroup=rubyDefine end="\%(\<def\_s\+\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop
346*89bcfda6SBram Moolenaar  endif
347*89bcfda6SBram Moolenaar
348*89bcfda6SBram Moolenaar  if s:foldable('class')
349c236c16dSBram Moolenaar    syn region rubyBlock start="\<class\>"	matchgroup=rubyClass end="\<end\>" contains=ALLBUT,@rubyNotTop fold
350*89bcfda6SBram Moolenaar  else
351*89bcfda6SBram Moolenaar    syn region rubyBlock start="\<class\>"	matchgroup=rubyClass end="\<end\>" contains=ALLBUT,@rubyNotTop
352*89bcfda6SBram Moolenaar  endif
353*89bcfda6SBram Moolenaar
354*89bcfda6SBram Moolenaar  if s:foldable('module')
355c236c16dSBram Moolenaar    syn region rubyBlock start="\<module\>" matchgroup=rubyModule end="\<end\>" contains=ALLBUT,@rubyNotTop fold
356*89bcfda6SBram Moolenaar  else
357*89bcfda6SBram Moolenaar    syn region rubyBlock start="\<module\>" matchgroup=rubyModule end="\<end\>" contains=ALLBUT,@rubyNotTop
358*89bcfda6SBram Moolenaar  endif
359071d4279SBram Moolenaar
3606b730e11SBram Moolenaar  " modifiers
361*89bcfda6SBram Moolenaar  syn match rubyLineContinuation    "\\$" nextgroup=rubyConditionalModifier,rubyRepeatModifier skipwhite skipnl
362*89bcfda6SBram Moolenaar  syn match rubyConditionalModifier "\<\%(if\|unless\)\>"
363*89bcfda6SBram Moolenaar  syn match rubyRepeatModifier	    "\<\%(while\|until\)\>"
364071d4279SBram Moolenaar
365*89bcfda6SBram Moolenaar  if s:foldable('do')
366c236c16dSBram Moolenaar    syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold
367*89bcfda6SBram Moolenaar  else
368*89bcfda6SBram Moolenaar    syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" end="\<end\>" contains=ALLBUT,@rubyNotTop
369*89bcfda6SBram Moolenaar  endif
370*89bcfda6SBram Moolenaar
371c1762ccbSBram Moolenaar  " curly bracket block or hash literal
372*89bcfda6SBram Moolenaar  if s:foldable('{')
373ec7944aaSBram Moolenaar    syn region rubyCurlyBlock matchgroup=rubyCurlyBlockDelimiter start="{" end="}" contains=ALLBUT,@rubyNotTop fold
374*89bcfda6SBram Moolenaar  else
375*89bcfda6SBram Moolenaar    syn region rubyCurlyBlock matchgroup=rubyCurlyBlockDelimiter start="{" end="}" contains=ALLBUT,@rubyNotTop
376*89bcfda6SBram Moolenaar  endif
377*89bcfda6SBram Moolenaar
378*89bcfda6SBram Moolenaar  if s:foldable('[')
379c236c16dSBram Moolenaar    syn region rubyArrayLiteral	matchgroup=rubyArrayDelimiter start="\%(\w\|[\]})]\)\@<!\[" end="]" contains=ALLBUT,@rubyNotTop fold
380*89bcfda6SBram Moolenaar  else
381*89bcfda6SBram Moolenaar    syn region rubyArrayLiteral	matchgroup=rubyArrayDelimiter start="\%(\w\|[\]})]\)\@<!\[" end="]" contains=ALLBUT,@rubyNotTop
382*89bcfda6SBram Moolenaar  endif
383071d4279SBram Moolenaar
384c1762ccbSBram Moolenaar  " statements without 'do'
385*89bcfda6SBram Moolenaar  if s:foldable('begin')
386c236c16dSBram Moolenaar    syn region rubyBlockExpression matchgroup=rubyControl start="\<begin\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold
387*89bcfda6SBram Moolenaar  else
388*89bcfda6SBram Moolenaar    syn region rubyBlockExpression matchgroup=rubyControl start="\<begin\>" end="\<end\>" contains=ALLBUT,@rubyNotTop
389*89bcfda6SBram Moolenaar  endif
390*89bcfda6SBram Moolenaar
391*89bcfda6SBram Moolenaar  if s:foldable('case')
392c236c16dSBram Moolenaar    syn region rubyCaseExpression matchgroup=rubyConditional start="\<case\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold
393*89bcfda6SBram Moolenaar  else
394*89bcfda6SBram Moolenaar    syn region rubyCaseExpression matchgroup=rubyConditional start="\<case\>" end="\<end\>" contains=ALLBUT,@rubyNotTop
395*89bcfda6SBram Moolenaar  endif
396*89bcfda6SBram Moolenaar
397*89bcfda6SBram Moolenaar  if s:foldable('if')
398*89bcfda6SBram Moolenaar    syn region rubyConditionalExpression matchgroup=rubyConditional start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*%&^|+=-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![?!]\)\s*\)\@<=\%(if\|unless\)\>" end="\%(\%(\%(\.\@1<!\.\)\|::\)\s*\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop fold
399*89bcfda6SBram Moolenaar  else
400*89bcfda6SBram Moolenaar    syn region rubyConditionalExpression matchgroup=rubyConditional start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*%&^|+=-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![?!]\)\s*\)\@<=\%(if\|unless\)\>" end="\%(\%(\%(\.\@1<!\.\)\|::\)\s*\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop
401*89bcfda6SBram Moolenaar  endif
402071d4279SBram Moolenaar
403c236c16dSBram Moolenaar  syn match rubyConditional "\<\%(then\|else\|when\)\>[?!]\@!"	contained containedin=rubyCaseExpression
404c236c16dSBram Moolenaar  syn match rubyConditional "\<\%(then\|else\|elsif\)\>[?!]\@!" contained containedin=rubyConditionalExpression
405c1762ccbSBram Moolenaar
4061d68952aSBram Moolenaar  syn match rubyExceptional	  "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>[?!]\@!" contained containedin=rubyBlockExpression
4071d68952aSBram Moolenaar  syn match rubyMethodExceptional "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>[?!]\@!" contained containedin=rubyMethodBlock
4081d68952aSBram Moolenaar
409c1762ccbSBram Moolenaar  " statements with optional 'do'
410c236c16dSBram Moolenaar  syn region rubyOptionalDoLine   matchgroup=rubyRepeat start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyOptionalDo end="\%(\<do\>\)" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyNotTop
411*89bcfda6SBram Moolenaar
412*89bcfda6SBram Moolenaar  if s:foldable('for')
413c236c16dSBram Moolenaar    syn region rubyRepeatExpression start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyRepeat end="\<end\>" contains=ALLBUT,@rubyNotTop nextgroup=rubyOptionalDoLine fold
414*89bcfda6SBram Moolenaar  else
415*89bcfda6SBram Moolenaar    syn region rubyRepeatExpression start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyRepeat end="\<end\>" contains=ALLBUT,@rubyNotTop nextgroup=rubyOptionalDoLine
416*89bcfda6SBram Moolenaar  endif
417071d4279SBram Moolenaar
418071d4279SBram Moolenaar  if !exists("ruby_minlines")
419ec7944aaSBram Moolenaar    let ruby_minlines = 500
420071d4279SBram Moolenaar  endif
421071d4279SBram Moolenaar  exec "syn sync minlines=" . ruby_minlines
422071d4279SBram Moolenaar
4236b730e11SBram Moolenaarelse
424c236c16dSBram Moolenaar  syn match rubyControl "\<def\>[?!]\@!"    nextgroup=rubyMethodDeclaration skipwhite skipnl
425c236c16dSBram Moolenaar  syn match rubyControl "\<class\>[?!]\@!"  nextgroup=rubyClassDeclaration  skipwhite skipnl
426c236c16dSBram Moolenaar  syn match rubyControl "\<module\>[?!]\@!" nextgroup=rubyModuleDeclaration skipwhite skipnl
4271d68952aSBram Moolenaar  syn match rubyControl "\<\%(case\|begin\|do\|for\|if\|unless\|while\|until\|else\|elsif\|ensure\|then\|when\|end\)\>[?!]\@!"
428c236c16dSBram Moolenaar  syn match rubyKeyword "\<\%(alias\|undef\)\>[?!]\@!"
4296b730e11SBram Moolenaarendif
430071d4279SBram Moolenaar
431*89bcfda6SBram Moolenaar" Special Methods {{{1
4326b730e11SBram Moolenaarif !exists("ruby_no_special_methods")
433ec7944aaSBram Moolenaar  syn keyword rubyAccess    public protected private public_class_method private_class_method public_constant private_constant module_function
434c236c16dSBram Moolenaar  " attr is a common variable name
435c236c16dSBram Moolenaar  syn match   rubyAttribute "\%(\%(^\|;\)\s*\)\@<=attr\>\(\s*[.=]\)\@!"
436c236c16dSBram Moolenaar  syn keyword rubyAttribute attr_accessor attr_reader attr_writer
437c236c16dSBram Moolenaar  syn match   rubyControl   "\<\%(exit!\|\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>[?!]\@!\)"
4386b730e11SBram Moolenaar  syn keyword rubyEval	    eval class_eval instance_eval module_eval
4396b730e11SBram Moolenaar  syn keyword rubyException raise fail catch throw
440c236c16dSBram Moolenaar  " false positive with 'include?'
441c236c16dSBram Moolenaar  syn match   rubyInclude   "\<include\>[?!]\@!"
442*89bcfda6SBram Moolenaar  syn keyword rubyInclude   autoload extend load prepend refine require require_relative using
4436b730e11SBram Moolenaar  syn keyword rubyKeyword   callcc caller lambda proc
444071d4279SBram Moolenaarendif
445071d4279SBram Moolenaar
446*89bcfda6SBram Moolenaar" Comments and Documentation {{{1
4476b730e11SBram Moolenaarsyn match   rubySharpBang "\%^#!.*" display
448*89bcfda6SBram Moolenaarsyn keyword rubyTodo	  FIXME NOTE TODO OPTIMIZE HACK REVIEW XXX todo contained
4496b730e11SBram Moolenaarsyn match   rubyComment   "#.*" contains=rubySharpBang,rubySpaceError,rubyTodo,@Spell
450*89bcfda6SBram Moolenaarif !exists("ruby_no_comment_fold") && s:foldable('#')
451*89bcfda6SBram Moolenaar  syn region rubyMultilineComment start="^\s*#.*\n\%(^\s*#\)\@=" end="^\s*#.*\n\%(^\s*#\)\@!" contains=rubyComment transparent fold keepend
452ec7944aaSBram Moolenaar  syn region rubyDocumentation	  start="^=begin\ze\%(\s.*\)\=$" end="^=end\%(\s.*\)\=$" contains=rubySpaceError,rubyTodo,@Spell fold
4539964e468SBram Moolenaarelse
4549964e468SBram Moolenaar  syn region rubyDocumentation	  start="^=begin\s*$" end="^=end\s*$" contains=rubySpaceError,rubyTodo,@Spell
4559964e468SBram Moolenaarendif
4566b730e11SBram Moolenaar
457*89bcfda6SBram Moolenaar" Keyword Nobbling {{{1
4586b730e11SBram Moolenaar" Note: this is a hack to prevent 'keywords' being highlighted as such when called as methods with an explicit receiver
459*89bcfda6SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@1<!\.\)\|::\)\_s*\%([_[:lower:]][_[:alnum:]]*\|\<\%(BEGIN\|END\)\>\)" transparent contains=NONE
460*89bcfda6SBram Moolenaarsyn match rubyKeywordAsMethod "\(defined?\|exit!\)\@!\<[_[:lower:]][_[:alnum:]]*[?!]"			       transparent contains=NONE
4616b730e11SBram Moolenaar
462*89bcfda6SBram Moolenaar" More Symbols {{{1
463*89bcfda6SBram Moolenaarsyn match  rubySymbol		"\%([{(,]\_s*\)\zs\l\w*[!?]\=::\@!"he=e-1
464*89bcfda6SBram Moolenaarsyn match  rubySymbol		"[]})\"':]\@1<!\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],]\@="he=e-1
465*89bcfda6SBram Moolenaarsyn match  rubySymbol		"\%([{(,]\_s*\)\zs[[:space:],{]\l\w*[!?]\=::\@!"hs=s+1,he=e-1
466*89bcfda6SBram Moolenaarsyn match  rubySymbol		"[[:space:],{(]\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],]\@="hs=s+1,he=e-1
467c236c16dSBram Moolenaar
468*89bcfda6SBram Moolenaar" __END__ Directive {{{1
469*89bcfda6SBram Moolenaarif s:foldable('__END__')
4706b730e11SBram Moolenaar  syn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" fold
471*89bcfda6SBram Moolenaarelse
472*89bcfda6SBram Moolenaar  syn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$"
473*89bcfda6SBram Moolenaarendif
474071d4279SBram Moolenaar
475*89bcfda6SBram Moolenaar" Default Highlighting {{{1
476c1762ccbSBram Moolenaarhi def link rubyClass			rubyDefine
477c1762ccbSBram Moolenaarhi def link rubyModule			rubyDefine
4781d68952aSBram Moolenaarhi def link rubyMethodExceptional	rubyDefine
479c1762ccbSBram Moolenaarhi def link rubyDefine			Define
480c1762ccbSBram Moolenaarhi def link rubyFunction		Function
481c1762ccbSBram Moolenaarhi def link rubyConditional		Conditional
482c1762ccbSBram Moolenaarhi def link rubyConditionalModifier	rubyConditional
4831d68952aSBram Moolenaarhi def link rubyExceptional		rubyConditional
484c1762ccbSBram Moolenaarhi def link rubyRepeat			Repeat
485c1762ccbSBram Moolenaarhi def link rubyRepeatModifier		rubyRepeat
486c1762ccbSBram Moolenaarhi def link rubyOptionalDo		rubyRepeat
487c1762ccbSBram Moolenaarhi def link rubyControl			Statement
488c1762ccbSBram Moolenaarhi def link rubyInclude			Include
489c1762ccbSBram Moolenaarhi def link rubyInteger			Number
490c1762ccbSBram Moolenaarhi def link rubyASCIICode		Character
491c1762ccbSBram Moolenaarhi def link rubyFloat			Float
492c1762ccbSBram Moolenaarhi def link rubyBoolean			Boolean
493c1762ccbSBram Moolenaarhi def link rubyException		Exception
4946b730e11SBram Moolenaarif !exists("ruby_no_identifiers")
495c1762ccbSBram Moolenaar  hi def link rubyIdentifier		Identifier
4966b730e11SBram Moolenaarelse
497c1762ccbSBram Moolenaar  hi def link rubyIdentifier		NONE
4986b730e11SBram Moolenaarendif
499c1762ccbSBram Moolenaarhi def link rubyClassVariable		rubyIdentifier
500c1762ccbSBram Moolenaarhi def link rubyConstant		Type
501c1762ccbSBram Moolenaarhi def link rubyGlobalVariable		rubyIdentifier
502c1762ccbSBram Moolenaarhi def link rubyBlockParameter		rubyIdentifier
503c1762ccbSBram Moolenaarhi def link rubyInstanceVariable	rubyIdentifier
504c1762ccbSBram Moolenaarhi def link rubyPredefinedIdentifier	rubyIdentifier
505c1762ccbSBram Moolenaarhi def link rubyPredefinedConstant	rubyPredefinedIdentifier
506c1762ccbSBram Moolenaarhi def link rubyPredefinedVariable	rubyPredefinedIdentifier
507c1762ccbSBram Moolenaarhi def link rubySymbol			Constant
508c1762ccbSBram Moolenaarhi def link rubyKeyword			Keyword
509c1762ccbSBram Moolenaarhi def link rubyOperator		Operator
510c1762ccbSBram Moolenaarhi def link rubyBeginEnd		Statement
511c1762ccbSBram Moolenaarhi def link rubyAccess			Statement
512c1762ccbSBram Moolenaarhi def link rubyAttribute		Statement
513c1762ccbSBram Moolenaarhi def link rubyEval			Statement
514c1762ccbSBram Moolenaarhi def link rubyPseudoVariable		Constant
515*89bcfda6SBram Moolenaarhi def link rubyCapitalizedMethod	rubyLocalVariableOrMethod
516071d4279SBram Moolenaar
517c1762ccbSBram Moolenaarhi def link rubyComment			Comment
518c1762ccbSBram Moolenaarhi def link rubyData			Comment
519c1762ccbSBram Moolenaarhi def link rubyDataDirective		Delimiter
520c1762ccbSBram Moolenaarhi def link rubyDocumentation		Comment
521c236c16dSBram Moolenaarhi def link rubyTodo			Todo
522c236c16dSBram Moolenaar
5231d68952aSBram Moolenaarhi def link rubyQuoteEscape		rubyStringEscape
524c236c16dSBram Moolenaarhi def link rubyStringEscape		Special
525c1762ccbSBram Moolenaarhi def link rubyInterpolationDelimiter	Delimiter
526c1762ccbSBram Moolenaarhi def link rubyNoInterpolation		rubyString
527c1762ccbSBram Moolenaarhi def link rubySharpBang		PreProc
528c1762ccbSBram Moolenaarhi def link rubyRegexpDelimiter		rubyStringDelimiter
529*89bcfda6SBram Moolenaarhi def link rubySymbolDelimiter		rubySymbol
530c1762ccbSBram Moolenaarhi def link rubyStringDelimiter		Delimiter
531ec7944aaSBram Moolenaarhi def link rubyHeredoc			rubyString
532c1762ccbSBram Moolenaarhi def link rubyString			String
533c236c16dSBram Moolenaarhi def link rubyRegexpEscape		rubyRegexpSpecial
534c236c16dSBram Moolenaarhi def link rubyRegexpQuantifier	rubyRegexpSpecial
535c236c16dSBram Moolenaarhi def link rubyRegexpAnchor		rubyRegexpSpecial
536c236c16dSBram Moolenaarhi def link rubyRegexpDot		rubyRegexpCharClass
537c236c16dSBram Moolenaarhi def link rubyRegexpCharClass		rubyRegexpSpecial
538c236c16dSBram Moolenaarhi def link rubyRegexpSpecial		Special
539c236c16dSBram Moolenaarhi def link rubyRegexpComment		Comment
540c236c16dSBram Moolenaarhi def link rubyRegexp			rubyString
5416b730e11SBram Moolenaar
542c1762ccbSBram Moolenaarhi def link rubyInvalidVariable		Error
543c1762ccbSBram Moolenaarhi def link rubyError			Error
544c1762ccbSBram Moolenaarhi def link rubySpaceError		rubyError
545071d4279SBram Moolenaar
546*89bcfda6SBram Moolenaar" Postscript {{{1
547071d4279SBram Moolenaarlet b:current_syntax = "ruby"
548071d4279SBram Moolenaar
549*89bcfda6SBram Moolenaarlet &cpo = s:cpo_sav
550*89bcfda6SBram Moolenaarunlet! s:cpo_sav
551*89bcfda6SBram Moolenaar
552*89bcfda6SBram Moolenaar" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:
553