eruby.vim 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. " Vim syntax file
  2. " Language: eRuby
  3. " Maintainer: Tim Pope <vimNOSPAM@tpope.org>
  4. " URL: https://github.com/vim-ruby/vim-ruby
  5. " Release Coordinator: Doug Kearns <dougkearns@gmail.com>
  6. " Last Change: 2022 Mar 18
  7. if exists("b:current_syntax")
  8. finish
  9. endif
  10. if !exists("main_syntax")
  11. let main_syntax = 'eruby'
  12. endif
  13. if !exists("g:eruby_default_subtype")
  14. let g:eruby_default_subtype = "html"
  15. endif
  16. if &filetype =~ '^eruby\.'
  17. let b:eruby_subtype = matchstr(&filetype,'^eruby\.\zs\w\+')
  18. elseif !exists("b:eruby_subtype") && main_syntax == 'eruby'
  19. let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
  20. let b:eruby_subtype = matchstr(s:lines,'eruby_subtype=\zs\w\+')
  21. if b:eruby_subtype == ''
  22. let b:eruby_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.erb\|\.eruby\|\.erubis\|\.example\)\+$','',''),'\.\zs\w\+\%(\ze+\w\+\)\=$')
  23. endif
  24. if b:eruby_subtype == 'rhtml'
  25. let b:eruby_subtype = 'html'
  26. elseif b:eruby_subtype == 'rb'
  27. let b:eruby_subtype = 'ruby'
  28. elseif b:eruby_subtype == 'yml'
  29. let b:eruby_subtype = 'yaml'
  30. elseif b:eruby_subtype == 'js'
  31. let b:eruby_subtype = 'javascript'
  32. elseif b:eruby_subtype == 'txt'
  33. " Conventional; not a real file type
  34. let b:eruby_subtype = 'text'
  35. elseif b:eruby_subtype == ''
  36. let b:eruby_subtype = g:eruby_default_subtype
  37. endif
  38. endif
  39. if !exists("b:eruby_nest_level")
  40. if &syntax =~# '\<eruby\.eruby\>'
  41. let b:eruby_nest_level = strlen(substitute(substitute(&filetype,'\C\<eruby\>','@','g'),'[^@]','','g'))
  42. else
  43. let b:eruby_nest_level = strlen(substitute(substitute(substitute(expand("%:t"),'@','','g'),'\c\.\%(erb\|rhtml\)\>','@','g'),'[^@]','','g'))
  44. endif
  45. endif
  46. if !b:eruby_nest_level
  47. let b:eruby_nest_level = 1
  48. endif
  49. if exists("b:eruby_subtype") && b:eruby_subtype != '' && b:eruby_subtype !=? 'eruby'
  50. exe "runtime! syntax/".b:eruby_subtype.".vim"
  51. unlet! b:current_syntax
  52. endif
  53. syn include @rubyTop syntax/ruby.vim
  54. syn cluster erubyRegions contains=erubyOneLiner,erubyBlock,erubyExpression,erubyComment
  55. exe 'syn region erubyOneLiner matchgroup=erubyDelimiter start="^%\{1,'.b:eruby_nest_level.'\}%\@!" end="$" contains=@rubyTop containedin=ALLBUT,@erubyRegions keepend oneline'
  56. exe 'syn region erubyBlock matchgroup=erubyDelimiter start="<%\{1,'.b:eruby_nest_level.'\}%\@!-\=" end="[=-]\=%\@<!%\{1,'.b:eruby_nest_level.'\}>" contains=@rubyTop containedin=ALLBUT,@erubyRegions keepend'
  57. exe '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'
  58. exe 'syn region erubyComment matchgroup=erubyDelimiter start="<%\{1,'.b:eruby_nest_level.'\}-\=#" end="[=-]\=%\@<!%\{1,'.b:eruby_nest_level.'\}>" contains=rubyTodo,@Spell containedin=ALLBUT,@erubyRegions keepend'
  59. " Define the default highlighting.
  60. hi def link erubyDelimiter PreProc
  61. hi def link erubyComment Comment
  62. let b:current_syntax = 'eruby'
  63. if main_syntax == 'eruby'
  64. unlet main_syntax
  65. endif
  66. " vim: nowrap sw=2 sts=2 ts=8: