xref: /vim-8.2.3635/runtime/syntax/html.vim (revision 80fc0434)
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 20
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
30if main_syntax == "html"
31  syn spell toplevel
32endif
33
34" mark illegal characters
35syn match htmlError "[<>&]"
36
37
38" tags
39syn region  htmlString   contained start=+"+ end=+"+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc
40syn region  htmlString   contained start=+'+ end=+'+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc
41syn match   htmlValue    contained "=[\t ]*[^'" \t>][^ \t>]*"hs=s+1   contains=javaScriptExpression,@htmlPreproc
42syn region  htmlEndTag		   start=+</+	   end=+>+ contains=htmlTagN,htmlTagError
43syn region  htmlTag		   start=+<[^/]+   end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster
44syn match   htmlTagN     contained +<\s*[-a-zA-Z0-9]\++hs=s+1 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster
45syn match   htmlTagN     contained +</\s*[-a-zA-Z0-9]\++hs=s+2 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster
46syn match   htmlTagError contained "[^>]<"ms=s+1
47
48
49" tag names
50syn keyword htmlTagName contained address applet area a base basefont
51syn keyword htmlTagName contained big blockquote br caption center
52syn keyword htmlTagName contained cite code dd dfn dir div dl dt font
53syn keyword htmlTagName contained form hr html img
54syn keyword htmlTagName contained input isindex kbd li link map menu
55syn keyword htmlTagName contained meta ol option param pre p samp span
56syn keyword htmlTagName contained select small strike sub sup
57syn keyword htmlTagName contained table td textarea th tr tt ul var xmp
58syn match htmlTagName contained "\<\(b\|i\|u\|h[1-6]\|em\|strong\|head\|body\|title\)\>"
59
60" new html 4.0 tags
61syn keyword htmlTagName contained abbr acronym bdo button col label
62syn keyword htmlTagName contained colgroup del fieldset iframe ins legend
63syn keyword htmlTagName contained object optgroup q s tbody tfoot thead
64
65" 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
99" special characters
100syn match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,8};"
101
102" Comments (the real ones or the old netscape ones)
103if exists("html_wrong_comments")
104  syn region htmlComment		start=+<!--+	end=+--\s*>+
105else
106  syn region htmlComment		start=+<!+	end=+>+   contains=htmlCommentPart,htmlCommentError
107  syn match  htmlCommentError contained "[^><!]"
108  syn region htmlCommentPart  contained start=+--+      end=+--\s*+  contains=@htmlPreProc
109endif
110syn region htmlComment			start=+<!DOCTYPE+ keepend end=+>+
111
112" server-parsed commands
113syn region htmlPreProc start=+<!--#+ end=+-->+ contains=htmlPreStmt,htmlPreError,htmlPreAttr
114syn match htmlPreStmt contained "<!--#\(config\|echo\|exec\|fsize\|flastmod\|include\|printenv\|set\|if\|elif\|else\|endif\|geoguide\)\>"
115syn match htmlPreError contained "<!--#\S*"ms=s+4
116syn match htmlPreAttr contained "\w\+=[^"]\S\+" contains=htmlPreProcAttrError,htmlPreProcAttrName
117syn region htmlPreAttr contained start=+\w\+="+ skip=+\\\\\|\\"+ end=+"+ contains=htmlPreProcAttrName keepend
118syn match htmlPreProcAttrError contained "\w\+="he=e-1
119syn match htmlPreProcAttrName contained "\(expr\|errmsg\|sizefmt\|timefmt\|var\|cgi\|cmd\|file\|virtual\|value\)="he=e-1
120
121if !exists("html_no_rendering")
122  " rendering
123  syn cluster htmlTop contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,javaScript,@htmlPreproc
124
125  syn region htmlBold start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
126  syn region htmlBold start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
127  syn region htmlBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic
128  syn region htmlBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlBoldItalicUnderline
129  syn region htmlBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlBoldItalicUnderline
130  syn region htmlBoldUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop
131  syn region htmlBoldUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop
132  syn region htmlBoldItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic
133
134  syn region htmlUnderline start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlUnderlineBold,htmlUnderlineItalic
135  syn region htmlUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlUnderlineBoldItalic
136  syn region htmlUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlUnderlineBoldItalic
137  syn region htmlUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlUnderlineItalicBold
138  syn region htmlUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlUnderlineItalicBold
139  syn region htmlUnderlineItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
140  syn region htmlUnderlineItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
141  syn region htmlUnderlineBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop
142  syn region htmlUnderlineBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop
143
144  syn region htmlItalic start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlItalicBold,htmlItalicUnderline
145  syn region htmlItalic start="<em\>" end="</em>"me=e-5 contains=@htmlTop
146  syn region htmlItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlItalicBoldUnderline
147  syn region htmlItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlItalicBoldUnderline
148  syn region htmlItalicBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop
149  syn region htmlItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlItalicUnderlineBold
150  syn region htmlItalicUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
151  syn region htmlItalicUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
152
153  syn region htmlLink start="<a\>\_[^>]*\<href\>" end="</a>"me=e-4 contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc
154  syn region htmlH1 start="<h1\>" end="</h1>"me=e-5 contains=@htmlTop
155  syn region htmlH2 start="<h2\>" end="</h2>"me=e-5 contains=@htmlTop
156  syn region htmlH3 start="<h3\>" end="</h3>"me=e-5 contains=@htmlTop
157  syn region htmlH4 start="<h4\>" end="</h4>"me=e-5 contains=@htmlTop
158  syn region htmlH5 start="<h5\>" end="</h5>"me=e-5 contains=@htmlTop
159  syn region htmlH6 start="<h6\>" end="</h6>"me=e-5 contains=@htmlTop
160  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
161  syn region htmlTitle start="<title\>" end="</title>"me=e-8 contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc
162endif
163
164syn keyword htmlTagName		contained noscript
165syn keyword htmlSpecialTagName  contained script style
166if main_syntax != 'java' || exists("java_javascript")
167  " JAVA SCRIPT
168  syn include @htmlJavaScript <sfile>:p:h/javascript.vim
169  unlet b:current_syntax
170  syn region  javaScript start=+<script[^>]*>+ keepend end=+</script>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
171  syn region  htmlScriptTag     contained start=+<script+ end=+>+       contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent
172  HtmlHiLink htmlScriptTag htmlTag
173
174  " html events (i.e. arguments that include javascript commands)
175  if exists("html_extended_events")
176    syn region htmlEvent	contained start=+\<on\a\+\s*=[\t ]*'+ end=+'+ contains=htmlEventSQ
177    syn region htmlEvent	contained start=+\<on\a\+\s*=[\t ]*"+ end=+"+ contains=htmlEventDQ
178  else
179    syn region htmlEvent	contained start=+\<on\a\+\s*=[\t ]*'+ end=+'+ keepend contains=htmlEventSQ
180    syn region htmlEvent	contained start=+\<on\a\+\s*=[\t ]*"+ end=+"+ keepend contains=htmlEventDQ
181  endif
182  syn region htmlEventSQ	contained start=+'+ms=s+1 end=+'+me=s-1 contains=@htmlJavaScript
183  syn region htmlEventDQ	contained start=+"+ms=s+1 end=+"+me=s-1 contains=@htmlJavaScript
184  HtmlHiLink htmlEventSQ htmlEvent
185  HtmlHiLink htmlEventDQ htmlEvent
186
187  " a javascript expression is used as an arg value
188  syn region  javaScriptExpression contained start=+&{+ keepend end=+};+ contains=@htmlJavaScript,@htmlPreproc
189endif
190
191if main_syntax != 'java' || exists("java_vb")
192  " VB SCRIPT
193  syn include @htmlVbScript <sfile>:p:h/vb.vim
194  unlet b:current_syntax
195  syn region  javaScript start=+<script [^>]*language *=[^>]*vbscript[^>]*>+ keepend end=+</script>+me=s-1 contains=@htmlVbScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
196endif
197
198syn cluster htmlJavaScript      add=@htmlPreproc
199
200if main_syntax != 'java' || exists("java_css")
201  " embedded style sheets
202  syn keyword htmlArg		contained media
203  syn include @htmlCss <sfile>:p:h/css.vim
204  unlet b:current_syntax
205  syn region cssStyle start=+<style+ keepend end=+</style>+ contains=@htmlCss,htmlTag,htmlEndTag,htmlCssStyleComment,@htmlPreproc
206  syn match htmlCssStyleComment contained "\(<!--\|-->\)"
207  syn region htmlCssDefinition matchgroup=htmlArg start='style="' keepend matchgroup=htmlString end='"' contains=css.*Attr,css.*Prop,cssComment,cssLength,cssColor,cssURL,cssImportant,cssError,cssString,@htmlPreproc
208  HtmlHiLink htmlStyleArg htmlString
209endif
210
211if main_syntax == "html"
212  " synchronizing (does not always work if a comment includes legal
213  " html tags, but doing it right would mean to always start
214  " at the first line, which is too slow)
215  syn sync match htmlHighlight groupthere NONE "<[/a-zA-Z]"
216  syn sync match htmlHighlight groupthere javaScript "<script"
217  syn sync match htmlHighlightSkip "^.*['\"].*$"
218  syn sync minlines=10
219endif
220
221" The default highlighting.
222if version >= 508 || !exists("did_html_syn_inits")
223  if version < 508
224    let did_html_syn_inits = 1
225  endif
226  HtmlHiLink htmlTag			Function
227  HtmlHiLink htmlEndTag			Identifier
228  HtmlHiLink htmlArg			Type
229  HtmlHiLink htmlTagName		htmlStatement
230  HtmlHiLink htmlSpecialTagName		Exception
231  HtmlHiLink htmlValue			String
232  HtmlHiLink htmlSpecialChar		Special
233
234  if !exists("html_no_rendering")
235    HtmlHiLink htmlH1			   Title
236    HtmlHiLink htmlH2			   htmlH1
237    HtmlHiLink htmlH3			   htmlH2
238    HtmlHiLink htmlH4			   htmlH3
239    HtmlHiLink htmlH5			   htmlH4
240    HtmlHiLink htmlH6			   htmlH5
241    HtmlHiLink htmlHead			   PreProc
242    HtmlHiLink htmlTitle		   Title
243    HtmlHiLink htmlBoldItalicUnderline	   htmlBoldUnderlineItalic
244    HtmlHiLink htmlUnderlineBold	   htmlBoldUnderline
245    HtmlHiLink htmlUnderlineItalicBold	   htmlBoldUnderlineItalic
246    HtmlHiLink htmlUnderlineBoldItalic	   htmlBoldUnderlineItalic
247    HtmlHiLink htmlItalicUnderline	   htmlUnderlineItalic
248    HtmlHiLink htmlItalicBold		   htmlBoldItalic
249    HtmlHiLink htmlItalicBoldUnderline	   htmlBoldUnderlineItalic
250    HtmlHiLink htmlItalicUnderlineBold	   htmlBoldUnderlineItalic
251    HtmlHiLink htmlLink			   Underlined
252    if !exists("html_my_rendering")
253      hi def htmlBold		     term=bold cterm=bold gui=bold
254      hi def htmlBoldUnderline	     term=bold,underline cterm=bold,underline gui=bold,underline
255      hi def htmlBoldItalic	     term=bold,italic cterm=bold,italic gui=bold,italic
256      hi def htmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline
257      hi def htmlUnderline	     term=underline cterm=underline gui=underline
258      hi def htmlUnderlineItalic     term=italic,underline cterm=italic,underline gui=italic,underline
259      hi def htmlItalic		     term=italic cterm=italic gui=italic
260    endif
261  endif
262
263  HtmlHiLink htmlPreStmt	    PreProc
264  HtmlHiLink htmlPreError	    Error
265  HtmlHiLink htmlPreProc	    PreProc
266  HtmlHiLink htmlPreAttr	    String
267  HtmlHiLink htmlPreProcAttrName    PreProc
268  HtmlHiLink htmlPreProcAttrError   Error
269  HtmlHiLink htmlSpecial	    Special
270  HtmlHiLink htmlSpecialChar	    Special
271  HtmlHiLink htmlString		    String
272  HtmlHiLink htmlStatement	    Statement
273  HtmlHiLink htmlComment	    Comment
274  HtmlHiLink htmlCommentPart	    Comment
275  HtmlHiLink htmlValue		    String
276  HtmlHiLink htmlCommentError	    htmlError
277  HtmlHiLink htmlTagError	    htmlError
278  HtmlHiLink htmlEvent		    javaScript
279  HtmlHiLink htmlError		    Error
280
281  HtmlHiLink javaScript		    Special
282  HtmlHiLink javaScriptExpression   javaScript
283  HtmlHiLink htmlCssStyleComment    Comment
284  HtmlHiLink htmlCssDefinition	    Special
285endif
286
287delcommand HtmlHiLink
288
289let b:current_syntax = "html"
290
291if main_syntax == 'html'
292  unlet main_syntax
293endif
294
295" vim: ts=8
296