xref: /vim-8.2.3635/runtime/syntax/ruby.vim (revision 4d8f4761)
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*4d8f4761SBram Moolenaar" Last Change:		2021 Jun 06
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
222ed639abSBram Moolenaar" eRuby Config {{{1
232ed639abSBram Moolenaarif exists('main_syntax') && main_syntax == 'eruby'
242ed639abSBram Moolenaar  let b:ruby_no_expensive = 1
252ed639abSBram Moolenaarendif
262ed639abSBram 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
412ed639abSBram Moolenaar  if index(s:foldable_groups, 'NONE') > -1
422ed639abSBram Moolenaar    return 0
432ed639abSBram Moolenaar  endif
442ed639abSBram 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
562ed639abSBram Moolenaarendfunction
5789bcfda6SBram Moolenaar
582ed639abSBram Moolenaarfunction! s:run_syntax_fold(args) abort
592ed639abSBram Moolenaar  let [_0, _1, groups, cmd; _] = matchlist(a:args, '\(["'']\)\(.\{-}\)\1\s\+\(.*\)')
602ed639abSBram Moolenaar  if call('s:foldable', split(groups))
612ed639abSBram Moolenaar    let cmd .= ' fold'
622ed639abSBram Moolenaar  endif
632ed639abSBram Moolenaar  exe cmd
642ed639abSBram Moolenaarendfunction
652ed639abSBram Moolenaar
662ed639abSBram Moolenaarcom! -nargs=* SynFold call s:run_syntax_fold(<q-args>)
672ed639abSBram Moolenaar
682ed639abSBram Moolenaar" Not-Top Cluster {{{1
69*4d8f4761SBram Moolenaarsyn cluster rubyNotTop contains=@rubyCommentNotTop,@rubyStringNotTop,@rubyRegexpSpecial,@rubyDeclaration,@rubyExceptionHandler,@rubyClassOperator,rubyConditional,rubyModuleName,rubyClassName,rubySymbolDelimiter,rubyParentheses,@Spell
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
822ed639abSBram Moolenaar
832ed639abSBram Moolenaarsyn match rubyEnglishBooleanOperator "\<\%(and\|or\|not\)\>"
842ed639abSBram Moolenaar
852ed639abSBram Moolenaarif exists("ruby_operators") || exists("ruby_pseudo_operators")
862ed639abSBram Moolenaar  syn match rubyDotOperator	   "\.\|&\."
872ed639abSBram Moolenaar
882ed639abSBram Moolenaar  syn match rubyTernaryOperator    "\%(\w\|[^\x00-\x7F]\)\@1<!?\|:"
892ed639abSBram Moolenaar  syn match rubyArithmeticOperator "\*\*\|[*/%+]\|->\@!"
902ed639abSBram Moolenaar  syn match rubyComparisonOperator "<=>\|<=\|<\|>=\|[-=]\@1<!>"
912ed639abSBram Moolenaar  syn match rubyBitwiseOperator    "[~^|]\|&\.\@!\|<<\|>>"
922ed639abSBram Moolenaar  syn match rubyBooleanOperator    "\%(\w\|[^\x00-\x7F]\)\@1<!!\|&&\|||"
932ed639abSBram Moolenaar  syn match rubyRangeOperator	   "\.\.\.\="
942ed639abSBram Moolenaar  syn match rubyAssignmentOperator "=>\@!\|-=\|/=\|\*\*=\|\*=\|&&=\|&=\|||=\||=\|%=\|+=\|>>=\|<<=\|\^="
95*4d8f4761SBram Moolenaar  syn match rubyAssignmentOperator "=>\@!" contained containedin=rubyBlockParameterList " TODO: this is inelegant
962ed639abSBram Moolenaar  syn match rubyEqualityOperator   "===\|==\|!=\|!\~\|=\~"
972ed639abSBram Moolenaar
982ed639abSBram Moolenaar  syn region rubyBracketOperator matchgroup=rubyOperator start="\%(\%(\w\|[^\x00-\x7F]\)[?!]\=\|[]})]\)\@2<=\[" end="]" contains=ALLBUT,@rubyNotTop
992ed639abSBram Moolenaar
1002ed639abSBram Moolenaar  syn match rubyScopeOperator	    "::"
1012ed639abSBram Moolenaar  syn match rubySuperClassOperator  "<"	 contained
1022ed639abSBram Moolenaar  syn match rubyEigenClassOperator  "<<" contained
1032ed639abSBram Moolenaar  syn match rubyLambdaOperator	    "->"
1042ed639abSBram Moolenaar  syn match rubySplatOperator	    "\%([[{(|,=]\_s*\)\@<=\*"
1052ed639abSBram Moolenaar  syn match rubySplatOperator	    "\%(^\|\s\)\@1<=\*\%(\h\|[^\x00-\x7F]\|[:$@[]\)\@="
1062ed639abSBram Moolenaar  syn match rubyDoubleSplatOperator "\%([{(|,]\_s*\)\@<=\*\*"
1072ed639abSBram Moolenaar  syn match rubyDoubleSplatOperator "\s\@1<=\*\*\%(\h\|[^\x00-\x7F]\|[:$@{]\)\@="
1082ed639abSBram Moolenaar  syn match rubyProcOperator	    "\%([[(|,]\_s*\)\@<=&"
1092ed639abSBram Moolenaar  syn match rubyProcOperator	    "\s\@1<=&\%(\h\|[^\x00-\x7F]\|[:$@]\|->\)\@="
1102ed639abSBram Moolenaar
1112ed639abSBram Moolenaar  syn cluster rubyProperOperator contains=rubyTernaryOperator,rubyArithmeticOperator,rubyComparisonOperator,rubyBitwiseOperator,rubyBooleanOperator,rubyRangeOperator,rubyAssignmentOperator,rubyEqualityOperator,rubyDefinedOperator,rubyEnglishBooleanOperator
1122ed639abSBram Moolenaar  syn cluster rubyClassOperator  contains=rubyEigenClassOperator,rubySuperClassOperator
1132ed639abSBram Moolenaar  syn cluster rubyPseudoOperator contains=rubyDotOperator,rubyScopeOperator,rubyEigenClassOperator,rubySuperClassOperator,rubyLambdaOperator,rubySplatOperator,rubyDoubleSplatOperator,rubyProcOperator
1142ed639abSBram Moolenaar  syn cluster rubyOperator	 contains=ruby.*Operator
1159964e468SBram Moolenaarendif
1169964e468SBram Moolenaar
1172ed639abSBram Moolenaar" String Interpolation and Backslash Notation {{{1
118c236c16dSBram Moolenaarsyn region rubyInterpolation	      matchgroup=rubyInterpolationDelimiter start="#{" end="}" contained contains=ALLBUT,@rubyNotTop
1192ed639abSBram Moolenaarsyn match  rubyInterpolation	      "#\$\%(-\w\|[!$&"'*+,./0:;<>?@\`~_]\|\w\+\)" display contained contains=rubyInterpolationDelimiter,@rubyGlobalVariable
1202ed639abSBram Moolenaarsyn match  rubyInterpolation	      "#@@\=\w\+"				   display contained contains=rubyInterpolationDelimiter,rubyInstanceVariable,rubyClassVariable
1212ed639abSBram Moolenaarsyn match  rubyInterpolationDelimiter "#\ze[$@]"				   display contained
1226b730e11SBram Moolenaar
1232ed639abSBram Moolenaarsyn match rubyStringEscape "\\\_."											   contained display
1242ed639abSBram Moolenaarsyn match rubyStringEscape "\\\o\{1,3}\|\\x\x\{1,2}"									   contained display
1252ed639abSBram Moolenaarsyn match rubyStringEscape "\\u\%(\x\{4}\|{\x\{1,6}\%(\s\+\x\{1,6}\)*}\)"						   contained display
1262ed639abSBram Moolenaarsyn match rubyStringEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=.\)" contained display
1272ed639abSBram Moolenaar
1282ed639abSBram Moolenaarsyn match rubyBackslashEscape "\\\\" contained display
1292ed639abSBram Moolenaarsyn match rubyQuoteEscape     "\\'"  contained display
1302ed639abSBram Moolenaarsyn match rubySpaceEscape     "\\ "  contained display
1312ed639abSBram Moolenaar
1322ed639abSBram Moolenaarsyn match rubyParenthesisEscape	  "\\[()]"  contained display
1332ed639abSBram Moolenaarsyn match rubyCurlyBraceEscape	  "\\[{}]"  contained display
1342ed639abSBram Moolenaarsyn match rubyAngleBracketEscape  "\\[<>]"  contained display
1352ed639abSBram Moolenaarsyn match rubySquareBracketEscape "\\[[\]]" contained display
1366b730e11SBram Moolenaar
137*4d8f4761SBram Moolenaarsyn region rubyNestedParentheses    start="("  skip="\\\\\|\\)"  end=")"	transparent contained
138*4d8f4761SBram Moolenaarsyn region rubyNestedCurlyBraces    start="{"  skip="\\\\\|\\}"  end="}"	transparent contained
139*4d8f4761SBram Moolenaarsyn region rubyNestedAngleBrackets  start="<"  skip="\\\\\|\\>"  end=">"	transparent contained
140*4d8f4761SBram Moolenaarsyn region rubyNestedSquareBrackets start="\[" skip="\\\\\|\\\]" end="\]"	transparent contained
1416b730e11SBram Moolenaar
1422ed639abSBram Moolenaarsyn cluster rubySingleCharEscape contains=rubyBackslashEscape,rubyQuoteEscape,rubySpaceEscape,rubyParenthesisEscape,rubyCurlyBraceEscape,rubyAngleBracketEscape,rubySquareBracketEscape
1432ed639abSBram Moolenaarsyn cluster rubyNestedBrackets	 contains=rubyNested.\+
1442ed639abSBram Moolenaarsyn cluster rubyStringSpecial	 contains=rubyInterpolation,rubyStringEscape
1452ed639abSBram Moolenaarsyn cluster rubyStringNotTop	 contains=@rubyStringSpecial,@rubyNestedBrackets,@rubySingleCharEscape
1462ed639abSBram Moolenaar
14789bcfda6SBram Moolenaar" Regular Expression Metacharacters {{{1
1482ed639abSBram Moolenaarsyn region rubyRegexpComment	  matchgroup=rubyRegexpSpecial	 start="(?#"								    skip="\\\\\|\\)"  end=")"  contained
1492ed639abSBram Moolenaarsyn region rubyRegexpParens	  matchgroup=rubyRegexpSpecial	 start="(\(?:\|?<\=[=!]\|?>\|?<[a-z_]\w*>\|?[imx]*-[imx]*:\=\|\%(?#\)\@!\)" skip="\\\\\|\\)"  end=")"  contained transparent contains=@rubyRegexpSpecial
1502ed639abSBram Moolenaarsyn region rubyRegexpBrackets	  matchgroup=rubyRegexpCharClass start="\[\^\="								    skip="\\\\\|\\\]" end="\]" contained transparent contains=rubyRegexpBrackets,rubyStringEscape,rubyRegexpEscape,rubyRegexpCharClass,rubyRegexpIntersection oneline
1512ed639abSBram Moolenaarsyn match  rubyRegexpCharClass	  "\\[DdHhRSsWw]"	 contained display
1522ed639abSBram Moolenaarsyn match  rubyRegexpCharClass	  "\[:\^\=\%(alnum\|alpha\|ascii\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|word\|xdigit\):\]" contained
1532ed639abSBram Moolenaarsyn match  rubyRegexpCharClass	  "\\[pP]{^\=.\{-}}"	 contained display
1542ed639abSBram 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
1582ed639abSBram Moolenaarsyn match  rubyRegexpDot	  "\.\|\\X"		 contained display
1592ed639abSBram Moolenaarsyn match  rubyRegexpIntersection "&&"			 contained display
1602ed639abSBram 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
1682ed639abSBram Moolenaarsyn cluster rubyRegexpSpecial contains=@rubyStringSpecial,rubyRegexpSpecial,rubyRegexpEscape,rubyRegexpBrackets,rubyRegexpCharClass,rubyRegexpDot,rubyRegexpQuantifier,rubyRegexpAnchor,rubyRegexpParens,rubyRegexpComment,rubyRegexpIntersection
169071d4279SBram Moolenaar
1702ed639abSBram Moolenaar" Numbers {{{1
1712ed639abSBram Moolenaarsyn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<0[xX]\x\+\%(_\x\+\)*r\=i\=\>"							       display
1722ed639abSBram Moolenaarsyn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<\%(0[dD]\)\=\%(0\|[1-9]\d*\%(_\d\+\)*\)r\=i\=\>"					       display
1732ed639abSBram Moolenaarsyn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<0[oO]\=\o\+\%(_\o\+\)*r\=i\=\>"							       display
1742ed639abSBram Moolenaarsyn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<0[bB][01]\+\%(_[01]\+\)*r\=i\=\>"						       display
1752ed639abSBram Moolenaarsyn match rubyFloat   "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\.\d\+\%(_\d\+\)*r\=i\=\>"				       display
1762ed639abSBram 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
1792ed639abSBram Moolenaarsyn match rubyClassName	       "\%(\%(^\|[^.]\)\.\s*\)\@<!\<[[:upper:]]\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" contained
1802ed639abSBram Moolenaarsyn match rubyModuleName       "\%(\%(^\|[^.]\)\.\s*\)\@<!\<[[:upper:]]\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" contained
1812ed639abSBram 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
1912ed639abSBram MoolenaarSynFold ':' syn region rubySymbol matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:'"  end="'"  skip="\\\\\|\\'"  contains=rubyQuoteEscape,rubyBackslashEscape
1922ed639abSBram MoolenaarSynFold ':' syn region rubySymbol matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial
1932ed639abSBram Moolenaar
1942ed639abSBram Moolenaarsyn match rubyCapitalizedMethod "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@="
1952ed639abSBram Moolenaar
196*4d8f4761SBram Moolenaarsyn region rubyParentheses	  start="("				 end=")" contains=ALLBUT,@rubyNotTop contained containedin=rubyBlockParameterList
1972ed639abSBram Moolenaarsyn region rubyBlockParameterList start="\%(\%(\<do\>\|{\)\_s*\)\@32<=|" end="|" contains=ALLBUT,@rubyNotTop,@rubyProperOperator
1982ed639abSBram Moolenaar
1992ed639abSBram Moolenaarif exists('ruby_global_variable_error')
2002ed639abSBram Moolenaar  syn match rubyGlobalVariableError "$[^A-Za-z_]"	display
2012ed639abSBram Moolenaar  syn match rubyGlobalVariableError "$-[^0FIKWadilpvw]" display
20289bcfda6SBram Moolenaarendif
20389bcfda6SBram Moolenaar
2042ed639abSBram Moolenaarsyn match rubyPredefinedVariable #$[!$&"'*+,./0:;<>?@\`~]#
205ec7944aaSBram Moolenaarsyn match rubyPredefinedVariable "$\d\+"									    display
2066b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$_\>"										    display
2072ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$-[0FIWadilpvw]\>"								    display
2082ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$\%(stderr\|stdin\|stdout\)\>"						    display
2092ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display
2102ed639abSBram 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
2132ed639abSBram Moolenaar" Deprecated/removed in 1.9
2142ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$="
2152ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$-K\>"		  display
2162ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$\%(deferr\|defout\)\>" display
2172ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$KCODE\>"		  display
2182ed639abSBram Moolenaar" Deprecated/removed in 2.4
2192ed639abSBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\%(FALSE\|NIL\|TRUE\)\>\%(\s*(\)\@!"
220c236c16dSBram Moolenaar
2212ed639abSBram Moolenaarsyn cluster rubyGlobalVariable contains=rubyGlobalVariable,rubyPredefinedVariable,rubyGlobalVariableError
2226b730e11SBram Moolenaar
2232ed639abSBram Moolenaar" Normal Regular Expressions {{{1
2242ed639abSBram 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
2252ed639abSBram MoolenaarSynFold '/' syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\s\+\)\@<=/\%(=\|\_s\)\@!"					   end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial nextgroup=@rubyModifier skipwhite
2262ed639abSBram Moolenaar
2272ed639abSBram Moolenaar" Generalized Regular Expressions {{{1
2282ed639abSBram MoolenaarSynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial nextgroup=@rubyModifier skipwhite
2292ed639abSBram MoolenaarSynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r{"				   end="}[iomxneus]*"	skip="\\\\\|\\}"   contains=@rubyRegexpSpecial
2302ed639abSBram MoolenaarSynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r<"				   end=">[iomxneus]*"	skip="\\\\\|\\>"   contains=@rubyRegexpSpecial,rubyNestedAngleBrackets
2312ed639abSBram MoolenaarSynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r\["				   end="\][iomxneus]*"	skip="\\\\\|\\\]"  contains=@rubyRegexpSpecial
2322ed639abSBram MoolenaarSynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r("				   end=")[iomxneus]*"	skip="\\\\\|\\)"   contains=@rubyRegexpSpecial
2332ed639abSBram MoolenaarSynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r\z(\s\)"			   end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial
2342ed639abSBram Moolenaar
2352ed639abSBram Moolenaar" Characters {{{1
2362ed639abSBram 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:]]\)\)"
2372ed639abSBram Moolenaarsyn match rubyCharacter "\%(\w\|[^\x00-\x7F]\|[]})\"'/]\)\@1<!?\\u\%(\x\{4}\|{\x\{1,6}}\)"
2382ed639abSBram Moolenaar
2392ed639abSBram Moolenaar" Normal Strings {{{1
24089bcfda6SBram Moolenaarlet s:spell_cluster = exists('ruby_spellcheck_strings') ? ',@Spell' : ''
2412ed639abSBram Moolenaarlet s:fold_arg	    = s:foldable('string')		? ' fold'   : ''
2422ed639abSBram Moolenaarexe 'syn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\""  contains=@rubyStringSpecial'		       . s:spell_cluster . s:fold_arg
2432ed639abSBram Moolenaarexe 'syn region rubyString matchgroup=rubyStringDelimiter start="''" end="''" skip="\\\\\|\\''"  contains=rubyQuoteEscape,rubyBackslashEscape' . s:spell_cluster . s:fold_arg
2442ed639abSBram Moolenaarunlet s:spell_cluster s:fold_arg
24589bcfda6SBram Moolenaar
24689bcfda6SBram Moolenaar" Shell Command Output {{{1
2472ed639abSBram MoolenaarSynFold 'string' syn region rubyString matchgroup=rubyStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@rubyStringSpecial
2482ed639abSBram Moolenaar
2492ed639abSBram Moolenaar" Generalized Single Quoted Strings, Symbols, Array of Strings and Array of Symbols {{{1
2502ed639abSBram Moolenaar
2512ed639abSBram Moolenaar" Non-bracket punctuation delimiters {{{2
2522ed639abSBram Moolenaarlet s:names = { '~': 'Tilde', '`': 'BackQuote', '!': 'Bang', '@': 'At', '#': 'Hash', '$': 'Dollar', '%': 'Percent', '^': 'Caret',
2532ed639abSBram Moolenaar      \		'&': 'Ampersand', '*': 'Asterix', '_': 'Underscore', '-': 'Dash', '+': 'Plus', '=': 'Equals', '|': 'Bar',
2542ed639abSBram Moolenaar      \		'\': 'Backslash', ':': 'Colon', ';': 'Semicolon', '"': 'DoubleQuote', "'": 'Quote', ',': 'Comma', '.': 'Period',
2552ed639abSBram Moolenaar      \		'?': 'QuestionMark', '/': 'ForwardSlash' }
2562ed639abSBram Moolenaar
2572ed639abSBram Moolenaarfor s:delimiter in keys(s:names)
2582ed639abSBram Moolenaar  let s:group = 'ruby' . s:names[s:delimiter] . 'Escape'
2592ed639abSBram Moolenaar
2602ed639abSBram Moolenaar  if s:delimiter =~ '[\"]'
2612ed639abSBram Moolenaar    let s:delimiter = '\' . s:delimiter
26289bcfda6SBram Moolenaar  endif
2636b730e11SBram Moolenaar
2642ed639abSBram Moolenaar  exe 'syn match ' . s:group . ' "\V\\' . s:delimiter . '" contained display'
2652ed639abSBram Moolenaar  exe 'syn cluster rubySingleCharEscape add=' . s:group
2662ed639abSBram 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'
2672ed639abSBram 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'
2682ed639abSBram 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'
2692ed639abSBram 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'
2702ed639abSBram Moolenaar  exe 'hi def link ' . s:group . ' rubyStringEscape'
2712ed639abSBram Moolenaarendfor
2726b730e11SBram Moolenaar
2732ed639abSBram Moolenaarunlet s:delimiter s:group s:names
2742ed639abSBram Moolenaar" }}}2
275071d4279SBram Moolenaar
2762ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q{"	  end="}"   skip="\\\\\|\\}"   contains=rubyBackslashEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces
2772ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q<"	  end=">"   skip="\\\\\|\\>"   contains=rubyBackslashEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets
2782ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q\["	  end="\]"  skip="\\\\\|\\\]"  contains=rubyBackslashEscape,rubySquareBracketEscape,rubyNestedSquareBrackets
2792ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q("	  end=")"   skip="\\\\\|\\)"   contains=rubyBackslashEscape,rubyParenthesisEscape,rubyNestedParentheses
2802ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q\z(\s\)" end="\z1" skip="\\\\\|\\\z1" contains=rubyBackslashEscape,rubySpaceEscape
281071d4279SBram Moolenaar
2822ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w{"	  end="}"   skip="\\\\\|\\}"   contains=rubyBackslashEscape,rubySpaceEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces
2832ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w<"	  end=">"   skip="\\\\\|\\>"   contains=rubyBackslashEscape,rubySpaceEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets
2842ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w\["	  end="\]"  skip="\\\\\|\\\]"  contains=rubyBackslashEscape,rubySpaceEscape,rubySquareBracketEscape,rubyNestedSquareBrackets
2852ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w("	  end=")"   skip="\\\\\|\\)"   contains=rubyBackslashEscape,rubySpaceEscape,rubyParenthesisEscape,rubyNestedParentheses
2866b730e11SBram Moolenaar
2872ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s{"	  end="}"   skip="\\\\\|\\}"   contains=rubyBackslashEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces
2882ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s<"	  end=">"   skip="\\\\\|\\>"   contains=rubyBackslashEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets
2892ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s\["	  end="\]"  skip="\\\\\|\\\]"  contains=rubyBackslashEscape,rubySquareBracketEscape,rubyNestedSquareBrackets
2902ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s("	  end=")"   skip="\\\\\|\\)"   contains=rubyBackslashEscape,rubyParenthesisEscape,rubyNestedParentheses
2912ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentSymbolDelimiter start="%s\z(\s\)" end="\z1" skip="\\\\\|\\\z1" contains=rubyBackslashEscape,rubySpaceEscape
2926b730e11SBram Moolenaar
2932ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i{"	  end="}"   skip="\\\\\|\\}"   contains=rubyBackslashEscape,rubySpaceEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces
2942ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i<"	  end=">"   skip="\\\\\|\\>"   contains=rubyBackslashEscape,rubySpaceEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets
2952ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i\["	  end="\]"  skip="\\\\\|\\\]"  contains=rubyBackslashEscape,rubySpaceEscape,rubySquareBracketEscape,rubyNestedSquareBrackets
2962ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i("	  end=")"   skip="\\\\\|\\)"   contains=rubyBackslashEscape,rubySpaceEscape,rubyParenthesisEscape,rubyNestedParentheses
29789bcfda6SBram Moolenaar
2982ed639abSBram Moolenaar" Generalized Double Quoted Strings, Array of Strings, Array of Symbols and Shell Command Output {{{1
2992ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="\%(\%(\w\|[^\x00-\x7F]\|]\)\s*\)\@<!%=" end="="	 skip="\\\\\|\\="   contains=@rubyStringSpecial nextgroup=@rubyModifier skipwhite
3002ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)"       end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial nextgroup=@rubyModifier skipwhite
3012ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial nextgroup=@rubyModifier skipwhite
3022ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\={"			       end="}"	 skip="\\\\\|\\}"   contains=@rubyStringSpecial,rubyNestedCurlyBraces
3032ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\=<"			       end=">"	 skip="\\\\\|\\>"   contains=@rubyStringSpecial,rubyNestedAngleBrackets
3042ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\=\["			       end="\]"  skip="\\\\\|\\\]"  contains=@rubyStringSpecial,rubyNestedSquareBrackets
3052ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\=("			       end=")"	 skip="\\\\\|\\)"   contains=@rubyStringSpecial,rubyNestedParentheses
3062ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[Qx]\z(\s\)"			       end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial
30789bcfda6SBram Moolenaar
3082ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial nextgroup=@rubyModifier skipwhite
3092ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I{"				   end="}"   skip="\\\\\|\\}"	contains=@rubyStringSpecial,rubyNestedCurlyBraces
3102ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I<"				   end=">"   skip="\\\\\|\\>"	contains=@rubyStringSpecial,rubyNestedAngleBrackets
3112ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I\["				   end="\]"  skip="\\\\\|\\\]"	contains=@rubyStringSpecial,rubyNestedSquareBrackets
3122ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I("				   end=")"   skip="\\\\\|\\)"	contains=@rubyStringSpecial,rubyNestedParentheses
31389bcfda6SBram Moolenaar
3142ed639abSBram Moolenaar" Here Documents {{{1
3152ed639abSBram 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
3172ed639abSBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyHeredocDelimiter start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<[-~]\=\zs"\%([^"]*\)"+					   end=+$+ oneline contains=ALLBUT,@rubyNotTop
3182ed639abSBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyHeredocDelimiter start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<[-~]\=\zs'\%([^']*\)'+					   end=+$+ oneline contains=ALLBUT,@rubyNotTop
3192ed639abSBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyHeredocDelimiter start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<[-~]\=\zs`\%([^`]*\)`+					   end=+$+ oneline contains=ALLBUT,@rubyNotTop
3202ed639abSBram Moolenaar
3212ed639abSBram 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
3222ed639abSBram MoolenaarSynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2				      matchgroup=rubyHeredocDelimiter end=+^\z1$+	contains=rubyHeredocStart,@rubyStringSpecial keepend
3232ed639abSBram MoolenaarSynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2				      matchgroup=rubyHeredocDelimiter end=+^\z1$+	contains=rubyHeredocStart		     keepend
3242ed639abSBram MoolenaarSynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2				      matchgroup=rubyHeredocDelimiter end=+^\z1$+	contains=rubyHeredocStart,@rubyStringSpecial keepend
3252ed639abSBram Moolenaar
3262ed639abSBram 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
3272ed639abSBram 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
3282ed639abSBram 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
3292ed639abSBram 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
3322ed639abSBram Moolenaarsyn match rubyAliasDeclaration	"[^[:space:];#.()]\+" contained contains=rubySymbol,@rubyGlobalVariable nextgroup=rubyAliasDeclaration2 skipwhite
3332ed639abSBram Moolenaarsyn match rubyAliasDeclaration2 "[^[:space:];#.()]\+" contained contains=rubySymbol,@rubyGlobalVariable
3349964e468SBram Moolenaarsyn match rubyMethodDeclaration "[^[:space:];#(]\+"   contained contains=rubyConstant,rubyBoolean,rubyPseudoVariable,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable
335*4d8f4761SBram Moolenaarsyn match rubyClassDeclaration	"[^[:space:];#<]\+"   contained contains=rubyClassName,rubyScopeOperator nextgroup=rubySuperClassOperator skipwhite
3362ed639abSBram Moolenaarsyn match rubyModuleDeclaration "[^[:space:];#<]\+"   contained contains=rubyModuleName,rubyScopeOperator
337c1762ccbSBram Moolenaar
3382ed639abSBram Moolenaarsyn match rubyMethodName "\<\%([_[:alpha:]]\|[^\x00-\x7F]\)\%([_[:alnum:]]\|[^\x00-\x7F]\)*[?!=]\=\%([[:alnum:]_.:?!=]\|[^\x00-\x7F]\)\@!"			      contained containedin=rubyMethodDeclaration
3392ed639abSBram Moolenaarsyn match rubyMethodName "\%(\s\|^\)\@1<=\%([_[:alpha:]]\|[^\x00-\x7F]\)\%([_[:alnum:]]\|[^\x00-\x7F]\)*[?!=]\=\%(\s\|$\)\@="					      contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2
3402ed639abSBram Moolenaarsyn match rubyMethodName "\%([[:space:].]\|^\)\@1<=\%(\[\]=\=\|\*\*\|[-+!~]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|[=!]=\|[=!]\~\|!\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration
3412ed639abSBram Moolenaar
3422ed639abSBram Moolenaarsyn cluster rubyDeclaration contains=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration,rubyModuleDeclaration,rubyClassDeclaration,rubyMethodName
343c236c16dSBram Moolenaar
34489bcfda6SBram Moolenaar" Keywords {{{1
3452ed639abSBram Moolenaar" TODO: reorganise
3462ed639abSBram Moolenaarsyn match rubyControl	     "\%#=1\<\%(break\|in\|next\|redo\|retry\|return\)\>"
3472ed639abSBram Moolenaarsyn match rubyKeyword	     "\%#=1\<\%(super\|yield\)\>"
3482ed639abSBram Moolenaarsyn match rubyBoolean	     "\%#=1\<\%(true\|false\)\>[?!]\@!"
3492ed639abSBram Moolenaarsyn match rubyPseudoVariable "\%#=1\<\(self\|nil\)\>[?!]\@!"
3502ed639abSBram Moolenaarsyn match rubyPseudoVariable "\%#=1\<__\%(ENCODING\|dir\|FILE\|LINE\|callee\|method\)__\>"
3512ed639abSBram 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
3602ed639abSBram Moolenaar  syn match rubyClass  "\<class\>"  nextgroup=rubyClassDeclaration,rubyEigenClassOperator skipwhite skipnl
3619964e468SBram Moolenaar  syn match rubyModule "\<module\>" nextgroup=rubyModuleDeclaration			  skipwhite skipnl
3621d68952aSBram Moolenaar
3632ed639abSBram Moolenaar  SynFold 'def'    syn region rubyMethodBlock start="\<def\>"	 matchgroup=rubyDefine skip="\<end:\|\%(\<def\_s\+\)\@<=end\>" end="\<end\>" contains=ALLBUT,@rubyNotTop
3642ed639abSBram Moolenaar  SynFold 'class'  syn region rubyClassBlock  start="\<class\>"  matchgroup=rubyClass  skip="\<end:"			       end="\<end\>" contains=ALLBUT,@rubyNotTop
3652ed639abSBram Moolenaar  SynFold 'module' syn region rubyModuleBlock start="\<module\>" matchgroup=rubyModule skip="\<end:"			       end="\<end\>" contains=ALLBUT,@rubyNotTop
366071d4279SBram Moolenaar
3676b730e11SBram Moolenaar  " modifiers
3682ed639abSBram Moolenaar  syn match rubyLineContinuation    "\\$" nextgroup=@rubyModifier skipwhite skipnl
36989bcfda6SBram Moolenaar  syn match rubyConditionalModifier "\<\%(if\|unless\)\>"
37089bcfda6SBram Moolenaar  syn match rubyRepeatModifier	    "\<\%(while\|until\)\>"
3712ed639abSBram Moolenaar  syn match rubyRescueModifier	    "\<rescue\>"
372071d4279SBram Moolenaar
3732ed639abSBram Moolenaar  syn cluster rubyModifier contains=rubyConditionalModifier,rubyRepeatModifier,rubyRescueModifier
3742ed639abSBram Moolenaar
3752ed639abSBram 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
3782ed639abSBram Moolenaar  SynFold '{' syn region rubyCurlyBlock   matchgroup=rubyCurlyBlockDelimiter start="{"						    end="}" contains=ALLBUT,@rubyNotTop
3792ed639abSBram Moolenaar  SynFold '[' syn region rubyArrayLiteral matchgroup=rubyArrayDelimiter      start="\%(\%(\w\|[^\x00-\x7F]\)[?!]\=\|[]})]\)\@2<!\[" end="]" contains=ALLBUT,@rubyNotTop
380071d4279SBram Moolenaar
381c1762ccbSBram Moolenaar  " statements without 'do'
3822ed639abSBram Moolenaar  SynFold 'begin' syn region rubyBlockExpression matchgroup=rubyControl     start="\<begin\>" skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop
3832ed639abSBram Moolenaar  SynFold 'case'  syn region rubyCaseExpression  matchgroup=rubyConditional start="\<case\>"  skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop
38489bcfda6SBram Moolenaar
3852ed639abSBram 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
3872ed639abSBram Moolenaar  syn match rubyConditional "\<\%(then\|else\|when\)\>"	 contained containedin=rubyCaseExpression
3882ed639abSBram Moolenaar  syn match rubyConditional "\<\%(then\|else\|elsif\)\>" contained containedin=rubyConditionalExpression
389071d4279SBram Moolenaar
3902ed639abSBram Moolenaar  syn match   rubyExceptionHandler  "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>" contained containedin=rubyBlockExpression,rubyDoBlock
3912ed639abSBram Moolenaar  syn match   rubyExceptionHandler2 "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>" contained containedin=rubyModuleBlock,rubyClassBlock,rubyMethodBlock
3922ed639abSBram Moolenaar  syn cluster rubyExceptionHandler  contains=rubyExceptionHandler,rubyExceptionHandler2
3931d68952aSBram Moolenaar
394c1762ccbSBram Moolenaar  " statements with optional 'do'
3952ed639abSBram 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
3972ed639abSBram 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
4022ed639abSBram Moolenaar  exe "syn sync minlines=" . ruby_minlines
403071d4279SBram Moolenaar
4046b730e11SBram Moolenaarelse
4052ed639abSBram Moolenaar  syn match rubyControl "\<def\>"    nextgroup=rubyMethodDeclaration skipwhite skipnl
4062ed639abSBram Moolenaar  syn match rubyControl "\<class\>"  nextgroup=rubyClassDeclaration  skipwhite skipnl
4072ed639abSBram Moolenaar  syn match rubyControl "\<module\>" nextgroup=rubyModuleDeclaration skipwhite skipnl
4082ed639abSBram Moolenaar  syn match rubyControl "\<\%(case\|begin\|do\|for\|if\|unless\|while\|until\|else\|elsif\|rescue\|ensure\|then\|when\|end\)\>"
4092ed639abSBram Moolenaar  syn match rubyKeyword "\<\%(alias\|undef\)\>"
4106b730e11SBram Moolenaarendif
411071d4279SBram Moolenaar
41289bcfda6SBram Moolenaar" Special Methods {{{1
4136b730e11SBram Moolenaarif !exists("ruby_no_special_methods")
4142ed639abSBram Moolenaar  syn match rubyAccess	  "\<\%(public\|protected\|private\)\>" " use re=2
4152ed639abSBram Moolenaar  syn match rubyAccess	  "\%#=1\<\%(public\|private\)_class_method\>"
4162ed639abSBram Moolenaar  syn match rubyAccess	  "\%#=1\<\%(public\|private\)_constant\>"
4172ed639abSBram Moolenaar  syn match rubyAccess	  "\%#=1\<module_function\>"
4182ed639abSBram Moolenaar  syn match rubyAttribute "\%#=1\%(\%(^\|;\)\s*\)\@<=attr\>\(\s*[.=]\)\@!" " attr is a common variable name
4192ed639abSBram Moolenaar  syn match rubyAttribute "\%#=1\<attr_\%(accessor\|reader\|writer\)\>"
4202ed639abSBram Moolenaar  syn match rubyControl   "\%#=1\<\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>"
4212ed639abSBram Moolenaar  syn match rubyEval	  "\%#=1\<eval\>"
4222ed639abSBram Moolenaar  syn match rubyEval	  "\%#=1\<\%(class\|instance\|module\)_eval\>"
4232ed639abSBram Moolenaar  syn match rubyException "\%#=1\<\%(raise\|fail\|catch\|throw\)\>"
4242ed639abSBram Moolenaar  syn match rubyInclude   "\%#=1\<\%(autoload\|gem\|load\|require\%(_relative\)\=\)\>"
4252ed639abSBram Moolenaar  syn match rubyKeyword   "\%#=1\<\%(callcc\|caller\|lambda\|proc\)\>"
4262ed639abSBram Moolenaar  syn match rubyMacro	  "\%#=1\<\%(extend\|include\|prepend\|refine\|using\)\>"
4272ed639abSBram 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
4332ed639abSBram Moolenaarsyn match   rubyEncoding     "[[:alnum:]-]\+" contained display
4342ed639abSBram Moolenaarsyn match   rubyMagicComment "\c\%<3l#\s*\zs\%(coding\|encoding\):"					contained nextgroup=rubyEncoding skipwhite
4352ed639abSBram Moolenaarsyn match   rubyMagicComment "\c\%<10l#\s*\zs\%(frozen_string_literal\|warn_indent\|warn_past_scope\):" contained nextgroup=rubyBoolean  skipwhite
4362ed639abSBram Moolenaarsyn match   rubyComment	     "#.*" contains=@rubyCommentSpecial,rubySpaceError,@Spell
4372ed639abSBram Moolenaar
4382ed639abSBram Moolenaarsyn cluster rubyCommentSpecial contains=rubySharpBang,rubyTodo,rubyMagicComment
4392ed639abSBram Moolenaarsyn cluster rubyCommentNotTop  contains=@rubyCommentSpecial,rubyEncoding
4402ed639abSBram 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
4482ed639abSBram Moolenaar" {{{1 Useless Line Continuations
4492ed639abSBram Moolenaarsyn match rubyUselessLineContinuation "\%([.:,;{([<>~\*%&^|+=-]\|%(\%(\w\|[^\x00-\x7F]\)\@1<![?!]\)\s*\zs\\$" nextgroup=rubyUselessLineContinuation skipwhite skipempty
4502ed639abSBram Moolenaarsyn match rubyUselessLineContinuation "\\$"								      nextgroup=rubyUselessLineContinuation skipwhite skipempty contained
4516b730e11SBram Moolenaar
4522ed639abSBram Moolenaar" Keyword Nobbling {{{1
4532ed639abSBram Moolenaar" prevent methods with keyword names being highlighted as keywords when called
4542ed639abSBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@1<!\.\)\|&\.\|::\)\_s*\%([_[:lower:]][_[:alnum:]]*\|\%(BEGIN\|END\)\>\)" transparent contains=rubyDotOperator,rubyScopeOperator
4552ed639abSBram Moolenaar
4562ed639abSBram Moolenaar" Bang and Predicate Methods and Operators {{{1
4572ed639abSBram Moolenaarsyn match rubyBangPredicateMethod "\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[?!]"
4582ed639abSBram Moolenaar
4592ed639abSBram Moolenaarif !exists("ruby_no_special_methods")
4602ed639abSBram Moolenaar  syn match rubyControl "\%#=1\<exit!" display
4612ed639abSBram Moolenaarendif
4622ed639abSBram Moolenaarsyn match rubyDefinedOperator "\%#=1\<defined?" display
4632ed639abSBram Moolenaar
4642ed639abSBram Moolenaar" 1.9-style Hash Keys and Keyword Parameters {{{1
465*4d8f4761SBram Moolenaarsyn match rubySymbol "\%(\w\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[?!]\=::\@!"he=e-1 contained containedin=rubyBlockParameterList,rubyCurlyBlock
4662ed639abSBram Moolenaarsyn match rubySymbol "[]})\"':]\@1<!\<\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],;]\@="he=e-1
4672ed639abSBram Moolenaarsyn match rubySymbol "[[:space:],{(]\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],;]\@="hs=s+1,he=e-1
468c236c16dSBram Moolenaar
46989bcfda6SBram Moolenaar" __END__ Directive {{{1
4702ed639abSBram 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
4752ed639abSBram 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
4842ed639abSBram Moolenaarhi def link rubyExceptionHandler	rubyConditional
4852ed639abSBram 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
4922ed639abSBram 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
5122ed639abSBram Moolenaar
513c1762ccbSBram Moolenaarhi def link rubyOperator		Operator
5142ed639abSBram Moolenaarhi def link rubyDefinedOperator		rubyOperator
5152ed639abSBram Moolenaarhi def link rubyEnglishBooleanOperator	rubyOperator
5162ed639abSBram Moolenaarif exists("ruby_operators")
5172ed639abSBram Moolenaar  hi def link rubyTernaryOperator	rubyOperator
5182ed639abSBram Moolenaar  hi def link rubyArithmeticOperator	rubyOperator
5192ed639abSBram Moolenaar  hi def link rubyComparisonOperator	rubyOperator
5202ed639abSBram Moolenaar  hi def link rubyBitwiseOperator	rubyOperator
5212ed639abSBram Moolenaar  hi def link rubyBooleanOperator	rubyOperator
5222ed639abSBram Moolenaar  hi def link rubyRangeOperator		rubyOperator
5232ed639abSBram Moolenaar  hi def link rubyAssignmentOperator	rubyOperator
5242ed639abSBram Moolenaar  hi def link rubyEqualityOperator	rubyOperator
5252ed639abSBram Moolenaarendif
5262ed639abSBram Moolenaar
5272ed639abSBram Moolenaarif exists("ruby_pseudo_operators")
5282ed639abSBram Moolenaar  hi def link rubyPseudoOperator	Special
5292ed639abSBram Moolenaar  hi def link rubyDotOperator		rubyPseudoOperator
5302ed639abSBram Moolenaar  hi def link rubyScopeOperator		rubyPseudoOperator
5312ed639abSBram Moolenaar  hi def link rubySuperClassOperator	rubyPseudoOperator
5322ed639abSBram Moolenaar  hi def link rubyEigenClassOperator	rubyPseudoOperator
5332ed639abSBram Moolenaar  hi def link rubyLambdaOperator	rubyPseudoOperator
5342ed639abSBram Moolenaar  hi def link rubyDoubleSplatOperator	rubyPseudoOperator
5352ed639abSBram Moolenaar  hi def link rubySplatOperator		rubyPseudoOperator
5362ed639abSBram Moolenaar  hi def link rubyProcOperator		rubyPseudoOperator
5372ed639abSBram Moolenaarendif
5382ed639abSBram Moolenaar
539c1762ccbSBram Moolenaarhi def link rubyBeginEnd		Statement
540c1762ccbSBram Moolenaarhi def link rubyEval			Statement
541c1762ccbSBram Moolenaarhi def link rubyPseudoVariable		Constant
5422ed639abSBram Moolenaarhi def link rubyCapitalizedMethod	NONE
543071d4279SBram Moolenaar
544c1762ccbSBram Moolenaarhi def link rubyComment			Comment
5452ed639abSBram Moolenaarhi def link rubyEncoding		Constant
5462ed639abSBram 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
5522ed639abSBram Moolenaarhi def link rubyBackslashEscape		rubyStringEscape
5531d68952aSBram Moolenaarhi def link rubyQuoteEscape		rubyStringEscape
5542ed639abSBram Moolenaarhi def link rubySpaceEscape		rubyStringEscape
5552ed639abSBram Moolenaarhi def link rubyParenthesisEscape	rubyStringEscape
5562ed639abSBram Moolenaarhi def link rubyCurlyBraceEscape	rubyStringEscape
5572ed639abSBram Moolenaarhi def link rubyAngleBracketEscape	rubyStringEscape
5582ed639abSBram Moolenaarhi def link rubySquareBracketEscape	rubyStringEscape
559c236c16dSBram Moolenaarhi def link rubyStringEscape		Special
5602ed639abSBram Moolenaar
561c1762ccbSBram Moolenaarhi def link rubyInterpolationDelimiter	Delimiter
562c1762ccbSBram Moolenaarhi def link rubySharpBang		PreProc
5632ed639abSBram Moolenaarhi def link rubyStringDelimiter		Delimiter
5642ed639abSBram Moolenaarhi def link rubyHeredocDelimiter	rubyStringDelimiter
5652ed639abSBram Moolenaarhi def link rubyPercentRegexpDelimiter	rubyRegexpDelimiter
5662ed639abSBram Moolenaarhi def link rubyPercentStringDelimiter	rubyStringDelimiter
5672ed639abSBram 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
5762ed639abSBram 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
5822ed639abSBram Moolenaarif exists("ruby_line_continuation_error")
5832ed639abSBram Moolenaar  hi def link rubyUselessLineContinuation rubyError
5842ed639abSBram Moolenaarendif
5852ed639abSBram 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
5942ed639abSBram Moolenaardelc SynFold
5952ed639abSBram Moolenaar
59689bcfda6SBram Moolenaar" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:
597