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