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