xref: /vim-8.2.3635/runtime/syntax/html.vim (revision bb76f24a)
1" Vim syntax file
2" Language:	HTML
3" Maintainer:	Claudio Fleiner <[email protected]>
4" URL:		http://www.fleiner.com/vim/syntax/html.vim
5" Last Change:	2015 Jan 07
6"		included patch from David Felix
7
8" Please check :help html.vim for some comments and a description of the options
9
10" quit when a syntax file was already loaded
11if !exists("main_syntax")
12  if exists("b:current_syntax")
13    finish
14  endif
15  let main_syntax = 'html'
16endif
17
18let s:cpo_save = &cpo
19set cpo&vim
20
21syntax spell toplevel
22
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
33syn region  htmlEndTag             start=+</+      end=+>+ contains=htmlTagN,htmlTagError
34syn region  htmlTag                start=+<[^/]+   end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster
35syn 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")
95  syn region htmlComment                start=+<!--+    end=+--\s*>+ contains=@Spell
96else
97  syn region htmlComment                start=+<!+      end=+>+   contains=htmlCommentPart,htmlCommentError,@Spell
98  syn match  htmlCommentError contained "[^><!]"
99  syn region htmlCommentPart  contained start=+--+      end=+--\s*+  contains=@htmlPreProc,@Spell
100endif
101syn region htmlComment                  start=+<!DOCTYPE+ keepend end=+>+
102
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
114  syn cluster htmlTop contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,javaScript,@htmlPreproc
115
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
144  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
146  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
153  syn region htmlTitle start="<title\>" end="</title>"me=e-8 contains=htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc
154endif
155
156syn keyword htmlTagName         contained noscript
157syn keyword htmlSpecialTagName  contained script style
158if main_syntax != 'java' || exists("java_javascript")
159  " JAVA SCRIPT
160  syn include @htmlJavaScript syntax/javascript.vim
161  unlet b:current_syntax
162  syn region  javaScript start=+<script\_[^>]*>+ keepend end=+</script\_[^>]*>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
163  syn region  htmlScriptTag     contained start=+<script+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent
164  hi def link htmlScriptTag htmlTag
165
166  " html events (i.e. arguments that include javascript commands)
167  if exists("html_extended_events")
168    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
170  else
171    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
173  endif
174  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
176  hi def link htmlEventSQ htmlEvent
177  hi def link htmlEventDQ htmlEvent
178
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
185  syn include @htmlVbScript syntax/vb.vim
186  unlet b:current_syntax
187  syn region  javaScript start=+<script \_[^>]*language *=\_[^>]*vbscript\_[^>]*>+ keepend end=+</script\_[^>]*>+me=s-1 contains=@htmlVbScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
188endif
189
190syn cluster htmlJavaScript      add=@htmlPreproc
191
192if main_syntax != 'java' || exists("java_css")
193  " embedded style sheets
194  syn keyword htmlArg           contained media
195  syn include @htmlCss syntax/css.vim
196  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
200  hi def link htmlStyleArg htmlString
201endif
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.
214hi 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
221
222if !exists("html_no_rendering")
223  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
241  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
249  endif
250endif
251
252hi 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
269
270hi def link javaScript             Special
271hi def link javaScriptExpression   javaScript
272hi def link htmlCssStyleComment    Comment
273hi def link htmlCssDefinition      Special
274
275let b:current_syntax = "html"
276
277if main_syntax == 'html'
278  unlet main_syntax
279endif
280
281let &cpo = s:cpo_save
282unlet s:cpo_save
283" vim: ts=8
284