xref: /vim-8.2.3635/runtime/syntax/html.vim (revision 214641f7)
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 21
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 data
59syn keyword htmlTagName contained datalist details embed figcaption figure
60syn keyword htmlTagName contained footer header hgroup keygen 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 allowfullscreen async autocomplete autofocus
101syn keyword htmlArg contained autoplay challenge contenteditable contextmenu
102syn keyword htmlArg contained controls crossorigin default dirname download
103syn keyword htmlArg contained draggable dropzone form formaction formenctype
104syn keyword htmlArg contained formmethod formnovalidate formtarget hidden
105syn keyword htmlArg contained high icon inputmode keytype kind list loop low
106syn keyword htmlArg contained max min minlength muted nonce novalidate open
107syn keyword htmlArg contained optimum pattern placeholder poster preload
108syn keyword htmlArg contained radiogroup required reversed sandbox spellcheck
109syn keyword htmlArg contained sizes srcset srcdoc srclang step title translate
110syn keyword htmlArg contained typemustmatch
111
112" special characters
113syn match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,8};"
114
115" Comments (the real ones or the old netscape ones)
116if exists("html_wrong_comments")
117  syn region htmlComment                start=+<!--+    end=+--\s*>+ contains=@Spell
118else
119  syn region htmlComment                start=+<!+      end=+>+   contains=htmlCommentPart,htmlCommentError,@Spell
120  syn match  htmlCommentError contained "[^><!]"
121  syn region htmlCommentPart  contained start=+--+      end=+--\s*+  contains=@htmlPreProc,@Spell
122endif
123syn region htmlComment                  start=+<!DOCTYPE+ keepend end=+>+
124
125" server-parsed commands
126syn region htmlPreProc start=+<!--#+ end=+-->+ contains=htmlPreStmt,htmlPreError,htmlPreAttr
127syn match htmlPreStmt contained "<!--#\(config\|echo\|exec\|fsize\|flastmod\|include\|printenv\|set\|if\|elif\|else\|endif\|geoguide\)\>"
128syn match htmlPreError contained "<!--#\S*"ms=s+4
129syn match htmlPreAttr contained "\w\+=[^"]\S\+" contains=htmlPreProcAttrError,htmlPreProcAttrName
130syn region htmlPreAttr contained start=+\w\+="+ skip=+\\\\\|\\"+ end=+"+ contains=htmlPreProcAttrName keepend
131syn match htmlPreProcAttrError contained "\w\+="he=e-1
132syn match htmlPreProcAttrName contained "\(expr\|errmsg\|sizefmt\|timefmt\|var\|cgi\|cmd\|file\|virtual\|value\)="he=e-1
133
134if !exists("html_no_rendering")
135  " rendering
136  syn cluster htmlTop contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,javaScript,@htmlPreproc
137
138  syn region htmlBold start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
139  syn region htmlBold start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
140  syn region htmlBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic
141  syn region htmlBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlBoldItalicUnderline
142  syn region htmlBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlBoldItalicUnderline
143  syn region htmlBoldUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop
144  syn region htmlBoldUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop
145  syn region htmlBoldItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic
146
147  syn region htmlUnderline start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlUnderlineBold,htmlUnderlineItalic
148  syn region htmlUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlUnderlineBoldItalic
149  syn region htmlUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlUnderlineBoldItalic
150  syn region htmlUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlUnderlineItalicBold
151  syn region htmlUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlUnderlineItalicBold
152  syn region htmlUnderlineItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
153  syn region htmlUnderlineItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
154  syn region htmlUnderlineBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop
155  syn region htmlUnderlineBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop
156
157  syn region htmlItalic start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlItalicBold,htmlItalicUnderline
158  syn region htmlItalic start="<em\>" end="</em>"me=e-5 contains=@htmlTop
159  syn region htmlItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlItalicBoldUnderline
160  syn region htmlItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlItalicBoldUnderline
161  syn region htmlItalicBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop
162  syn region htmlItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlItalicUnderlineBold
163  syn region htmlItalicUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
164  syn region htmlItalicUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
165
166  syn match htmlLeadingSpace "^\s\+" contained
167  syn region htmlLink start="<a\>\_[^>]*\<href\>" end="</a>"me=e-4 contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLeadingSpace,javaScript,@htmlPreproc
168  syn region htmlH1 start="<h1\>" end="</h1>"me=e-5 contains=@htmlTop
169  syn region htmlH2 start="<h2\>" end="</h2>"me=e-5 contains=@htmlTop
170  syn region htmlH3 start="<h3\>" end="</h3>"me=e-5 contains=@htmlTop
171  syn region htmlH4 start="<h4\>" end="</h4>"me=e-5 contains=@htmlTop
172  syn region htmlH5 start="<h5\>" end="</h5>"me=e-5 contains=@htmlTop
173  syn region htmlH6 start="<h6\>" end="</h6>"me=e-5 contains=@htmlTop
174  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
175  syn region htmlTitle start="<title\>" end="</title>"me=e-8 contains=htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc
176endif
177
178syn keyword htmlTagName         contained noscript
179syn keyword htmlSpecialTagName  contained script style
180if main_syntax != 'java' || exists("java_javascript")
181  " JAVA SCRIPT
182  syn include @htmlJavaScript syntax/javascript.vim
183  unlet b:current_syntax
184  syn region  javaScript start=+<script\_[^>]*>+ keepend end=+</script\_[^>]*>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
185  syn region  htmlScriptTag     contained start=+<script+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent
186  hi def link htmlScriptTag htmlTag
187
188  " html events (i.e. arguments that include javascript commands)
189  if exists("html_extended_events")
190    syn region htmlEvent        contained start=+\<on\a\+\s*=[\t ]*'+ end=+'+ contains=htmlEventSQ
191    syn region htmlEvent        contained start=+\<on\a\+\s*=[\t ]*"+ end=+"+ contains=htmlEventDQ
192  else
193    syn region htmlEvent        contained start=+\<on\a\+\s*=[\t ]*'+ end=+'+ keepend contains=htmlEventSQ
194    syn region htmlEvent        contained start=+\<on\a\+\s*=[\t ]*"+ end=+"+ keepend contains=htmlEventDQ
195  endif
196  syn region htmlEventSQ        contained start=+'+ms=s+1 end=+'+me=s-1 contains=@htmlJavaScript
197  syn region htmlEventDQ        contained start=+"+ms=s+1 end=+"+me=s-1 contains=@htmlJavaScript
198  hi def link htmlEventSQ htmlEvent
199  hi def link htmlEventDQ htmlEvent
200
201  " a javascript expression is used as an arg value
202  syn region  javaScriptExpression contained start=+&{+ keepend end=+};+ contains=@htmlJavaScript,@htmlPreproc
203endif
204
205if main_syntax != 'java' || exists("java_vb")
206  " VB SCRIPT
207  syn include @htmlVbScript syntax/vb.vim
208  unlet b:current_syntax
209  syn region  javaScript start=+<script \_[^>]*language *=\_[^>]*vbscript\_[^>]*>+ keepend end=+</script\_[^>]*>+me=s-1 contains=@htmlVbScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
210endif
211
212syn cluster htmlJavaScript      add=@htmlPreproc
213
214if main_syntax != 'java' || exists("java_css")
215  " embedded style sheets
216  syn keyword htmlArg           contained media
217  syn include @htmlCss syntax/css.vim
218  unlet b:current_syntax
219  syn region cssStyle start=+<style+ keepend end=+</style>+ contains=@htmlCss,htmlTag,htmlEndTag,htmlCssStyleComment,@htmlPreproc
220  syn match htmlCssStyleComment contained "\(<!--\|-->\)"
221  syn region htmlCssDefinition matchgroup=htmlArg start='style="' keepend matchgroup=htmlString end='"' contains=css.*Attr,css.*Prop,cssComment,cssLength,cssColor,cssURL,cssImportant,cssError,cssString,@htmlPreproc
222  hi def link htmlStyleArg htmlString
223endif
224
225if main_syntax == "html"
226  " synchronizing (does not always work if a comment includes legal
227  " html tags, but doing it right would mean to always start
228  " at the first line, which is too slow)
229  syn sync match htmlHighlight groupthere NONE "<[/a-zA-Z]"
230  syn sync match htmlHighlight groupthere javaScript "<script"
231  syn sync match htmlHighlightSkip "^.*['\"].*$"
232  syn sync minlines=10
233endif
234
235" The default highlighting.
236hi def link htmlTag                     Function
237hi def link htmlEndTag                  Identifier
238hi def link htmlArg                     Type
239hi def link htmlTagName                 htmlStatement
240hi def link htmlSpecialTagName          Exception
241hi def link htmlValue                     String
242hi def link htmlSpecialChar             Special
243
244if !exists("html_no_rendering")
245  hi def link htmlH1                      Title
246  hi def link htmlH2                      htmlH1
247  hi def link htmlH3                      htmlH2
248  hi def link htmlH4                      htmlH3
249  hi def link htmlH5                      htmlH4
250  hi def link htmlH6                      htmlH5
251  hi def link htmlHead                    PreProc
252  hi def link htmlTitle                   Title
253  hi def link htmlBoldItalicUnderline     htmlBoldUnderlineItalic
254  hi def link htmlUnderlineBold           htmlBoldUnderline
255  hi def link htmlUnderlineItalicBold     htmlBoldUnderlineItalic
256  hi def link htmlUnderlineBoldItalic     htmlBoldUnderlineItalic
257  hi def link htmlItalicUnderline         htmlUnderlineItalic
258  hi def link htmlItalicBold              htmlBoldItalic
259  hi def link htmlItalicBoldUnderline     htmlBoldUnderlineItalic
260  hi def link htmlItalicUnderlineBold     htmlBoldUnderlineItalic
261  hi def link htmlLink                    Underlined
262  hi def link htmlLeadingSpace            None
263  if !exists("html_my_rendering")
264    hi def htmlBold                term=bold cterm=bold gui=bold
265    hi def htmlBoldUnderline       term=bold,underline cterm=bold,underline gui=bold,underline
266    hi def htmlBoldItalic          term=bold,italic cterm=bold,italic gui=bold,italic
267    hi def htmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline
268    hi def htmlUnderline           term=underline cterm=underline gui=underline
269    hi def htmlUnderlineItalic     term=italic,underline cterm=italic,underline gui=italic,underline
270    hi def htmlItalic              term=italic cterm=italic gui=italic
271  endif
272endif
273
274hi def link htmlPreStmt            PreProc
275hi def link htmlPreError           Error
276hi def link htmlPreProc            PreProc
277hi def link htmlPreAttr            String
278hi def link htmlPreProcAttrName    PreProc
279hi def link htmlPreProcAttrError   Error
280hi def link htmlSpecial            Special
281hi def link htmlSpecialChar        Special
282hi def link htmlString             String
283hi def link htmlStatement          Statement
284hi def link htmlComment            Comment
285hi def link htmlCommentPart        Comment
286hi def link htmlValue              String
287hi def link htmlCommentError       htmlError
288hi def link htmlTagError           htmlError
289hi def link htmlEvent              javaScript
290hi def link htmlError              Error
291
292hi def link javaScript             Special
293hi def link javaScriptExpression   javaScript
294hi def link htmlCssStyleComment    Comment
295hi def link htmlCssDefinition      Special
296
297let b:current_syntax = "html"
298
299if main_syntax == 'html'
300  unlet main_syntax
301endif
302
303let &cpo = s:cpo_save
304unlet s:cpo_save
305" vim: ts=8
306