xref: /vim-8.2.3635/runtime/syntax/eruby.vim (revision d09091d4)
16e7c7f3aSBram Moolenaar" Vim syntax file
26e7c7f3aSBram Moolenaar" Language:		eRuby
31d68952aSBram Moolenaar" Maintainer:		Tim Pope <[email protected]>
4ec7944aaSBram Moolenaar" URL:			https://github.com/vim-ruby/vim-ruby
5c6249bb2SBram Moolenaar" Release Coordinator:	Doug Kearns <[email protected]>
6*d09091d4SBram Moolenaar" Last Change:		2018 Jul 04
76e7c7f3aSBram Moolenaar
8*d09091d4SBram Moolenaarif &syntax !~# '\<eruby\>' || get(b:, 'current_syntax') =~# '\<eruby\>'
96e7c7f3aSBram Moolenaar  finish
106e7c7f3aSBram Moolenaarendif
116e7c7f3aSBram Moolenaar
126e7c7f3aSBram Moolenaarif !exists("main_syntax")
136e7c7f3aSBram Moolenaar  let main_syntax = 'eruby'
146e7c7f3aSBram Moolenaarendif
156e7c7f3aSBram Moolenaar
16ccc18222SBram Moolenaarif !exists("g:eruby_default_subtype")
17ccc18222SBram Moolenaar  let g:eruby_default_subtype = "html"
186e7c7f3aSBram Moolenaarendif
196e7c7f3aSBram Moolenaar
20ec7944aaSBram Moolenaarif &filetype =~ '^eruby\.'
21ec7944aaSBram Moolenaar  let b:eruby_subtype = matchstr(&filetype,'^eruby\.\zs\w\+')
22*d09091d4SBram Moolenaarelseif &filetype =~ '^.*\.eruby\>'
23*d09091d4SBram Moolenaar  let b:eruby_subtype = matchstr(&filetype,'^.\{-\}\ze\.eruby\>')
24ec7944aaSBram Moolenaarelseif !exists("b:eruby_subtype") && main_syntax == 'eruby'
25ccc18222SBram Moolenaar  let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
26ccc18222SBram Moolenaar  let b:eruby_subtype = matchstr(s:lines,'eruby_subtype=\zs\w\+')
27ccc18222SBram Moolenaar  if b:eruby_subtype == ''
28*d09091d4SBram Moolenaar    let b:eruby_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.erb\|\.eruby\|\.erubis\|\.example\)\+$','',''),'\.\zs\w\+\%(\ze+\w\+\)\=$')
29ccc18222SBram Moolenaar  endif
30ccc18222SBram Moolenaar  if b:eruby_subtype == 'rhtml'
31ccc18222SBram Moolenaar    let b:eruby_subtype = 'html'
32ccc18222SBram Moolenaar  elseif b:eruby_subtype == 'rb'
33ccc18222SBram Moolenaar    let b:eruby_subtype = 'ruby'
34ccc18222SBram Moolenaar  elseif b:eruby_subtype == 'yml'
35ccc18222SBram Moolenaar    let b:eruby_subtype = 'yaml'
36ccc18222SBram Moolenaar  elseif b:eruby_subtype == 'js'
37ccc18222SBram Moolenaar    let b:eruby_subtype = 'javascript'
38ccc18222SBram Moolenaar  elseif b:eruby_subtype == 'txt'
39ccc18222SBram Moolenaar    " Conventional; not a real file type
40ccc18222SBram Moolenaar    let b:eruby_subtype = 'text'
41ccc18222SBram Moolenaar  elseif b:eruby_subtype == ''
42ccc18222SBram Moolenaar    let b:eruby_subtype = g:eruby_default_subtype
43ccc18222SBram Moolenaar  endif
44ccc18222SBram Moolenaarendif
45ccc18222SBram Moolenaar
46ccc18222SBram Moolenaarif !exists("b:eruby_nest_level")
47*d09091d4SBram Moolenaar  if &syntax =~# '\<eruby\.eruby\>'
48*d09091d4SBram Moolenaar    let b:eruby_nest_level = strlen(substitute(substitute(&filetype,'\C\<eruby\>','@','g'),'[^@]','','g'))
49*d09091d4SBram Moolenaar  else
50ccc18222SBram Moolenaar    let b:eruby_nest_level = strlen(substitute(substitute(substitute(expand("%:t"),'@','','g'),'\c\.\%(erb\|rhtml\)\>','@','g'),'[^@]','','g'))
51ccc18222SBram Moolenaar  endif
52*d09091d4SBram Moolenaarendif
53ccc18222SBram Moolenaarif !b:eruby_nest_level
54ccc18222SBram Moolenaar  let b:eruby_nest_level = 1
55ccc18222SBram Moolenaarendif
56ccc18222SBram Moolenaar
57*d09091d4SBram Moolenaarif get(b:, 'eruby_subtype', '') !~# '^\%(eruby\)\=$' && &syntax =~# '^eruby\>'
58ccc18222SBram Moolenaar  exe "runtime! syntax/".b:eruby_subtype.".vim"
59ccc18222SBram Moolenaarendif
60*d09091d4SBram Moolenaarunlet! b:current_syntax
61ccc18222SBram Moolenaarsyn include @rubyTop syntax/ruby.vim
62ccc18222SBram Moolenaar
6360a795aaSBram Moolenaarsyn cluster erubyRegions contains=erubyOneLiner,erubyBlock,erubyExpression,erubyComment
6460a795aaSBram Moolenaar
65c236c16dSBram Moolenaarexe 'syn region  erubyOneLiner   matchgroup=erubyDelimiter start="^%\{1,'.b:eruby_nest_level.'\}%\@!"    end="$"     contains=@rubyTop	     containedin=ALLBUT,@erubyRegions keepend oneline'
661d68952aSBram Moolenaarexe 'syn region  erubyBlock      matchgroup=erubyDelimiter start="<%\{1,'.b:eruby_nest_level.'\}%\@!-\=" end="[=-]\=%\@<!%\{1,'.b:eruby_nest_level.'\}>" contains=@rubyTop  containedin=ALLBUT,@erubyRegions keepend'
671d68952aSBram Moolenaarexe 'syn region  erubyExpression matchgroup=erubyDelimiter start="<%\{1,'.b:eruby_nest_level.'\}=\{1,4}" end="[=-]\=%\@<!%\{1,'.b:eruby_nest_level.'\}>" contains=@rubyTop  containedin=ALLBUT,@erubyRegions keepend'
68ec7944aaSBram Moolenaarexe 'syn region  erubyComment    matchgroup=erubyDelimiter start="<%\{1,'.b:eruby_nest_level.'\}-\=#"    end="[=-]\=%\@<!%\{1,'.b:eruby_nest_level.'\}>" contains=rubyTodo,@Spell containedin=ALLBUT,@erubyRegions keepend'
696e7c7f3aSBram Moolenaar
706e7c7f3aSBram Moolenaar" Define the default highlighting.
716e7c7f3aSBram Moolenaar
721d68952aSBram Moolenaarhi def link erubyDelimiter		PreProc
73c236c16dSBram Moolenaarhi def link erubyComment		Comment
746e7c7f3aSBram Moolenaar
75*d09091d4SBram Moolenaarlet b:current_syntax = matchstr(&syntax, '^.*\<eruby\>')
766e7c7f3aSBram Moolenaar
776e7c7f3aSBram Moolenaarif main_syntax == 'eruby'
786e7c7f3aSBram Moolenaar  unlet main_syntax
796e7c7f3aSBram Moolenaarendif
806e7c7f3aSBram Moolenaar
81446cb837SBram Moolenaar" vim: nowrap sw=2 sts=2 ts=8:
82