blob: ac31e4848d3fbe7fa95f09b3b7cf011cfc18f01b [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
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020010" quit when a syntax file was already loaded
Bram Moolenaar071d4272004-06-13 20:20:40 +000011if !exists("main_syntax")
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020012 if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000013 finish
14 endif
15 let main_syntax = 'html'
16endif
17
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +020018let s:cpo_save = &cpo
19set cpo&vim
20
Bram Moolenaar071d4272004-06-13 20:20:40 +000021" don't use standard HiLink, it will not work with included syntax files
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020022command! -nargs=+ HtmlHiLink hi def link <args>
Bram Moolenaar071d4272004-06-13 20:20:40 +000023
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000024syntax spell toplevel
Bram Moolenaar071d4272004-06-13 20:20:40 +000025
26syn case ignore
27
28" mark illegal characters
29syn match htmlError "[<>&]"
30
31
32" tags
33syn region htmlString contained start=+"+ end=+"+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc
34syn region htmlString contained start=+'+ end=+'+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc
35syn match htmlValue contained "=[\t ]*[^'" \t>][^ \t>]*"hs=s+1 contains=javaScriptExpression,@htmlPreproc
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +000036syn region htmlEndTag start=+</+ end=+>+ contains=htmlTagN,htmlTagError
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +020037syn region htmlTag start=+<[^/]+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster
Bram Moolenaar071d4272004-06-13 20:20:40 +000038syn match htmlTagN contained +<\s*[-a-zA-Z0-9]\++hs=s+1 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster
39syn match htmlTagN contained +</\s*[-a-zA-Z0-9]\++hs=s+2 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster
40syn match htmlTagError contained "[^>]<"ms=s+1
41
42
43" tag names
44syn keyword htmlTagName contained address applet area a base basefont
45syn keyword htmlTagName contained big blockquote br caption center
46syn keyword htmlTagName contained cite code dd dfn dir div dl dt font
47syn keyword htmlTagName contained form hr html img
48syn keyword htmlTagName contained input isindex kbd li link map menu
49syn keyword htmlTagName contained meta ol option param pre p samp span
50syn keyword htmlTagName contained select small strike sub sup
51syn keyword htmlTagName contained table td textarea th tr tt ul var xmp
52syn match htmlTagName contained "\<\(b\|i\|u\|h[1-6]\|em\|strong\|head\|body\|title\)\>"
53
54" new html 4.0 tags
55syn keyword htmlTagName contained abbr acronym bdo button col label
56syn keyword htmlTagName contained colgroup del fieldset iframe ins legend
57syn keyword htmlTagName contained object optgroup q s tbody tfoot thead
58
59" legal arg names
60syn keyword htmlArg contained action
61syn keyword htmlArg contained align alink alt archive background bgcolor
62syn keyword htmlArg contained border bordercolor cellpadding
63syn keyword htmlArg contained cellspacing checked class clear code codebase color
64syn keyword htmlArg contained cols colspan content coords enctype face
65syn keyword htmlArg contained gutter height hspace id
66syn keyword htmlArg contained link lowsrc marginheight
67syn keyword htmlArg contained marginwidth maxlength method name prompt
68syn keyword htmlArg contained rel rev rows rowspan scrolling selected shape
69syn keyword htmlArg contained size src start target text type url
70syn keyword htmlArg contained usemap ismap valign value vlink vspace width wrap
71syn match htmlArg contained "\<\(http-equiv\|href\|title\)="me=e-1
72
73" Netscape extensions
74syn keyword htmlTagName contained frame noframes frameset nobr blink
75syn keyword htmlTagName contained layer ilayer nolayer spacer
76syn keyword htmlArg contained frameborder noresize pagex pagey above below
77syn keyword htmlArg contained left top visibility clip id noshade
78syn match htmlArg contained "\<z-index\>"
79
80" Microsoft extensions
81syn keyword htmlTagName contained marquee
82
83" html 4.0 arg names
84syn match htmlArg contained "\<\(accept-charset\|label\)\>"
85syn keyword htmlArg contained abbr accept accesskey axis char charoff charset
86syn keyword htmlArg contained cite classid codetype compact data datetime
87syn keyword htmlArg contained declare defer dir disabled for frame
88syn keyword htmlArg contained headers hreflang lang language longdesc
89syn keyword htmlArg contained multiple nohref nowrap object profile readonly
90syn keyword htmlArg contained rules scheme scope span standby style
91syn keyword htmlArg contained summary tabindex valuetype version
92
93" special characters
94syn match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,8};"
95
96" Comments (the real ones or the old netscape ones)
97if exists("html_wrong_comments")
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +020098 syn region htmlComment start=+<!--+ end=+--\s*>+ contains=@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +000099else
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200100 syn region htmlComment start=+<!+ end=+>+ contains=htmlCommentPart,htmlCommentError,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000101 syn match htmlCommentError contained "[^><!]"
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200102 syn region htmlCommentPart contained start=+--+ end=+--\s*+ contains=@htmlPreProc,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000103endif
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000104syn region htmlComment start=+<!DOCTYPE+ keepend end=+>+
Bram Moolenaar071d4272004-06-13 20:20:40 +0000105
106" server-parsed commands
107syn region htmlPreProc start=+<!--#+ end=+-->+ contains=htmlPreStmt,htmlPreError,htmlPreAttr
108syn match htmlPreStmt contained "<!--#\(config\|echo\|exec\|fsize\|flastmod\|include\|printenv\|set\|if\|elif\|else\|endif\|geoguide\)\>"
109syn match htmlPreError contained "<!--#\S*"ms=s+4
110syn match htmlPreAttr contained "\w\+=[^"]\S\+" contains=htmlPreProcAttrError,htmlPreProcAttrName
111syn region htmlPreAttr contained start=+\w\+="+ skip=+\\\\\|\\"+ end=+"+ contains=htmlPreProcAttrName keepend
112syn match htmlPreProcAttrError contained "\w\+="he=e-1
113syn match htmlPreProcAttrName contained "\(expr\|errmsg\|sizefmt\|timefmt\|var\|cgi\|cmd\|file\|virtual\|value\)="he=e-1
114
115if !exists("html_no_rendering")
116 " rendering
Bram Moolenaarce0842a2005-07-18 21:58:11 +0000117 syn cluster htmlTop contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,javaScript,@htmlPreproc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000118
119 syn region htmlBold start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
120 syn region htmlBold start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
121 syn region htmlBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic
122 syn region htmlBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlBoldItalicUnderline
123 syn region htmlBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlBoldItalicUnderline
124 syn region htmlBoldUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop
125 syn region htmlBoldUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop
126 syn region htmlBoldItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic
127
128 syn region htmlUnderline start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlUnderlineBold,htmlUnderlineItalic
129 syn region htmlUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlUnderlineBoldItalic
130 syn region htmlUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlUnderlineBoldItalic
131 syn region htmlUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlUnderlineItalicBold
132 syn region htmlUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlUnderlineItalicBold
133 syn region htmlUnderlineItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
134 syn region htmlUnderlineItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
135 syn region htmlUnderlineBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop
136 syn region htmlUnderlineBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop
137
138 syn region htmlItalic start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlItalicBold,htmlItalicUnderline
139 syn region htmlItalic start="<em\>" end="</em>"me=e-5 contains=@htmlTop
140 syn region htmlItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlItalicBoldUnderline
141 syn region htmlItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlItalicBoldUnderline
142 syn region htmlItalicBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop
143 syn region htmlItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlItalicUnderlineBold
144 syn region htmlItalicUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
145 syn region htmlItalicUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
146
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200147 syn match htmlLeadingSpace "^\s\+" contained
148 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 +0000149 syn region htmlH1 start="<h1\>" end="</h1>"me=e-5 contains=@htmlTop
150 syn region htmlH2 start="<h2\>" end="</h2>"me=e-5 contains=@htmlTop
151 syn region htmlH3 start="<h3\>" end="</h3>"me=e-5 contains=@htmlTop
152 syn region htmlH4 start="<h4\>" end="</h4>"me=e-5 contains=@htmlTop
153 syn region htmlH5 start="<h5\>" end="</h5>"me=e-5 contains=@htmlTop
154 syn region htmlH6 start="<h6\>" end="</h6>"me=e-5 contains=@htmlTop
155 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 +0000156 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 +0000157endif
158
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000159syn keyword htmlTagName contained noscript
Bram Moolenaar071d4272004-06-13 20:20:40 +0000160syn keyword htmlSpecialTagName contained script style
161if main_syntax != 'java' || exists("java_javascript")
162 " JAVA SCRIPT
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000163 syn include @htmlJavaScript syntax/javascript.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000164 unlet b:current_syntax
Bram Moolenaar8feef4f2015-01-07 16:57:10 +0100165 syn region javaScript start=+<script\_[^>]*>+ keepend end=+</script\_[^>]*>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200166 syn region htmlScriptTag contained start=+<script+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent
Bram Moolenaar071d4272004-06-13 20:20:40 +0000167 HtmlHiLink htmlScriptTag htmlTag
168
169 " html events (i.e. arguments that include javascript commands)
170 if exists("html_extended_events")
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000171 syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*'+ end=+'+ contains=htmlEventSQ
172 syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*"+ end=+"+ contains=htmlEventDQ
Bram Moolenaar071d4272004-06-13 20:20:40 +0000173 else
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000174 syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*'+ end=+'+ keepend contains=htmlEventSQ
175 syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*"+ end=+"+ keepend contains=htmlEventDQ
Bram Moolenaar071d4272004-06-13 20:20:40 +0000176 endif
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000177 syn region htmlEventSQ contained start=+'+ms=s+1 end=+'+me=s-1 contains=@htmlJavaScript
178 syn region htmlEventDQ contained start=+"+ms=s+1 end=+"+me=s-1 contains=@htmlJavaScript
Bram Moolenaar071d4272004-06-13 20:20:40 +0000179 HtmlHiLink htmlEventSQ htmlEvent
180 HtmlHiLink htmlEventDQ htmlEvent
181
182 " a javascript expression is used as an arg value
183 syn region javaScriptExpression contained start=+&{+ keepend end=+};+ contains=@htmlJavaScript,@htmlPreproc
184endif
185
186if main_syntax != 'java' || exists("java_vb")
187 " VB SCRIPT
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000188 syn include @htmlVbScript syntax/vb.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000189 unlet b:current_syntax
Bram Moolenaar8feef4f2015-01-07 16:57:10 +0100190 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 +0000191endif
192
193syn cluster htmlJavaScript add=@htmlPreproc
194
195if main_syntax != 'java' || exists("java_css")
196 " embedded style sheets
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000197 syn keyword htmlArg contained media
198 syn include @htmlCss syntax/css.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000199 unlet b:current_syntax
200 syn region cssStyle start=+<style+ keepend end=+</style>+ contains=@htmlCss,htmlTag,htmlEndTag,htmlCssStyleComment,@htmlPreproc
201 syn match htmlCssStyleComment contained "\(<!--\|-->\)"
202 syn region htmlCssDefinition matchgroup=htmlArg start='style="' keepend matchgroup=htmlString end='"' contains=css.*Attr,css.*Prop,cssComment,cssLength,cssColor,cssURL,cssImportant,cssError,cssString,@htmlPreproc
203 HtmlHiLink htmlStyleArg htmlString
204endif
205
206if main_syntax == "html"
207 " synchronizing (does not always work if a comment includes legal
208 " html tags, but doing it right would mean to always start
209 " at the first line, which is too slow)
210 syn sync match htmlHighlight groupthere NONE "<[/a-zA-Z]"
211 syn sync match htmlHighlight groupthere javaScript "<script"
212 syn sync match htmlHighlightSkip "^.*['\"].*$"
213 syn sync minlines=10
214endif
215
216" The default highlighting.
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200217HtmlHiLink htmlTag Function
218HtmlHiLink htmlEndTag Identifier
219HtmlHiLink htmlArg Type
220HtmlHiLink htmlTagName htmlStatement
221HtmlHiLink htmlSpecialTagName Exception
222HtmlHiLink htmlValue String
223HtmlHiLink htmlSpecialChar Special
224
225if !exists("html_no_rendering")
226 HtmlHiLink htmlH1 Title
227 HtmlHiLink htmlH2 htmlH1
228 HtmlHiLink htmlH3 htmlH2
229 HtmlHiLink htmlH4 htmlH3
230 HtmlHiLink htmlH5 htmlH4
231 HtmlHiLink htmlH6 htmlH5
232 HtmlHiLink htmlHead PreProc
233 HtmlHiLink htmlTitle Title
234 HtmlHiLink htmlBoldItalicUnderline htmlBoldUnderlineItalic
235 HtmlHiLink htmlUnderlineBold htmlBoldUnderline
236 HtmlHiLink htmlUnderlineItalicBold htmlBoldUnderlineItalic
237 HtmlHiLink htmlUnderlineBoldItalic htmlBoldUnderlineItalic
238 HtmlHiLink htmlItalicUnderline htmlUnderlineItalic
239 HtmlHiLink htmlItalicBold htmlBoldItalic
240 HtmlHiLink htmlItalicBoldUnderline htmlBoldUnderlineItalic
241 HtmlHiLink htmlItalicUnderlineBold htmlBoldUnderlineItalic
242 HtmlHiLink htmlLink Underlined
243 HtmlHiLink htmlLeadingSpace None
244 if !exists("html_my_rendering")
245 hi def htmlBold term=bold cterm=bold gui=bold
246 hi def htmlBoldUnderline term=bold,underline cterm=bold,underline gui=bold,underline
247 hi def htmlBoldItalic term=bold,italic cterm=bold,italic gui=bold,italic
248 hi def htmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline
249 hi def htmlUnderline term=underline cterm=underline gui=underline
250 hi def htmlUnderlineItalic term=italic,underline cterm=italic,underline gui=italic,underline
251 hi def htmlItalic term=italic cterm=italic gui=italic
Bram Moolenaar071d4272004-06-13 20:20:40 +0000252 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000253endif
254
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200255HtmlHiLink htmlPreStmt PreProc
256HtmlHiLink htmlPreError Error
257HtmlHiLink htmlPreProc PreProc
258HtmlHiLink htmlPreAttr String
259HtmlHiLink htmlPreProcAttrName PreProc
260HtmlHiLink htmlPreProcAttrError Error
261HtmlHiLink htmlSpecial Special
262HtmlHiLink htmlSpecialChar Special
263HtmlHiLink htmlString String
264HtmlHiLink htmlStatement Statement
265HtmlHiLink htmlComment Comment
266HtmlHiLink htmlCommentPart Comment
267HtmlHiLink htmlValue String
268HtmlHiLink htmlCommentError htmlError
269HtmlHiLink htmlTagError htmlError
270HtmlHiLink htmlEvent javaScript
271HtmlHiLink htmlError Error
272
273HtmlHiLink javaScript Special
274HtmlHiLink javaScriptExpression javaScript
275HtmlHiLink htmlCssStyleComment Comment
276HtmlHiLink htmlCssDefinition Special
277
Bram Moolenaar071d4272004-06-13 20:20:40 +0000278delcommand HtmlHiLink
279
280let b:current_syntax = "html"
281
282if main_syntax == 'html'
283 unlet main_syntax
284endif
285
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200286let &cpo = s:cpo_save
287unlet s:cpo_save
Bram Moolenaar071d4272004-06-13 20:20:40 +0000288" vim: ts=8