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