blob: a76dfccdc8d4bdadfe4d687f3cb898fd9396ac59 [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 Moolenaar80fc0432005-07-20 22:06:07 +00005" Last Change: 2005 Jul 20
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
20" don't use standard HiLink, it will not work with included syntax files
21if version < 508
22 command! -nargs=+ HtmlHiLink hi link <args>
23else
24 command! -nargs=+ HtmlHiLink hi def link <args>
25endif
26
27
28syn case ignore
29
Bram Moolenaar80fc0432005-07-20 22:06:07 +000030if main_syntax == "html"
31 syn spell toplevel
32endif
Bram Moolenaarce0842a2005-07-18 21:58:11 +000033
Bram Moolenaar071d4272004-06-13 20:20:40 +000034" 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 Moolenaarce0842a2005-07-18 21:58:11 +000042syn region htmlEndTag start=+</+ end=+>+ contains=htmlTagN,htmlTagError
43syn region htmlTag start=+<[^/]+ end=+>+ 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")
104 syn region htmlComment start=+<!--+ end=+--\s*>+
105else
106 syn region htmlComment start=+<!+ end=+>+ contains=htmlCommentPart,htmlCommentError
107 syn match htmlCommentError contained "[^><!]"
108 syn region htmlCommentPart contained start=+--+ end=+--\s*+ contains=@htmlPreProc
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
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 Moolenaarce0842a2005-07-18 21:58:11 +0000153 syn region htmlLink start="<a\>\_[^>]*\<href\>" end="</a>"me=e-4 contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000154 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
Bram Moolenaarce0842a2005-07-18 21:58:11 +0000161 syn region htmlTitle start="<title\>" end="</title>"me=e-8 contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000162endif
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 <sfile>:p:h/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=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent
172 HtmlHiLink 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 HtmlHiLink htmlEventSQ htmlEvent
185 HtmlHiLink 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 <sfile>:p:h/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 <sfile>:p:h/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 HtmlHiLink 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.
222if version >= 508 || !exists("did_html_syn_inits")
223 if version < 508
224 let did_html_syn_inits = 1
225 endif
226 HtmlHiLink htmlTag Function
227 HtmlHiLink htmlEndTag Identifier
228 HtmlHiLink htmlArg Type
229 HtmlHiLink htmlTagName htmlStatement
230 HtmlHiLink htmlSpecialTagName Exception
231 HtmlHiLink htmlValue String
232 HtmlHiLink htmlSpecialChar Special
233
234 if !exists("html_no_rendering")
235 HtmlHiLink htmlH1 Title
236 HtmlHiLink htmlH2 htmlH1
237 HtmlHiLink htmlH3 htmlH2
238 HtmlHiLink htmlH4 htmlH3
239 HtmlHiLink htmlH5 htmlH4
240 HtmlHiLink htmlH6 htmlH5
241 HtmlHiLink htmlHead PreProc
242 HtmlHiLink htmlTitle Title
243 HtmlHiLink htmlBoldItalicUnderline htmlBoldUnderlineItalic
244 HtmlHiLink htmlUnderlineBold htmlBoldUnderline
245 HtmlHiLink htmlUnderlineItalicBold htmlBoldUnderlineItalic
246 HtmlHiLink htmlUnderlineBoldItalic htmlBoldUnderlineItalic
247 HtmlHiLink htmlItalicUnderline htmlUnderlineItalic
248 HtmlHiLink htmlItalicBold htmlBoldItalic
249 HtmlHiLink htmlItalicBoldUnderline htmlBoldUnderlineItalic
250 HtmlHiLink htmlItalicUnderlineBold htmlBoldUnderlineItalic
251 HtmlHiLink htmlLink Underlined
252 if !exists("html_my_rendering")
253 hi def htmlBold term=bold cterm=bold gui=bold
254 hi def htmlBoldUnderline term=bold,underline cterm=bold,underline gui=bold,underline
255 hi def htmlBoldItalic term=bold,italic cterm=bold,italic gui=bold,italic
256 hi def htmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline
257 hi def htmlUnderline term=underline cterm=underline gui=underline
258 hi def htmlUnderlineItalic term=italic,underline cterm=italic,underline gui=italic,underline
259 hi def htmlItalic term=italic cterm=italic gui=italic
260 endif
261 endif
262
263 HtmlHiLink htmlPreStmt PreProc
264 HtmlHiLink htmlPreError Error
265 HtmlHiLink htmlPreProc PreProc
266 HtmlHiLink htmlPreAttr String
267 HtmlHiLink htmlPreProcAttrName PreProc
268 HtmlHiLink htmlPreProcAttrError Error
269 HtmlHiLink htmlSpecial Special
270 HtmlHiLink htmlSpecialChar Special
271 HtmlHiLink htmlString String
272 HtmlHiLink htmlStatement Statement
273 HtmlHiLink htmlComment Comment
274 HtmlHiLink htmlCommentPart Comment
275 HtmlHiLink htmlValue String
276 HtmlHiLink htmlCommentError htmlError
277 HtmlHiLink htmlTagError htmlError
278 HtmlHiLink htmlEvent javaScript
279 HtmlHiLink htmlError Error
280
281 HtmlHiLink javaScript Special
282 HtmlHiLink javaScriptExpression javaScript
283 HtmlHiLink htmlCssStyleComment Comment
284 HtmlHiLink htmlCssDefinition Special
285endif
286
287delcommand HtmlHiLink
288
289let b:current_syntax = "html"
290
291if main_syntax == 'html'
292 unlet main_syntax
293endif
294
295" vim: ts=8