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