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