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