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