blob: b168750db41a96d7d36b213bc5b6f108574ab768 [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>
Bram Moolenaar68563932017-01-10 13:31:15 +01005" Repository: https://notabug.org/jorgesumle/vim-html-syntax
6" Last Change: 2017 Jan 04
Bram Moolenaarbc2eada2017-01-02 21:27:47 +01007" included patch from Jorge Maldonado Ventura
Bram Moolenaar071d4272004-06-13 20:20:40 +00008
9" Please check :help html.vim for some comments and a description of the options
10
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020011" quit when a syntax file was already loaded
Bram Moolenaar071d4272004-06-13 20:20:40 +000012if !exists("main_syntax")
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020013 if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000014 finish
15 endif
16 let main_syntax = 'html'
17endif
18
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +020019let s:cpo_save = &cpo
20set cpo&vim
21
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000022syntax spell toplevel
Bram Moolenaar071d4272004-06-13 20:20:40 +000023
24syn case ignore
25
26" mark illegal characters
27syn match htmlError "[<>&]"
28
29
30" tags
31syn region htmlString contained start=+"+ end=+"+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc
32syn region htmlString contained start=+'+ end=+'+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc
33syn match htmlValue contained "=[\t ]*[^'" \t>][^ \t>]*"hs=s+1 contains=javaScriptExpression,@htmlPreproc
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +000034syn region htmlEndTag start=+</+ end=+>+ contains=htmlTagN,htmlTagError
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +020035syn region htmlTag start=+<[^/]+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster
Bram Moolenaar071d4272004-06-13 20:20:40 +000036syn match htmlTagN contained +<\s*[-a-zA-Z0-9]\++hs=s+1 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster
37syn match htmlTagN contained +</\s*[-a-zA-Z0-9]\++hs=s+2 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster
38syn match htmlTagError contained "[^>]<"ms=s+1
39
40
41" tag names
42syn keyword htmlTagName contained address applet area a base basefont
43syn keyword htmlTagName contained big blockquote br caption center
44syn keyword htmlTagName contained cite code dd dfn dir div dl dt font
45syn keyword htmlTagName contained form hr html img
46syn keyword htmlTagName contained input isindex kbd li link map menu
47syn keyword htmlTagName contained meta ol option param pre p samp span
48syn keyword htmlTagName contained select small strike sub sup
49syn keyword htmlTagName contained table td textarea th tr tt ul var xmp
50syn match htmlTagName contained "\<\(b\|i\|u\|h[1-6]\|em\|strong\|head\|body\|title\)\>"
51
52" new html 4.0 tags
53syn keyword htmlTagName contained abbr acronym bdo button col label
54syn keyword htmlTagName contained colgroup del fieldset iframe ins legend
55syn keyword htmlTagName contained object optgroup q s tbody tfoot thead
56
Bram Moolenaarbc2eada2017-01-02 21:27:47 +010057" new html 5 tags
58syn keyword htmlTagName contained article aside audio bdi canvas datalist
59syn keyword htmlTagName contained details embed figcaption figure
60syn keyword htmlTagName contained footer header hgroup main mark
61syn keyword htmlTagName contained menuitem meter nav output picture
62syn keyword htmlTagName contained progress rb rp rt rtc ruby section
63syn keyword htmlTagName contained slot source template time track video wbr
64
Bram Moolenaar071d4272004-06-13 20:20:40 +000065" legal arg names
66syn keyword htmlArg contained action
67syn keyword htmlArg contained align alink alt archive background bgcolor
68syn keyword htmlArg contained border bordercolor cellpadding
69syn keyword htmlArg contained cellspacing checked class clear code codebase color
70syn keyword htmlArg contained cols colspan content coords enctype face
71syn keyword htmlArg contained gutter height hspace id
72syn keyword htmlArg contained link lowsrc marginheight
73syn keyword htmlArg contained marginwidth maxlength method name prompt
74syn keyword htmlArg contained rel rev rows rowspan scrolling selected shape
75syn keyword htmlArg contained size src start target text type url
76syn keyword htmlArg contained usemap ismap valign value vlink vspace width wrap
77syn match htmlArg contained "\<\(http-equiv\|href\|title\)="me=e-1
78
79" Netscape extensions
80syn keyword htmlTagName contained frame noframes frameset nobr blink
81syn keyword htmlTagName contained layer ilayer nolayer spacer
82syn keyword htmlArg contained frameborder noresize pagex pagey above below
83syn keyword htmlArg contained left top visibility clip id noshade
84syn match htmlArg contained "\<z-index\>"
85
86" Microsoft extensions
87syn keyword htmlTagName contained marquee
88
89" html 4.0 arg names
90syn match htmlArg contained "\<\(accept-charset\|label\)\>"
91syn keyword htmlArg contained abbr accept accesskey axis char charoff charset
92syn keyword htmlArg contained cite classid codetype compact data datetime
93syn keyword htmlArg contained declare defer dir disabled for frame
94syn keyword htmlArg contained headers hreflang lang language longdesc
95syn keyword htmlArg contained multiple nohref nowrap object profile readonly
96syn keyword htmlArg contained rules scheme scope span standby style
97syn keyword htmlArg contained summary tabindex valuetype version
98
Bram Moolenaar68563932017-01-10 13:31:15 +010099" html 5 arg names
100syn keyword htmlArg contained contenteditable contextmenu draggable dropzone
101syn keyword htmlArg contained hidden spellcheck title translate
102
Bram Moolenaar071d4272004-06-13 20:20:40 +0000103" special characters
104syn match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,8};"
105
106" Comments (the real ones or the old netscape ones)
107if exists("html_wrong_comments")
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200108 syn region htmlComment start=+<!--+ end=+--\s*>+ contains=@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000109else
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200110 syn region htmlComment start=+<!+ end=+>+ contains=htmlCommentPart,htmlCommentError,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000111 syn match htmlCommentError contained "[^><!]"
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200112 syn region htmlCommentPart contained start=+--+ end=+--\s*+ contains=@htmlPreProc,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000113endif
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000114syn region htmlComment start=+<!DOCTYPE+ keepend end=+>+
Bram Moolenaar071d4272004-06-13 20:20:40 +0000115
116" server-parsed commands
117syn region htmlPreProc start=+<!--#+ end=+-->+ contains=htmlPreStmt,htmlPreError,htmlPreAttr
118syn match htmlPreStmt contained "<!--#\(config\|echo\|exec\|fsize\|flastmod\|include\|printenv\|set\|if\|elif\|else\|endif\|geoguide\)\>"
119syn match htmlPreError contained "<!--#\S*"ms=s+4
120syn match htmlPreAttr contained "\w\+=[^"]\S\+" contains=htmlPreProcAttrError,htmlPreProcAttrName
121syn region htmlPreAttr contained start=+\w\+="+ skip=+\\\\\|\\"+ end=+"+ contains=htmlPreProcAttrName keepend
122syn match htmlPreProcAttrError contained "\w\+="he=e-1
123syn match htmlPreProcAttrName contained "\(expr\|errmsg\|sizefmt\|timefmt\|var\|cgi\|cmd\|file\|virtual\|value\)="he=e-1
124
125if !exists("html_no_rendering")
126 " rendering
Bram Moolenaarce0842a2005-07-18 21:58:11 +0000127 syn cluster htmlTop contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,javaScript,@htmlPreproc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000128
129 syn region htmlBold start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
130 syn region htmlBold start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
131 syn region htmlBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic
132 syn region htmlBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlBoldItalicUnderline
133 syn region htmlBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlBoldItalicUnderline
134 syn region htmlBoldUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop
135 syn region htmlBoldUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop
136 syn region htmlBoldItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic
137
138 syn region htmlUnderline start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlUnderlineBold,htmlUnderlineItalic
139 syn region htmlUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlUnderlineBoldItalic
140 syn region htmlUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlUnderlineBoldItalic
141 syn region htmlUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlUnderlineItalicBold
142 syn region htmlUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlUnderlineItalicBold
143 syn region htmlUnderlineItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
144 syn region htmlUnderlineItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
145 syn region htmlUnderlineBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop
146 syn region htmlUnderlineBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop
147
148 syn region htmlItalic start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlItalicBold,htmlItalicUnderline
149 syn region htmlItalic start="<em\>" end="</em>"me=e-5 contains=@htmlTop
150 syn region htmlItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlItalicBoldUnderline
151 syn region htmlItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlItalicBoldUnderline
152 syn region htmlItalicBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop
153 syn region htmlItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlItalicUnderlineBold
154 syn region htmlItalicUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
155 syn region htmlItalicUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
156
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200157 syn match htmlLeadingSpace "^\s\+" contained
158 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 +0000159 syn region htmlH1 start="<h1\>" end="</h1>"me=e-5 contains=@htmlTop
160 syn region htmlH2 start="<h2\>" end="</h2>"me=e-5 contains=@htmlTop
161 syn region htmlH3 start="<h3\>" end="</h3>"me=e-5 contains=@htmlTop
162 syn region htmlH4 start="<h4\>" end="</h4>"me=e-5 contains=@htmlTop
163 syn region htmlH5 start="<h5\>" end="</h5>"me=e-5 contains=@htmlTop
164 syn region htmlH6 start="<h6\>" end="</h6>"me=e-5 contains=@htmlTop
165 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 +0000166 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 +0000167endif
168
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000169syn keyword htmlTagName contained noscript
Bram Moolenaar071d4272004-06-13 20:20:40 +0000170syn keyword htmlSpecialTagName contained script style
171if main_syntax != 'java' || exists("java_javascript")
172 " JAVA SCRIPT
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000173 syn include @htmlJavaScript syntax/javascript.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000174 unlet b:current_syntax
Bram Moolenaar8feef4f2015-01-07 16:57:10 +0100175 syn region javaScript start=+<script\_[^>]*>+ keepend end=+</script\_[^>]*>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200176 syn region htmlScriptTag contained start=+<script+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200177 hi def link htmlScriptTag htmlTag
Bram Moolenaar071d4272004-06-13 20:20:40 +0000178
179 " html events (i.e. arguments that include javascript commands)
180 if exists("html_extended_events")
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000181 syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*'+ end=+'+ contains=htmlEventSQ
182 syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*"+ end=+"+ contains=htmlEventDQ
Bram Moolenaar071d4272004-06-13 20:20:40 +0000183 else
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000184 syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*'+ end=+'+ keepend contains=htmlEventSQ
185 syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*"+ end=+"+ keepend contains=htmlEventDQ
Bram Moolenaar071d4272004-06-13 20:20:40 +0000186 endif
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000187 syn region htmlEventSQ contained start=+'+ms=s+1 end=+'+me=s-1 contains=@htmlJavaScript
188 syn region htmlEventDQ contained start=+"+ms=s+1 end=+"+me=s-1 contains=@htmlJavaScript
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200189 hi def link htmlEventSQ htmlEvent
190 hi def link htmlEventDQ htmlEvent
Bram Moolenaar071d4272004-06-13 20:20:40 +0000191
192 " a javascript expression is used as an arg value
193 syn region javaScriptExpression contained start=+&{+ keepend end=+};+ contains=@htmlJavaScript,@htmlPreproc
194endif
195
196if main_syntax != 'java' || exists("java_vb")
197 " VB SCRIPT
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000198 syn include @htmlVbScript syntax/vb.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000199 unlet b:current_syntax
Bram Moolenaar8feef4f2015-01-07 16:57:10 +0100200 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 +0000201endif
202
203syn cluster htmlJavaScript add=@htmlPreproc
204
205if main_syntax != 'java' || exists("java_css")
206 " embedded style sheets
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000207 syn keyword htmlArg contained media
208 syn include @htmlCss syntax/css.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000209 unlet b:current_syntax
210 syn region cssStyle start=+<style+ keepend end=+</style>+ contains=@htmlCss,htmlTag,htmlEndTag,htmlCssStyleComment,@htmlPreproc
211 syn match htmlCssStyleComment contained "\(<!--\|-->\)"
212 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 +0200213 hi def link htmlStyleArg htmlString
Bram Moolenaar071d4272004-06-13 20:20:40 +0000214endif
215
216if main_syntax == "html"
217 " synchronizing (does not always work if a comment includes legal
218 " html tags, but doing it right would mean to always start
219 " at the first line, which is too slow)
220 syn sync match htmlHighlight groupthere NONE "<[/a-zA-Z]"
221 syn sync match htmlHighlight groupthere javaScript "<script"
222 syn sync match htmlHighlightSkip "^.*['\"].*$"
223 syn sync minlines=10
224endif
225
226" The default highlighting.
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200227hi def link htmlTag Function
228hi def link htmlEndTag Identifier
229hi def link htmlArg Type
230hi def link htmlTagName htmlStatement
231hi def link htmlSpecialTagName Exception
232hi def link htmlValue String
233hi def link htmlSpecialChar Special
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200234
235if !exists("html_no_rendering")
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200236 hi def link htmlH1 Title
237 hi def link htmlH2 htmlH1
238 hi def link htmlH3 htmlH2
239 hi def link htmlH4 htmlH3
240 hi def link htmlH5 htmlH4
241 hi def link htmlH6 htmlH5
242 hi def link htmlHead PreProc
243 hi def link htmlTitle Title
244 hi def link htmlBoldItalicUnderline htmlBoldUnderlineItalic
245 hi def link htmlUnderlineBold htmlBoldUnderline
246 hi def link htmlUnderlineItalicBold htmlBoldUnderlineItalic
247 hi def link htmlUnderlineBoldItalic htmlBoldUnderlineItalic
248 hi def link htmlItalicUnderline htmlUnderlineItalic
249 hi def link htmlItalicBold htmlBoldItalic
250 hi def link htmlItalicBoldUnderline htmlBoldUnderlineItalic
251 hi def link htmlItalicUnderlineBold htmlBoldUnderlineItalic
252 hi def link htmlLink Underlined
253 hi def link htmlLeadingSpace None
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200254 if !exists("html_my_rendering")
255 hi def htmlBold term=bold cterm=bold gui=bold
256 hi def htmlBoldUnderline term=bold,underline cterm=bold,underline gui=bold,underline
257 hi def htmlBoldItalic term=bold,italic cterm=bold,italic gui=bold,italic
258 hi def htmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline
259 hi def htmlUnderline term=underline cterm=underline gui=underline
260 hi def htmlUnderlineItalic term=italic,underline cterm=italic,underline gui=italic,underline
261 hi def htmlItalic term=italic cterm=italic gui=italic
Bram Moolenaar071d4272004-06-13 20:20:40 +0000262 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000263endif
264
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200265hi def link htmlPreStmt PreProc
266hi def link htmlPreError Error
267hi def link htmlPreProc PreProc
268hi def link htmlPreAttr String
269hi def link htmlPreProcAttrName PreProc
270hi def link htmlPreProcAttrError Error
271hi def link htmlSpecial Special
272hi def link htmlSpecialChar Special
273hi def link htmlString String
274hi def link htmlStatement Statement
275hi def link htmlComment Comment
276hi def link htmlCommentPart Comment
277hi def link htmlValue String
278hi def link htmlCommentError htmlError
279hi def link htmlTagError htmlError
280hi def link htmlEvent javaScript
281hi def link htmlError Error
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200282
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200283hi def link javaScript Special
284hi def link javaScriptExpression javaScript
285hi def link htmlCssStyleComment Comment
286hi def link htmlCssDefinition Special
Bram Moolenaar071d4272004-06-13 20:20:40 +0000287
288let b:current_syntax = "html"
289
290if main_syntax == 'html'
291 unlet main_syntax
292endif
293
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200294let &cpo = s:cpo_save
295unlet s:cpo_save
Bram Moolenaar071d4272004-06-13 20:20:40 +0000296" vim: ts=8