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