xref: /vim-8.2.3635/runtime/syntax/html.vim (revision 9faec4e3)
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 &gt;
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