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