blob: 336d8c9f4405278d749beb6964a913301791c6dd [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 Moolenaarc81e5e72007-05-05 18:24:42 +000021syntax spell toplevel
Bram Moolenaar071d4272004-06-13 20:20:40 +000022
23syn case ignore
24
25" mark illegal characters
26syn match htmlError "[<>&]"
27
28
29" tags
30syn region htmlString contained start=+"+ end=+"+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc
31syn region htmlString contained start=+'+ end=+'+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc
32syn match htmlValue contained "=[\t ]*[^'" \t>][^ \t>]*"hs=s+1 contains=javaScriptExpression,@htmlPreproc
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +000033syn region htmlEndTag start=+</+ end=+>+ contains=htmlTagN,htmlTagError
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +020034syn region htmlTag start=+<[^/]+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster
Bram Moolenaar071d4272004-06-13 20:20:40 +000035syn match htmlTagN contained +<\s*[-a-zA-Z0-9]\++hs=s+1 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster
36syn match htmlTagN contained +</\s*[-a-zA-Z0-9]\++hs=s+2 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster
37syn match htmlTagError contained "[^>]<"ms=s+1
38
39
40" tag names
41syn keyword htmlTagName contained address applet area a base basefont
42syn keyword htmlTagName contained big blockquote br caption center
43syn keyword htmlTagName contained cite code dd dfn dir div dl dt font
44syn keyword htmlTagName contained form hr html img
45syn keyword htmlTagName contained input isindex kbd li link map menu
46syn keyword htmlTagName contained meta ol option param pre p samp span
47syn keyword htmlTagName contained select small strike sub sup
48syn keyword htmlTagName contained table td textarea th tr tt ul var xmp
49syn match htmlTagName contained "\<\(b\|i\|u\|h[1-6]\|em\|strong\|head\|body\|title\)\>"
50
51" new html 4.0 tags
52syn keyword htmlTagName contained abbr acronym bdo button col label
53syn keyword htmlTagName contained colgroup del fieldset iframe ins legend
54syn keyword htmlTagName contained object optgroup q s tbody tfoot thead
55
56" legal arg names
57syn keyword htmlArg contained action
58syn keyword htmlArg contained align alink alt archive background bgcolor
59syn keyword htmlArg contained border bordercolor cellpadding
60syn keyword htmlArg contained cellspacing checked class clear code codebase color
61syn keyword htmlArg contained cols colspan content coords enctype face
62syn keyword htmlArg contained gutter height hspace id
63syn keyword htmlArg contained link lowsrc marginheight
64syn keyword htmlArg contained marginwidth maxlength method name prompt
65syn keyword htmlArg contained rel rev rows rowspan scrolling selected shape
66syn keyword htmlArg contained size src start target text type url
67syn keyword htmlArg contained usemap ismap valign value vlink vspace width wrap
68syn match htmlArg contained "\<\(http-equiv\|href\|title\)="me=e-1
69
70" Netscape extensions
71syn keyword htmlTagName contained frame noframes frameset nobr blink
72syn keyword htmlTagName contained layer ilayer nolayer spacer
73syn keyword htmlArg contained frameborder noresize pagex pagey above below
74syn keyword htmlArg contained left top visibility clip id noshade
75syn match htmlArg contained "\<z-index\>"
76
77" Microsoft extensions
78syn keyword htmlTagName contained marquee
79
80" html 4.0 arg names
81syn match htmlArg contained "\<\(accept-charset\|label\)\>"
82syn keyword htmlArg contained abbr accept accesskey axis char charoff charset
83syn keyword htmlArg contained cite classid codetype compact data datetime
84syn keyword htmlArg contained declare defer dir disabled for frame
85syn keyword htmlArg contained headers hreflang lang language longdesc
86syn keyword htmlArg contained multiple nohref nowrap object profile readonly
87syn keyword htmlArg contained rules scheme scope span standby style
88syn keyword htmlArg contained summary tabindex valuetype version
89
90" special characters
91syn match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,8};"
92
93" Comments (the real ones or the old netscape ones)
94if exists("html_wrong_comments")
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +020095 syn region htmlComment start=+<!--+ end=+--\s*>+ contains=@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +000096else
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +020097 syn region htmlComment start=+<!+ end=+>+ contains=htmlCommentPart,htmlCommentError,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +000098 syn match htmlCommentError contained "[^><!]"
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +020099 syn region htmlCommentPart contained start=+--+ end=+--\s*+ contains=@htmlPreProc,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000100endif
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000101syn region htmlComment start=+<!DOCTYPE+ keepend end=+>+
Bram Moolenaar071d4272004-06-13 20:20:40 +0000102
103" server-parsed commands
104syn region htmlPreProc start=+<!--#+ end=+-->+ contains=htmlPreStmt,htmlPreError,htmlPreAttr
105syn match htmlPreStmt contained "<!--#\(config\|echo\|exec\|fsize\|flastmod\|include\|printenv\|set\|if\|elif\|else\|endif\|geoguide\)\>"
106syn match htmlPreError contained "<!--#\S*"ms=s+4
107syn match htmlPreAttr contained "\w\+=[^"]\S\+" contains=htmlPreProcAttrError,htmlPreProcAttrName
108syn region htmlPreAttr contained start=+\w\+="+ skip=+\\\\\|\\"+ end=+"+ contains=htmlPreProcAttrName keepend
109syn match htmlPreProcAttrError contained "\w\+="he=e-1
110syn match htmlPreProcAttrName contained "\(expr\|errmsg\|sizefmt\|timefmt\|var\|cgi\|cmd\|file\|virtual\|value\)="he=e-1
111
112if !exists("html_no_rendering")
113 " rendering
Bram Moolenaarce0842a2005-07-18 21:58:11 +0000114 syn cluster htmlTop contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,javaScript,@htmlPreproc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000115
116 syn region htmlBold start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
117 syn region htmlBold start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
118 syn region htmlBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic
119 syn region htmlBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlBoldItalicUnderline
120 syn region htmlBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlBoldItalicUnderline
121 syn region htmlBoldUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop
122 syn region htmlBoldUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop
123 syn region htmlBoldItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic
124
125 syn region htmlUnderline start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlUnderlineBold,htmlUnderlineItalic
126 syn region htmlUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlUnderlineBoldItalic
127 syn region htmlUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlUnderlineBoldItalic
128 syn region htmlUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlUnderlineItalicBold
129 syn region htmlUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlUnderlineItalicBold
130 syn region htmlUnderlineItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
131 syn region htmlUnderlineItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
132 syn region htmlUnderlineBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop
133 syn region htmlUnderlineBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop
134
135 syn region htmlItalic start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlItalicBold,htmlItalicUnderline
136 syn region htmlItalic start="<em\>" end="</em>"me=e-5 contains=@htmlTop
137 syn region htmlItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlItalicBoldUnderline
138 syn region htmlItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlItalicBoldUnderline
139 syn region htmlItalicBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop
140 syn region htmlItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlItalicUnderlineBold
141 syn region htmlItalicUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
142 syn region htmlItalicUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
143
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200144 syn match htmlLeadingSpace "^\s\+" contained
145 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 +0000146 syn region htmlH1 start="<h1\>" end="</h1>"me=e-5 contains=@htmlTop
147 syn region htmlH2 start="<h2\>" end="</h2>"me=e-5 contains=@htmlTop
148 syn region htmlH3 start="<h3\>" end="</h3>"me=e-5 contains=@htmlTop
149 syn region htmlH4 start="<h4\>" end="</h4>"me=e-5 contains=@htmlTop
150 syn region htmlH5 start="<h5\>" end="</h5>"me=e-5 contains=@htmlTop
151 syn region htmlH6 start="<h6\>" end="</h6>"me=e-5 contains=@htmlTop
152 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 +0000153 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 +0000154endif
155
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000156syn keyword htmlTagName contained noscript
Bram Moolenaar071d4272004-06-13 20:20:40 +0000157syn keyword htmlSpecialTagName contained script style
158if main_syntax != 'java' || exists("java_javascript")
159 " JAVA SCRIPT
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000160 syn include @htmlJavaScript syntax/javascript.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000161 unlet b:current_syntax
Bram Moolenaar8feef4f2015-01-07 16:57:10 +0100162 syn region javaScript start=+<script\_[^>]*>+ keepend end=+</script\_[^>]*>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200163 syn region htmlScriptTag contained start=+<script+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200164 hi def link htmlScriptTag htmlTag
Bram Moolenaar071d4272004-06-13 20:20:40 +0000165
166 " html events (i.e. arguments that include javascript commands)
167 if exists("html_extended_events")
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000168 syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*'+ end=+'+ contains=htmlEventSQ
169 syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*"+ end=+"+ contains=htmlEventDQ
Bram Moolenaar071d4272004-06-13 20:20:40 +0000170 else
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000171 syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*'+ end=+'+ keepend contains=htmlEventSQ
172 syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*"+ end=+"+ keepend contains=htmlEventDQ
Bram Moolenaar071d4272004-06-13 20:20:40 +0000173 endif
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000174 syn region htmlEventSQ contained start=+'+ms=s+1 end=+'+me=s-1 contains=@htmlJavaScript
175 syn region htmlEventDQ contained start=+"+ms=s+1 end=+"+me=s-1 contains=@htmlJavaScript
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200176 hi def link htmlEventSQ htmlEvent
177 hi def link htmlEventDQ htmlEvent
Bram Moolenaar071d4272004-06-13 20:20:40 +0000178
179 " a javascript expression is used as an arg value
180 syn region javaScriptExpression contained start=+&{+ keepend end=+};+ contains=@htmlJavaScript,@htmlPreproc
181endif
182
183if main_syntax != 'java' || exists("java_vb")
184 " VB SCRIPT
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000185 syn include @htmlVbScript syntax/vb.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000186 unlet b:current_syntax
Bram Moolenaar8feef4f2015-01-07 16:57:10 +0100187 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 +0000188endif
189
190syn cluster htmlJavaScript add=@htmlPreproc
191
192if main_syntax != 'java' || exists("java_css")
193 " embedded style sheets
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000194 syn keyword htmlArg contained media
195 syn include @htmlCss syntax/css.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000196 unlet b:current_syntax
197 syn region cssStyle start=+<style+ keepend end=+</style>+ contains=@htmlCss,htmlTag,htmlEndTag,htmlCssStyleComment,@htmlPreproc
198 syn match htmlCssStyleComment contained "\(<!--\|-->\)"
199 syn region htmlCssDefinition matchgroup=htmlArg start='style="' keepend matchgroup=htmlString end='"' contains=css.*Attr,css.*Prop,cssComment,cssLength,cssColor,cssURL,cssImportant,cssError,cssString,@htmlPreproc
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200200 hi def link htmlStyleArg htmlString
Bram Moolenaar071d4272004-06-13 20:20:40 +0000201endif
202
203if main_syntax == "html"
204 " synchronizing (does not always work if a comment includes legal
205 " html tags, but doing it right would mean to always start
206 " at the first line, which is too slow)
207 syn sync match htmlHighlight groupthere NONE "<[/a-zA-Z]"
208 syn sync match htmlHighlight groupthere javaScript "<script"
209 syn sync match htmlHighlightSkip "^.*['\"].*$"
210 syn sync minlines=10
211endif
212
213" The default highlighting.
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200214hi def link htmlTag Function
215hi def link htmlEndTag Identifier
216hi def link htmlArg Type
217hi def link htmlTagName htmlStatement
218hi def link htmlSpecialTagName Exception
219hi def link htmlValue String
220hi def link htmlSpecialChar Special
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200221
222if !exists("html_no_rendering")
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200223 hi def link htmlH1 Title
224 hi def link htmlH2 htmlH1
225 hi def link htmlH3 htmlH2
226 hi def link htmlH4 htmlH3
227 hi def link htmlH5 htmlH4
228 hi def link htmlH6 htmlH5
229 hi def link htmlHead PreProc
230 hi def link htmlTitle Title
231 hi def link htmlBoldItalicUnderline htmlBoldUnderlineItalic
232 hi def link htmlUnderlineBold htmlBoldUnderline
233 hi def link htmlUnderlineItalicBold htmlBoldUnderlineItalic
234 hi def link htmlUnderlineBoldItalic htmlBoldUnderlineItalic
235 hi def link htmlItalicUnderline htmlUnderlineItalic
236 hi def link htmlItalicBold htmlBoldItalic
237 hi def link htmlItalicBoldUnderline htmlBoldUnderlineItalic
238 hi def link htmlItalicUnderlineBold htmlBoldUnderlineItalic
239 hi def link htmlLink Underlined
240 hi def link htmlLeadingSpace None
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200241 if !exists("html_my_rendering")
242 hi def htmlBold term=bold cterm=bold gui=bold
243 hi def htmlBoldUnderline term=bold,underline cterm=bold,underline gui=bold,underline
244 hi def htmlBoldItalic term=bold,italic cterm=bold,italic gui=bold,italic
245 hi def htmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline
246 hi def htmlUnderline term=underline cterm=underline gui=underline
247 hi def htmlUnderlineItalic term=italic,underline cterm=italic,underline gui=italic,underline
248 hi def htmlItalic term=italic cterm=italic gui=italic
Bram Moolenaar071d4272004-06-13 20:20:40 +0000249 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000250endif
251
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200252hi def link htmlPreStmt PreProc
253hi def link htmlPreError Error
254hi def link htmlPreProc PreProc
255hi def link htmlPreAttr String
256hi def link htmlPreProcAttrName PreProc
257hi def link htmlPreProcAttrError Error
258hi def link htmlSpecial Special
259hi def link htmlSpecialChar Special
260hi def link htmlString String
261hi def link htmlStatement Statement
262hi def link htmlComment Comment
263hi def link htmlCommentPart Comment
264hi def link htmlValue String
265hi def link htmlCommentError htmlError
266hi def link htmlTagError htmlError
267hi def link htmlEvent javaScript
268hi def link htmlError Error
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200269
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200270hi def link javaScript Special
271hi def link javaScriptExpression javaScript
272hi def link htmlCssStyleComment Comment
273hi def link htmlCssDefinition Special
Bram Moolenaar071d4272004-06-13 20:20:40 +0000274
275let b:current_syntax = "html"
276
277if main_syntax == 'html'
278 unlet main_syntax
279endif
280
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200281let &cpo = s:cpo_save
282unlet s:cpo_save
Bram Moolenaar071d4272004-06-13 20:20:40 +0000283" vim: ts=8