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