Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1 | " Vim syntax file |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 2 | " Language: HTML |
| 3 | " Maintainer: Doug Kearns <dougkearns@gmail.com> |
| 4 | " Previous Maintainers: Jorge Maldonado Ventura <jorgesumle@freakspot.net> |
| 5 | " Claudio Fleiner <claudio@fleiner.com> |
dkearns | a905844 | 2023-11-29 06:41:41 +1100 | [diff] [blame] | 6 | " Last Change: 2023 Nov 28 |
Christian Brabandt | df9f67e | 2024-07-30 20:19:15 +0200 | [diff] [blame] | 7 | " 2024 Jul 30 by Vim Project: increase syn-sync-minlines to 250 |
Aliaksei Budavei | dc7ed8f | 2025-05-10 21:40:41 +0200 | [diff] [blame] | 8 | " 2025 May 10 by Vim Project: update comment |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 9 | |
dkearns | a905844 | 2023-11-29 06:41:41 +1100 | [diff] [blame] | 10 | " See :help html.vim for some comments and a description of the options |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 11 | |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 12 | " quit when a syntax file was already loaded |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 13 | if !exists("main_syntax") |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 14 | if exists("b:current_syntax") |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 15 | finish |
| 16 | endif |
| 17 | let main_syntax = 'html' |
| 18 | endif |
| 19 | |
Bram Moolenaar | 0c5fa7d | 2012-10-05 22:26:30 +0200 | [diff] [blame] | 20 | let s:cpo_save = &cpo |
| 21 | set cpo&vim |
| 22 | |
Bram Moolenaar | c81e5e7 | 2007-05-05 18:24:42 +0000 | [diff] [blame] | 23 | syntax spell toplevel |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 24 | |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 25 | syn include @htmlXml syntax/xml.vim |
| 26 | unlet b:current_syntax |
| 27 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 28 | syn case ignore |
| 29 | |
| 30 | " mark illegal characters |
| 31 | syn match htmlError "[<>&]" |
| 32 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 33 | " tags |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 34 | syn region htmlString contained start=+"+ end=+"+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc |
| 35 | syn region htmlString contained start=+'+ end=+'+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc |
| 36 | syn match htmlValue contained "=[\t ]*[^'" \t>][^ \t>]*"hs=s+1 contains=javaScriptExpression,@htmlPreproc |
| 37 | syn region htmlEndTag start=+</+ end=+>+ contains=htmlTagN,htmlTagError |
| 38 | syn region htmlTag start=+<[^/]+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster |
| 39 | syn match htmlTagN contained +<\s*[-a-zA-Z0-9]\++hs=s+1 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster |
| 40 | syn match htmlTagN contained +</\s*[-a-zA-Z0-9]\++hs=s+2 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 41 | syn match htmlTagError contained "[^>]<"ms=s+1 |
| 42 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 43 | " tag names |
| 44 | syn keyword htmlTagName contained address applet area a base basefont |
| 45 | syn keyword htmlTagName contained big blockquote br caption center |
| 46 | syn keyword htmlTagName contained cite code dd dfn dir div dl dt font |
| 47 | syn keyword htmlTagName contained form hr html img |
| 48 | syn keyword htmlTagName contained input isindex kbd li link map menu |
| 49 | syn keyword htmlTagName contained meta ol option param pre p samp span |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 50 | syn keyword htmlTagName contained select small strike sub sup |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 51 | syn keyword htmlTagName contained table td textarea th tr tt ul var xmp |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 52 | syn match htmlTagName contained "\<\%(b\|i\|u\|h[1-6]\|em\|strong\|head\|body\|title\)\>" |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 53 | |
| 54 | " new html 4.0 tags |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 55 | syn keyword htmlTagName contained abbr acronym bdo button col colgroup |
| 56 | syn keyword htmlTagName contained del fieldset iframe ins label legend |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 57 | syn keyword htmlTagName contained object optgroup q s tbody tfoot thead |
| 58 | |
Bram Moolenaar | bc2eada | 2017-01-02 21:27:47 +0100 | [diff] [blame] | 59 | " new html 5 tags |
Bram Moolenaar | 690afe1 | 2017-01-28 18:34:47 +0100 | [diff] [blame] | 60 | syn keyword htmlTagName contained article aside audio bdi canvas data |
Bram Moolenaar | 5666fcd | 2019-12-26 14:35:26 +0100 | [diff] [blame] | 61 | syn keyword htmlTagName contained datalist details dialog embed figcaption |
| 62 | syn keyword htmlTagName contained figure footer header hgroup keygen main |
| 63 | syn keyword htmlTagName contained mark menuitem meter nav output picture |
dkearns | a905844 | 2023-11-29 06:41:41 +1100 | [diff] [blame] | 64 | syn keyword htmlTagName contained progress rb rp rt rtc ruby search section |
Bram Moolenaar | ff78155 | 2020-03-19 20:37:11 +0100 | [diff] [blame] | 65 | syn keyword htmlTagName contained slot source summary template time track |
| 66 | syn keyword htmlTagName contained video wbr |
Bram Moolenaar | bc2eada | 2017-01-02 21:27:47 +0100 | [diff] [blame] | 67 | |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 68 | " svg and math tags |
| 69 | syn keyword htmlMathTagName contained math |
| 70 | syn keyword htmlSvgTagName contained svg |
| 71 | |
| 72 | syn region htmlMath start="<math>" end="</math>" contains=@htmlXml transparent keepend |
| 73 | syn region htmlSvg start="<svg>" end="</svg>" contains=@htmlXml transparent keepend |
| 74 | |
| 75 | syn cluster xmlTagHook add=htmlMathTagName,htmlSvgTagName |
| 76 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 77 | " legal arg names |
| 78 | syn keyword htmlArg contained action |
| 79 | syn keyword htmlArg contained align alink alt archive background bgcolor |
| 80 | syn keyword htmlArg contained border bordercolor cellpadding |
| 81 | syn keyword htmlArg contained cellspacing checked class clear code codebase color |
| 82 | syn keyword htmlArg contained cols colspan content coords enctype face |
| 83 | syn keyword htmlArg contained gutter height hspace id |
| 84 | syn keyword htmlArg contained link lowsrc marginheight |
| 85 | syn keyword htmlArg contained marginwidth maxlength method name prompt |
| 86 | syn keyword htmlArg contained rel rev rows rowspan scrolling selected shape |
| 87 | syn keyword htmlArg contained size src start target text type url |
| 88 | syn keyword htmlArg contained usemap ismap valign value vlink vspace width wrap |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 89 | syn match htmlArg contained "\<\%(http-equiv\|href\|title\)="me=e-1 |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 90 | |
Bram Moolenaar | d2f3a8b | 2018-06-19 14:35:59 +0200 | [diff] [blame] | 91 | syn keyword htmlArg contained role |
| 92 | |
dkearns | a905844 | 2023-11-29 06:41:41 +1100 | [diff] [blame] | 93 | " ARIA attributes {{{1 |
| 94 | let s:aria =<< trim END |
| 95 | activedescendant |
| 96 | atomic |
| 97 | autocomplete |
| 98 | braillelabel |
| 99 | brailleroledescription |
| 100 | busy |
| 101 | checked |
| 102 | colcount |
| 103 | colindex |
| 104 | colindextext |
| 105 | colspan |
| 106 | controls |
| 107 | current |
| 108 | describedby |
| 109 | description |
| 110 | details |
| 111 | disabled |
| 112 | errormessage |
| 113 | expanded |
| 114 | flowto |
| 115 | haspopup |
| 116 | hidden |
| 117 | invalid |
| 118 | keyshortcuts |
| 119 | label |
| 120 | labelledby |
| 121 | level |
| 122 | live |
| 123 | modal |
| 124 | multiline |
| 125 | multiselectable |
| 126 | orientation |
| 127 | owns |
| 128 | placeholder |
| 129 | posinset |
| 130 | pressed |
| 131 | readonly |
| 132 | relevant |
| 133 | required |
| 134 | roledescription |
| 135 | rowcount |
| 136 | rowindex |
| 137 | rowindextext |
| 138 | rowspan |
| 139 | selected |
| 140 | setsize |
| 141 | sort |
| 142 | valuemax |
| 143 | valuemin |
| 144 | valuenow |
| 145 | valuetext |
| 146 | END |
| 147 | let s:aria_deprecated =<< trim END |
| 148 | dropeffect |
| 149 | grabbed |
| 150 | END |
| 151 | |
| 152 | call extend(s:aria, s:aria_deprecated) |
| 153 | exe 'syn match htmlArg contained "\%#=1\<aria-\%(' .. s:aria->join('\|') .. '\)\>"' |
| 154 | unlet s:aria s:aria_deprecated |
| 155 | " }}} |
| 156 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 157 | " Netscape extensions |
| 158 | syn keyword htmlTagName contained frame noframes frameset nobr blink |
| 159 | syn keyword htmlTagName contained layer ilayer nolayer spacer |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 160 | syn keyword htmlArg contained frameborder noresize pagex pagey above below |
| 161 | syn keyword htmlArg contained left top visibility clip id noshade |
| 162 | syn match htmlArg contained "\<z-index\>" |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 163 | |
| 164 | " Microsoft extensions |
| 165 | syn keyword htmlTagName contained marquee |
| 166 | |
| 167 | " html 4.0 arg names |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 168 | syn match htmlArg contained "\<\%(accept-charset\|label\)\>" |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 169 | syn keyword htmlArg contained abbr accept accesskey axis char charoff charset |
| 170 | syn keyword htmlArg contained cite classid codetype compact data datetime |
| 171 | syn keyword htmlArg contained declare defer dir disabled for frame |
| 172 | syn keyword htmlArg contained headers hreflang lang language longdesc |
| 173 | syn keyword htmlArg contained multiple nohref nowrap object profile readonly |
| 174 | syn keyword htmlArg contained rules scheme scope span standby style |
| 175 | syn keyword htmlArg contained summary tabindex valuetype version |
| 176 | |
Bram Moolenaar | 6856393 | 2017-01-10 13:31:15 +0100 | [diff] [blame] | 177 | " html 5 arg names |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 178 | syn keyword htmlArg contained allow autocapitalize as blocking decoding |
| 179 | syn keyword htmlArg contained enterkeyhint imagesizes imagesrcset inert |
| 180 | syn keyword htmlArg contained integrity is itemid itemprop itemref itemscope |
| 181 | syn keyword htmlArg contained itemtype loading nomodule ping playsinline |
| 182 | syn keyword htmlArg contained referrerpolicy slot allowfullscreen async |
| 183 | syn keyword htmlArg contained autocomplete autofocus autoplay challenge |
| 184 | syn keyword htmlArg contained contenteditable contextmenu controls crossorigin |
| 185 | syn keyword htmlArg contained default dirname download draggable dropzone form |
| 186 | syn keyword htmlArg contained formaction formenctype formmethod formnovalidate |
| 187 | syn keyword htmlArg contained formtarget hidden high icon inputmode keytype |
| 188 | syn keyword htmlArg contained kind list loop low max min minlength muted nonce |
| 189 | syn keyword htmlArg contained novalidate open optimum pattern placeholder |
| 190 | syn keyword htmlArg contained poster preload radiogroup required reversed |
| 191 | syn keyword htmlArg contained sandbox spellcheck sizes srcset srcdoc srclang |
| 192 | syn keyword htmlArg contained step title translate typemustmatch |
| 193 | syn match htmlArg contained "\<data-\h\%(\w\|[-.]\)*\%(\_s*=\)\@=" |
Bram Moolenaar | 6856393 | 2017-01-10 13:31:15 +0100 | [diff] [blame] | 194 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 195 | " special characters |
Mohamed Akram | 917ff8a | 2024-06-16 18:47:36 +0400 | [diff] [blame] | 196 | syn match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,32};" |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 197 | |
| 198 | " Comments (the real ones or the old netscape ones) |
| 199 | if exists("html_wrong_comments") |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 200 | syn region htmlComment start=+<!--+ end=+--\s*>+ contains=@Spell |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 201 | else |
Bram Moolenaar | c8cdf0f | 2021-03-13 13:28:13 +0100 | [diff] [blame] | 202 | " The HTML 5.2 syntax 8.2.4.41: bogus comment is parser error; browser skips until next > |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 203 | syn region htmlComment start=+<!+ end=+>+ contains=htmlCommentError keepend |
Bram Moolenaar | c8cdf0f | 2021-03-13 13:28:13 +0100 | [diff] [blame] | 204 | " Idem 8.2.4.42,51: Comment starts with <!-- and ends with --> |
| 205 | " Idem 8.2.4.43,44: Except <!--> and <!---> are parser errors |
| 206 | " Idem 8.2.4.52: dash-dash-bang (--!>) is error ignored by parser, also closes comment |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 207 | syn region htmlComment matchgroup=htmlComment start=+<!--\%(-\?>\)\@!+ end=+--!\?>+ contains=htmlCommentNested,@htmlPreProc,@Spell keepend |
Bram Moolenaar | c8cdf0f | 2021-03-13 13:28:13 +0100 | [diff] [blame] | 208 | " Idem 8.2.4.49: nested comment is parser error, except <!--> is all right |
| 209 | syn match htmlCommentNested contained "<!-->\@!" |
| 210 | syn match htmlCommentError contained "[^><!]" |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 211 | endif |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 212 | syn region htmlComment start=+<!DOCTYPE+ end=+>+ keepend |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 213 | |
| 214 | " server-parsed commands |
| 215 | syn region htmlPreProc start=+<!--#+ end=+-->+ contains=htmlPreStmt,htmlPreError,htmlPreAttr |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 216 | syn match htmlPreStmt contained "<!--#\%(config\|echo\|exec\|fsize\|flastmod\|include\|printenv\|set\|if\|elif\|else\|endif\|geoguide\)\>" |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 217 | syn match htmlPreError contained "<!--#\S*"ms=s+4 |
| 218 | syn match htmlPreAttr contained "\w\+=[^"]\S\+" contains=htmlPreProcAttrError,htmlPreProcAttrName |
| 219 | syn region htmlPreAttr contained start=+\w\+="+ skip=+\\\\\|\\"+ end=+"+ contains=htmlPreProcAttrName keepend |
| 220 | syn match htmlPreProcAttrError contained "\w\+="he=e-1 |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 221 | syn match htmlPreProcAttrName contained "\%(expr\|errmsg\|sizefmt\|timefmt\|var\|cgi\|cmd\|file\|virtual\|value\)="he=e-1 |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 222 | |
| 223 | if !exists("html_no_rendering") |
| 224 | " rendering |
Bram Moolenaar | ce0842a | 2005-07-18 21:58:11 +0000 | [diff] [blame] | 225 | syn cluster htmlTop contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,javaScript,@htmlPreproc |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 226 | |
Bram Moolenaar | 62e1bb4 | 2019-04-08 16:25:07 +0200 | [diff] [blame] | 227 | syn region htmlStrike start="<del\>" end="</del\_s*>"me=s-1 contains=@htmlTop |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 228 | syn region htmlStrike start="<s\>" end="</s\_s*>"me=s-1 contains=@htmlTop |
Bram Moolenaar | 62e1bb4 | 2019-04-08 16:25:07 +0200 | [diff] [blame] | 229 | syn region htmlStrike start="<strike\>" end="</strike\_s*>"me=s-1 contains=@htmlTop |
Bram Moolenaar | 01164a6 | 2017-11-02 22:58:42 +0100 | [diff] [blame] | 230 | |
Bram Moolenaar | 62e1bb4 | 2019-04-08 16:25:07 +0200 | [diff] [blame] | 231 | syn region htmlBold start="<b\>" end="</b\_s*>"me=s-1 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic |
| 232 | syn region htmlBold start="<strong\>" end="</strong\_s*>"me=s-1 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic |
| 233 | syn region htmlBoldUnderline contained start="<u\>" end="</u\_s*>"me=s-1 contains=@htmlTop,htmlBoldUnderlineItalic |
| 234 | syn region htmlBoldItalic contained start="<i\>" end="</i\_s*>"me=s-1 contains=@htmlTop,htmlBoldItalicUnderline |
| 235 | syn region htmlBoldItalic contained start="<em\>" end="</em\_s*>"me=s-1 contains=@htmlTop,htmlBoldItalicUnderline |
| 236 | syn region htmlBoldUnderlineItalic contained start="<i\>" end="</i\_s*>"me=s-1 contains=@htmlTop |
| 237 | syn region htmlBoldUnderlineItalic contained start="<em\>" end="</em\_s*>"me=s-1 contains=@htmlTop |
| 238 | syn region htmlBoldItalicUnderline contained start="<u\>" end="</u\_s*>"me=s-1 contains=@htmlTop,htmlBoldUnderlineItalic |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 239 | |
Bram Moolenaar | 62e1bb4 | 2019-04-08 16:25:07 +0200 | [diff] [blame] | 240 | syn region htmlUnderline start="<u\>" end="</u\_s*>"me=s-1 contains=@htmlTop,htmlUnderlineBold,htmlUnderlineItalic |
| 241 | syn region htmlUnderlineBold contained start="<b\>" end="</b\_s*>"me=s-1 contains=@htmlTop,htmlUnderlineBoldItalic |
| 242 | syn region htmlUnderlineBold contained start="<strong\>" end="</strong\_s*>"me=s-1 contains=@htmlTop,htmlUnderlineBoldItalic |
| 243 | syn region htmlUnderlineItalic contained start="<i\>" end="</i\_s*>"me=s-1 contains=@htmlTop,htmlUnderlineItalicBold |
| 244 | syn region htmlUnderlineItalic contained start="<em\>" end="</em\_s*>"me=s-1 contains=@htmlTop,htmlUnderlineItalicBold |
| 245 | syn region htmlUnderlineItalicBold contained start="<b\>" end="</b\_s*>"me=s-1 contains=@htmlTop |
| 246 | syn region htmlUnderlineItalicBold contained start="<strong\>" end="</strong\_s*>"me=s-1 contains=@htmlTop |
| 247 | syn region htmlUnderlineBoldItalic contained start="<i\>" end="</i\_s*>"me=s-1 contains=@htmlTop |
| 248 | syn region htmlUnderlineBoldItalic contained start="<em\>" end="</em\_s*>"me=s-1 contains=@htmlTop |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 249 | |
Bram Moolenaar | 62e1bb4 | 2019-04-08 16:25:07 +0200 | [diff] [blame] | 250 | syn region htmlItalic start="<i\>" end="</i\_s*>"me=s-1 contains=@htmlTop,htmlItalicBold,htmlItalicUnderline |
| 251 | syn region htmlItalic start="<em\>" end="</em\_s*>"me=s-1 contains=@htmlTop |
| 252 | syn region htmlItalicBold contained start="<b\>" end="</b\_s*>"me=s-1 contains=@htmlTop,htmlItalicBoldUnderline |
| 253 | syn region htmlItalicBold contained start="<strong\>" end="</strong\_s*>"me=s-1 contains=@htmlTop,htmlItalicBoldUnderline |
| 254 | syn region htmlItalicBoldUnderline contained start="<u\>" end="</u\_s*>"me=s-1 contains=@htmlTop |
| 255 | syn region htmlItalicUnderline contained start="<u\>" end="</u\_s*>"me=s-1 contains=@htmlTop,htmlItalicUnderlineBold |
| 256 | syn region htmlItalicUnderlineBold contained start="<b\>" end="</b\_s*>"me=s-1 contains=@htmlTop |
| 257 | syn region htmlItalicUnderlineBold contained start="<strong\>" end="</strong\_s*>"me=s-1 contains=@htmlTop |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 258 | |
Bram Moolenaar | 0c5fa7d | 2012-10-05 22:26:30 +0200 | [diff] [blame] | 259 | syn match htmlLeadingSpace "^\s\+" contained |
Bram Moolenaar | 62e1bb4 | 2019-04-08 16:25:07 +0200 | [diff] [blame] | 260 | syn region htmlLink start="<a\>\_[^>]*\<href\>" end="</a\_s*>"me=s-1 contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLeadingSpace,javaScript,@htmlPreproc |
| 261 | syn region htmlH1 start="<h1\>" end="</h1\_s*>"me=s-1 contains=@htmlTop |
| 262 | syn region htmlH2 start="<h2\>" end="</h2\_s*>"me=s-1 contains=@htmlTop |
| 263 | syn region htmlH3 start="<h3\>" end="</h3\_s*>"me=s-1 contains=@htmlTop |
| 264 | syn region htmlH4 start="<h4\>" end="</h4\_s*>"me=s-1 contains=@htmlTop |
| 265 | syn region htmlH5 start="<h5\>" end="</h5\_s*>"me=s-1 contains=@htmlTop |
| 266 | syn region htmlH6 start="<h6\>" end="</h6\_s*>"me=s-1 contains=@htmlTop |
| 267 | 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 |
| 268 | syn region htmlTitle start="<title\>" end="</title\_s*>"me=s-1 contains=htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 269 | endif |
| 270 | |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 271 | syn keyword htmlTagName contained noscript |
| 272 | syn keyword htmlSpecialTagName contained script style |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 273 | if main_syntax != 'java' || exists("java_javascript") |
| 274 | " JAVA SCRIPT |
Bram Moolenaar | 9e54a0e | 2006-04-14 20:42:25 +0000 | [diff] [blame] | 275 | syn include @htmlJavaScript syntax/javascript.vim |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 276 | unlet b:current_syntax |
Bram Moolenaar | 938ae28 | 2023-02-20 20:44:55 +0000 | [diff] [blame] | 277 | syn region javaScript start=+<script\>\_[^>]*>+ keepend end=+</script\_[^>]*>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 278 | syn region htmlScriptTag contained start=+<script+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent |
Bram Moolenaar | f37506f | 2016-08-31 22:22:10 +0200 | [diff] [blame] | 279 | hi def link htmlScriptTag htmlTag |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 280 | |
| 281 | " html events (i.e. arguments that include javascript commands) |
| 282 | if exists("html_extended_events") |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 283 | syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*'+ end=+'+ contains=htmlEventSQ |
| 284 | syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*"+ end=+"+ contains=htmlEventDQ |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 285 | else |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 286 | syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*'+ end=+'+ keepend contains=htmlEventSQ |
| 287 | syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*"+ end=+"+ keepend contains=htmlEventDQ |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 288 | endif |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 289 | syn region htmlEventSQ contained start=+'+ms=s+1 end=+'+me=s-1 contains=@htmlJavaScript |
| 290 | syn region htmlEventDQ contained start=+"+ms=s+1 end=+"+me=s-1 contains=@htmlJavaScript |
Bram Moolenaar | f37506f | 2016-08-31 22:22:10 +0200 | [diff] [blame] | 291 | hi def link htmlEventSQ htmlEvent |
| 292 | hi def link htmlEventDQ htmlEvent |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 293 | |
| 294 | " a javascript expression is used as an arg value |
| 295 | syn region javaScriptExpression contained start=+&{+ keepend end=+};+ contains=@htmlJavaScript,@htmlPreproc |
| 296 | endif |
| 297 | |
| 298 | if main_syntax != 'java' || exists("java_vb") |
| 299 | " VB SCRIPT |
Bram Moolenaar | 9e54a0e | 2006-04-14 20:42:25 +0000 | [diff] [blame] | 300 | syn include @htmlVbScript syntax/vb.vim |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 301 | unlet b:current_syntax |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 302 | syn region javaScript start=+<script \_[^>]*language *=\_[^>]*vbscript\_[^>]*>+ keepend end=+</script\_[^>]*>+me=s-1 contains=@htmlVbScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 303 | endif |
| 304 | |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 305 | syn cluster htmlJavaScript add=@htmlPreproc |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 306 | |
| 307 | if main_syntax != 'java' || exists("java_css") |
| 308 | " embedded style sheets |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 309 | syn keyword htmlArg contained media |
Bram Moolenaar | 9e54a0e | 2006-04-14 20:42:25 +0000 | [diff] [blame] | 310 | syn include @htmlCss syntax/css.vim |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 311 | unlet b:current_syntax |
| 312 | syn region cssStyle start=+<style+ keepend end=+</style>+ contains=@htmlCss,htmlTag,htmlEndTag,htmlCssStyleComment,@htmlPreproc |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 313 | syn match htmlCssStyleComment contained "\%(<!--\|-->\)" |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 314 | syn region htmlCssDefinition matchgroup=htmlArg start='style="' keepend matchgroup=htmlString end='"' contains=css.*Attr,css.*Prop,cssComment,cssLength,cssColor,cssURL,cssImportant,cssError,cssString,@htmlPreproc |
Bram Moolenaar | f37506f | 2016-08-31 22:22:10 +0200 | [diff] [blame] | 315 | hi def link htmlStyleArg htmlString |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 316 | endif |
| 317 | |
| 318 | if main_syntax == "html" |
| 319 | " synchronizing (does not always work if a comment includes legal |
| 320 | " html tags, but doing it right would mean to always start |
| 321 | " 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 "^.*['\"].*$" |
Christian Brabandt | df9f67e | 2024-07-30 20:19:15 +0200 | [diff] [blame] | 325 | exe "syn sync minlines=" . get(g:, 'html_minlines', 250) |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 326 | endif |
| 327 | |
Bram Moolenaar | d13166e | 2022-11-18 21:49:57 +0000 | [diff] [blame] | 328 | " Folding |
Aliaksei Budavei | dc7ed8f | 2025-05-10 21:40:41 +0200 | [diff] [blame] | 329 | " (Originally written by Ingo Karkat and Marcus Zanona; see |
| 330 | " https://vi.stackexchange.com/questions/2306/html-syntax-folding-in-vim .) |
Bram Moolenaar | d13166e | 2022-11-18 21:49:57 +0000 | [diff] [blame] | 331 | if 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\d |
| 333 | " 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 fold |
| 336 | endif |
| 337 | endif |
| 338 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 339 | " The default highlighting. |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 340 | hi def link htmlTag Function |
| 341 | hi def link htmlEndTag Identifier |
| 342 | hi def link htmlArg Type |
| 343 | hi def link htmlTagName htmlStatement |
| 344 | hi def link htmlSpecialTagName Exception |
| 345 | hi def link htmlMathTagName htmlTagName |
| 346 | hi def link htmlSvgTagName htmlTagName |
| 347 | hi def link htmlValue String |
| 348 | hi def link htmlSpecialChar Special |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 349 | |
| 350 | if !exists("html_no_rendering") |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 351 | hi def link htmlH1 Title |
| 352 | hi def link htmlH2 htmlH1 |
| 353 | hi def link htmlH3 htmlH2 |
| 354 | hi def link htmlH4 htmlH3 |
| 355 | hi def link htmlH5 htmlH4 |
| 356 | hi def link htmlH6 htmlH5 |
| 357 | hi def link htmlHead PreProc |
| 358 | hi def link htmlTitle Title |
| 359 | hi def link htmlBoldItalicUnderline htmlBoldUnderlineItalic |
| 360 | hi def link htmlUnderlineBold htmlBoldUnderline |
| 361 | hi def link htmlUnderlineItalicBold htmlBoldUnderlineItalic |
| 362 | hi def link htmlUnderlineBoldItalic htmlBoldUnderlineItalic |
| 363 | hi def link htmlItalicUnderline htmlUnderlineItalic |
| 364 | hi def link htmlItalicBold htmlBoldItalic |
| 365 | hi def link htmlItalicBoldUnderline htmlBoldUnderlineItalic |
| 366 | hi def link htmlItalicUnderlineBold htmlBoldUnderlineItalic |
| 367 | hi def link htmlLink Underlined |
| 368 | hi def link htmlLeadingSpace None |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 369 | if !exists("html_my_rendering") |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 370 | hi def htmlBold term=bold cterm=bold gui=bold |
| 371 | hi def htmlBoldUnderline term=bold,underline cterm=bold,underline gui=bold,underline |
| 372 | hi def htmlBoldItalic term=bold,italic cterm=bold,italic gui=bold,italic |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 373 | hi def htmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 374 | hi def htmlUnderline term=underline cterm=underline gui=underline |
| 375 | hi def htmlUnderlineItalic term=italic,underline cterm=italic,underline gui=italic,underline |
| 376 | hi def htmlItalic term=italic cterm=italic gui=italic |
Bram Moolenaar | 01164a6 | 2017-11-02 22:58:42 +0100 | [diff] [blame] | 377 | if v:version > 800 || v:version == 800 && has("patch1038") |
dkearns | a905844 | 2023-11-29 06:41:41 +1100 | [diff] [blame] | 378 | hi def htmlStrike term=strikethrough cterm=strikethrough gui=strikethrough |
Bram Moolenaar | 01164a6 | 2017-11-02 22:58:42 +0100 | [diff] [blame] | 379 | else |
dkearns | a905844 | 2023-11-29 06:41:41 +1100 | [diff] [blame] | 380 | hi def htmlStrike term=underline cterm=underline gui=underline |
Bram Moolenaar | 01164a6 | 2017-11-02 22:58:42 +0100 | [diff] [blame] | 381 | endif |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 382 | endif |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 383 | endif |
| 384 | |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 385 | hi def link htmlPreStmt PreProc |
| 386 | hi def link htmlPreError Error |
| 387 | hi def link htmlPreProc PreProc |
| 388 | hi def link htmlPreAttr String |
Bram Moolenaar | f37506f | 2016-08-31 22:22:10 +0200 | [diff] [blame] | 389 | hi def link htmlPreProcAttrName PreProc |
| 390 | hi def link htmlPreProcAttrError Error |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 391 | hi def link htmlString String |
| 392 | hi def link htmlStatement Statement |
| 393 | hi def link htmlComment Comment |
| 394 | hi def link htmlCommentNested htmlError |
| 395 | hi def link htmlCommentError htmlError |
| 396 | hi def link htmlTagError htmlError |
| 397 | hi def link htmlEvent javaScript |
| 398 | hi def link htmlError Error |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 399 | |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 400 | hi def link javaScript Special |
Bram Moolenaar | f37506f | 2016-08-31 22:22:10 +0200 | [diff] [blame] | 401 | hi def link javaScriptExpression javaScript |
| 402 | hi def link htmlCssStyleComment Comment |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 403 | hi def link htmlCssDefinition Special |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 404 | |
| 405 | let b:current_syntax = "html" |
| 406 | |
| 407 | if main_syntax == 'html' |
| 408 | unlet main_syntax |
| 409 | endif |
| 410 | |
Bram Moolenaar | 0c5fa7d | 2012-10-05 22:26:30 +0200 | [diff] [blame] | 411 | let &cpo = s:cpo_save |
| 412 | unlet s:cpo_save |
dkearns | a905844 | 2023-11-29 06:41:41 +1100 | [diff] [blame] | 413 | |
| 414 | " vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker: |