xref: /vim-8.2.3635/runtime/syntax/html.vim (revision 01a6c216)
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:          2018 May 31
7" Included patch from Jay Sitter to add WAI-ARIA htmlArg keywords
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 embed figcaption figure
61syn keyword htmlTagName contained footer header hgroup keygen main mark
62syn keyword htmlTagName contained menuitem meter nav output picture
63syn keyword htmlTagName contained progress rb rp rt rtc ruby section
64syn keyword htmlTagName contained slot source template time track video wbr
65
66" legal arg names
67syn keyword htmlArg contained action
68syn keyword htmlArg contained align alink alt archive background bgcolor
69syn keyword htmlArg contained border bordercolor cellpadding
70syn keyword htmlArg contained cellspacing checked class clear code codebase color
71syn keyword htmlArg contained cols colspan content coords enctype face
72syn keyword htmlArg contained gutter height hspace id
73syn keyword htmlArg contained link lowsrc marginheight
74syn keyword htmlArg contained marginwidth maxlength method name prompt
75syn keyword htmlArg contained rel rev rows rowspan scrolling selected shape
76syn keyword htmlArg contained size src start target text type url
77syn keyword htmlArg contained usemap ismap valign value vlink vspace width wrap
78syn match   htmlArg contained "\<\(http-equiv\|href\|title\)="me=e-1
79
80" aria attributes
81syn match htmlArg contained "\<\(aria-activedescendant\|aria-atomic\)\>"
82syn match htmlArg contained "\<\(aria-autocomplete\|aria-busy\|aria-checked\)\>"
83syn match htmlArg contained "\<\(aria-colcount\|aria-colindex\|aria-colspan\)\>"
84syn match htmlArg contained "\<\(aria-controls\|aria-current\)\>"
85syn match htmlArg contained "\<\(aria-describedby\|aria-details\)\>"
86syn match htmlArg contained "\<\(aria-disabled\|aria-dropeffect\)\>"
87syn match htmlArg contained "\<\(aria-errormessage\|aria-expanded\)\>"
88syn match htmlArg contained "\<\(aria-flowto\|aria-grabbed\|aria-haspopup\)\>"
89syn match htmlArg contained "\<\(aria-hidden\|aria-invalid\)\>"
90syn match htmlArg contained "\<\(aria-keyshortcuts\|aria-label\)\>"
91syn match htmlArg contained "\<\(aria-labelledby\|aria-level\|aria-live\)\>"
92syn match htmlArg contained "\<\(aria-modal\|aria-multiline\)\>"
93syn match htmlArg contained "\<\(aria-multiselectable\|aria-orientation\)\>"
94syn match htmlArg contained "\<\(aria-owns\|aria-placeholder\|aria-posinset\)\>"
95syn match htmlArg contained "\<\(aria-pressed\|aria-readonly\|aria-relevant\)\>"
96syn match htmlArg contained "\<\(aria-required\|aria-roledescription\)\>"
97syn match htmlArg contained "\<\(aria-rowcount\|aria-rowindex\|aria-rowspan\)\>"
98syn match htmlArg contained "\<\(aria-selected\|aria-setsize\|aria-sort\)\>"
99syn match htmlArg contained "\<\(aria-valuemax\|aria-valuemin\)\>"
100syn match htmlArg contained "\<\(aria-valuenow\|aria-valuetext\)\>"
101syn keyword htmlArg contained role
102
103" Netscape extensions
104syn keyword htmlTagName contained frame noframes frameset nobr blink
105syn keyword htmlTagName contained layer ilayer nolayer spacer
106syn keyword htmlArg     contained frameborder noresize pagex pagey above below
107syn keyword htmlArg     contained left top visibility clip id noshade
108syn match   htmlArg     contained "\<z-index\>"
109
110" Microsoft extensions
111syn keyword htmlTagName contained marquee
112
113" html 4.0 arg names
114syn match   htmlArg contained "\<\(accept-charset\|label\)\>"
115syn keyword htmlArg contained abbr accept accesskey axis char charoff charset
116syn keyword htmlArg contained cite classid codetype compact data datetime
117syn keyword htmlArg contained declare defer dir disabled for frame
118syn keyword htmlArg contained headers hreflang lang language longdesc
119syn keyword htmlArg contained multiple nohref nowrap object profile readonly
120syn keyword htmlArg contained rules scheme scope span standby style
121syn keyword htmlArg contained summary tabindex valuetype version
122
123" html 5 arg names
124syn keyword htmlArg contained allowfullscreen async autocomplete autofocus
125syn keyword htmlArg contained autoplay challenge contenteditable contextmenu
126syn keyword htmlArg contained controls crossorigin default dialog dirname
127syn keyword htmlArg contained download draggable dropzone form formaction
128syn keyword htmlArg contained formenctype formmethod formnovalidate formtarget
129syn keyword htmlArg contained hidden high icon inputmode keytype kind list loop
130syn keyword htmlArg contained low max min minlength muted nonce novalidate open
131syn keyword htmlArg contained optimum pattern placeholder poster preload
132syn keyword htmlArg contained radiogroup required reversed sandbox spellcheck
133syn keyword htmlArg contained sizes srcset srcdoc srclang step title translate
134syn keyword htmlArg contained typemustmatch
135
136" special characters
137syn match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,8};"
138
139" Comments (the real ones or the old netscape ones)
140if exists("html_wrong_comments")
141  syn region htmlComment                start=+<!--+    end=+--\s*>+ contains=@Spell
142else
143  syn region htmlComment                start=+<!+      end=+>+   contains=htmlCommentPart,htmlCommentError,@Spell
144  syn match  htmlCommentError contained "[^><!]"
145  syn region htmlCommentPart  contained start=+--+      end=+--\s*+  contains=@htmlPreProc,@Spell
146endif
147syn region htmlComment                  start=+<!DOCTYPE+ keepend end=+>+
148
149" server-parsed commands
150syn region htmlPreProc start=+<!--#+ end=+-->+ contains=htmlPreStmt,htmlPreError,htmlPreAttr
151syn match htmlPreStmt contained "<!--#\(config\|echo\|exec\|fsize\|flastmod\|include\|printenv\|set\|if\|elif\|else\|endif\|geoguide\)\>"
152syn match htmlPreError contained "<!--#\S*"ms=s+4
153syn match htmlPreAttr contained "\w\+=[^"]\S\+" contains=htmlPreProcAttrError,htmlPreProcAttrName
154syn region htmlPreAttr contained start=+\w\+="+ skip=+\\\\\|\\"+ end=+"+ contains=htmlPreProcAttrName keepend
155syn match htmlPreProcAttrError contained "\w\+="he=e-1
156syn match htmlPreProcAttrName contained "\(expr\|errmsg\|sizefmt\|timefmt\|var\|cgi\|cmd\|file\|virtual\|value\)="he=e-1
157
158if !exists("html_no_rendering")
159  " rendering
160  syn cluster htmlTop contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,javaScript,@htmlPreproc
161
162  syn region htmlStrike start="<del\>" end="</del>"me=e-6 contains=@htmlTop
163  syn region htmlStrike start="<strike\>" end="</strike>"me=e-9 contains=@htmlTop
164
165  syn region htmlBold start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
166  syn region htmlBold start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
167  syn region htmlBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic
168  syn region htmlBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlBoldItalicUnderline
169  syn region htmlBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlBoldItalicUnderline
170  syn region htmlBoldUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop
171  syn region htmlBoldUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop
172  syn region htmlBoldItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic
173
174  syn region htmlUnderline start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlUnderlineBold,htmlUnderlineItalic
175  syn region htmlUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlUnderlineBoldItalic
176  syn region htmlUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlUnderlineBoldItalic
177  syn region htmlUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlUnderlineItalicBold
178  syn region htmlUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlUnderlineItalicBold
179  syn region htmlUnderlineItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
180  syn region htmlUnderlineItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
181  syn region htmlUnderlineBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop
182  syn region htmlUnderlineBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop
183
184  syn region htmlItalic start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlItalicBold,htmlItalicUnderline
185  syn region htmlItalic start="<em\>" end="</em>"me=e-5 contains=@htmlTop
186  syn region htmlItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlItalicBoldUnderline
187  syn region htmlItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlItalicBoldUnderline
188  syn region htmlItalicBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop
189  syn region htmlItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlItalicUnderlineBold
190  syn region htmlItalicUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
191  syn region htmlItalicUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
192
193  syn match htmlLeadingSpace "^\s\+" contained
194  syn region htmlLink start="<a\>\_[^>]*\<href\>" end="</a>"me=e-4 contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLeadingSpace,javaScript,@htmlPreproc
195  syn region htmlH1 start="<h1\>" end="</h1>"me=e-5 contains=@htmlTop
196  syn region htmlH2 start="<h2\>" end="</h2>"me=e-5 contains=@htmlTop
197  syn region htmlH3 start="<h3\>" end="</h3>"me=e-5 contains=@htmlTop
198  syn region htmlH4 start="<h4\>" end="</h4>"me=e-5 contains=@htmlTop
199  syn region htmlH5 start="<h5\>" end="</h5>"me=e-5 contains=@htmlTop
200  syn region htmlH6 start="<h6\>" end="</h6>"me=e-5 contains=@htmlTop
201  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
202  syn region htmlTitle start="<title\>" end="</title>"me=e-8 contains=htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc
203endif
204
205syn keyword htmlTagName         contained noscript
206syn keyword htmlSpecialTagName  contained script style
207if main_syntax != 'java' || exists("java_javascript")
208  " JAVA SCRIPT
209  syn include @htmlJavaScript syntax/javascript.vim
210  unlet b:current_syntax
211  syn region  javaScript start=+<script\_[^>]*>+ keepend end=+</script\_[^>]*>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
212  syn region  htmlScriptTag     contained start=+<script+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent
213  hi def link htmlScriptTag htmlTag
214
215  " html events (i.e. arguments that include javascript commands)
216  if exists("html_extended_events")
217    syn region htmlEvent        contained start=+\<on\a\+\s*=[\t ]*'+ end=+'+ contains=htmlEventSQ
218    syn region htmlEvent        contained start=+\<on\a\+\s*=[\t ]*"+ end=+"+ contains=htmlEventDQ
219  else
220    syn region htmlEvent        contained start=+\<on\a\+\s*=[\t ]*'+ end=+'+ keepend contains=htmlEventSQ
221    syn region htmlEvent        contained start=+\<on\a\+\s*=[\t ]*"+ end=+"+ keepend contains=htmlEventDQ
222  endif
223  syn region htmlEventSQ        contained start=+'+ms=s+1 end=+'+me=s-1 contains=@htmlJavaScript
224  syn region htmlEventDQ        contained start=+"+ms=s+1 end=+"+me=s-1 contains=@htmlJavaScript
225  hi def link htmlEventSQ htmlEvent
226  hi def link htmlEventDQ htmlEvent
227
228  " a javascript expression is used as an arg value
229  syn region  javaScriptExpression contained start=+&{+ keepend end=+};+ contains=@htmlJavaScript,@htmlPreproc
230endif
231
232if main_syntax != 'java' || exists("java_vb")
233  " VB SCRIPT
234  syn include @htmlVbScript syntax/vb.vim
235  unlet b:current_syntax
236  syn region  javaScript start=+<script \_[^>]*language *=\_[^>]*vbscript\_[^>]*>+ keepend end=+</script\_[^>]*>+me=s-1 contains=@htmlVbScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
237endif
238
239syn cluster htmlJavaScript      add=@htmlPreproc
240
241if main_syntax != 'java' || exists("java_css")
242  " embedded style sheets
243  syn keyword htmlArg           contained media
244  syn include @htmlCss syntax/css.vim
245  unlet b:current_syntax
246  syn region cssStyle start=+<style+ keepend end=+</style>+ contains=@htmlCss,htmlTag,htmlEndTag,htmlCssStyleComment,@htmlPreproc
247  syn match htmlCssStyleComment contained "\(<!--\|-->\)"
248  syn region htmlCssDefinition matchgroup=htmlArg start='style="' keepend matchgroup=htmlString end='"' contains=css.*Attr,css.*Prop,cssComment,cssLength,cssColor,cssURL,cssImportant,cssError,cssString,@htmlPreproc
249  hi def link htmlStyleArg htmlString
250endif
251
252if main_syntax == "html"
253  " synchronizing (does not always work if a comment includes legal
254  " html tags, but doing it right would mean to always start
255  " at the first line, which is too slow)
256  syn sync match htmlHighlight groupthere NONE "<[/a-zA-Z]"
257  syn sync match htmlHighlight groupthere javaScript "<script"
258  syn sync match htmlHighlightSkip "^.*['\"].*$"
259  syn sync minlines=10
260endif
261
262" The default highlighting.
263hi def link htmlTag                     Function
264hi def link htmlEndTag                  Identifier
265hi def link htmlArg                     Type
266hi def link htmlTagName                 htmlStatement
267hi def link htmlSpecialTagName          Exception
268hi def link htmlValue                     String
269hi def link htmlSpecialChar             Special
270
271if !exists("html_no_rendering")
272  hi def link htmlH1                      Title
273  hi def link htmlH2                      htmlH1
274  hi def link htmlH3                      htmlH2
275  hi def link htmlH4                      htmlH3
276  hi def link htmlH5                      htmlH4
277  hi def link htmlH6                      htmlH5
278  hi def link htmlHead                    PreProc
279  hi def link htmlTitle                   Title
280  hi def link htmlBoldItalicUnderline     htmlBoldUnderlineItalic
281  hi def link htmlUnderlineBold           htmlBoldUnderline
282  hi def link htmlUnderlineItalicBold     htmlBoldUnderlineItalic
283  hi def link htmlUnderlineBoldItalic     htmlBoldUnderlineItalic
284  hi def link htmlItalicUnderline         htmlUnderlineItalic
285  hi def link htmlItalicBold              htmlBoldItalic
286  hi def link htmlItalicBoldUnderline     htmlBoldUnderlineItalic
287  hi def link htmlItalicUnderlineBold     htmlBoldUnderlineItalic
288  hi def link htmlLink                    Underlined
289  hi def link htmlLeadingSpace            None
290  if !exists("html_my_rendering")
291    hi def htmlBold                term=bold cterm=bold gui=bold
292    hi def htmlBoldUnderline       term=bold,underline cterm=bold,underline gui=bold,underline
293    hi def htmlBoldItalic          term=bold,italic cterm=bold,italic gui=bold,italic
294    hi def htmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline
295    hi def htmlUnderline           term=underline cterm=underline gui=underline
296    hi def htmlUnderlineItalic     term=italic,underline cterm=italic,underline gui=italic,underline
297    hi def htmlItalic              term=italic cterm=italic gui=italic
298    if v:version > 800 || v:version == 800 && has("patch1038")
299        hi def htmlStrike              term=strikethrough cterm=strikethrough gui=strikethrough
300    else
301        hi def htmlStrike              term=underline cterm=underline gui=underline
302    endif
303  endif
304endif
305
306hi def link htmlPreStmt            PreProc
307hi def link htmlPreError           Error
308hi def link htmlPreProc            PreProc
309hi def link htmlPreAttr            String
310hi def link htmlPreProcAttrName    PreProc
311hi def link htmlPreProcAttrError   Error
312hi def link htmlSpecial            Special
313hi def link htmlSpecialChar        Special
314hi def link htmlString             String
315hi def link htmlStatement          Statement
316hi def link htmlComment            Comment
317hi def link htmlCommentPart        Comment
318hi def link htmlValue              String
319hi def link htmlCommentError       htmlError
320hi def link htmlTagError           htmlError
321hi def link htmlEvent              javaScript
322hi def link htmlError              Error
323
324hi def link javaScript             Special
325hi def link javaScriptExpression   javaScript
326hi def link htmlCssStyleComment    Comment
327hi def link htmlCssDefinition      Special
328
329let b:current_syntax = "html"
330
331if main_syntax == 'html'
332  unlet main_syntax
333endif
334
335let &cpo = s:cpo_save
336unlet s:cpo_save
337" vim: ts=8
338