xref: /vim-8.2.3635/runtime/syntax/ruby.vim (revision 2ed639ab)
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*2ed639abSBram Moolenaar" Last Change:		2019 Jul 13
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
22*2ed639abSBram Moolenaar" eRuby Config {{{1
23*2ed639abSBram Moolenaarif exists('main_syntax') && main_syntax == 'eruby'
24*2ed639abSBram Moolenaar  let b:ruby_no_expensive = 1
25*2ed639abSBram Moolenaarendif
26*2ed639abSBram Moolenaar
2789bcfda6SBram Moolenaar" Folding Config {{{1
286b730e11SBram Moolenaarif has("folding") && exists("ruby_fold")
296b730e11SBram Moolenaar  setlocal foldmethod=syntax
306b730e11SBram Moolenaarendif
316b730e11SBram Moolenaar
3289bcfda6SBram Moolenaarlet s:foldable_groups = split(
3389bcfda6SBram Moolenaar      \	  get(
3489bcfda6SBram Moolenaar      \	    b:,
3589bcfda6SBram Moolenaar      \	    'ruby_foldable_groups',
3689bcfda6SBram Moolenaar      \	    get(g:, 'ruby_foldable_groups', 'ALL')
3789bcfda6SBram Moolenaar      \	  )
3889bcfda6SBram Moolenaar      \	)
3989bcfda6SBram Moolenaar
4089bcfda6SBram Moolenaarfunction! s:foldable(...) abort
41*2ed639abSBram Moolenaar  if index(s:foldable_groups, 'NONE') > -1
42*2ed639abSBram Moolenaar    return 0
43*2ed639abSBram Moolenaar  endif
44*2ed639abSBram Moolenaar
4589bcfda6SBram Moolenaar  if index(s:foldable_groups, 'ALL') > -1
4689bcfda6SBram Moolenaar    return 1
4789bcfda6SBram Moolenaar  endif
4889bcfda6SBram Moolenaar
4989bcfda6SBram Moolenaar  for l:i in a:000
5089bcfda6SBram Moolenaar    if index(s:foldable_groups, l:i) > -1
5189bcfda6SBram Moolenaar      return 1
5289bcfda6SBram Moolenaar    endif
5389bcfda6SBram Moolenaar  endfor
5489bcfda6SBram Moolenaar
5589bcfda6SBram Moolenaar  return 0
56*2ed639abSBram Moolenaarendfunction
5789bcfda6SBram Moolenaar
58*2ed639abSBram Moolenaarfunction! s:run_syntax_fold(args) abort
59*2ed639abSBram Moolenaar  let [_0, _1, groups, cmd; _] = matchlist(a:args, '\(["'']\)\(.\{-}\)\1\s\+\(.*\)')
60*2ed639abSBram Moolenaar  if call('s:foldable', split(groups))
61*2ed639abSBram Moolenaar    let cmd .= ' fold'
62*2ed639abSBram Moolenaar  endif
63*2ed639abSBram Moolenaar  exe cmd
64*2ed639abSBram Moolenaarendfunction
65*2ed639abSBram Moolenaar
66*2ed639abSBram Moolenaarcom! -nargs=* SynFold call s:run_syntax_fold(<q-args>)
67*2ed639abSBram Moolenaar
68*2ed639abSBram Moolenaar" Not-Top Cluster {{{1
69*2ed639abSBram Moolenaarsyn cluster rubyNotTop contains=@rubyCommentNotTop,@rubyStringNotTop,@rubyRegexpSpecial,@rubyDeclaration,@rubyExceptionHandler,@rubyClassOperator,rubyConditional,rubyModuleName,rubyClassName,rubySymbolDelimiter,rubyParentheses
70c236c16dSBram Moolenaar
7189bcfda6SBram Moolenaar" Whitespace Errors {{{1
726b730e11SBram Moolenaarif exists("ruby_space_errors")
736b730e11SBram Moolenaar  if !exists("ruby_no_trail_space_error")
746b730e11SBram Moolenaar    syn match rubySpaceError display excludenl "\s\+$"
756b730e11SBram Moolenaar  endif
766b730e11SBram Moolenaar  if !exists("ruby_no_tab_space_error")
776b730e11SBram Moolenaar    syn match rubySpaceError display " \+\t"me=e-1
786b730e11SBram Moolenaar  endif
796b730e11SBram Moolenaarendif
806b730e11SBram Moolenaar
8189bcfda6SBram Moolenaar" Operators {{{1
82*2ed639abSBram Moolenaar
83*2ed639abSBram Moolenaarsyn match rubyEnglishBooleanOperator "\<\%(and\|or\|not\)\>"
84*2ed639abSBram Moolenaar
85*2ed639abSBram Moolenaarif exists("ruby_operators") || exists("ruby_pseudo_operators")
86*2ed639abSBram Moolenaar  syn match rubyDotOperator	   "\.\|&\."
87*2ed639abSBram Moolenaar
88*2ed639abSBram Moolenaar  syn match rubyTernaryOperator    "\%(\w\|[^\x00-\x7F]\)\@1<!?\|:"
89*2ed639abSBram Moolenaar  syn match rubyArithmeticOperator "\*\*\|[*/%+]\|->\@!"
90*2ed639abSBram Moolenaar  syn match rubyComparisonOperator "<=>\|<=\|<\|>=\|[-=]\@1<!>"
91*2ed639abSBram Moolenaar  syn match rubyBitwiseOperator    "[~^|]\|&\.\@!\|<<\|>>"
92*2ed639abSBram Moolenaar  syn match rubyBooleanOperator    "\%(\w\|[^\x00-\x7F]\)\@1<!!\|&&\|||"
93*2ed639abSBram Moolenaar  syn match rubyRangeOperator	   "\.\.\.\="
94*2ed639abSBram Moolenaar  syn match rubyAssignmentOperator "=>\@!\|-=\|/=\|\*\*=\|\*=\|&&=\|&=\|||=\||=\|%=\|+=\|>>=\|<<=\|\^="
95*2ed639abSBram Moolenaar  syn match rubyAssignmentOperator "=>\@!" containedin=rubyBlockParameterList " TODO: this is inelegant
96*2ed639abSBram Moolenaar  syn match rubyEqualityOperator   "===\|==\|!=\|!\~\|=\~"
97*2ed639abSBram Moolenaar
98*2ed639abSBram Moolenaar  syn region rubyBracketOperator matchgroup=rubyOperator start="\%(\%(\w\|[^\x00-\x7F]\)[?!]\=\|[]})]\)\@2<=\[" end="]" contains=ALLBUT,@rubyNotTop
99*2ed639abSBram Moolenaar
100*2ed639abSBram Moolenaar  syn match rubyScopeOperator	    "::"
101*2ed639abSBram Moolenaar  syn match rubySuperClassOperator  "<"	 contained
102*2ed639abSBram Moolenaar  syn match rubyEigenClassOperator  "<<" contained
103*2ed639abSBram Moolenaar  syn match rubyLambdaOperator	    "->"
104*2ed639abSBram Moolenaar  syn match rubySplatOperator	    "\%([[{(|,=]\_s*\)\@<=\*"
105*2ed639abSBram Moolenaar  syn match rubySplatOperator	    "\%(^\|\s\)\@1<=\*\%(\h\|[^\x00-\x7F]\|[:$@[]\)\@="
106*2ed639abSBram Moolenaar  syn match rubyDoubleSplatOperator "\%([{(|,]\_s*\)\@<=\*\*"
107*2ed639abSBram Moolenaar  syn match rubyDoubleSplatOperator "\s\@1<=\*\*\%(\h\|[^\x00-\x7F]\|[:$@{]\)\@="
108*2ed639abSBram Moolenaar  syn match rubyProcOperator	    "\%([[(|,]\_s*\)\@<=&"
109*2ed639abSBram Moolenaar  syn match rubyProcOperator	    "\s\@1<=&\%(\h\|[^\x00-\x7F]\|[:$@]\|->\)\@="
110*2ed639abSBram Moolenaar
111*2ed639abSBram Moolenaar  syn cluster rubyProperOperator contains=rubyTernaryOperator,rubyArithmeticOperator,rubyComparisonOperator,rubyBitwiseOperator,rubyBooleanOperator,rubyRangeOperator,rubyAssignmentOperator,rubyEqualityOperator,rubyDefinedOperator,rubyEnglishBooleanOperator
112*2ed639abSBram Moolenaar  syn cluster rubyClassOperator  contains=rubyEigenClassOperator,rubySuperClassOperator
113*2ed639abSBram Moolenaar  syn cluster rubyPseudoOperator contains=rubyDotOperator,rubyScopeOperator,rubyEigenClassOperator,rubySuperClassOperator,rubyLambdaOperator,rubySplatOperator,rubyDoubleSplatOperator,rubyProcOperator
114*2ed639abSBram Moolenaar  syn cluster rubyOperator	 contains=ruby.*Operator
1159964e468SBram Moolenaarendif
1169964e468SBram Moolenaar
117*2ed639abSBram Moolenaar" String Interpolation and Backslash Notation {{{1
118c236c16dSBram Moolenaarsyn region rubyInterpolation	      matchgroup=rubyInterpolationDelimiter start="#{" end="}" contained contains=ALLBUT,@rubyNotTop
119*2ed639abSBram Moolenaarsyn match  rubyInterpolation	      "#\$\%(-\w\|[!$&"'*+,./0:;<>?@\`~_]\|\w\+\)" display contained contains=rubyInterpolationDelimiter,@rubyGlobalVariable
120*2ed639abSBram Moolenaarsyn match  rubyInterpolation	      "#@@\=\w\+"				   display contained contains=rubyInterpolationDelimiter,rubyInstanceVariable,rubyClassVariable
121*2ed639abSBram Moolenaarsyn match  rubyInterpolationDelimiter "#\ze[$@]"				   display contained
1226b730e11SBram Moolenaar
123*2ed639abSBram Moolenaarsyn match rubyStringEscape "\\\_."											   contained display
124*2ed639abSBram Moolenaarsyn match rubyStringEscape "\\\o\{1,3}\|\\x\x\{1,2}"									   contained display
125*2ed639abSBram Moolenaarsyn match rubyStringEscape "\\u\%(\x\{4}\|{\x\{1,6}\%(\s\+\x\{1,6}\)*}\)"						   contained display
126*2ed639abSBram Moolenaarsyn match rubyStringEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=.\)" contained display
127*2ed639abSBram Moolenaar
128*2ed639abSBram Moolenaarsyn match rubyBackslashEscape "\\\\" contained display
129*2ed639abSBram Moolenaarsyn match rubyQuoteEscape     "\\'"  contained display
130*2ed639abSBram Moolenaarsyn match rubySpaceEscape     "\\ "  contained display
131*2ed639abSBram Moolenaar
132*2ed639abSBram Moolenaarsyn match rubyParenthesisEscape	  "\\[()]"  contained display
133*2ed639abSBram Moolenaarsyn match rubyCurlyBraceEscape	  "\\[{}]"  contained display
134*2ed639abSBram Moolenaarsyn match rubyAngleBracketEscape  "\\[<>]"  contained display
135*2ed639abSBram Moolenaarsyn match rubySquareBracketEscape "\\[[\]]" contained display
1366b730e11SBram Moolenaar
137c236c16dSBram Moolenaarsyn region rubyNestedParentheses    start="("  skip="\\\\\|\\)"  matchgroup=rubyString end=")"	transparent contained
138c236c16dSBram Moolenaarsyn region rubyNestedCurlyBraces    start="{"  skip="\\\\\|\\}"  matchgroup=rubyString end="}"	transparent contained
139c236c16dSBram Moolenaarsyn region rubyNestedAngleBrackets  start="<"  skip="\\\\\|\\>"  matchgroup=rubyString end=">"	transparent contained
140c236c16dSBram Moolenaarsyn region rubyNestedSquareBrackets start="\[" skip="\\\\\|\\\]" matchgroup=rubyString end="\]"	transparent contained
1416b730e11SBram Moolenaar
142*2ed639abSBram Moolenaarsyn cluster rubySingleCharEscape contains=rubyBackslashEscape,rubyQuoteEscape,rubySpaceEscape,rubyParenthesisEscape,rubyCurlyBraceEscape,rubyAngleBracketEscape,rubySquareBracketEscape
143*2ed639abSBram Moolenaarsyn cluster rubyNestedBrackets	 contains=rubyNested.\+
144*2ed639abSBram Moolenaarsyn cluster rubyStringSpecial	 contains=rubyInterpolation,rubyStringEscape
145*2ed639abSBram Moolenaarsyn cluster rubyStringNotTop	 contains=@rubyStringSpecial,@rubyNestedBrackets,@rubySingleCharEscape
146*2ed639abSBram Moolenaar
14789bcfda6SBram Moolenaar" Regular Expression Metacharacters {{{1
148*2ed639abSBram Moolenaarsyn region rubyRegexpComment	  matchgroup=rubyRegexpSpecial	 start="(?#"								    skip="\\\\\|\\)"  end=")"  contained
149*2ed639abSBram Moolenaarsyn region rubyRegexpParens	  matchgroup=rubyRegexpSpecial	 start="(\(?:\|?<\=[=!]\|?>\|?<[a-z_]\w*>\|?[imx]*-[imx]*:\=\|\%(?#\)\@!\)" skip="\\\\\|\\)"  end=")"  contained transparent contains=@rubyRegexpSpecial
150*2ed639abSBram Moolenaarsyn region rubyRegexpBrackets	  matchgroup=rubyRegexpCharClass start="\[\^\="								    skip="\\\\\|\\\]" end="\]" contained transparent contains=rubyRegexpBrackets,rubyStringEscape,rubyRegexpEscape,rubyRegexpCharClass,rubyRegexpIntersection oneline
151*2ed639abSBram Moolenaarsyn match  rubyRegexpCharClass	  "\\[DdHhRSsWw]"	 contained display
152*2ed639abSBram Moolenaarsyn match  rubyRegexpCharClass	  "\[:\^\=\%(alnum\|alpha\|ascii\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|word\|xdigit\):\]" contained
153*2ed639abSBram Moolenaarsyn match  rubyRegexpCharClass	  "\\[pP]{^\=.\{-}}"	 contained display
154*2ed639abSBram Moolenaarsyn match  rubyRegexpEscape	  "\\[].*?+^$|\\/(){}[]" contained " see commit e477f10
155c236c16dSBram Moolenaarsyn match  rubyRegexpQuantifier	  "[*?+][?+]\="		 contained display
156c236c16dSBram Moolenaarsyn match  rubyRegexpQuantifier	  "{\d\+\%(,\d*\)\=}?\=" contained display
157c236c16dSBram Moolenaarsyn match  rubyRegexpAnchor	  "[$^]\|\\[ABbGZz]"	 contained display
158*2ed639abSBram Moolenaarsyn match  rubyRegexpDot	  "\.\|\\X"		 contained display
159*2ed639abSBram Moolenaarsyn match  rubyRegexpIntersection "&&"			 contained display
160*2ed639abSBram Moolenaarsyn match  rubyRegexpSpecial	  "\\K"			 contained display
161c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	  "|"			 contained display
162c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	  "\\[1-9]\d\=\d\@!"	 contained display
163c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	  "\\k<\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\=>" contained display
164c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	  "\\k'\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\='" contained display
165c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	  "\\g<\%([a-z_]\w*\|-\=\d\+\)>"		contained display
166c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	  "\\g'\%([a-z_]\w*\|-\=\d\+\)'"		contained display
167c236c16dSBram Moolenaar
168*2ed639abSBram Moolenaarsyn cluster rubyRegexpSpecial contains=@rubyStringSpecial,rubyRegexpSpecial,rubyRegexpEscape,rubyRegexpBrackets,rubyRegexpCharClass,rubyRegexpDot,rubyRegexpQuantifier,rubyRegexpAnchor,rubyRegexpParens,rubyRegexpComment,rubyRegexpIntersection
169071d4279SBram Moolenaar
170*2ed639abSBram Moolenaar" Numbers {{{1
171*2ed639abSBram Moolenaarsyn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<0[xX]\x\+\%(_\x\+\)*r\=i\=\>"							       display
172*2ed639abSBram Moolenaarsyn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<\%(0[dD]\)\=\%(0\|[1-9]\d*\%(_\d\+\)*\)r\=i\=\>"					       display
173*2ed639abSBram Moolenaarsyn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<0[oO]\=\o\+\%(_\o\+\)*r\=i\=\>"							       display
174*2ed639abSBram Moolenaarsyn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<0[bB][01]\+\%(_[01]\+\)*r\=i\=\>"						       display
175*2ed639abSBram Moolenaarsyn match rubyFloat   "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\.\d\+\%(_\d\+\)*r\=i\=\>"				       display
176*2ed639abSBram Moolenaarsyn match rubyFloat   "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\%(\.\d\+\%(_\d\+\)*\)\=\%([eE][-+]\=\d\+\%(_\d\+\)*\)i\=\>" display
177071d4279SBram Moolenaar
17889bcfda6SBram Moolenaar" Identifiers {{{1
179*2ed639abSBram Moolenaarsyn match rubyClassName	       "\%(\%(^\|[^.]\)\.\s*\)\@<!\<[[:upper:]]\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" contained
180*2ed639abSBram Moolenaarsyn match rubyModuleName       "\%(\%(^\|[^.]\)\.\s*\)\@<!\<[[:upper:]]\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" contained
181*2ed639abSBram Moolenaarsyn match rubyConstant	       "\%(\%(^\|[^.]\)\.\s*\)\@<!\<[[:upper:]]\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!"
182ec7944aaSBram Moolenaarsyn match rubyClassVariable    "@@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display
183ec7944aaSBram Moolenaarsyn match rubyInstanceVariable "@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*"  display
184ec7944aaSBram Moolenaarsyn match rubyGlobalVariable   "$\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\|-.\)"
185d09091d4SBram Moolenaarsyn match rubySymbolDelimiter  ":" contained
186d09091d4SBram Moolenaarsyn match rubySymbol	       "[]})\"':]\@1<!:\%(\^\|\~@\|\~\|<<\|<=>\|<=\|<\|===\|[=!]=\|[=!]\~\|!@\|!\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)" contains=rubySymbolDelimiter
187d09091d4SBram Moolenaarsyn match rubySymbol	       "[]})\"':]\@1<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)"			    contains=rubySymbolDelimiter
188d09091d4SBram Moolenaarsyn match rubySymbol	       "[]})\"':]\@1<!:\%(\$\|@@\=\)\=\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*"  contains=rubySymbolDelimiter
189d09091d4SBram Moolenaarsyn match rubySymbol	       "[]})\"':]\@1<!:\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\%([?!=]>\@!\)\=" contains=rubySymbolDelimiter
19089bcfda6SBram Moolenaar
191*2ed639abSBram MoolenaarSynFold ':' syn region rubySymbol matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:'"  end="'"  skip="\\\\\|\\'"  contains=rubyQuoteEscape,rubyBackslashEscape
192*2ed639abSBram MoolenaarSynFold ':' syn region rubySymbol matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial
193*2ed639abSBram Moolenaar
194*2ed639abSBram Moolenaarsyn match rubyCapitalizedMethod "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@="
195*2ed639abSBram Moolenaar
196*2ed639abSBram Moolenaarsyn region rubyParentheses	  start="("				 end=")" contains=ALLBUT,@rubyNotTop containedin=rubyBlockParameterList
197*2ed639abSBram Moolenaarsyn region rubyBlockParameterList start="\%(\%(\<do\>\|{\)\_s*\)\@32<=|" end="|" contains=ALLBUT,@rubyNotTop,@rubyProperOperator
198*2ed639abSBram Moolenaar
199*2ed639abSBram Moolenaarif exists('ruby_global_variable_error')
200*2ed639abSBram Moolenaar  syn match rubyGlobalVariableError "$[^A-Za-z_]"	display
201*2ed639abSBram Moolenaar  syn match rubyGlobalVariableError "$-[^0FIKWadilpvw]" display
20289bcfda6SBram Moolenaarendif
20389bcfda6SBram Moolenaar
204*2ed639abSBram Moolenaarsyn match rubyPredefinedVariable #$[!$&"'*+,./0:;<>?@\`~]#
205ec7944aaSBram Moolenaarsyn match rubyPredefinedVariable "$\d\+"									    display
2066b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$_\>"										    display
207*2ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$-[0FIWadilpvw]\>"								    display
208*2ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$\%(stderr\|stdin\|stdout\)\>"						    display
209*2ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display
210*2ed639abSBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\%(ARGF\|ARGV\|ENV\|DATA\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\)\>\%(\s*(\)\@!"
21189bcfda6SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\%(RUBY_\%(VERSION\|RELEASE_DATE\|PLATFORM\|PATCHLEVEL\|REVISION\|DESCRIPTION\|COPYRIGHT\|ENGINE\)\)\>\%(\s*(\)\@!"
212071d4279SBram Moolenaar
213*2ed639abSBram Moolenaar" Deprecated/removed in 1.9
214*2ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$="
215*2ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$-K\>"		  display
216*2ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$\%(deferr\|defout\)\>" display
217*2ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$KCODE\>"		  display
218*2ed639abSBram Moolenaar" Deprecated/removed in 2.4
219*2ed639abSBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\%(FALSE\|NIL\|TRUE\)\>\%(\s*(\)\@!"
220c236c16dSBram Moolenaar
221*2ed639abSBram Moolenaarsyn cluster rubyGlobalVariable contains=rubyGlobalVariable,rubyPredefinedVariable,rubyGlobalVariableError
2226b730e11SBram Moolenaar
223*2ed639abSBram Moolenaar" Normal Regular Expressions {{{1
224*2ed639abSBram MoolenaarSynFold '/' syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\|else\)\|[;\~=!|&(,{[<>?:*+-]\)\s*\)\@<=/" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial nextgroup=@rubyModifier skipwhite
225*2ed639abSBram MoolenaarSynFold '/' syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\s\+\)\@<=/\%(=\|\_s\)\@!"					   end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial nextgroup=@rubyModifier skipwhite
226*2ed639abSBram Moolenaar
227*2ed639abSBram Moolenaar" Generalized Regular Expressions {{{1
228*2ed639abSBram MoolenaarSynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial nextgroup=@rubyModifier skipwhite
229*2ed639abSBram MoolenaarSynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r{"				   end="}[iomxneus]*"	skip="\\\\\|\\}"   contains=@rubyRegexpSpecial
230*2ed639abSBram MoolenaarSynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r<"				   end=">[iomxneus]*"	skip="\\\\\|\\>"   contains=@rubyRegexpSpecial,rubyNestedAngleBrackets
231*2ed639abSBram MoolenaarSynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r\["				   end="\][iomxneus]*"	skip="\\\\\|\\\]"  contains=@rubyRegexpSpecial
232*2ed639abSBram MoolenaarSynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r("				   end=")[iomxneus]*"	skip="\\\\\|\\)"   contains=@rubyRegexpSpecial
233*2ed639abSBram MoolenaarSynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r\z(\s\)"			   end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial
234*2ed639abSBram Moolenaar
235*2ed639abSBram Moolenaar" Characters {{{1
236*2ed639abSBram Moolenaarsyn match rubyCharacter "\%(\w\|[^\x00-\x7F]\|[]})\"'/]\)\@1<!\%(?\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\=\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\[[:space:]]\|\\\=[^[:space:]]\)\)"
237*2ed639abSBram Moolenaarsyn match rubyCharacter "\%(\w\|[^\x00-\x7F]\|[]})\"'/]\)\@1<!?\\u\%(\x\{4}\|{\x\{1,6}}\)"
238*2ed639abSBram Moolenaar
239*2ed639abSBram Moolenaar" Normal Strings {{{1
24089bcfda6SBram Moolenaarlet s:spell_cluster = exists('ruby_spellcheck_strings') ? ',@Spell' : ''
241*2ed639abSBram Moolenaarlet s:fold_arg	    = s:foldable('string')		? ' fold'   : ''
242*2ed639abSBram Moolenaarexe 'syn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\""  contains=@rubyStringSpecial'		       . s:spell_cluster . s:fold_arg
243*2ed639abSBram Moolenaarexe 'syn region rubyString matchgroup=rubyStringDelimiter start="''" end="''" skip="\\\\\|\\''"  contains=rubyQuoteEscape,rubyBackslashEscape' . s:spell_cluster . s:fold_arg
244*2ed639abSBram Moolenaarunlet s:spell_cluster s:fold_arg
24589bcfda6SBram Moolenaar
24689bcfda6SBram Moolenaar" Shell Command Output {{{1
247*2ed639abSBram MoolenaarSynFold 'string' syn region rubyString matchgroup=rubyStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@rubyStringSpecial
248*2ed639abSBram Moolenaar
249*2ed639abSBram Moolenaar" Generalized Single Quoted Strings, Symbols, Array of Strings and Array of Symbols {{{1
250*2ed639abSBram Moolenaar
251*2ed639abSBram Moolenaar" Non-bracket punctuation delimiters {{{2
252*2ed639abSBram Moolenaarlet s:names = { '~': 'Tilde', '`': 'BackQuote', '!': 'Bang', '@': 'At', '#': 'Hash', '$': 'Dollar', '%': 'Percent', '^': 'Caret',
253*2ed639abSBram Moolenaar      \		'&': 'Ampersand', '*': 'Asterix', '_': 'Underscore', '-': 'Dash', '+': 'Plus', '=': 'Equals', '|': 'Bar',
254*2ed639abSBram Moolenaar      \		'\': 'Backslash', ':': 'Colon', ';': 'Semicolon', '"': 'DoubleQuote', "'": 'Quote', ',': 'Comma', '.': 'Period',
255*2ed639abSBram Moolenaar      \		'?': 'QuestionMark', '/': 'ForwardSlash' }
256*2ed639abSBram Moolenaar
257*2ed639abSBram Moolenaarfor s:delimiter in keys(s:names)
258*2ed639abSBram Moolenaar  let s:group = 'ruby' . s:names[s:delimiter] . 'Escape'
259*2ed639abSBram Moolenaar
260*2ed639abSBram Moolenaar  if s:delimiter =~ '[\"]'
261*2ed639abSBram Moolenaar    let s:delimiter = '\' . s:delimiter
26289bcfda6SBram Moolenaar  endif
2636b730e11SBram Moolenaar
264*2ed639abSBram Moolenaar  exe 'syn match ' . s:group . ' "\V\\' . s:delimiter . '" contained display'
265*2ed639abSBram Moolenaar  exe 'syn cluster rubySingleCharEscape add=' . s:group
266*2ed639abSBram Moolenaar  exe 'SynFold ''%'' syn region rubyString matchgroup=rubyPercentStringDelimiter start="\V%q' . s:delimiter . '" end="\V' . s:delimiter . '" skip="\V\\\\\|\\' . s:delimiter . '" contains=rubyBackslashEscape,'		 . s:group . ' nextgroup=@rubyModifier skipwhite'
267*2ed639abSBram Moolenaar  exe 'SynFold ''%'' syn region rubyString matchgroup=rubyPercentStringDelimiter start="\V%w' . s:delimiter . '" end="\V' . s:delimiter . '" skip="\V\\\\\|\\' . s:delimiter . '" contains=rubyBackslashEscape,rubySpaceEscape,' . s:group . ' nextgroup=@rubyModifier skipwhite'
268*2ed639abSBram Moolenaar  exe 'SynFold ''%'' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="\V%s' . s:delimiter . '" end="\V' . s:delimiter . '" skip="\V\\\\\|\\' . s:delimiter . '" contains=rubyBackslashEscape,'		 . s:group . ' nextgroup=@rubyModifier skipwhite'
269*2ed639abSBram Moolenaar  exe 'SynFold ''%'' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="\V%i' . s:delimiter . '" end="\V' . s:delimiter . '" skip="\V\\\\\|\\' . s:delimiter . '" contains=rubyBackslashEscape,rubySpaceEscape,' . s:group . ' nextgroup=@rubyModifier skipwhite'
270*2ed639abSBram Moolenaar  exe 'hi def link ' . s:group . ' rubyStringEscape'
271*2ed639abSBram Moolenaarendfor
2726b730e11SBram Moolenaar
273*2ed639abSBram Moolenaarunlet s:delimiter s:group s:names
274*2ed639abSBram Moolenaar" }}}2
275071d4279SBram Moolenaar
276*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q{"	  end="}"   skip="\\\\\|\\}"   contains=rubyBackslashEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces
277*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q<"	  end=">"   skip="\\\\\|\\>"   contains=rubyBackslashEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets
278*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q\["	  end="\]"  skip="\\\\\|\\\]"  contains=rubyBackslashEscape,rubySquareBracketEscape,rubyNestedSquareBrackets
279*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q("	  end=")"   skip="\\\\\|\\)"   contains=rubyBackslashEscape,rubyParenthesisEscape,rubyNestedParentheses
280*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q\z(\s\)" end="\z1" skip="\\\\\|\\\z1" contains=rubyBackslashEscape,rubySpaceEscape
281071d4279SBram Moolenaar
282*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w{"	  end="}"   skip="\\\\\|\\}"   contains=rubyBackslashEscape,rubySpaceEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces
283*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w<"	  end=">"   skip="\\\\\|\\>"   contains=rubyBackslashEscape,rubySpaceEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets
284*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w\["	  end="\]"  skip="\\\\\|\\\]"  contains=rubyBackslashEscape,rubySpaceEscape,rubySquareBracketEscape,rubyNestedSquareBrackets
285*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w("	  end=")"   skip="\\\\\|\\)"   contains=rubyBackslashEscape,rubySpaceEscape,rubyParenthesisEscape,rubyNestedParentheses
2866b730e11SBram Moolenaar
287*2ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s{"	  end="}"   skip="\\\\\|\\}"   contains=rubyBackslashEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces
288*2ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s<"	  end=">"   skip="\\\\\|\\>"   contains=rubyBackslashEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets
289*2ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s\["	  end="\]"  skip="\\\\\|\\\]"  contains=rubyBackslashEscape,rubySquareBracketEscape,rubyNestedSquareBrackets
290*2ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s("	  end=")"   skip="\\\\\|\\)"   contains=rubyBackslashEscape,rubyParenthesisEscape,rubyNestedParentheses
291*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentSymbolDelimiter start="%s\z(\s\)" end="\z1" skip="\\\\\|\\\z1" contains=rubyBackslashEscape,rubySpaceEscape
2926b730e11SBram Moolenaar
293*2ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i{"	  end="}"   skip="\\\\\|\\}"   contains=rubyBackslashEscape,rubySpaceEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces
294*2ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i<"	  end=">"   skip="\\\\\|\\>"   contains=rubyBackslashEscape,rubySpaceEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets
295*2ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i\["	  end="\]"  skip="\\\\\|\\\]"  contains=rubyBackslashEscape,rubySpaceEscape,rubySquareBracketEscape,rubyNestedSquareBrackets
296*2ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i("	  end=")"   skip="\\\\\|\\)"   contains=rubyBackslashEscape,rubySpaceEscape,rubyParenthesisEscape,rubyNestedParentheses
29789bcfda6SBram Moolenaar
298*2ed639abSBram Moolenaar" Generalized Double Quoted Strings, Array of Strings, Array of Symbols and Shell Command Output {{{1
299*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="\%(\%(\w\|[^\x00-\x7F]\|]\)\s*\)\@<!%=" end="="	 skip="\\\\\|\\="   contains=@rubyStringSpecial nextgroup=@rubyModifier skipwhite
300*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)"       end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial nextgroup=@rubyModifier skipwhite
301*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial nextgroup=@rubyModifier skipwhite
302*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\={"			       end="}"	 skip="\\\\\|\\}"   contains=@rubyStringSpecial,rubyNestedCurlyBraces
303*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\=<"			       end=">"	 skip="\\\\\|\\>"   contains=@rubyStringSpecial,rubyNestedAngleBrackets
304*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\=\["			       end="\]"  skip="\\\\\|\\\]"  contains=@rubyStringSpecial,rubyNestedSquareBrackets
305*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\=("			       end=")"	 skip="\\\\\|\\)"   contains=@rubyStringSpecial,rubyNestedParentheses
306*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[Qx]\z(\s\)"			       end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial
30789bcfda6SBram Moolenaar
308*2ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial nextgroup=@rubyModifier skipwhite
309*2ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I{"				   end="}"   skip="\\\\\|\\}"	contains=@rubyStringSpecial,rubyNestedCurlyBraces
310*2ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I<"				   end=">"   skip="\\\\\|\\>"	contains=@rubyStringSpecial,rubyNestedAngleBrackets
311*2ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I\["				   end="\]"  skip="\\\\\|\\\]"	contains=@rubyStringSpecial,rubyNestedSquareBrackets
312*2ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I("				   end=")"   skip="\\\\\|\\)"	contains=@rubyStringSpecial,rubyNestedParentheses
31389bcfda6SBram Moolenaar
314*2ed639abSBram Moolenaar" Here Documents {{{1
315*2ed639abSBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyHeredocDelimiter start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<[-~]\=\zs\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
31689bcfda6SBram Moolenaar
317*2ed639abSBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyHeredocDelimiter start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<[-~]\=\zs"\%([^"]*\)"+					   end=+$+ oneline contains=ALLBUT,@rubyNotTop
318*2ed639abSBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyHeredocDelimiter start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<[-~]\=\zs'\%([^']*\)'+					   end=+$+ oneline contains=ALLBUT,@rubyNotTop
319*2ed639abSBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyHeredocDelimiter start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<[-~]\=\zs`\%([^`]*\)`+					   end=+$+ oneline contains=ALLBUT,@rubyNotTop
320*2ed639abSBram Moolenaar
321*2ed639abSBram MoolenaarSynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2  matchgroup=rubyHeredocDelimiter end=+^\z1$+	contains=rubyHeredocStart,@rubyStringSpecial keepend
322*2ed639abSBram MoolenaarSynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2				      matchgroup=rubyHeredocDelimiter end=+^\z1$+	contains=rubyHeredocStart,@rubyStringSpecial keepend
323*2ed639abSBram MoolenaarSynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2				      matchgroup=rubyHeredocDelimiter end=+^\z1$+	contains=rubyHeredocStart		     keepend
324*2ed639abSBram MoolenaarSynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2				      matchgroup=rubyHeredocDelimiter end=+^\z1$+	contains=rubyHeredocStart,@rubyStringSpecial keepend
325*2ed639abSBram Moolenaar
326*2ed639abSBram MoolenaarSynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})]\)\s\|\w\)\@<!<<[-~]\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyHeredocDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend
327*2ed639abSBram MoolenaarSynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})]\)\s\|\w\)\@<!<<[-~]"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3				      matchgroup=rubyHeredocDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend
328*2ed639abSBram MoolenaarSynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})]\)\s\|\w\)\@<!<<[-~]'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3				      matchgroup=rubyHeredocDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart		     keepend
329*2ed639abSBram MoolenaarSynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})]\)\s\|\w\)\@<!<<[-~]`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3				      matchgroup=rubyHeredocDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend
330071d4279SBram Moolenaar
33189bcfda6SBram Moolenaar" Module, Class, Method and Alias Declarations {{{1
332*2ed639abSBram Moolenaarsyn match rubyAliasDeclaration	"[^[:space:];#.()]\+" contained contains=rubySymbol,@rubyGlobalVariable nextgroup=rubyAliasDeclaration2 skipwhite
333*2ed639abSBram Moolenaarsyn match rubyAliasDeclaration2 "[^[:space:];#.()]\+" contained contains=rubySymbol,@rubyGlobalVariable
3349964e468SBram Moolenaarsyn match rubyMethodDeclaration "[^[:space:];#(]\+"   contained contains=rubyConstant,rubyBoolean,rubyPseudoVariable,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable
335*2ed639abSBram Moolenaarsyn match rubyClassDeclaration	"[^[:space:];#<]\+"   contained contains=rubyClassName,rubyScopeOperator nextgroup=rubySuperClassOperator skipwhite skipnl
336*2ed639abSBram Moolenaarsyn match rubyModuleDeclaration "[^[:space:];#<]\+"   contained contains=rubyModuleName,rubyScopeOperator
337c1762ccbSBram Moolenaar
338*2ed639abSBram Moolenaarsyn match rubyMethodName "\<\%([_[:alpha:]]\|[^\x00-\x7F]\)\%([_[:alnum:]]\|[^\x00-\x7F]\)*[?!=]\=\%([[:alnum:]_.:?!=]\|[^\x00-\x7F]\)\@!"			      contained containedin=rubyMethodDeclaration
339*2ed639abSBram Moolenaarsyn match rubyMethodName "\%(\s\|^\)\@1<=\%([_[:alpha:]]\|[^\x00-\x7F]\)\%([_[:alnum:]]\|[^\x00-\x7F]\)*[?!=]\=\%(\s\|$\)\@="					      contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2
340*2ed639abSBram Moolenaarsyn match rubyMethodName "\%([[:space:].]\|^\)\@1<=\%(\[\]=\=\|\*\*\|[-+!~]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|[=!]=\|[=!]\~\|!\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration
341*2ed639abSBram Moolenaar
342*2ed639abSBram Moolenaarsyn cluster rubyDeclaration contains=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration,rubyModuleDeclaration,rubyClassDeclaration,rubyMethodName
343c236c16dSBram Moolenaar
34489bcfda6SBram Moolenaar" Keywords {{{1
345*2ed639abSBram Moolenaar" TODO: reorganise
346*2ed639abSBram Moolenaarsyn match rubyControl	     "\%#=1\<\%(break\|in\|next\|redo\|retry\|return\)\>"
347*2ed639abSBram Moolenaarsyn match rubyKeyword	     "\%#=1\<\%(super\|yield\)\>"
348*2ed639abSBram Moolenaarsyn match rubyBoolean	     "\%#=1\<\%(true\|false\)\>[?!]\@!"
349*2ed639abSBram Moolenaarsyn match rubyPseudoVariable "\%#=1\<\(self\|nil\)\>[?!]\@!"
350*2ed639abSBram Moolenaarsyn match rubyPseudoVariable "\%#=1\<__\%(ENCODING\|dir\|FILE\|LINE\|callee\|method\)__\>"
351*2ed639abSBram Moolenaarsyn match rubyBeginEnd	     "\%#=1\<\%(BEGIN\|END\)\>"
3521d68952aSBram Moolenaar
35389bcfda6SBram Moolenaar" Expensive Mode {{{1
35489bcfda6SBram Moolenaar" Match 'end' with the appropriate opening keyword for syntax based folding
35589bcfda6SBram Moolenaar" and special highlighting of module/class/method definitions
356d5cdbeb8SBram Moolenaarif !exists("b:ruby_no_expensive") && !exists("ruby_no_expensive")
3579964e468SBram Moolenaar  syn match rubyDefine "\<alias\>"  nextgroup=rubyAliasDeclaration			  skipwhite skipnl
3589964e468SBram Moolenaar  syn match rubyDefine "\<def\>"    nextgroup=rubyMethodDeclaration			  skipwhite skipnl
359d09091d4SBram Moolenaar  syn match rubyDefine "\<undef\>"  nextgroup=rubyMethodName				  skipwhite skipnl
360*2ed639abSBram Moolenaar  syn match rubyClass  "\<class\>"  nextgroup=rubyClassDeclaration,rubyEigenClassOperator skipwhite skipnl
3619964e468SBram Moolenaar  syn match rubyModule "\<module\>" nextgroup=rubyModuleDeclaration			  skipwhite skipnl
3621d68952aSBram Moolenaar
363*2ed639abSBram Moolenaar  SynFold 'def'    syn region rubyMethodBlock start="\<def\>"	 matchgroup=rubyDefine skip="\<end:\|\%(\<def\_s\+\)\@<=end\>" end="\<end\>" contains=ALLBUT,@rubyNotTop
364*2ed639abSBram Moolenaar  SynFold 'class'  syn region rubyClassBlock  start="\<class\>"  matchgroup=rubyClass  skip="\<end:"			       end="\<end\>" contains=ALLBUT,@rubyNotTop
365*2ed639abSBram Moolenaar  SynFold 'module' syn region rubyModuleBlock start="\<module\>" matchgroup=rubyModule skip="\<end:"			       end="\<end\>" contains=ALLBUT,@rubyNotTop
366071d4279SBram Moolenaar
3676b730e11SBram Moolenaar  " modifiers
368*2ed639abSBram Moolenaar  syn match rubyLineContinuation    "\\$" nextgroup=@rubyModifier skipwhite skipnl
36989bcfda6SBram Moolenaar  syn match rubyConditionalModifier "\<\%(if\|unless\)\>"
37089bcfda6SBram Moolenaar  syn match rubyRepeatModifier	    "\<\%(while\|until\)\>"
371*2ed639abSBram Moolenaar  syn match rubyRescueModifier	    "\<rescue\>"
372071d4279SBram Moolenaar
373*2ed639abSBram Moolenaar  syn cluster rubyModifier contains=rubyConditionalModifier,rubyRepeatModifier,rubyRescueModifier
374*2ed639abSBram Moolenaar
375*2ed639abSBram Moolenaar  SynFold 'do' syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop
37689bcfda6SBram Moolenaar
377c1762ccbSBram Moolenaar  " curly bracket block or hash literal
378*2ed639abSBram Moolenaar  SynFold '{' syn region rubyCurlyBlock   matchgroup=rubyCurlyBlockDelimiter start="{"						    end="}" contains=ALLBUT,@rubyNotTop
379*2ed639abSBram Moolenaar  SynFold '[' syn region rubyArrayLiteral matchgroup=rubyArrayDelimiter      start="\%(\%(\w\|[^\x00-\x7F]\)[?!]\=\|[]})]\)\@2<!\[" end="]" contains=ALLBUT,@rubyNotTop
380071d4279SBram Moolenaar
381c1762ccbSBram Moolenaar  " statements without 'do'
382*2ed639abSBram Moolenaar  SynFold 'begin' syn region rubyBlockExpression matchgroup=rubyControl     start="\<begin\>" skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop
383*2ed639abSBram Moolenaar  SynFold 'case'  syn region rubyCaseExpression  matchgroup=rubyConditional start="\<case\>"  skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop
38489bcfda6SBram Moolenaar
385*2ed639abSBram Moolenaar  SynFold 'if' syn region rubyConditionalExpression matchgroup=rubyConditional start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+=-]\|\<then\s\|\%(\<\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\@<![?!]\)\s*\)\@<=\%(if\|unless\)\>" skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop
38689bcfda6SBram Moolenaar
387*2ed639abSBram Moolenaar  syn match rubyConditional "\<\%(then\|else\|when\)\>"	 contained containedin=rubyCaseExpression
388*2ed639abSBram Moolenaar  syn match rubyConditional "\<\%(then\|else\|elsif\)\>" contained containedin=rubyConditionalExpression
389071d4279SBram Moolenaar
390*2ed639abSBram Moolenaar  syn match   rubyExceptionHandler  "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>" contained containedin=rubyBlockExpression,rubyDoBlock
391*2ed639abSBram Moolenaar  syn match   rubyExceptionHandler2 "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>" contained containedin=rubyModuleBlock,rubyClassBlock,rubyMethodBlock
392*2ed639abSBram Moolenaar  syn cluster rubyExceptionHandler  contains=rubyExceptionHandler,rubyExceptionHandler2
3931d68952aSBram Moolenaar
394c1762ccbSBram Moolenaar  " statements with optional 'do'
395*2ed639abSBram Moolenaar  syn region rubyOptionalDoLine matchgroup=rubyRepeat start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+=-]\|\%(\<\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\@<![!?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyOptionalDo end="\<do\>" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyNotTop
39689bcfda6SBram Moolenaar
397*2ed639abSBram Moolenaar  SynFold 'for' syn region rubyRepeatExpression start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+=-]\|\%(\<\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\@<![!?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyRepeat skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop nextgroup=rubyOptionalDoLine
398071d4279SBram Moolenaar
399071d4279SBram Moolenaar  if !exists("ruby_minlines")
400ec7944aaSBram Moolenaar    let ruby_minlines = 500
401071d4279SBram Moolenaar  endif
402*2ed639abSBram Moolenaar  exe "syn sync minlines=" . ruby_minlines
403071d4279SBram Moolenaar
4046b730e11SBram Moolenaarelse
405*2ed639abSBram Moolenaar  syn match rubyControl "\<def\>"    nextgroup=rubyMethodDeclaration skipwhite skipnl
406*2ed639abSBram Moolenaar  syn match rubyControl "\<class\>"  nextgroup=rubyClassDeclaration  skipwhite skipnl
407*2ed639abSBram Moolenaar  syn match rubyControl "\<module\>" nextgroup=rubyModuleDeclaration skipwhite skipnl
408*2ed639abSBram Moolenaar  syn match rubyControl "\<\%(case\|begin\|do\|for\|if\|unless\|while\|until\|else\|elsif\|rescue\|ensure\|then\|when\|end\)\>"
409*2ed639abSBram Moolenaar  syn match rubyKeyword "\<\%(alias\|undef\)\>"
4106b730e11SBram Moolenaarendif
411071d4279SBram Moolenaar
41289bcfda6SBram Moolenaar" Special Methods {{{1
4136b730e11SBram Moolenaarif !exists("ruby_no_special_methods")
414*2ed639abSBram Moolenaar  syn match rubyAccess	  "\<\%(public\|protected\|private\)\>" " use re=2
415*2ed639abSBram Moolenaar  syn match rubyAccess	  "\%#=1\<\%(public\|private\)_class_method\>"
416*2ed639abSBram Moolenaar  syn match rubyAccess	  "\%#=1\<\%(public\|private\)_constant\>"
417*2ed639abSBram Moolenaar  syn match rubyAccess	  "\%#=1\<module_function\>"
418*2ed639abSBram Moolenaar  syn match rubyAttribute "\%#=1\%(\%(^\|;\)\s*\)\@<=attr\>\(\s*[.=]\)\@!" " attr is a common variable name
419*2ed639abSBram Moolenaar  syn match rubyAttribute "\%#=1\<attr_\%(accessor\|reader\|writer\)\>"
420*2ed639abSBram Moolenaar  syn match rubyControl   "\%#=1\<\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>"
421*2ed639abSBram Moolenaar  syn match rubyEval	  "\%#=1\<eval\>"
422*2ed639abSBram Moolenaar  syn match rubyEval	  "\%#=1\<\%(class\|instance\|module\)_eval\>"
423*2ed639abSBram Moolenaar  syn match rubyException "\%#=1\<\%(raise\|fail\|catch\|throw\)\>"
424*2ed639abSBram Moolenaar  syn match rubyInclude   "\%#=1\<\%(autoload\|gem\|load\|require\%(_relative\)\=\)\>"
425*2ed639abSBram Moolenaar  syn match rubyKeyword   "\%#=1\<\%(callcc\|caller\|lambda\|proc\)\>"
426*2ed639abSBram Moolenaar  syn match rubyMacro	  "\%#=1\<\%(extend\|include\|prepend\|refine\|using\)\>"
427*2ed639abSBram Moolenaar  syn match rubyMacro	  "\%#=1\<\%(alias\|define\|define_singleton\|remove\|undef\)_method\>"
428071d4279SBram Moolenaarendif
429071d4279SBram Moolenaar
43089bcfda6SBram Moolenaar" Comments and Documentation {{{1
4316b730e11SBram Moolenaarsyn match   rubySharpBang    "\%^#!.*" display
43289bcfda6SBram Moolenaarsyn keyword rubyTodo	     FIXME NOTE TODO OPTIMIZE HACK REVIEW XXX todo contained
433*2ed639abSBram Moolenaarsyn match   rubyEncoding     "[[:alnum:]-]\+" contained display
434*2ed639abSBram Moolenaarsyn match   rubyMagicComment "\c\%<3l#\s*\zs\%(coding\|encoding\):"					contained nextgroup=rubyEncoding skipwhite
435*2ed639abSBram Moolenaarsyn match   rubyMagicComment "\c\%<10l#\s*\zs\%(frozen_string_literal\|warn_indent\|warn_past_scope\):" contained nextgroup=rubyBoolean  skipwhite
436*2ed639abSBram Moolenaarsyn match   rubyComment	     "#.*" contains=@rubyCommentSpecial,rubySpaceError,@Spell
437*2ed639abSBram Moolenaar
438*2ed639abSBram Moolenaarsyn cluster rubyCommentSpecial contains=rubySharpBang,rubyTodo,rubyMagicComment
439*2ed639abSBram Moolenaarsyn cluster rubyCommentNotTop  contains=@rubyCommentSpecial,rubyEncoding
440*2ed639abSBram Moolenaar
44189bcfda6SBram Moolenaarif !exists("ruby_no_comment_fold") && s:foldable('#')
44289bcfda6SBram Moolenaar  syn region rubyMultilineComment start="^\s*#.*\n\%(^\s*#\)\@=" end="^\s*#.*\n\%(^\s*#\)\@!" contains=rubyComment transparent fold keepend
443ec7944aaSBram Moolenaar  syn region rubyDocumentation	  start="^=begin\ze\%(\s.*\)\=$" end="^=end\%(\s.*\)\=$"      contains=rubySpaceError,rubyTodo,@Spell fold
4449964e468SBram Moolenaarelse
4459964e468SBram Moolenaar  syn region rubyDocumentation	  start="^=begin\s*$"		 end="^=end\s*$"              contains=rubySpaceError,rubyTodo,@Spell
4469964e468SBram Moolenaarendif
4476b730e11SBram Moolenaar
448*2ed639abSBram Moolenaar" {{{1 Useless Line Continuations
449*2ed639abSBram Moolenaarsyn match rubyUselessLineContinuation "\%([.:,;{([<>~\*%&^|+=-]\|%(\%(\w\|[^\x00-\x7F]\)\@1<![?!]\)\s*\zs\\$" nextgroup=rubyUselessLineContinuation skipwhite skipempty
450*2ed639abSBram Moolenaarsyn match rubyUselessLineContinuation "\\$"								      nextgroup=rubyUselessLineContinuation skipwhite skipempty contained
4516b730e11SBram Moolenaar
452*2ed639abSBram Moolenaar" Keyword Nobbling {{{1
453*2ed639abSBram Moolenaar" prevent methods with keyword names being highlighted as keywords when called
454*2ed639abSBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@1<!\.\)\|&\.\|::\)\_s*\%([_[:lower:]][_[:alnum:]]*\|\%(BEGIN\|END\)\>\)" transparent contains=rubyDotOperator,rubyScopeOperator
455*2ed639abSBram Moolenaar
456*2ed639abSBram Moolenaar" Bang and Predicate Methods and Operators {{{1
457*2ed639abSBram Moolenaarsyn match rubyBangPredicateMethod "\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[?!]"
458*2ed639abSBram Moolenaar
459*2ed639abSBram Moolenaarif !exists("ruby_no_special_methods")
460*2ed639abSBram Moolenaar  syn match rubyControl "\%#=1\<exit!" display
461*2ed639abSBram Moolenaarendif
462*2ed639abSBram Moolenaarsyn match rubyDefinedOperator "\%#=1\<defined?" display
463*2ed639abSBram Moolenaar
464*2ed639abSBram Moolenaar" 1.9-style Hash Keys and Keyword Parameters {{{1
465*2ed639abSBram Moolenaarsyn match rubySymbol "\%([{(|,]\_s*\)\@<=\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[?!]\=::\@!"he=e-1
466*2ed639abSBram Moolenaarsyn match rubySymbol "[]})\"':]\@1<!\<\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],;]\@="he=e-1
467*2ed639abSBram Moolenaarsyn match rubySymbol "[[:space:],{(]\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],;]\@="hs=s+1,he=e-1
468c236c16dSBram Moolenaar
46989bcfda6SBram Moolenaar" __END__ Directive {{{1
470*2ed639abSBram MoolenaarSynFold '__END__' syn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$"
471071d4279SBram Moolenaar
47289bcfda6SBram Moolenaar" Default Highlighting {{{1
473c1762ccbSBram Moolenaarhi def link rubyClass			rubyDefine
474c1762ccbSBram Moolenaarhi def link rubyModule			rubyDefine
475*2ed639abSBram Moolenaarhi def link rubyExceptionHandler2	rubyDefine
476c1762ccbSBram Moolenaarhi def link rubyDefine			Define
477d09091d4SBram Moolenaarhi def link rubyAccess			rubyMacro
478d09091d4SBram Moolenaarhi def link rubyAttribute		rubyMacro
479d09091d4SBram Moolenaarhi def link rubyMacro			Macro
480d09091d4SBram Moolenaarhi def link rubyMethodName		rubyFunction
481c1762ccbSBram Moolenaarhi def link rubyFunction		Function
482c1762ccbSBram Moolenaarhi def link rubyConditional		Conditional
483c1762ccbSBram Moolenaarhi def link rubyConditionalModifier	rubyConditional
484*2ed639abSBram Moolenaarhi def link rubyExceptionHandler	rubyConditional
485*2ed639abSBram Moolenaarhi def link rubyRescueModifier		rubyExceptionHandler
486c1762ccbSBram Moolenaarhi def link rubyRepeat			Repeat
487c1762ccbSBram Moolenaarhi def link rubyRepeatModifier		rubyRepeat
488c1762ccbSBram Moolenaarhi def link rubyOptionalDo		rubyRepeat
489c1762ccbSBram Moolenaarhi def link rubyControl			Statement
490c1762ccbSBram Moolenaarhi def link rubyInclude			Include
491c1762ccbSBram Moolenaarhi def link rubyInteger			Number
492*2ed639abSBram Moolenaarhi def link rubyCharacter		Character
493c1762ccbSBram Moolenaarhi def link rubyFloat			Float
494c1762ccbSBram Moolenaarhi def link rubyBoolean			Boolean
495c1762ccbSBram Moolenaarhi def link rubyException		Exception
4966b730e11SBram Moolenaarif !exists("ruby_no_identifiers")
497c1762ccbSBram Moolenaar  hi def link rubyIdentifier		Identifier
4986b730e11SBram Moolenaarelse
499c1762ccbSBram Moolenaar  hi def link rubyIdentifier		NONE
5006b730e11SBram Moolenaarendif
501c1762ccbSBram Moolenaarhi def link rubyClassVariable		rubyIdentifier
502c1762ccbSBram Moolenaarhi def link rubyConstant		Type
503d09091d4SBram Moolenaarhi def link rubyClassName		rubyConstant
504d09091d4SBram Moolenaarhi def link rubyModuleName		rubyConstant
505c1762ccbSBram Moolenaarhi def link rubyGlobalVariable		rubyIdentifier
506c1762ccbSBram Moolenaarhi def link rubyInstanceVariable	rubyIdentifier
507c1762ccbSBram Moolenaarhi def link rubyPredefinedIdentifier	rubyIdentifier
508c1762ccbSBram Moolenaarhi def link rubyPredefinedConstant	rubyPredefinedIdentifier
509c1762ccbSBram Moolenaarhi def link rubyPredefinedVariable	rubyPredefinedIdentifier
510c1762ccbSBram Moolenaarhi def link rubySymbol			Constant
511c1762ccbSBram Moolenaarhi def link rubyKeyword			Keyword
512*2ed639abSBram Moolenaar
513c1762ccbSBram Moolenaarhi def link rubyOperator		Operator
514*2ed639abSBram Moolenaarhi def link rubyDefinedOperator		rubyOperator
515*2ed639abSBram Moolenaarhi def link rubyEnglishBooleanOperator	rubyOperator
516*2ed639abSBram Moolenaarif exists("ruby_operators")
517*2ed639abSBram Moolenaar  hi def link rubyTernaryOperator	rubyOperator
518*2ed639abSBram Moolenaar  hi def link rubyArithmeticOperator	rubyOperator
519*2ed639abSBram Moolenaar  hi def link rubyComparisonOperator	rubyOperator
520*2ed639abSBram Moolenaar  hi def link rubyBitwiseOperator	rubyOperator
521*2ed639abSBram Moolenaar  hi def link rubyBooleanOperator	rubyOperator
522*2ed639abSBram Moolenaar  hi def link rubyRangeOperator		rubyOperator
523*2ed639abSBram Moolenaar  hi def link rubyAssignmentOperator	rubyOperator
524*2ed639abSBram Moolenaar  hi def link rubyEqualityOperator	rubyOperator
525*2ed639abSBram Moolenaarendif
526*2ed639abSBram Moolenaar
527*2ed639abSBram Moolenaarif exists("ruby_pseudo_operators")
528*2ed639abSBram Moolenaar  hi def link rubyPseudoOperator	Special
529*2ed639abSBram Moolenaar  hi def link rubyDotOperator		rubyPseudoOperator
530*2ed639abSBram Moolenaar  hi def link rubyScopeOperator		rubyPseudoOperator
531*2ed639abSBram Moolenaar  hi def link rubySuperClassOperator	rubyPseudoOperator
532*2ed639abSBram Moolenaar  hi def link rubyEigenClassOperator	rubyPseudoOperator
533*2ed639abSBram Moolenaar  hi def link rubyLambdaOperator	rubyPseudoOperator
534*2ed639abSBram Moolenaar  hi def link rubyDoubleSplatOperator	rubyPseudoOperator
535*2ed639abSBram Moolenaar  hi def link rubySplatOperator		rubyPseudoOperator
536*2ed639abSBram Moolenaar  hi def link rubyProcOperator		rubyPseudoOperator
537*2ed639abSBram Moolenaarendif
538*2ed639abSBram Moolenaar
539c1762ccbSBram Moolenaarhi def link rubyBeginEnd		Statement
540c1762ccbSBram Moolenaarhi def link rubyEval			Statement
541c1762ccbSBram Moolenaarhi def link rubyPseudoVariable		Constant
542*2ed639abSBram Moolenaarhi def link rubyCapitalizedMethod	NONE
543071d4279SBram Moolenaar
544c1762ccbSBram Moolenaarhi def link rubyComment			Comment
545*2ed639abSBram Moolenaarhi def link rubyEncoding		Constant
546*2ed639abSBram Moolenaarhi def link rubyMagicComment		SpecialComment
547c1762ccbSBram Moolenaarhi def link rubyData			Comment
548c1762ccbSBram Moolenaarhi def link rubyDataDirective		Delimiter
549c1762ccbSBram Moolenaarhi def link rubyDocumentation		Comment
550c236c16dSBram Moolenaarhi def link rubyTodo			Todo
551c236c16dSBram Moolenaar
552*2ed639abSBram Moolenaarhi def link rubyBackslashEscape		rubyStringEscape
5531d68952aSBram Moolenaarhi def link rubyQuoteEscape		rubyStringEscape
554*2ed639abSBram Moolenaarhi def link rubySpaceEscape		rubyStringEscape
555*2ed639abSBram Moolenaarhi def link rubyParenthesisEscape	rubyStringEscape
556*2ed639abSBram Moolenaarhi def link rubyCurlyBraceEscape	rubyStringEscape
557*2ed639abSBram Moolenaarhi def link rubyAngleBracketEscape	rubyStringEscape
558*2ed639abSBram Moolenaarhi def link rubySquareBracketEscape	rubyStringEscape
559c236c16dSBram Moolenaarhi def link rubyStringEscape		Special
560*2ed639abSBram Moolenaar
561c1762ccbSBram Moolenaarhi def link rubyInterpolationDelimiter	Delimiter
562c1762ccbSBram Moolenaarhi def link rubySharpBang		PreProc
563*2ed639abSBram Moolenaarhi def link rubyStringDelimiter		Delimiter
564*2ed639abSBram Moolenaarhi def link rubyHeredocDelimiter	rubyStringDelimiter
565*2ed639abSBram Moolenaarhi def link rubyPercentRegexpDelimiter	rubyRegexpDelimiter
566*2ed639abSBram Moolenaarhi def link rubyPercentStringDelimiter	rubyStringDelimiter
567*2ed639abSBram Moolenaarhi def link rubyPercentSymbolDelimiter	rubySymbolDelimiter
568c1762ccbSBram Moolenaarhi def link rubyRegexpDelimiter		rubyStringDelimiter
56989bcfda6SBram Moolenaarhi def link rubySymbolDelimiter		rubySymbol
570c1762ccbSBram Moolenaarhi def link rubyString			String
571c236c16dSBram Moolenaarhi def link rubyRegexpEscape		rubyRegexpSpecial
572c236c16dSBram Moolenaarhi def link rubyRegexpQuantifier	rubyRegexpSpecial
573c236c16dSBram Moolenaarhi def link rubyRegexpAnchor		rubyRegexpSpecial
574c236c16dSBram Moolenaarhi def link rubyRegexpDot		rubyRegexpCharClass
575c236c16dSBram Moolenaarhi def link rubyRegexpCharClass		rubyRegexpSpecial
576*2ed639abSBram Moolenaarhi def link rubyRegexpIntersection	rubyRegexpSpecial
577c236c16dSBram Moolenaarhi def link rubyRegexpSpecial		Special
578c236c16dSBram Moolenaarhi def link rubyRegexpComment		Comment
579c236c16dSBram Moolenaarhi def link rubyRegexp			rubyString
5806b730e11SBram Moolenaar
581c1762ccbSBram Moolenaarhi def link rubyError			Error
582*2ed639abSBram Moolenaarif exists("ruby_line_continuation_error")
583*2ed639abSBram Moolenaar  hi def link rubyUselessLineContinuation rubyError
584*2ed639abSBram Moolenaarendif
585*2ed639abSBram Moolenaarhi def link rubyGlobalVariableError	rubyError
586c1762ccbSBram Moolenaarhi def link rubySpaceError		rubyError
587071d4279SBram Moolenaar
58889bcfda6SBram Moolenaar" Postscript {{{1
589071d4279SBram Moolenaarlet b:current_syntax = "ruby"
590071d4279SBram Moolenaar
59189bcfda6SBram Moolenaarlet &cpo = s:cpo_sav
59289bcfda6SBram Moolenaarunlet! s:cpo_sav
59389bcfda6SBram Moolenaar
594*2ed639abSBram Moolenaardelc SynFold
595*2ed639abSBram Moolenaar
59689bcfda6SBram Moolenaar" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:
597