1" Vim syntax file
2" Language:	HTML
3" Maintainer:	Claudio Fleiner <claudio@fleiner.com>
4" URL:		http://www.fleiner.com/vim/syntax/html.vim
5" Last Change:  2006 Jun 19
6
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
27syntax spell toplevel
28
29syn case ignore
30
31" mark illegal characters
32syn match htmlError "[<>&]"
33
34
35" tags
36syn region  htmlString   contained start=+"+ end=+"+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc
37syn region  htmlString   contained start=+'+ end=+'+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc
38syn match   htmlValue    contained "=[\t ]*[^'" \t>][^ \t>]*"hs=s+1   contains=javaScriptExpression,@htmlPreproc
39syn region  htmlEndTag             start=+</+      end=+>+ contains=htmlTagN,htmlTagError
40syn region  htmlTag                start=+<[^/]+   end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster
41syn match   htmlTagN     contained +<\s*[-a-zA-Z0-9]\++hs=s+1 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster
42syn match   htmlTagN     contained +</\s*[-a-zA-Z0-9]\++hs=s+2 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster
43syn match   htmlTagError contained "[^>]<"ms=s+1
44
45
46" tag names
47syn keyword htmlTagName contained address applet area a base basefont
48syn keyword htmlTagName contained big blockquote br caption center
49syn keyword htmlTagName contained cite code dd dfn dir div dl dt font
50syn keyword htmlTagName contained form hr html img
51syn keyword htmlTagName contained input isindex kbd li link map menu
52syn keyword htmlTagName contained meta ol option param pre p samp span
53syn keyword htmlTagName contained select small strike sub sup
54syn keyword htmlTagName contained table td textarea th tr tt ul var xmp
55syn match htmlTagName contained "\<\(b\|i\|u\|h[1-6]\|em\|strong\|head\|body\|title\)\>"
56
57" new html 4.0 tags
58syn keyword htmlTagName contained abbr acronym bdo button col label
59syn keyword htmlTagName contained colgroup del fieldset iframe ins legend
60syn keyword htmlTagName contained object optgroup q s tbody tfoot thead
61
62" legal arg names
63syn keyword htmlArg contained action
64syn keyword htmlArg contained align alink alt archive background bgcolor
65syn keyword htmlArg contained border bordercolor cellpadding
66syn keyword htmlArg contained cellspacing checked class clear code codebase color
67syn keyword htmlArg contained cols colspan content coords enctype face
68syn keyword htmlArg contained gutter height hspace id
69syn keyword htmlArg contained link lowsrc marginheight
70syn keyword htmlArg contained marginwidth maxlength method name prompt
71syn keyword htmlArg contained rel rev rows rowspan scrolling selected shape
72syn keyword htmlArg contained size src start target text type url
73syn keyword htmlArg contained usemap ismap valign value vlink vspace width wrap
74syn match   htmlArg contained "\<\(http-equiv\|href\|title\)="me=e-1
75
76" Netscape extensions
77syn keyword htmlTagName contained frame noframes frameset nobr blink
78syn keyword htmlTagName contained layer ilayer nolayer spacer
79syn keyword htmlArg     contained frameborder noresize pagex pagey above below
80syn keyword htmlArg     contained left top visibility clip id noshade
81syn match   htmlArg     contained "\<z-index\>"
82
83" Microsoft extensions
84syn keyword htmlTagName contained marquee
85
86" html 4.0 arg names
87syn match   htmlArg contained "\<\(accept-charset\|label\)\>"
88syn keyword htmlArg contained abbr accept accesskey axis char charoff charset
89syn keyword htmlArg contained cite classid codetype compact data datetime
90syn keyword htmlArg contained declare defer dir disabled for frame
91syn keyword htmlArg contained headers hreflang lang language longdesc
92syn keyword htmlArg contained multiple nohref nowrap object profile readonly
93syn keyword htmlArg contained rules scheme scope span standby style
94syn keyword htmlArg contained summary tabindex valuetype version
95
96" special characters
97syn match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,8};"
98
99" Comments (the real ones or the old netscape ones)
100if exists("html_wrong_comments")
101  syn region htmlComment                start=+<!--+    end=+--\s*>+
102else
103  syn region htmlComment                start=+<!+      end=+>+   contains=htmlCommentPart,htmlCommentError
104  syn match  htmlCommentError contained "[^><!]"
105  syn region htmlCommentPart  contained start=+--+      end=+--\s*+  contains=@htmlPreProc
106endif
107syn region htmlComment                  start=+<!DOCTYPE+ keepend end=+>+
108
109" server-parsed commands
110syn region htmlPreProc start=+<!--#+ end=+-->+ contains=htmlPreStmt,htmlPreError,htmlPreAttr
111syn match htmlPreStmt contained "<!--#\(config\|echo\|exec\|fsize\|flastmod\|include\|printenv\|set\|if\|elif\|else\|endif\|geoguide\)\>"
112syn match htmlPreError contained "<!--#\S*"ms=s+4
113syn match htmlPreAttr contained "\w\+=[^"]\S\+" contains=htmlPreProcAttrError,htmlPreProcAttrName
114syn region htmlPreAttr contained start=+\w\+="+ skip=+\\\\\|\\"+ end=+"+ contains=htmlPreProcAttrName keepend
115syn match htmlPreProcAttrError contained "\w\+="he=e-1
116syn match htmlPreProcAttrName contained "\(expr\|errmsg\|sizefmt\|timefmt\|var\|cgi\|cmd\|file\|virtual\|value\)="he=e-1
117
118if !exists("html_no_rendering")
119  " rendering
120  syn cluster htmlTop contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,javaScript,@htmlPreproc
121
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
130
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
140
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
149
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
159endif
160
161syn keyword htmlTagName         contained noscript
162syn keyword htmlSpecialTagName  contained script style
163if main_syntax != 'java' || exists("java_javascript")
164  " JAVA SCRIPT
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
170
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
175  else
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
178  endif
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
183
184  " a javascript expression is used as an arg value
185  syn region  javaScriptExpression contained start=+&{+ keepend end=+};+ contains=@htmlJavaScript,@htmlPreproc
186endif
187
188if main_syntax != 'java' || exists("java_vb")
189  " VB SCRIPT
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
193endif
194
195syn cluster htmlJavaScript      add=@htmlPreproc
196
197if 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
206endif
207
208if 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 "^.*['\"].*$"
215  syn sync minlines=10
216endif
217
218" The default highlighting.
219if version >= 508 || !exists("did_html_syn_inits")
220  if version < 508
221    let did_html_syn_inits = 1
222  endif
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
230  
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
257    endif
258  endif
259  
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
277  
278  HtmlHiLink javaScript             Special
279  HtmlHiLink javaScriptExpression   javaScript
280  HtmlHiLink htmlCssStyleComment    Comment
281  HtmlHiLink htmlCssDefinition      Special
282endif
283
284delcommand HtmlHiLink
285
286let b:current_syntax = "html"
287
288if main_syntax == 'html'
289  unlet main_syntax
290endif
291
292" vim: ts=8
293