codekingpro/portable-devtools
114k
1" Vim syntax file2" Language: HTML3" Maintainer: Doug Kearns <dougkearns@gmail.com>4" Previous Maintainers: Jorge Maldonado Ventura <jorgesumle@freakspot.net>5" Claudio Fleiner <claudio@fleiner.com>6" Last Change: 2023 Nov 287" 2024 Jul 30 by Vim Project: increase syn-sync-minlines to 2508" 2025 May 10 by Vim Project: update comment9 10" See :help html.vim for some comments and a description of the options11 12" quit when a syntax file was already loaded13if !exists("main_syntax")14 if exists("b:current_syntax")15 finish16 endif17 let main_syntax = 'html'18endif19 20let s:cpo_save = &cpo21set cpo&vim22 23syntax spell toplevel24 25syn include @htmlXml syntax/xml.vim26unlet b:current_syntax27 28syn case ignore29 30" mark illegal characters31syn match htmlError "[<>&]"32 33" tags34syn region htmlString contained start=+"+ end=+"+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc35syn region htmlString contained start=+'+ end=+'+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc36syn match htmlValue contained "=[\t ]*[^'" \t>][^ \t>]*"hs=s+1 contains=javaScriptExpression,@htmlPreproc37syn region htmlEndTag start=+</+ end=+>+ contains=htmlTagN,htmlTagError38syn region htmlTag start=+<[^/]+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster39syn match htmlTagN contained +<\s*[-a-zA-Z0-9]\++hs=s+1 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster40syn match htmlTagN contained +</\s*[-a-zA-Z0-9]\++hs=s+2 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster41syn match htmlTagError contained "[^>]<"ms=s+142 43" tag names44syn keyword htmlTagName contained address applet area a base basefont45syn keyword htmlTagName contained big blockquote br caption center46syn keyword htmlTagName contained cite code dd dfn dir div dl dt font47syn keyword htmlTagName contained form hr html img48syn keyword htmlTagName contained input isindex kbd li link map menu49syn keyword htmlTagName contained meta ol option param pre p samp span50syn keyword htmlTagName contained select small strike sub sup51syn keyword htmlTagName contained table td textarea th tr tt ul var xmp52syn match htmlTagName contained "\<\%(b\|i\|u\|h[1-6]\|em\|strong\|head\|body\|title\)\>"53 54" new html 4.0 tags55syn keyword htmlTagName contained abbr acronym bdo button col colgroup56syn keyword htmlTagName contained del fieldset iframe ins label legend57syn keyword htmlTagName contained object optgroup q s tbody tfoot thead58 59" new html 5 tags60syn keyword htmlTagName contained article aside audio bdi canvas data61syn keyword htmlTagName contained datalist details dialog embed figcaption62syn keyword htmlTagName contained figure footer header hgroup keygen main63syn keyword htmlTagName contained mark menuitem meter nav output picture64syn keyword htmlTagName contained progress rb rp rt rtc ruby search section65syn keyword htmlTagName contained slot source summary template time track66syn keyword htmlTagName contained video wbr67 68" svg and math tags69syn keyword htmlMathTagName contained math70syn keyword htmlSvgTagName contained svg71 72syn region htmlMath start="<math>" end="</math>" contains=@htmlXml transparent keepend73syn region htmlSvg start="<svg>" end="</svg>" contains=@htmlXml transparent keepend74 75syn cluster xmlTagHook add=htmlMathTagName,htmlSvgTagName76 77" legal arg names78syn keyword htmlArg contained action79syn keyword htmlArg contained align alink alt archive background bgcolor80syn keyword htmlArg contained border bordercolor cellpadding81syn keyword htmlArg contained cellspacing checked class clear code codebase color82syn keyword htmlArg contained cols colspan content coords enctype face83syn keyword htmlArg contained gutter height hspace id84syn keyword htmlArg contained link lowsrc marginheight85syn keyword htmlArg contained marginwidth maxlength method name prompt86syn keyword htmlArg contained rel rev rows rowspan scrolling selected shape87syn keyword htmlArg contained size src start target text type url88syn keyword htmlArg contained usemap ismap valign value vlink vspace width wrap89syn match htmlArg contained "\<\%(http-equiv\|href\|title\)="me=e-190 91syn keyword htmlArg contained role92 93" ARIA attributes {{{194let s:aria =<< trim END95 activedescendant96 atomic97 autocomplete98 braillelabel99 brailleroledescription100 busy101 checked102 colcount103 colindex104 colindextext105 colspan106 controls107 current108 describedby109 description110 details111 disabled112 errormessage113 expanded114 flowto115 haspopup116 hidden117 invalid118 keyshortcuts119 label120 labelledby121 level122 live123 modal124 multiline125 multiselectable126 orientation127 owns128 placeholder129 posinset130 pressed131 readonly132 relevant133 required134 roledescription135 rowcount136 rowindex137 rowindextext138 rowspan139 selected140 setsize141 sort142 valuemax143 valuemin144 valuenow145 valuetext146END147let s:aria_deprecated =<< trim END148 dropeffect149 grabbed150END151 152call extend(s:aria, s:aria_deprecated)153exe 'syn match htmlArg contained "\%#=1\<aria-\%(' .. s:aria->join('\|') .. '\)\>"'154unlet s:aria s:aria_deprecated155" }}}156 157" Netscape extensions158syn keyword htmlTagName contained frame noframes frameset nobr blink159syn keyword htmlTagName contained layer ilayer nolayer spacer160syn keyword htmlArg contained frameborder noresize pagex pagey above below161syn keyword htmlArg contained left top visibility clip id noshade162syn match htmlArg contained "\<z-index\>"163 164" Microsoft extensions165syn keyword htmlTagName contained marquee166 167" html 4.0 arg names168syn match htmlArg contained "\<\%(accept-charset\|label\)\>"169syn keyword htmlArg contained abbr accept accesskey axis char charoff charset170syn keyword htmlArg contained cite classid codetype compact data datetime171syn keyword htmlArg contained declare defer dir disabled for frame172syn keyword htmlArg contained headers hreflang lang language longdesc173syn keyword htmlArg contained multiple nohref nowrap object profile readonly174syn keyword htmlArg contained rules scheme scope span standby style175syn keyword htmlArg contained summary tabindex valuetype version176 177" html 5 arg names178syn keyword htmlArg contained allow autocapitalize as blocking decoding179syn keyword htmlArg contained enterkeyhint imagesizes imagesrcset inert180syn keyword htmlArg contained integrity is itemid itemprop itemref itemscope181syn keyword htmlArg contained itemtype loading nomodule ping playsinline182syn keyword htmlArg contained referrerpolicy slot allowfullscreen async183syn keyword htmlArg contained autocomplete autofocus autoplay challenge184syn keyword htmlArg contained contenteditable contextmenu controls crossorigin185syn keyword htmlArg contained default dirname download draggable dropzone form186syn keyword htmlArg contained formaction formenctype formmethod formnovalidate187syn keyword htmlArg contained formtarget hidden high icon inputmode keytype188syn keyword htmlArg contained kind list loop low max min minlength muted nonce189syn keyword htmlArg contained novalidate open optimum pattern placeholder190syn keyword htmlArg contained poster preload radiogroup required reversed191syn keyword htmlArg contained sandbox spellcheck sizes srcset srcdoc srclang192syn keyword htmlArg contained step title translate typemustmatch193syn match htmlArg contained "\<data-\h\%(\w\|[-.]\)*\%(\_s*=\)\@="194 195" special characters196syn match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,32};"197 198" Comments (the real ones or the old netscape ones)199if exists("html_wrong_comments")200 syn region htmlComment start=+<!--+ end=+--\s*>+ contains=@Spell201else202 " The HTML 5.2 syntax 8.2.4.41: bogus comment is parser error; browser skips until next >203 syn region htmlComment start=+<!+ end=+>+ contains=htmlCommentError keepend204 " Idem 8.2.4.42,51: Comment starts with <!-- and ends with -->205 " Idem 8.2.4.43,44: Except <!--> and <!---> are parser errors206 " Idem 8.2.4.52: dash-dash-bang (--!>) is error ignored by parser, also closes comment207 syn region htmlComment matchgroup=htmlComment start=+<!--\%(-\?>\)\@!+ end=+--!\?>+ contains=htmlCommentNested,@htmlPreProc,@Spell keepend208 " Idem 8.2.4.49: nested comment is parser error, except <!--> is all right209 syn match htmlCommentNested contained "<!-->\@!"210 syn match htmlCommentError contained "[^><!]"211endif212syn region htmlComment start=+<!DOCTYPE+ end=+>+ keepend213 214" server-parsed commands215syn region htmlPreProc start=+<!--#+ end=+-->+ contains=htmlPreStmt,htmlPreError,htmlPreAttr216syn match htmlPreStmt contained "<!--#\%(config\|echo\|exec\|fsize\|flastmod\|include\|printenv\|set\|if\|elif\|else\|endif\|geoguide\)\>"217syn match htmlPreError contained "<!--#\S*"ms=s+4218syn match htmlPreAttr contained "\w\+=[^"]\S\+" contains=htmlPreProcAttrError,htmlPreProcAttrName219syn region htmlPreAttr contained start=+\w\+="+ skip=+\\\\\|\\"+ end=+"+ contains=htmlPreProcAttrName keepend220syn match htmlPreProcAttrError contained "\w\+="he=e-1221syn match htmlPreProcAttrName contained "\%(expr\|errmsg\|sizefmt\|timefmt\|var\|cgi\|cmd\|file\|virtual\|value\)="he=e-1222 223if !exists("html_no_rendering")224 " rendering225 syn cluster htmlTop contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,javaScript,@htmlPreproc226 227 syn region htmlStrike start="<del\>" end="</del\_s*>"me=s-1 contains=@htmlTop228 syn region htmlStrike start="<s\>" end="</s\_s*>"me=s-1 contains=@htmlTop229 syn region htmlStrike start="<strike\>" end="</strike\_s*>"me=s-1 contains=@htmlTop230 231 syn region htmlBold start="<b\>" end="</b\_s*>"me=s-1 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic232 syn region htmlBold start="<strong\>" end="</strong\_s*>"me=s-1 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic233 syn region htmlBoldUnderline contained start="<u\>" end="</u\_s*>"me=s-1 contains=@htmlTop,htmlBoldUnderlineItalic234 syn region htmlBoldItalic contained start="<i\>" end="</i\_s*>"me=s-1 contains=@htmlTop,htmlBoldItalicUnderline235 syn region htmlBoldItalic contained start="<em\>" end="</em\_s*>"me=s-1 contains=@htmlTop,htmlBoldItalicUnderline236 syn region htmlBoldUnderlineItalic contained start="<i\>" end="</i\_s*>"me=s-1 contains=@htmlTop237 syn region htmlBoldUnderlineItalic contained start="<em\>" end="</em\_s*>"me=s-1 contains=@htmlTop238 syn region htmlBoldItalicUnderline contained start="<u\>" end="</u\_s*>"me=s-1 contains=@htmlTop,htmlBoldUnderlineItalic239 240 syn region htmlUnderline start="<u\>" end="</u\_s*>"me=s-1 contains=@htmlTop,htmlUnderlineBold,htmlUnderlineItalic241 syn region htmlUnderlineBold contained start="<b\>" end="</b\_s*>"me=s-1 contains=@htmlTop,htmlUnderlineBoldItalic242 syn region htmlUnderlineBold contained start="<strong\>" end="</strong\_s*>"me=s-1 contains=@htmlTop,htmlUnderlineBoldItalic243 syn region htmlUnderlineItalic contained start="<i\>" end="</i\_s*>"me=s-1 contains=@htmlTop,htmlUnderlineItalicBold244 syn region htmlUnderlineItalic contained start="<em\>" end="</em\_s*>"me=s-1 contains=@htmlTop,htmlUnderlineItalicBold245 syn region htmlUnderlineItalicBold contained start="<b\>" end="</b\_s*>"me=s-1 contains=@htmlTop246 syn region htmlUnderlineItalicBold contained start="<strong\>" end="</strong\_s*>"me=s-1 contains=@htmlTop247 syn region htmlUnderlineBoldItalic contained start="<i\>" end="</i\_s*>"me=s-1 contains=@htmlTop248 syn region htmlUnderlineBoldItalic contained start="<em\>" end="</em\_s*>"me=s-1 contains=@htmlTop249 250 syn region htmlItalic start="<i\>" end="</i\_s*>"me=s-1 contains=@htmlTop,htmlItalicBold,htmlItalicUnderline251 syn region htmlItalic start="<em\>" end="</em\_s*>"me=s-1 contains=@htmlTop252 syn region htmlItalicBold contained start="<b\>" end="</b\_s*>"me=s-1 contains=@htmlTop,htmlItalicBoldUnderline253 syn region htmlItalicBold contained start="<strong\>" end="</strong\_s*>"me=s-1 contains=@htmlTop,htmlItalicBoldUnderline254 syn region htmlItalicBoldUnderline contained start="<u\>" end="</u\_s*>"me=s-1 contains=@htmlTop255 syn region htmlItalicUnderline contained start="<u\>" end="</u\_s*>"me=s-1 contains=@htmlTop,htmlItalicUnderlineBold256 syn region htmlItalicUnderlineBold contained start="<b\>" end="</b\_s*>"me=s-1 contains=@htmlTop257 syn region htmlItalicUnderlineBold contained start="<strong\>" end="</strong\_s*>"me=s-1 contains=@htmlTop258 259 syn match htmlLeadingSpace "^\s\+" contained260 syn region htmlLink start="<a\>\_[^>]*\<href\>" end="</a\_s*>"me=s-1 contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLeadingSpace,javaScript,@htmlPreproc261 syn region htmlH1 start="<h1\>" end="</h1\_s*>"me=s-1 contains=@htmlTop262 syn region htmlH2 start="<h2\>" end="</h2\_s*>"me=s-1 contains=@htmlTop263 syn region htmlH3 start="<h3\>" end="</h3\_s*>"me=s-1 contains=@htmlTop264 syn region htmlH4 start="<h4\>" end="</h4\_s*>"me=s-1 contains=@htmlTop265 syn region htmlH5 start="<h5\>" end="</h5\_s*>"me=s-1 contains=@htmlTop266 syn region htmlH6 start="<h6\>" end="</h6\_s*>"me=s-1 contains=@htmlTop267 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,@htmlPreproc268 syn region htmlTitle start="<title\>" end="</title\_s*>"me=s-1 contains=htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc269endif270 271syn keyword htmlTagName contained noscript272syn keyword htmlSpecialTagName contained script style273if main_syntax != 'java' || exists("java_javascript")274 " JAVA SCRIPT275 syn include @htmlJavaScript syntax/javascript.vim276 unlet b:current_syntax277 syn region javaScript start=+<script\>\_[^>]*>+ keepend end=+</script\_[^>]*>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc278 syn region htmlScriptTag contained start=+<script+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent279 hi def link htmlScriptTag htmlTag280 281 " html events (i.e. arguments that include javascript commands)282 if exists("html_extended_events")283 syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*'+ end=+'+ contains=htmlEventSQ284 syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*"+ end=+"+ contains=htmlEventDQ285 else286 syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*'+ end=+'+ keepend contains=htmlEventSQ287 syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*"+ end=+"+ keepend contains=htmlEventDQ288 endif289 syn region htmlEventSQ contained start=+'+ms=s+1 end=+'+me=s-1 contains=@htmlJavaScript290 syn region htmlEventDQ contained start=+"+ms=s+1 end=+"+me=s-1 contains=@htmlJavaScript291 hi def link htmlEventSQ htmlEvent292 hi def link htmlEventDQ htmlEvent293 294 " a javascript expression is used as an arg value295 syn region javaScriptExpression contained start=+&{+ keepend end=+};+ contains=@htmlJavaScript,@htmlPreproc296endif297 298if main_syntax != 'java' || exists("java_vb")299 " VB SCRIPT300 syn include @htmlVbScript syntax/vb.vim301 unlet b:current_syntax302 syn region javaScript start=+<script \_[^>]*language *=\_[^>]*vbscript\_[^>]*>+ keepend end=+</script\_[^>]*>+me=s-1 contains=@htmlVbScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc303endif304 305syn cluster htmlJavaScript add=@htmlPreproc306 307if main_syntax != 'java' || exists("java_css")308 " embedded style sheets309 syn keyword htmlArg contained media310 syn include @htmlCss syntax/css.vim311 unlet b:current_syntax312 syn region cssStyle start=+<style+ keepend end=+</style>+ contains=@htmlCss,htmlTag,htmlEndTag,htmlCssStyleComment,@htmlPreproc313 syn match htmlCssStyleComment contained "\%(<!--\|-->\)"314 syn region htmlCssDefinition matchgroup=htmlArg start='style="' keepend matchgroup=htmlString end='"' contains=css.*Attr,css.*Prop,cssComment,cssLength,cssColor,cssURL,cssImportant,cssError,cssString,@htmlPreproc315 hi def link htmlStyleArg htmlString316endif317 318if main_syntax == "html"319 " synchronizing (does not always work if a comment includes legal320 " html tags, but doing it right would mean to always start321 " at the first line, which is too slow)322 syn sync match htmlHighlight groupthere NONE "<[/a-zA-Z]"323 syn sync match htmlHighlight groupthere javaScript "<script"324 syn sync match htmlHighlightSkip "^.*['\"].*$"325 exe "syn sync minlines=" . get(g:, 'html_minlines', 250)326endif327 328" Folding329" (Originally written by Ingo Karkat and Marcus Zanona; see330" https://vi.stackexchange.com/questions/2306/html-syntax-folding-in-vim .)331if get(g:, "html_syntax_folding", 0)332 syn region htmlFold start="<\z(\<\%(area\|base\|br\|col\|command\|embed\|hr\|img\|input\|keygen\|link\|meta\|param\|source\|track\|wbr\>\)\@![a-z-]\+\>\)\%(\_s*\_[^/]\?>\|\_s\_[^>]*\_[^>/]>\)" end="</\z1\_s*>" fold transparent keepend extend containedin=htmlHead,htmlH\d333 " fold comments (the real ones and the old Netscape ones)334 if exists("html_wrong_comments")335 syn region htmlComment start=+<!--+ end=+--\s*>\%(\n\s*<!--\)\@!+ contains=@Spell fold336 endif337endif338 339" The default highlighting.340hi def link htmlTag Function341hi def link htmlEndTag Identifier342hi def link htmlArg Type343hi def link htmlTagName htmlStatement344hi def link htmlSpecialTagName Exception345hi def link htmlMathTagName htmlTagName346hi def link htmlSvgTagName htmlTagName347hi def link htmlValue String348hi def link htmlSpecialChar Special349 350if !exists("html_no_rendering")351 hi def link htmlH1 Title352 hi def link htmlH2 htmlH1353 hi def link htmlH3 htmlH2354 hi def link htmlH4 htmlH3355 hi def link htmlH5 htmlH4356 hi def link htmlH6 htmlH5357 hi def link htmlHead PreProc358 hi def link htmlTitle Title359 hi def link htmlBoldItalicUnderline htmlBoldUnderlineItalic360 hi def link htmlUnderlineBold htmlBoldUnderline361 hi def link htmlUnderlineItalicBold htmlBoldUnderlineItalic362 hi def link htmlUnderlineBoldItalic htmlBoldUnderlineItalic363 hi def link htmlItalicUnderline htmlUnderlineItalic364 hi def link htmlItalicBold htmlBoldItalic365 hi def link htmlItalicBoldUnderline htmlBoldUnderlineItalic366 hi def link htmlItalicUnderlineBold htmlBoldUnderlineItalic367 hi def link htmlLink Underlined368 hi def link htmlLeadingSpace None369 if !exists("html_my_rendering")370 hi def htmlBold term=bold cterm=bold gui=bold371 hi def htmlBoldUnderline term=bold,underline cterm=bold,underline gui=bold,underline372 hi def htmlBoldItalic term=bold,italic cterm=bold,italic gui=bold,italic373 hi def htmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline374 hi def htmlUnderline term=underline cterm=underline gui=underline375 hi def htmlUnderlineItalic term=italic,underline cterm=italic,underline gui=italic,underline376 hi def htmlItalic term=italic cterm=italic gui=italic377 if v:version > 800 || v:version == 800 && has("patch1038")378 hi def htmlStrike term=strikethrough cterm=strikethrough gui=strikethrough379 else380 hi def htmlStrike term=underline cterm=underline gui=underline381 endif382 endif383endif384 385hi def link htmlPreStmt PreProc386hi def link htmlPreError Error387hi def link htmlPreProc PreProc388hi def link htmlPreAttr String389hi def link htmlPreProcAttrName PreProc390hi def link htmlPreProcAttrError Error391hi def link htmlString String392hi def link htmlStatement Statement393hi def link htmlComment Comment394hi def link htmlCommentNested htmlError395hi def link htmlCommentError htmlError396hi def link htmlTagError htmlError397hi def link htmlEvent javaScript398hi def link htmlError Error399 400hi def link javaScript Special401hi def link javaScriptExpression javaScript402hi def link htmlCssStyleComment Comment403hi def link htmlCssDefinition Special404 405let b:current_syntax = "html"406 407if main_syntax == 'html'408 unlet main_syntax409endif410 411let &cpo = s:cpo_save412unlet s:cpo_save413 414" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:415 