blob: 49d3ab4adb1dc71fc4caad34d5342c30877d734b [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
Bram Moolenaar690afe12017-01-28 18:34:47 +01006" Last Change: 2017 Jan 21
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
Bram Moolenaar690afe12017-01-28 18:34:47 +010058syn keyword htmlTagName contained article aside audio bdi canvas data
59syn keyword htmlTagName contained datalist details embed figcaption figure
60syn keyword htmlTagName contained footer header hgroup keygen main mark
Bram Moolenaarbc2eada2017-01-02 21:27:47 +010061syn 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
Bram Moolenaar690afe12017-01-28 18:34:47 +0100100syn keyword htmlArg contained allowfullscreen async autocomplete autofocus
101syn keyword htmlArg contained autoplay challenge contenteditable contextmenu
102syn keyword htmlArg contained controls crossorigin default dirname download
103syn keyword htmlArg contained draggable dropzone form formaction formenctype
104syn keyword htmlArg contained formmethod formnovalidate formtarget hidden
105syn keyword htmlArg contained high icon inputmode keytype kind list loop low
106syn keyword htmlArg contained max min minlength muted nonce novalidate open
107syn keyword htmlArg contained optimum pattern placeholder poster preload
108syn keyword htmlArg contained radiogroup required reversed sandbox spellcheck
109syn keyword htmlArg contained sizes srcset srcdoc srclang step title translate
110syn keyword htmlArg contained typemustmatch
Bram Moolenaar68563932017-01-10 13:31:15 +0100111
Bram Moolenaar071d4272004-06-13 20:20:40 +0000112" special characters
113syn match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,8};"
114
115" Comments (the real ones or the old netscape ones)
116if exists("html_wrong_comments")
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200117 syn region htmlComment start=+<!--+ end=+--\s*>+ contains=@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000118else
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200119 syn region htmlComment start=+<!+ end=+>+ contains=htmlCommentPart,htmlCommentError,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000120 syn match htmlCommentError contained "[^><!]"
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200121 syn region htmlCommentPart contained start=+--+ end=+--\s*+ contains=@htmlPreProc,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000122endif
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000123syn region htmlComment start=+<!DOCTYPE+ keepend end=+>+
Bram Moolenaar071d4272004-06-13 20:20:40 +0000124
125" server-parsed commands
126syn region htmlPreProc start=+<!--#+ end=+-->+ contains=htmlPreStmt,htmlPreError,htmlPreAttr
127syn match htmlPreStmt contained "<!--#\(config\|echo\|exec\|fsize\|flastmod\|include\|printenv\|set\|if\|elif\|else\|endif\|geoguide\)\>"
128syn match htmlPreError contained "<!--#\S*"ms=s+4
129syn match htmlPreAttr contained "\w\+=[^"]\S\+" contains=htmlPreProcAttrError,htmlPreProcAttrName
130syn region htmlPreAttr contained start=+\w\+="+ skip=+\\\\\|\\"+ end=+"+ contains=htmlPreProcAttrName keepend
131syn match htmlPreProcAttrError contained "\w\+="he=e-1
132syn match htmlPreProcAttrName contained "\(expr\|errmsg\|sizefmt\|timefmt\|var\|cgi\|cmd\|file\|virtual\|value\)="he=e-1
133
134if !exists("html_no_rendering")
135 " rendering
Bram Moolenaarce0842a2005-07-18 21:58:11 +0000136 syn cluster htmlTop contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,javaScript,@htmlPreproc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000137
138 syn region htmlBold start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
139 syn region htmlBold start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
140 syn region htmlBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic
141 syn region htmlBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlBoldItalicUnderline
142 syn region htmlBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlBoldItalicUnderline
143 syn region htmlBoldUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop
144 syn region htmlBoldUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop
145 syn region htmlBoldItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic
146
147 syn region htmlUnderline start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlUnderlineBold,htmlUnderlineItalic
148 syn region htmlUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlUnderlineBoldItalic
149 syn region htmlUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlUnderlineBoldItalic
150 syn region htmlUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlUnderlineItalicBold
151 syn region htmlUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlUnderlineItalicBold
152 syn region htmlUnderlineItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
153 syn region htmlUnderlineItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
154 syn region htmlUnderlineBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop
155 syn region htmlUnderlineBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop
156
157 syn region htmlItalic start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlItalicBold,htmlItalicUnderline
158 syn region htmlItalic start="<em\>" end="</em>"me=e-5 contains=@htmlTop
159 syn region htmlItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlItalicBoldUnderline
160 syn region htmlItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlItalicBoldUnderline
161 syn region htmlItalicBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop
162 syn region htmlItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlItalicUnderlineBold
163 syn region htmlItalicUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
164 syn region htmlItalicUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
165
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200166 syn match htmlLeadingSpace "^\s\+" contained
167 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 +0000168 syn region htmlH1 start="<h1\>" end="</h1>"me=e-5 contains=@htmlTop
169 syn region htmlH2 start="<h2\>" end="</h2>"me=e-5 contains=@htmlTop
170 syn region htmlH3 start="<h3\>" end="</h3>"me=e-5 contains=@htmlTop
171 syn region htmlH4 start="<h4\>" end="</h4>"me=e-5 contains=@htmlTop
172 syn region htmlH5 start="<h5\>" end="</h5>"me=e-5 contains=@htmlTop
173 syn region htmlH6 start="<h6\>" end="</h6>"me=e-5 contains=@htmlTop
174 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 +0000175 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 +0000176endif
177
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000178syn keyword htmlTagName contained noscript
Bram Moolenaar071d4272004-06-13 20:20:40 +0000179syn keyword htmlSpecialTagName contained script style
180if main_syntax != 'java' || exists("java_javascript")
181 " JAVA SCRIPT
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000182 syn include @htmlJavaScript syntax/javascript.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000183 unlet b:current_syntax
Bram Moolenaar8feef4f2015-01-07 16:57:10 +0100184 syn region javaScript start=+<script\_[^>]*>+ keepend end=+</script\_[^>]*>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200185 syn region htmlScriptTag contained start=+<script+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200186 hi def link htmlScriptTag htmlTag
Bram Moolenaar071d4272004-06-13 20:20:40 +0000187
188 " html events (i.e. arguments that include javascript commands)
189 if exists("html_extended_events")
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000190 syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*'+ end=+'+ contains=htmlEventSQ
191 syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*"+ end=+"+ contains=htmlEventDQ
Bram Moolenaar071d4272004-06-13 20:20:40 +0000192 else
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000193 syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*'+ end=+'+ keepend contains=htmlEventSQ
194 syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*"+ end=+"+ keepend contains=htmlEventDQ
Bram Moolenaar071d4272004-06-13 20:20:40 +0000195 endif
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000196 syn region htmlEventSQ contained start=+'+ms=s+1 end=+'+me=s-1 contains=@htmlJavaScript
197 syn region htmlEventDQ contained start=+"+ms=s+1 end=+"+me=s-1 contains=@htmlJavaScript
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200198 hi def link htmlEventSQ htmlEvent
199 hi def link htmlEventDQ htmlEvent
Bram Moolenaar071d4272004-06-13 20:20:40 +0000200
201 " a javascript expression is used as an arg value
202 syn region javaScriptExpression contained start=+&{+ keepend end=+};+ contains=@htmlJavaScript,@htmlPreproc
203endif
204
205if main_syntax != 'java' || exists("java_vb")
206 " VB SCRIPT
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000207 syn include @htmlVbScript syntax/vb.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000208 unlet b:current_syntax
Bram Moolenaar8feef4f2015-01-07 16:57:10 +0100209 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 +0000210endif
211
212syn cluster htmlJavaScript add=@htmlPreproc
213
214if main_syntax != 'java' || exists("java_css")
215 " embedded style sheets
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000216 syn keyword htmlArg contained media
217 syn include @htmlCss syntax/css.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000218 unlet b:current_syntax
219 syn region cssStyle start=+<style+ keepend end=+</style>+ contains=@htmlCss,htmlTag,htmlEndTag,htmlCssStyleComment,@htmlPreproc
220 syn match htmlCssStyleComment contained "\(<!--\|-->\)"
221 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 +0200222 hi def link htmlStyleArg htmlString
Bram Moolenaar071d4272004-06-13 20:20:40 +0000223endif
224
225if main_syntax == "html"
226 " synchronizing (does not always work if a comment includes legal
227 " html tags, but doing it right would mean to always start
228 " at the first line, which is too slow)
229 syn sync match htmlHighlight groupthere NONE "<[/a-zA-Z]"
230 syn sync match htmlHighlight groupthere javaScript "<script"
231 syn sync match htmlHighlightSkip "^.*['\"].*$"
232 syn sync minlines=10
233endif
234
235" The default highlighting.
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200236hi def link htmlTag Function
237hi def link htmlEndTag Identifier
238hi def link htmlArg Type
239hi def link htmlTagName htmlStatement
240hi def link htmlSpecialTagName Exception
241hi def link htmlValue String
242hi def link htmlSpecialChar Special
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200243
244if !exists("html_no_rendering")
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200245 hi def link htmlH1 Title
246 hi def link htmlH2 htmlH1
247 hi def link htmlH3 htmlH2
248 hi def link htmlH4 htmlH3
249 hi def link htmlH5 htmlH4
250 hi def link htmlH6 htmlH5
251 hi def link htmlHead PreProc
252 hi def link htmlTitle Title
253 hi def link htmlBoldItalicUnderline htmlBoldUnderlineItalic
254 hi def link htmlUnderlineBold htmlBoldUnderline
255 hi def link htmlUnderlineItalicBold htmlBoldUnderlineItalic
256 hi def link htmlUnderlineBoldItalic htmlBoldUnderlineItalic
257 hi def link htmlItalicUnderline htmlUnderlineItalic
258 hi def link htmlItalicBold htmlBoldItalic
259 hi def link htmlItalicBoldUnderline htmlBoldUnderlineItalic
260 hi def link htmlItalicUnderlineBold htmlBoldUnderlineItalic
261 hi def link htmlLink Underlined
262 hi def link htmlLeadingSpace None
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200263 if !exists("html_my_rendering")
264 hi def htmlBold term=bold cterm=bold gui=bold
265 hi def htmlBoldUnderline term=bold,underline cterm=bold,underline gui=bold,underline
266 hi def htmlBoldItalic term=bold,italic cterm=bold,italic gui=bold,italic
267 hi def htmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline
268 hi def htmlUnderline term=underline cterm=underline gui=underline
269 hi def htmlUnderlineItalic term=italic,underline cterm=italic,underline gui=italic,underline
270 hi def htmlItalic term=italic cterm=italic gui=italic
Bram Moolenaar071d4272004-06-13 20:20:40 +0000271 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000272endif
273
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200274hi def link htmlPreStmt PreProc
275hi def link htmlPreError Error
276hi def link htmlPreProc PreProc
277hi def link htmlPreAttr String
278hi def link htmlPreProcAttrName PreProc
279hi def link htmlPreProcAttrError Error
280hi def link htmlSpecial Special
281hi def link htmlSpecialChar Special
282hi def link htmlString String
283hi def link htmlStatement Statement
284hi def link htmlComment Comment
285hi def link htmlCommentPart Comment
286hi def link htmlValue String
287hi def link htmlCommentError htmlError
288hi def link htmlTagError htmlError
289hi def link htmlEvent javaScript
290hi def link htmlError Error
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200291
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200292hi def link javaScript Special
293hi def link javaScriptExpression javaScript
294hi def link htmlCssStyleComment Comment
295hi def link htmlCssDefinition Special
Bram Moolenaar071d4272004-06-13 20:20:40 +0000296
297let b:current_syntax = "html"
298
299if main_syntax == 'html'
300 unlet main_syntax
301endif
302
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200303let &cpo = s:cpo_save
304unlet s:cpo_save
Bram Moolenaar071d4272004-06-13 20:20:40 +0000305" vim: ts=8