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