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