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