html.vim 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. " Vim syntax file
  2. " Language: HTML
  3. " Maintainer: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
  4. " Previous Maintainer: Claudio Fleiner <claudio@fleiner.com>
  5. " Repository: https://notabug.org/jorgesumle/vim-html-syntax
  6. " Last Change: 2017 Sep 30
  7. " included patch from Christian Brabandt to make use of the strikethrough attributes
  8. "
  9. " Please check :help html.vim for some comments and a description of the options
  10. " quit when a syntax file was already loaded
  11. if !exists("main_syntax")
  12. if exists("b:current_syntax")
  13. finish
  14. endif
  15. let main_syntax = 'html'
  16. endif
  17. let s:cpo_save = &cpo
  18. set cpo&vim
  19. syntax spell toplevel
  20. syn case ignore
  21. " mark illegal characters
  22. syn match htmlError "[<>&]"
  23. " tags
  24. syn region htmlString contained start=+"+ end=+"+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc
  25. syn region htmlString contained start=+'+ end=+'+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc
  26. syn match htmlValue contained "=[\t ]*[^'" \t>][^ \t>]*"hs=s+1 contains=javaScriptExpression,@htmlPreproc
  27. syn region htmlEndTag start=+</+ end=+>+ contains=htmlTagN,htmlTagError
  28. syn region htmlTag start=+<[^/]+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster
  29. syn match htmlTagN contained +<\s*[-a-zA-Z0-9]\++hs=s+1 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster
  30. syn match htmlTagN contained +</\s*[-a-zA-Z0-9]\++hs=s+2 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster
  31. syn match htmlTagError contained "[^>]<"ms=s+1
  32. " tag names
  33. syn keyword htmlTagName contained address applet area a base basefont
  34. syn keyword htmlTagName contained big blockquote br caption center
  35. syn keyword htmlTagName contained cite code dd dfn dir div dl dt font
  36. syn keyword htmlTagName contained form hr html img
  37. syn keyword htmlTagName contained input isindex kbd li link map menu
  38. syn keyword htmlTagName contained meta ol option param pre p samp span
  39. syn keyword htmlTagName contained select small sub sup
  40. syn keyword htmlTagName contained table td textarea th tr tt ul var xmp
  41. syn match htmlTagName contained "\<\(b\|i\|u\|h[1-6]\|em\|strong\|head\|body\|title\)\>"
  42. " new html 4.0 tags
  43. syn keyword htmlTagName contained abbr acronym bdo button col label
  44. syn keyword htmlTagName contained colgroup fieldset iframe ins legend
  45. syn keyword htmlTagName contained object optgroup q s tbody tfoot thead
  46. " new html 5 tags
  47. syn keyword htmlTagName contained article aside audio bdi canvas data
  48. syn keyword htmlTagName contained datalist details embed figcaption figure
  49. syn keyword htmlTagName contained footer header hgroup keygen main mark
  50. syn keyword htmlTagName contained menuitem meter nav output picture
  51. syn keyword htmlTagName contained progress rb rp rt rtc ruby section
  52. syn keyword htmlTagName contained slot source template time track video wbr
  53. " legal arg names
  54. syn keyword htmlArg contained action
  55. syn keyword htmlArg contained align alink alt archive background bgcolor
  56. syn keyword htmlArg contained border bordercolor cellpadding
  57. syn keyword htmlArg contained cellspacing checked class clear code codebase color
  58. syn keyword htmlArg contained cols colspan content coords enctype face
  59. syn keyword htmlArg contained gutter height hspace id
  60. syn keyword htmlArg contained link lowsrc marginheight
  61. syn keyword htmlArg contained marginwidth maxlength method name prompt
  62. syn keyword htmlArg contained rel rev rows rowspan scrolling selected shape
  63. syn keyword htmlArg contained size src start target text type url
  64. syn keyword htmlArg contained usemap ismap valign value vlink vspace width wrap
  65. syn match htmlArg contained "\<\(http-equiv\|href\|title\)="me=e-1
  66. " Netscape extensions
  67. syn keyword htmlTagName contained frame noframes frameset nobr blink
  68. syn keyword htmlTagName contained layer ilayer nolayer spacer
  69. syn keyword htmlArg contained frameborder noresize pagex pagey above below
  70. syn keyword htmlArg contained left top visibility clip id noshade
  71. syn match htmlArg contained "\<z-index\>"
  72. " Microsoft extensions
  73. syn keyword htmlTagName contained marquee
  74. " html 4.0 arg names
  75. syn match htmlArg contained "\<\(accept-charset\|label\)\>"
  76. syn keyword htmlArg contained abbr accept accesskey axis char charoff charset
  77. syn keyword htmlArg contained cite classid codetype compact data datetime
  78. syn keyword htmlArg contained declare defer dir disabled for frame
  79. syn keyword htmlArg contained headers hreflang lang language longdesc
  80. syn keyword htmlArg contained multiple nohref nowrap object profile readonly
  81. syn keyword htmlArg contained rules scheme scope span standby style
  82. syn keyword htmlArg contained summary tabindex valuetype version
  83. " html 5 arg names
  84. syn keyword htmlArg contained allowfullscreen async autocomplete autofocus
  85. syn keyword htmlArg contained autoplay challenge contenteditable contextmenu
  86. syn keyword htmlArg contained controls crossorigin default dirname download
  87. syn keyword htmlArg contained draggable dropzone form formaction formenctype
  88. syn keyword htmlArg contained formmethod formnovalidate formtarget hidden
  89. syn keyword htmlArg contained high icon inputmode keytype kind list loop low
  90. syn keyword htmlArg contained max min minlength muted nonce novalidate open
  91. syn keyword htmlArg contained optimum pattern placeholder poster preload
  92. syn keyword htmlArg contained radiogroup required reversed sandbox spellcheck
  93. syn keyword htmlArg contained sizes srcset srcdoc srclang step title translate
  94. syn keyword htmlArg contained typemustmatch
  95. " special characters
  96. syn match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,8};"
  97. " Comments (the real ones or the old netscape ones)
  98. if exists("html_wrong_comments")
  99. syn region htmlComment start=+<!--+ end=+--\s*>+ contains=@Spell
  100. else
  101. syn region htmlComment start=+<!+ end=+>+ contains=htmlCommentPart,htmlCommentError,@Spell
  102. syn match htmlCommentError contained "[^><!]"
  103. syn region htmlCommentPart contained start=+--+ end=+--\s*+ contains=@htmlPreProc,@Spell
  104. endif
  105. syn region htmlComment start=+<!DOCTYPE+ keepend end=+>+
  106. " server-parsed commands
  107. syn region htmlPreProc start=+<!--#+ end=+-->+ contains=htmlPreStmt,htmlPreError,htmlPreAttr
  108. syn match htmlPreStmt contained "<!--#\(config\|echo\|exec\|fsize\|flastmod\|include\|printenv\|set\|if\|elif\|else\|endif\|geoguide\)\>"
  109. syn match htmlPreError contained "<!--#\S*"ms=s+4
  110. syn match htmlPreAttr contained "\w\+=[^"]\S\+" contains=htmlPreProcAttrError,htmlPreProcAttrName
  111. syn region htmlPreAttr contained start=+\w\+="+ skip=+\\\\\|\\"+ end=+"+ contains=htmlPreProcAttrName keepend
  112. syn match htmlPreProcAttrError contained "\w\+="he=e-1
  113. syn match htmlPreProcAttrName contained "\(expr\|errmsg\|sizefmt\|timefmt\|var\|cgi\|cmd\|file\|virtual\|value\)="he=e-1
  114. if !exists("html_no_rendering")
  115. " rendering
  116. syn cluster htmlTop contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,javaScript,@htmlPreproc
  117. syn region htmlStrike start="<del\>" end="</del>"me=e-6 contains=@htmlTop
  118. syn region htmlStrike start="<strike\>" end="</strike>"me=e-9 contains=@htmlTop
  119. syn region htmlBold start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
  120. syn region htmlBold start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
  121. syn region htmlBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic
  122. syn region htmlBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlBoldItalicUnderline
  123. syn region htmlBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlBoldItalicUnderline
  124. syn region htmlBoldUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop
  125. syn region htmlBoldUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop
  126. syn region htmlBoldItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic
  127. syn region htmlUnderline start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlUnderlineBold,htmlUnderlineItalic
  128. syn region htmlUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlUnderlineBoldItalic
  129. syn region htmlUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlUnderlineBoldItalic
  130. syn region htmlUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlUnderlineItalicBold
  131. syn region htmlUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlUnderlineItalicBold
  132. syn region htmlUnderlineItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
  133. syn region htmlUnderlineItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
  134. syn region htmlUnderlineBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop
  135. syn region htmlUnderlineBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop
  136. syn region htmlItalic start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlItalicBold,htmlItalicUnderline
  137. syn region htmlItalic start="<em\>" end="</em>"me=e-5 contains=@htmlTop
  138. syn region htmlItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlItalicBoldUnderline
  139. syn region htmlItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlItalicBoldUnderline
  140. syn region htmlItalicBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop
  141. syn region htmlItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlItalicUnderlineBold
  142. syn region htmlItalicUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
  143. syn region htmlItalicUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
  144. syn match htmlLeadingSpace "^\s\+" contained
  145. syn region htmlLink start="<a\>\_[^>]*\<href\>" end="</a>"me=e-4 contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLeadingSpace,javaScript,@htmlPreproc
  146. syn region htmlH1 start="<h1\>" end="</h1>"me=e-5 contains=@htmlTop
  147. syn region htmlH2 start="<h2\>" end="</h2>"me=e-5 contains=@htmlTop
  148. syn region htmlH3 start="<h3\>" end="</h3>"me=e-5 contains=@htmlTop
  149. syn region htmlH4 start="<h4\>" end="</h4>"me=e-5 contains=@htmlTop
  150. syn region htmlH5 start="<h5\>" end="</h5>"me=e-5 contains=@htmlTop
  151. syn region htmlH6 start="<h6\>" end="</h6>"me=e-5 contains=@htmlTop
  152. syn region htmlHead start="<head\>" end="</head>"me=e-7 end="<body\>"me=e-5 end="<h[1-6]\>"me=e-3 contains=htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,htmlTitle,javaScript,cssStyle,@htmlPreproc
  153. syn region htmlTitle start="<title\>" end="</title>"me=e-8 contains=htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc
  154. endif
  155. syn keyword htmlTagName contained noscript
  156. syn keyword htmlSpecialTagName contained script style
  157. if main_syntax != 'java' || exists("java_javascript")
  158. " JAVA SCRIPT
  159. syn include @htmlJavaScript syntax/javascript.vim
  160. unlet b:current_syntax
  161. syn region javaScript start=+<script\_[^>]*>+ keepend end=+</script\_[^>]*>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
  162. syn region htmlScriptTag contained start=+<script+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent
  163. hi def link htmlScriptTag htmlTag
  164. " html events (i.e. arguments that include javascript commands)
  165. if exists("html_extended_events")
  166. syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*'+ end=+'+ contains=htmlEventSQ
  167. syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*"+ end=+"+ contains=htmlEventDQ
  168. else
  169. syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*'+ end=+'+ keepend contains=htmlEventSQ
  170. syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*"+ end=+"+ keepend contains=htmlEventDQ
  171. endif
  172. syn region htmlEventSQ contained start=+'+ms=s+1 end=+'+me=s-1 contains=@htmlJavaScript
  173. syn region htmlEventDQ contained start=+"+ms=s+1 end=+"+me=s-1 contains=@htmlJavaScript
  174. hi def link htmlEventSQ htmlEvent
  175. hi def link htmlEventDQ htmlEvent
  176. " a javascript expression is used as an arg value
  177. syn region javaScriptExpression contained start=+&{+ keepend end=+};+ contains=@htmlJavaScript,@htmlPreproc
  178. endif
  179. if main_syntax != 'java' || exists("java_vb")
  180. " VB SCRIPT
  181. syn include @htmlVbScript syntax/vb.vim
  182. unlet b:current_syntax
  183. syn region javaScript start=+<script \_[^>]*language *=\_[^>]*vbscript\_[^>]*>+ keepend end=+</script\_[^>]*>+me=s-1 contains=@htmlVbScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
  184. endif
  185. syn cluster htmlJavaScript add=@htmlPreproc
  186. if main_syntax != 'java' || exists("java_css")
  187. " embedded style sheets
  188. syn keyword htmlArg contained media
  189. syn include @htmlCss syntax/css.vim
  190. unlet b:current_syntax
  191. syn region cssStyle start=+<style+ keepend end=+</style>+ contains=@htmlCss,htmlTag,htmlEndTag,htmlCssStyleComment,@htmlPreproc
  192. syn match htmlCssStyleComment contained "\(<!--\|-->\)"
  193. syn region htmlCssDefinition matchgroup=htmlArg start='style="' keepend matchgroup=htmlString end='"' contains=css.*Attr,css.*Prop,cssComment,cssLength,cssColor,cssURL,cssImportant,cssError,cssString,@htmlPreproc
  194. hi def link htmlStyleArg htmlString
  195. endif
  196. if main_syntax == "html"
  197. " synchronizing (does not always work if a comment includes legal
  198. " html tags, but doing it right would mean to always start
  199. " at the first line, which is too slow)
  200. syn sync match htmlHighlight groupthere NONE "<[/a-zA-Z]"
  201. syn sync match htmlHighlight groupthere javaScript "<script"
  202. syn sync match htmlHighlightSkip "^.*['\"].*$"
  203. syn sync minlines=10
  204. endif
  205. " The default highlighting.
  206. hi def link htmlTag Function
  207. hi def link htmlEndTag Identifier
  208. hi def link htmlArg Type
  209. hi def link htmlTagName htmlStatement
  210. hi def link htmlSpecialTagName Exception
  211. hi def link htmlValue String
  212. hi def link htmlSpecialChar Special
  213. if !exists("html_no_rendering")
  214. hi def link htmlH1 Title
  215. hi def link htmlH2 htmlH1
  216. hi def link htmlH3 htmlH2
  217. hi def link htmlH4 htmlH3
  218. hi def link htmlH5 htmlH4
  219. hi def link htmlH6 htmlH5
  220. hi def link htmlHead PreProc
  221. hi def link htmlTitle Title
  222. hi def link htmlBoldItalicUnderline htmlBoldUnderlineItalic
  223. hi def link htmlUnderlineBold htmlBoldUnderline
  224. hi def link htmlUnderlineItalicBold htmlBoldUnderlineItalic
  225. hi def link htmlUnderlineBoldItalic htmlBoldUnderlineItalic
  226. hi def link htmlItalicUnderline htmlUnderlineItalic
  227. hi def link htmlItalicBold htmlBoldItalic
  228. hi def link htmlItalicBoldUnderline htmlBoldUnderlineItalic
  229. hi def link htmlItalicUnderlineBold htmlBoldUnderlineItalic
  230. hi def link htmlLink Underlined
  231. hi def link htmlLeadingSpace None
  232. if !exists("html_my_rendering")
  233. hi def htmlBold term=bold cterm=bold gui=bold
  234. hi def htmlBoldUnderline term=bold,underline cterm=bold,underline gui=bold,underline
  235. hi def htmlBoldItalic term=bold,italic cterm=bold,italic gui=bold,italic
  236. hi def htmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline
  237. hi def htmlUnderline term=underline cterm=underline gui=underline
  238. hi def htmlUnderlineItalic term=italic,underline cterm=italic,underline gui=italic,underline
  239. hi def htmlItalic term=italic cterm=italic gui=italic
  240. if v:version > 800 || v:version == 800 && has("patch1038")
  241. hi def htmlStrike term=strikethrough cterm=strikethrough gui=strikethrough
  242. else
  243. hi def htmlStrike term=underline cterm=underline gui=underline
  244. endif
  245. endif
  246. endif
  247. hi def link htmlPreStmt PreProc
  248. hi def link htmlPreError Error
  249. hi def link htmlPreProc PreProc
  250. hi def link htmlPreAttr String
  251. hi def link htmlPreProcAttrName PreProc
  252. hi def link htmlPreProcAttrError Error
  253. hi def link htmlSpecial Special
  254. hi def link htmlSpecialChar Special
  255. hi def link htmlString String
  256. hi def link htmlStatement Statement
  257. hi def link htmlComment Comment
  258. hi def link htmlCommentPart Comment
  259. hi def link htmlValue String
  260. hi def link htmlCommentError htmlError
  261. hi def link htmlTagError htmlError
  262. hi def link htmlEvent javaScript
  263. hi def link htmlError Error
  264. hi def link javaScript Special
  265. hi def link javaScriptExpression javaScript
  266. hi def link htmlCssStyleComment Comment
  267. hi def link htmlCssDefinition Special
  268. let b:current_syntax = "html"
  269. if main_syntax == 'html'
  270. unlet main_syntax
  271. endif
  272. let &cpo = s:cpo_save
  273. unlet s:cpo_save
  274. " vim: ts=8