blob: d59126dede9e1e982a7a2d82e4ba03cbbe1aa6ac [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 Moolenaar0c5fa7d2012-10-05 22:26:30 +02005" Last Change: 2012 Oct 05
Bram Moolenaar071d4272004-06-13 20:20:40 +00006
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
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +020020let s:cpo_save = &cpo
21set cpo&vim
22
Bram Moolenaar071d4272004-06-13 20:20:40 +000023" 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
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000030syntax spell toplevel
Bram Moolenaar071d4272004-06-13 20:20:40 +000031
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
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +000042syn region htmlEndTag start=+</+ end=+>+ contains=htmlTagN,htmlTagError
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +020043syn region htmlTag start=+<[^/]+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster
Bram Moolenaar071d4272004-06-13 20:20:40 +000044syn 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")
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200104 syn region htmlComment start=+<!--+ end=+--\s*>+ contains=@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000105else
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200106 syn region htmlComment start=+<!+ end=+>+ contains=htmlCommentPart,htmlCommentError,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000107 syn match htmlCommentError contained "[^><!]"
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200108 syn region htmlCommentPart contained start=+--+ end=+--\s*+ contains=@htmlPreProc,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000109endif
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000110syn region htmlComment start=+<!DOCTYPE+ keepend end=+>+
Bram Moolenaar071d4272004-06-13 20:20:40 +0000111
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
Bram Moolenaarce0842a2005-07-18 21:58:11 +0000123 syn cluster htmlTop contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,javaScript,@htmlPreproc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000124
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
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200153 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000155 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
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000162 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 +0000163endif
164
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000165syn keyword htmlTagName contained noscript
Bram Moolenaar071d4272004-06-13 20:20:40 +0000166syn keyword htmlSpecialTagName contained script style
167if main_syntax != 'java' || exists("java_javascript")
168 " JAVA SCRIPT
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000169 syn include @htmlJavaScript syntax/javascript.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000170 unlet b:current_syntax
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200171 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000173 HtmlHiLink htmlScriptTag htmlTag
174
175 " html events (i.e. arguments that include javascript commands)
176 if exists("html_extended_events")
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000177 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000179 else
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000180 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000182 endif
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000183 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000185 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
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000194 syn include @htmlVbScript syntax/vb.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000195 unlet b:current_syntax
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200196 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 +0000197endif
198
199syn cluster htmlJavaScript add=@htmlPreproc
200
201if main_syntax != 'java' || exists("java_css")
202 " embedded style sheets
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000203 syn keyword htmlArg contained media
204 syn include @htmlCss syntax/css.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000205 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
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000227 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000235 if !exists("html_no_rendering")
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000236 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
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200253 HtmlHiLink htmlLeadingSpace None
Bram Moolenaar071d4272004-06-13 20:20:40 +0000254 if !exists("html_my_rendering")
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000255 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000258 hi def htmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000259 hi def htmlUnderline term=underline cterm=underline gui=underline
Bram Moolenaar071d4272004-06-13 20:20:40 +0000260 hi def htmlUnderlineItalic term=italic,underline cterm=italic,underline gui=italic,underline
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000261 hi def htmlItalic term=italic cterm=italic gui=italic
Bram Moolenaar071d4272004-06-13 20:20:40 +0000262 endif
263 endif
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000264
265 HtmlHiLink htmlPreStmt PreProc
266 HtmlHiLink htmlPreError Error
267 HtmlHiLink htmlPreProc PreProc
268 HtmlHiLink htmlPreAttr String
Bram Moolenaar071d4272004-06-13 20:20:40 +0000269 HtmlHiLink htmlPreProcAttrName PreProc
270 HtmlHiLink htmlPreProcAttrError Error
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000271 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000284 HtmlHiLink javaScriptExpression javaScript
285 HtmlHiLink htmlCssStyleComment Comment
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000286 HtmlHiLink htmlCssDefinition Special
Bram Moolenaar071d4272004-06-13 20:20:40 +0000287endif
288
289delcommand HtmlHiLink
290
291let b:current_syntax = "html"
292
293if main_syntax == 'html'
294 unlet main_syntax
295endif
296
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200297let &cpo = s:cpo_save
298unlet s:cpo_save
Bram Moolenaar071d4272004-06-13 20:20:40 +0000299" vim: ts=8