html.vim 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  2. "
  3. " Config {{{
  4. "
  5. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  6. let s:config = vue#GetConfig('config', {})
  7. let s:attribute = s:config.attribute
  8. "}}}
  9. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  10. "
  11. " Syntax highlight {{{
  12. "
  13. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  14. " Clear htmlHead that may cause highlighting out of bounds
  15. silent! syntax clear htmlHead
  16. " html5 data-*
  17. syntax match htmlArg '\v<data(-[.a-z0-9]+)+>' containedin=@html
  18. " Vue ref attribute
  19. syntax match htmlArg 'ref' containedin=@html
  20. " Use syn-match in order to highlight both transition and transition-group
  21. " according to syn-priority
  22. syntax match VueComponentName containedin=htmlTagN '\v(component|slot|transition)'
  23. syntax match VueComponentName containedin=htmlTagN '\v\C<[a-z0-9]+(-[a-z0-9]+)+>'
  24. syntax match VueComponentName containedin=htmlTagN '\v\C<([A-Z][a-zA-Z0-9]+)+>'
  25. syntax match VueAttr '\v(\S)@<![v:\@][^=/>[:blank:]]+(\=\"[^"]*\")?'
  26. \ keepend
  27. \ containedin=htmlTag
  28. \ contains=VueKey,VueQuote
  29. syntax match VueKey contained '\v[v:\@][^=/>[:blank:]]+'
  30. syntax region VueQuote contained
  31. \ start='"' end='"'
  32. \ contains=VueValue
  33. syntax match VueInject contained '\v\$\w*'
  34. syntax region VueExpression
  35. \ containedin=ALLBUT,htmlComment
  36. \ matchgroup=VueBrace
  37. \ transparent
  38. \ start="{{"
  39. \ end="}}"
  40. " Just to avoid error when using pattern in containedin
  41. syntax match htmlTemplateBlock /htmlTemplateBlock/
  42. syntax region VueExpression
  43. \ containedin=VueValue,htmlString,htmlValue,.*TemplateBlock,html.*Block
  44. \ contains=@simpleJavascriptExpression
  45. \ matchgroup=VueBrace
  46. \ start="{{"
  47. \ end="}}"
  48. " Transition attributes
  49. syntax match htmlArg contained "\<\(enter-from-class\|enter-active-class\|enter-to-class\|leave-from-class\|leave-active-class\|leave-to-class\)\>"
  50. " Wepy directive syntax
  51. syntax match VueAttr '\v(\S)@<!wx[^\=>[:blank:]]+(\=\"[^"]*\")?'
  52. \ containedin=htmlTag
  53. \ contains=VueKey,VueQuote
  54. " Mini program syntax
  55. syntax match VueKey contained '\vwx[^\=>[:blank:]]+'
  56. syntax match VueCustomTag containedin=htmlTagN '\v<(view|text|block|image|checkbox|radio)>'
  57. syntax cluster simpleJavascriptExpression
  58. \ contains=javaScriptStringS,javaScriptStringD
  59. \,javaScriptTemplateString,javascriptNumber
  60. \,javaScriptOperator,htmlJavaScriptOperator
  61. " JavaScript syntax
  62. syntax region javaScriptStringS
  63. \ start=+'+ skip=+\\\\\|\\'+ end=+'\|$+ contained
  64. syntax region javaScriptStringD
  65. \ start=+"+ skip=+\\\\\|\\"+ end=+"\|$+ contained
  66. syntax region javaScriptTemplateString
  67. \ start=+`+ skip=+\\`+ end=+`|$+ contained
  68. \ contains=javaScriptTemplateExpression
  69. syntax region javaScriptTemplateExpression
  70. \ matchgroup=VueBrace
  71. \ start=+${+ end=+}+ contained
  72. \ contains=@simpleJavascriptExpression
  73. syntax match javaScriptNumber '\v<-?\d+L?>|0[xX][0-9a-fA-F]+>' contained
  74. syntax match htmlJavaScriptOperator '[-!|&+<>=%*~^]' contained
  75. syntax match htmlJavaScriptOperator '\v(*)@<!/(/|*)@!' contained
  76. syntax keyword htmlJavaScriptOperator delete instanceof typeof void new in of contained
  77. highlight default link VueAttr htmlTag
  78. if s:attribute
  79. syntax match VueValue contained '\v\"\zs[^"]+\ze\"'
  80. \ contains=VueInject,@simpleJavascriptExpression
  81. highlight default link VueKey Type
  82. highlight default link VueQuote VueAttr
  83. highlight default link VueValue None
  84. else
  85. syntax match VueValue contained '\v\"\zs[^"]+\ze\"'
  86. highlight default link VueKey htmlArg
  87. highlight default link VueQuote String
  88. highlight default link VueValue String
  89. endif
  90. highlight default link VueInject Constant
  91. highlight default link VueBrace Type
  92. highlight default link VueComponentName htmlTagName
  93. highlight default link VueCustomTag htmlTagName
  94. highlight default link javaScriptStringS String
  95. highlight default link javaScriptStringD String
  96. highlight default link javaScriptTemplateString String
  97. highlight default link javaScriptNumber Constant
  98. highlight default link htmlJavaScriptOperator Operator
  99. "}}}
  100. " vim: fdm=marker