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