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 Feb 25 7" Included patch #7900 to fix comments 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 " The HTML 5.2 syntax 8.2.4.41-42: bogus comment is parser error; browser skips until next > 145 " Note: must stand first to get lesser :syn-priority 146 syn region htmlComment start=+<!+ end=+>+ contains=htmlCommentError 147 " Normal comment opening <!-- ...> 148 syn region htmlComment start=+<!--+ end=+>+ contains=htmlCommentPart,@Spell 149 " Idem 8.2.4.43-44: <!--> and <!---> are parser errors; browser treats as comments 150 syn match htmlComment "<!---\?>" contains=htmlCommentError 151 " Idem 8.2.4.51: any number of consecutive dashes within comment is okay; --> closes comment 152 " Idem 8.2.4.52: closing comment by dash-dash-bang (--!>) is error ignored by parser(!); closes comment 153 syn region htmlCommentPart contained start=+--+ end=+--!\?>+me=e-1 contains=htmlCommentNested,@htmlPreProc,@Spell 154 " Idem 8.2.4.49: opening nested comment <!-- is parser error, ignored by browser, except <!--> is all right 155 syn match htmlCommentNested contained "<!--[^>]"me=e-1 156 syn match htmlCommentNested contained "<!--->"me=e-3 157 syn match htmlCommentNested contained "<!---\?!>"me=e-4 158 syn match htmlCommentError contained "[^><!]" 159endif 160syn region htmlComment start=+<!DOCTYPE+ keepend end=+>+ 161 162" server-parsed commands 163syn region htmlPreProc start=+<!--#+ end=+-->+ contains=htmlPreStmt,htmlPreError,htmlPreAttr 164syn match htmlPreStmt contained "<!--#\(config\|echo\|exec\|fsize\|flastmod\|include\|printenv\|set\|if\|elif\|else\|endif\|geoguide\)\>" 165syn match htmlPreError contained "<!--#\S*"ms=s+4 166syn match htmlPreAttr contained "\w\+=[^"]\S\+" contains=htmlPreProcAttrError,htmlPreProcAttrName 167syn region htmlPreAttr contained start=+\w\+="+ skip=+\\\\\|\\"+ end=+"+ contains=htmlPreProcAttrName keepend 168syn match htmlPreProcAttrError contained "\w\+="he=e-1 169syn match htmlPreProcAttrName contained "\(expr\|errmsg\|sizefmt\|timefmt\|var\|cgi\|cmd\|file\|virtual\|value\)="he=e-1 170 171if !exists("html_no_rendering") 172 " rendering 173 syn cluster htmlTop contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,javaScript,@htmlPreproc 174 175 syn region htmlStrike start="<del\>" end="</del\_s*>"me=s-1 contains=@htmlTop 176 syn region htmlStrike start="<strike\>" end="</strike\_s*>"me=s-1 contains=@htmlTop 177 178 syn region htmlBold start="<b\>" end="</b\_s*>"me=s-1 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic 179 syn region htmlBold start="<strong\>" end="</strong\_s*>"me=s-1 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic 180 syn region htmlBoldUnderline contained start="<u\>" end="</u\_s*>"me=s-1 contains=@htmlTop,htmlBoldUnderlineItalic 181 syn region htmlBoldItalic contained start="<i\>" end="</i\_s*>"me=s-1 contains=@htmlTop,htmlBoldItalicUnderline 182 syn region htmlBoldItalic contained start="<em\>" end="</em\_s*>"me=s-1 contains=@htmlTop,htmlBoldItalicUnderline 183 syn region htmlBoldUnderlineItalic contained start="<i\>" end="</i\_s*>"me=s-1 contains=@htmlTop 184 syn region htmlBoldUnderlineItalic contained start="<em\>" end="</em\_s*>"me=s-1 contains=@htmlTop 185 syn region htmlBoldItalicUnderline contained start="<u\>" end="</u\_s*>"me=s-1 contains=@htmlTop,htmlBoldUnderlineItalic 186 187 syn region htmlUnderline start="<u\>" end="</u\_s*>"me=s-1 contains=@htmlTop,htmlUnderlineBold,htmlUnderlineItalic 188 syn region htmlUnderlineBold contained start="<b\>" end="</b\_s*>"me=s-1 contains=@htmlTop,htmlUnderlineBoldItalic 189 syn region htmlUnderlineBold contained start="<strong\>" end="</strong\_s*>"me=s-1 contains=@htmlTop,htmlUnderlineBoldItalic 190 syn region htmlUnderlineItalic contained start="<i\>" end="</i\_s*>"me=s-1 contains=@htmlTop,htmlUnderlineItalicBold 191 syn region htmlUnderlineItalic contained start="<em\>" end="</em\_s*>"me=s-1 contains=@htmlTop,htmlUnderlineItalicBold 192 syn region htmlUnderlineItalicBold contained start="<b\>" end="</b\_s*>"me=s-1 contains=@htmlTop 193 syn region htmlUnderlineItalicBold contained start="<strong\>" end="</strong\_s*>"me=s-1 contains=@htmlTop 194 syn region htmlUnderlineBoldItalic contained start="<i\>" end="</i\_s*>"me=s-1 contains=@htmlTop 195 syn region htmlUnderlineBoldItalic contained start="<em\>" end="</em\_s*>"me=s-1 contains=@htmlTop 196 197 syn region htmlItalic start="<i\>" end="</i\_s*>"me=s-1 contains=@htmlTop,htmlItalicBold,htmlItalicUnderline 198 syn region htmlItalic start="<em\>" end="</em\_s*>"me=s-1 contains=@htmlTop 199 syn region htmlItalicBold contained start="<b\>" end="</b\_s*>"me=s-1 contains=@htmlTop,htmlItalicBoldUnderline 200 syn region htmlItalicBold contained start="<strong\>" end="</strong\_s*>"me=s-1 contains=@htmlTop,htmlItalicBoldUnderline 201 syn region htmlItalicBoldUnderline contained start="<u\>" end="</u\_s*>"me=s-1 contains=@htmlTop 202 syn region htmlItalicUnderline contained start="<u\>" end="</u\_s*>"me=s-1 contains=@htmlTop,htmlItalicUnderlineBold 203 syn region htmlItalicUnderlineBold contained start="<b\>" end="</b\_s*>"me=s-1 contains=@htmlTop 204 syn region htmlItalicUnderlineBold contained start="<strong\>" end="</strong\_s*>"me=s-1 contains=@htmlTop 205 206 syn match htmlLeadingSpace "^\s\+" contained 207 syn region htmlLink start="<a\>\_[^>]*\<href\>" end="</a\_s*>"me=s-1 contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLeadingSpace,javaScript,@htmlPreproc 208 syn region htmlH1 start="<h1\>" end="</h1\_s*>"me=s-1 contains=@htmlTop 209 syn region htmlH2 start="<h2\>" end="</h2\_s*>"me=s-1 contains=@htmlTop 210 syn region htmlH3 start="<h3\>" end="</h3\_s*>"me=s-1 contains=@htmlTop 211 syn region htmlH4 start="<h4\>" end="</h4\_s*>"me=s-1 contains=@htmlTop 212 syn region htmlH5 start="<h5\>" end="</h5\_s*>"me=s-1 contains=@htmlTop 213 syn region htmlH6 start="<h6\>" end="</h6\_s*>"me=s-1 contains=@htmlTop 214 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 215 syn region htmlTitle start="<title\>" end="</title\_s*>"me=s-1 contains=htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc 216endif 217 218syn keyword htmlTagName contained noscript 219syn keyword htmlSpecialTagName contained script style 220if main_syntax != 'java' || exists("java_javascript") 221 " JAVA SCRIPT 222 syn include @htmlJavaScript syntax/javascript.vim 223 unlet b:current_syntax 224 syn region javaScript start=+<script\_[^>]*>+ keepend end=+</script\_[^>]*>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc 225 syn region htmlScriptTag contained start=+<script+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent 226 hi def link htmlScriptTag htmlTag 227 228 " html events (i.e. arguments that include javascript commands) 229 if exists("html_extended_events") 230 syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*'+ end=+'+ contains=htmlEventSQ 231 syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*"+ end=+"+ contains=htmlEventDQ 232 else 233 syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*'+ end=+'+ keepend contains=htmlEventSQ 234 syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*"+ end=+"+ keepend contains=htmlEventDQ 235 endif 236 syn region htmlEventSQ contained start=+'+ms=s+1 end=+'+me=s-1 contains=@htmlJavaScript 237 syn region htmlEventDQ contained start=+"+ms=s+1 end=+"+me=s-1 contains=@htmlJavaScript 238 hi def link htmlEventSQ htmlEvent 239 hi def link htmlEventDQ htmlEvent 240 241 " a javascript expression is used as an arg value 242 syn region javaScriptExpression contained start=+&{+ keepend end=+};+ contains=@htmlJavaScript,@htmlPreproc 243endif 244 245if main_syntax != 'java' || exists("java_vb") 246 " VB SCRIPT 247 syn include @htmlVbScript syntax/vb.vim 248 unlet b:current_syntax 249 syn region javaScript start=+<script \_[^>]*language *=\_[^>]*vbscript\_[^>]*>+ keepend end=+</script\_[^>]*>+me=s-1 contains=@htmlVbScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc 250endif 251 252syn cluster htmlJavaScript add=@htmlPreproc 253 254if main_syntax != 'java' || exists("java_css") 255 " embedded style sheets 256 syn keyword htmlArg contained media 257 syn include @htmlCss syntax/css.vim 258 unlet b:current_syntax 259 syn region cssStyle start=+<style+ keepend end=+</style>+ contains=@htmlCss,htmlTag,htmlEndTag,htmlCssStyleComment,@htmlPreproc 260 syn match htmlCssStyleComment contained "\(<!--\|-->\)" 261 syn region htmlCssDefinition matchgroup=htmlArg start='style="' keepend matchgroup=htmlString end='"' contains=css.*Attr,css.*Prop,cssComment,cssLength,cssColor,cssURL,cssImportant,cssError,cssString,@htmlPreproc 262 hi def link htmlStyleArg htmlString 263endif 264 265if main_syntax == "html" 266 " synchronizing (does not always work if a comment includes legal 267 " html tags, but doing it right would mean to always start 268 " at the first line, which is too slow) 269 syn sync match htmlHighlight groupthere NONE "<[/a-zA-Z]" 270 syn sync match htmlHighlight groupthere javaScript "<script" 271 syn sync match htmlHighlightSkip "^.*['\"].*$" 272 syn sync minlines=10 273endif 274 275" The default highlighting. 276hi def link htmlTag Function 277hi def link htmlEndTag Identifier 278hi def link htmlArg Type 279hi def link htmlTagName htmlStatement 280hi def link htmlSpecialTagName Exception 281hi def link htmlValue String 282hi def link htmlSpecialChar Special 283 284if !exists("html_no_rendering") 285 hi def link htmlH1 Title 286 hi def link htmlH2 htmlH1 287 hi def link htmlH3 htmlH2 288 hi def link htmlH4 htmlH3 289 hi def link htmlH5 htmlH4 290 hi def link htmlH6 htmlH5 291 hi def link htmlHead PreProc 292 hi def link htmlTitle Title 293 hi def link htmlBoldItalicUnderline htmlBoldUnderlineItalic 294 hi def link htmlUnderlineBold htmlBoldUnderline 295 hi def link htmlUnderlineItalicBold htmlBoldUnderlineItalic 296 hi def link htmlUnderlineBoldItalic htmlBoldUnderlineItalic 297 hi def link htmlItalicUnderline htmlUnderlineItalic 298 hi def link htmlItalicBold htmlBoldItalic 299 hi def link htmlItalicBoldUnderline htmlBoldUnderlineItalic 300 hi def link htmlItalicUnderlineBold htmlBoldUnderlineItalic 301 hi def link htmlLink Underlined 302 hi def link htmlLeadingSpace None 303 if !exists("html_my_rendering") 304 hi def htmlBold term=bold cterm=bold gui=bold 305 hi def htmlBoldUnderline term=bold,underline cterm=bold,underline gui=bold,underline 306 hi def htmlBoldItalic term=bold,italic cterm=bold,italic gui=bold,italic 307 hi def htmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline 308 hi def htmlUnderline term=underline cterm=underline gui=underline 309 hi def htmlUnderlineItalic term=italic,underline cterm=italic,underline gui=italic,underline 310 hi def htmlItalic term=italic cterm=italic gui=italic 311 if v:version > 800 || v:version == 800 && has("patch1038") 312 hi def htmlStrike term=strikethrough cterm=strikethrough gui=strikethrough 313 else 314 hi def htmlStrike term=underline cterm=underline gui=underline 315 endif 316 endif 317endif 318 319hi def link htmlPreStmt PreProc 320hi def link htmlPreError Error 321hi def link htmlPreProc PreProc 322hi def link htmlPreAttr String 323hi def link htmlPreProcAttrName PreProc 324hi def link htmlPreProcAttrError Error 325hi def link htmlSpecial Special 326hi def link htmlSpecialChar Special 327hi def link htmlString String 328hi def link htmlStatement Statement 329hi def link htmlComment Comment 330hi def link htmlCommentPart Comment 331hi def link htmlValue String 332hi def link htmlCommentNested htmlCommentError 333hi def link htmlCommentError htmlError 334hi def link htmlTagError htmlError 335hi def link htmlEvent javaScript 336hi def link htmlError Error 337 338hi def link javaScript Special 339hi def link javaScriptExpression javaScript 340hi def link htmlCssStyleComment Comment 341hi def link htmlCssDefinition Special 342 343let b:current_syntax = "html" 344 345if main_syntax == 'html' 346 unlet main_syntax 347endif 348 349let &cpo = s:cpo_save 350unlet s:cpo_save 351" vim: ts=8 352