blob: ab1f9b3c13f8f753421acae7ee17c88f859081da [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: HTML
3" Maintainer: Claudio Fleiner <claudio@fleiner.com>
4" URL: http://www.fleiner.com/vim/syntax/html.vim
Bram Moolenaar8feef4f2015-01-07 16:57:10 +01005" Last Change: 2015 Jan 07
6" included patch from David Felix
Bram Moolenaar071d4272004-06-13 20:20:40 +00007
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
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +020021let s:cpo_save = &cpo
22set cpo&vim
23
Bram Moolenaar071d4272004-06-13 20:20:40 +000024" 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
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000031syntax spell toplevel
Bram Moolenaar071d4272004-06-13 20:20:40 +000032
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
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +000043syn region htmlEndTag start=+</+ end=+>+ contains=htmlTagN,htmlTagError
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +020044syn region htmlTag start=+<[^/]+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster
Bram Moolenaar071d4272004-06-13 20:20:40 +000045syn 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")
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200105 syn region htmlComment start=+<!--+ end=+--\s*>+ contains=@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000106else
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200107 syn region htmlComment start=+<!+ end=+>+ contains=htmlCommentPart,htmlCommentError,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000108 syn match htmlCommentError contained "[^><!]"
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200109 syn region htmlCommentPart contained start=+--+ end=+--\s*+ contains=@htmlPreProc,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000110endif
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000111syn region htmlComment start=+<!DOCTYPE+ keepend end=+>+
Bram Moolenaar071d4272004-06-13 20:20:40 +0000112
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
Bram Moolenaarce0842a2005-07-18 21:58:11 +0000124 syn cluster htmlTop contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,javaScript,@htmlPreproc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000125
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
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200154 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000156 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
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000163 syn region htmlTitle start="<title\>" end="</title>"me=e-8 contains=htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000164endif
165
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000166syn keyword htmlTagName contained noscript
Bram Moolenaar071d4272004-06-13 20:20:40 +0000167syn keyword htmlSpecialTagName contained script style
168if main_syntax != 'java' || exists("java_javascript")
169 " JAVA SCRIPT
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000170 syn include @htmlJavaScript syntax/javascript.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000171 unlet b:current_syntax
Bram Moolenaar8feef4f2015-01-07 16:57:10 +0100172 syn region javaScript start=+<script\_[^>]*>+ keepend end=+</script\_[^>]*>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200173 syn region htmlScriptTag contained start=+<script+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent
Bram Moolenaar071d4272004-06-13 20:20:40 +0000174 HtmlHiLink htmlScriptTag htmlTag
175
176 " html events (i.e. arguments that include javascript commands)
177 if exists("html_extended_events")
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000178 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000180 else
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000181 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000183 endif
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000184 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000186 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
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000195 syn include @htmlVbScript syntax/vb.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000196 unlet b:current_syntax
Bram Moolenaar8feef4f2015-01-07 16:57:10 +0100197 syn region javaScript start=+<script \_[^>]*language *=\_[^>]*vbscript\_[^>]*>+ keepend end=+</script\_[^>]*>+me=s-1 contains=@htmlVbScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000198endif
199
200syn cluster htmlJavaScript add=@htmlPreproc
201
202if main_syntax != 'java' || exists("java_css")
203 " embedded style sheets
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000204 syn keyword htmlArg contained media
205 syn include @htmlCss syntax/css.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000206 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
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000228 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000236 if !exists("html_no_rendering")
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000237 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
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200254 HtmlHiLink htmlLeadingSpace None
Bram Moolenaar071d4272004-06-13 20:20:40 +0000255 if !exists("html_my_rendering")
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000256 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000259 hi def htmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000260 hi def htmlUnderline term=underline cterm=underline gui=underline
Bram Moolenaar071d4272004-06-13 20:20:40 +0000261 hi def htmlUnderlineItalic term=italic,underline cterm=italic,underline gui=italic,underline
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000262 hi def htmlItalic term=italic cterm=italic gui=italic
Bram Moolenaar071d4272004-06-13 20:20:40 +0000263 endif
264 endif
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000265
266 HtmlHiLink htmlPreStmt PreProc
267 HtmlHiLink htmlPreError Error
268 HtmlHiLink htmlPreProc PreProc
269 HtmlHiLink htmlPreAttr String
Bram Moolenaar071d4272004-06-13 20:20:40 +0000270 HtmlHiLink htmlPreProcAttrName PreProc
271 HtmlHiLink htmlPreProcAttrError Error
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000272 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000285 HtmlHiLink javaScriptExpression javaScript
286 HtmlHiLink htmlCssStyleComment Comment
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000287 HtmlHiLink htmlCssDefinition Special
Bram Moolenaar071d4272004-06-13 20:20:40 +0000288endif
289
290delcommand HtmlHiLink
291
292let b:current_syntax = "html"
293
294if main_syntax == 'html'
295 unlet main_syntax
296endif
297
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200298let &cpo = s:cpo_save
299unlet s:cpo_save
Bram Moolenaar071d4272004-06-13 20:20:40 +0000300" vim: ts=8