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