blob: 7408f66476f7f879b83aa7a85bacf42135abb943 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
Bram Moolenaarbc2eada2017-01-02 21:27:47 +01002" Language: HTML
3" Maintainer: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
4" Previous Maintainer: Claudio Fleiner <claudio@fleiner.com>
5" Last Change: 2016 Dec 29
6" included patch from Jorge Maldonado Ventura
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
Bram Moolenaarbc2eada2017-01-02 21:27:47 +010056" new html 5 tags
57syn keyword htmlTagName contained article aside audio bdi canvas datalist
58syn keyword htmlTagName contained details embed figcaption figure
59syn keyword htmlTagName contained footer header hgroup main mark
60syn keyword htmlTagName contained menuitem meter nav output picture
61syn keyword htmlTagName contained progress rb rp rt rtc ruby section
62syn keyword htmlTagName contained slot source template time track video wbr
63
Bram Moolenaar071d4272004-06-13 20:20:40 +000064" legal arg names
65syn keyword htmlArg contained action
66syn keyword htmlArg contained align alink alt archive background bgcolor
67syn keyword htmlArg contained border bordercolor cellpadding
68syn keyword htmlArg contained cellspacing checked class clear code codebase color
69syn keyword htmlArg contained cols colspan content coords enctype face
70syn keyword htmlArg contained gutter height hspace id
71syn keyword htmlArg contained link lowsrc marginheight
72syn keyword htmlArg contained marginwidth maxlength method name prompt
73syn keyword htmlArg contained rel rev rows rowspan scrolling selected shape
74syn keyword htmlArg contained size src start target text type url
75syn keyword htmlArg contained usemap ismap valign value vlink vspace width wrap
76syn match htmlArg contained "\<\(http-equiv\|href\|title\)="me=e-1
77
78" Netscape extensions
79syn keyword htmlTagName contained frame noframes frameset nobr blink
80syn keyword htmlTagName contained layer ilayer nolayer spacer
81syn keyword htmlArg contained frameborder noresize pagex pagey above below
82syn keyword htmlArg contained left top visibility clip id noshade
83syn match htmlArg contained "\<z-index\>"
84
85" Microsoft extensions
86syn keyword htmlTagName contained marquee
87
88" html 4.0 arg names
89syn match htmlArg contained "\<\(accept-charset\|label\)\>"
90syn keyword htmlArg contained abbr accept accesskey axis char charoff charset
91syn keyword htmlArg contained cite classid codetype compact data datetime
92syn keyword htmlArg contained declare defer dir disabled for frame
93syn keyword htmlArg contained headers hreflang lang language longdesc
94syn keyword htmlArg contained multiple nohref nowrap object profile readonly
95syn keyword htmlArg contained rules scheme scope span standby style
96syn keyword htmlArg contained summary tabindex valuetype version
97
98" special characters
99syn match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,8};"
100
101" Comments (the real ones or the old netscape ones)
102if exists("html_wrong_comments")
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200103 syn region htmlComment start=+<!--+ end=+--\s*>+ contains=@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000104else
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200105 syn region htmlComment start=+<!+ end=+>+ contains=htmlCommentPart,htmlCommentError,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000106 syn match htmlCommentError contained "[^><!]"
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200107 syn region htmlCommentPart contained start=+--+ end=+--\s*+ contains=@htmlPreProc,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000108endif
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000109syn region htmlComment start=+<!DOCTYPE+ keepend end=+>+
Bram Moolenaar071d4272004-06-13 20:20:40 +0000110
111" server-parsed commands
112syn region htmlPreProc start=+<!--#+ end=+-->+ contains=htmlPreStmt,htmlPreError,htmlPreAttr
113syn match htmlPreStmt contained "<!--#\(config\|echo\|exec\|fsize\|flastmod\|include\|printenv\|set\|if\|elif\|else\|endif\|geoguide\)\>"
114syn match htmlPreError contained "<!--#\S*"ms=s+4
115syn match htmlPreAttr contained "\w\+=[^"]\S\+" contains=htmlPreProcAttrError,htmlPreProcAttrName
116syn region htmlPreAttr contained start=+\w\+="+ skip=+\\\\\|\\"+ end=+"+ contains=htmlPreProcAttrName keepend
117syn match htmlPreProcAttrError contained "\w\+="he=e-1
118syn match htmlPreProcAttrName contained "\(expr\|errmsg\|sizefmt\|timefmt\|var\|cgi\|cmd\|file\|virtual\|value\)="he=e-1
119
120if !exists("html_no_rendering")
121 " rendering
Bram Moolenaarce0842a2005-07-18 21:58:11 +0000122 syn cluster htmlTop contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,javaScript,@htmlPreproc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000123
124 syn region htmlBold start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
125 syn region htmlBold start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
126 syn region htmlBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic
127 syn region htmlBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlBoldItalicUnderline
128 syn region htmlBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlBoldItalicUnderline
129 syn region htmlBoldUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop
130 syn region htmlBoldUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop
131 syn region htmlBoldItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic
132
133 syn region htmlUnderline start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlUnderlineBold,htmlUnderlineItalic
134 syn region htmlUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlUnderlineBoldItalic
135 syn region htmlUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlUnderlineBoldItalic
136 syn region htmlUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlUnderlineItalicBold
137 syn region htmlUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlUnderlineItalicBold
138 syn region htmlUnderlineItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
139 syn region htmlUnderlineItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
140 syn region htmlUnderlineBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop
141 syn region htmlUnderlineBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop
142
143 syn region htmlItalic start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlItalicBold,htmlItalicUnderline
144 syn region htmlItalic start="<em\>" end="</em>"me=e-5 contains=@htmlTop
145 syn region htmlItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlItalicBoldUnderline
146 syn region htmlItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlItalicBoldUnderline
147 syn region htmlItalicBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop
148 syn region htmlItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlItalicUnderlineBold
149 syn region htmlItalicUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
150 syn region htmlItalicUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
151
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200152 syn match htmlLeadingSpace "^\s\+" contained
153 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 +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 Moolenaar9e54a0e2006-04-14 20:42:25 +0000161 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 +0000162endif
163
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000164syn keyword htmlTagName contained noscript
Bram Moolenaar071d4272004-06-13 20:20:40 +0000165syn keyword htmlSpecialTagName contained script style
166if main_syntax != 'java' || exists("java_javascript")
167 " JAVA SCRIPT
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000168 syn include @htmlJavaScript syntax/javascript.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000169 unlet b:current_syntax
Bram Moolenaar8feef4f2015-01-07 16:57:10 +0100170 syn region javaScript start=+<script\_[^>]*>+ keepend end=+</script\_[^>]*>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200171 syn region htmlScriptTag contained start=+<script+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200172 hi def link htmlScriptTag htmlTag
Bram Moolenaar071d4272004-06-13 20:20:40 +0000173
174 " html events (i.e. arguments that include javascript commands)
175 if exists("html_extended_events")
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000176 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000178 else
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000179 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000181 endif
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000182 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
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200184 hi def link htmlEventSQ htmlEvent
185 hi def link htmlEventDQ htmlEvent
Bram Moolenaar071d4272004-06-13 20:20:40 +0000186
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
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000193 syn include @htmlVbScript syntax/vb.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000194 unlet b:current_syntax
Bram Moolenaar8feef4f2015-01-07 16:57:10 +0100195 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 +0000196endif
197
198syn cluster htmlJavaScript add=@htmlPreproc
199
200if main_syntax != 'java' || exists("java_css")
201 " embedded style sheets
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000202 syn keyword htmlArg contained media
203 syn include @htmlCss syntax/css.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000204 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
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200208 hi def link htmlStyleArg htmlString
Bram Moolenaar071d4272004-06-13 20:20:40 +0000209endif
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.
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200222hi def link htmlTag Function
223hi def link htmlEndTag Identifier
224hi def link htmlArg Type
225hi def link htmlTagName htmlStatement
226hi def link htmlSpecialTagName Exception
227hi def link htmlValue String
228hi def link htmlSpecialChar Special
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200229
230if !exists("html_no_rendering")
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200231 hi def link htmlH1 Title
232 hi def link htmlH2 htmlH1
233 hi def link htmlH3 htmlH2
234 hi def link htmlH4 htmlH3
235 hi def link htmlH5 htmlH4
236 hi def link htmlH6 htmlH5
237 hi def link htmlHead PreProc
238 hi def link htmlTitle Title
239 hi def link htmlBoldItalicUnderline htmlBoldUnderlineItalic
240 hi def link htmlUnderlineBold htmlBoldUnderline
241 hi def link htmlUnderlineItalicBold htmlBoldUnderlineItalic
242 hi def link htmlUnderlineBoldItalic htmlBoldUnderlineItalic
243 hi def link htmlItalicUnderline htmlUnderlineItalic
244 hi def link htmlItalicBold htmlBoldItalic
245 hi def link htmlItalicBoldUnderline htmlBoldUnderlineItalic
246 hi def link htmlItalicUnderlineBold htmlBoldUnderlineItalic
247 hi def link htmlLink Underlined
248 hi def link htmlLeadingSpace None
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200249 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000257 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000258endif
259
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200260hi def link htmlPreStmt PreProc
261hi def link htmlPreError Error
262hi def link htmlPreProc PreProc
263hi def link htmlPreAttr String
264hi def link htmlPreProcAttrName PreProc
265hi def link htmlPreProcAttrError Error
266hi def link htmlSpecial Special
267hi def link htmlSpecialChar Special
268hi def link htmlString String
269hi def link htmlStatement Statement
270hi def link htmlComment Comment
271hi def link htmlCommentPart Comment
272hi def link htmlValue String
273hi def link htmlCommentError htmlError
274hi def link htmlTagError htmlError
275hi def link htmlEvent javaScript
276hi def link htmlError Error
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200277
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200278hi def link javaScript Special
279hi def link javaScriptExpression javaScript
280hi def link htmlCssStyleComment Comment
281hi def link htmlCssDefinition Special
Bram Moolenaar071d4272004-06-13 20:20:40 +0000282
283let b:current_syntax = "html"
284
285if main_syntax == 'html'
286 unlet main_syntax
287endif
288
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200289let &cpo = s:cpo_save
290unlet s:cpo_save
Bram Moolenaar071d4272004-06-13 20:20:40 +0000291" vim: ts=8