Update runtime files
diff --git a/runtime/syntax/2html.vim b/runtime/syntax/2html.vim
index ea9db15..32f7eef 100644
--- a/runtime/syntax/2html.vim
+++ b/runtime/syntax/2html.vim
@@ -815,202 +815,204 @@
 
 " HTML header, with the title and generator ;-). Left free space for the CSS,
 " to be filled at the end.
-call extend(s:lines, [
-      \ "<html>",
-      \ "<head>"])
-" include encoding as close to the top as possible, but only if not already
-" contained in XML information (to avoid haggling over content type)
-if s:settings.encoding != "" && !s:settings.use_xhtml
-  if s:html5
-    call add(s:lines, '<meta charset="' . s:settings.encoding . '"' . s:tag_close)
-  else
-    call add(s:lines, "<meta http-equiv=\"content-type\" content=\"text/html; charset=" . s:settings.encoding . '"' . s:tag_close)
-  endif
-endif
-call extend(s:lines, [
-      \ ("<title>".expand("%:p:~")."</title>"),
-      \ ("<meta name=\"Generator\" content=\"Vim/".v:version/100.".".v:version%100.'"'.s:tag_close),
-      \ ("<meta name=\"plugin-version\" content=\"".s:pluginversion.'"'.s:tag_close)
-      \ ])
-call add(s:lines, '<meta name="syntax" content="'.s:current_syntax.'"'.s:tag_close)
-call add(s:lines, '<meta name="settings" content="'.
-      \ join(filter(keys(s:settings),'s:settings[v:val]'),',').
-      \ ',prevent_copy='.s:settings.prevent_copy.
-      \ ',use_input_for_pc='.s:settings.use_input_for_pc.
-      \ '"'.s:tag_close)
-call add(s:lines, '<meta name="colorscheme" content="'.
-      \ (exists('g:colors_name')
-      \ ? g:colors_name
-      \ : 'none'). '"'.s:tag_close)
-
-if s:settings.use_css
+if !s:settings.no_doc
   call extend(s:lines, [
-	\ "<style" . (s:html5 ? "" : " type=\"text/css\"") . ">",
-	\ s:settings.use_xhtml ? "" : "<!--"])
-  let s:ieonly = []
-  if s:settings.dynamic_folds
-    if s:settings.hover_unfold
-      " if we are doing hover_unfold, use css 2 with css 1 fallback for IE6
-      call extend(s:lines, [
-	    \ ".FoldColumn { text-decoration: none; white-space: pre; }",
-	    \ "",
-	    \ "body * { margin: 0; padding: 0; }", "",
-	    \ ".open-fold   > span.Folded { display: none;  }",
-	    \ ".open-fold   > .fulltext   { display: inline; }",
-	    \ ".closed-fold > .fulltext   { display: none;  }",
-	    \ ".closed-fold > span.Folded { display: inline; }",
-	    \ "",
-	    \ ".open-fold   > .toggle-open   { display: none;   }",
-	    \ ".open-fold   > .toggle-closed { display: inline; }",
-	    \ ".closed-fold > .toggle-open   { display: inline; }",
-	    \ ".closed-fold > .toggle-closed { display: none;   }",
-	    \ "", "",
-	    \ '/* opening a fold while hovering won''t be supported by IE6 and other',
-	    \ "similar browsers, but it should fail gracefully. */",
-	    \ ".closed-fold:hover > .fulltext      { display: inline; }",
-	    \ ".closed-fold:hover > .toggle-filler { display: none; }",
-	    \ ".closed-fold:hover > .Folded        { display: none; }"])
-      " TODO: IE6 is REALLY old and I can't even test it anymore. Maybe we
-      " should remove this? Leave it in for now, it was working at one point,
-      " and doesn't affect any modern browsers. Even newer IE versions should
-      " support the above code and ignore the following.
-      let s:ieonly = [
-	    \ "<!--[if lt IE 7]><style type=\"text/css\">",
-	    \ ".open-fold   .fulltext      { display: inline; }",
-	    \ ".open-fold   span.Folded    { display: none; }",
-	    \ ".open-fold   .toggle-open   { display: none; }",
-	    \ ".open-fold   .toggle-closed { display: inline; }",
-	    \ "",
-	    \ ".closed-fold .fulltext      { display: none; }",
-	    \ ".closed-fold span.Folded    { display: inline; }",
-	    \ ".closed-fold .toggle-open   { display: inline; }",
-	    \ ".closed-fold .toggle-closed { display: none; }",
-	    \ "</style>",
-	    \ "<![endif]-->",
-	    \]
+	\ "<html>",
+	\ "<head>"])
+  " include encoding as close to the top as possible, but only if not already
+  " contained in XML information (to avoid haggling over content type)
+  if s:settings.encoding != "" && !s:settings.use_xhtml
+    if s:html5
+      call add(s:lines, '<meta charset="' . s:settings.encoding . '"' . s:tag_close)
     else
-      " if we aren't doing hover_unfold, use CSS 1 only
-      call extend(s:lines, [
-	    \ ".FoldColumn { text-decoration: none; white-space: pre; }",
-	    \ ".open-fold   .fulltext      { display: inline; }",
-	    \ ".open-fold   span.Folded    { display: none; }",
-	    \ ".open-fold   .toggle-open   { display: none; }",
-	    \ ".open-fold   .toggle-closed { display: inline; }",
-	    \ "",
-	    \ ".closed-fold .fulltext      { display: none; }",
-	    \ ".closed-fold span.Folded    { display: inline; }",
-	    \ ".closed-fold .toggle-open   { display: inline; }",
-	    \ ".closed-fold .toggle-closed { display: none; }",
-	    \])
+      call add(s:lines, "<meta http-equiv=\"content-type\" content=\"text/html; charset=" . s:settings.encoding . '"' . s:tag_close)
     endif
   endif
-  " else we aren't doing any dynamic folding, no need for any special rules
-
   call extend(s:lines, [
-	  \ s:settings.use_xhtml ? "" : '-->',
-	  \ "</style>",
-	  \])
-  call extend(s:lines, s:ieonly)
-  unlet s:ieonly
-endif
-
-let s:uses_script = s:settings.dynamic_folds || s:settings.line_ids
-
-" insert script tag if needed
-if s:uses_script
-  call extend(s:lines, [
-        \ "",
-        \ "<script" . (s:html5 ? "" : " type='text/javascript'") . ">",
-        \ s:settings.use_xhtml ? '//<![CDATA[' : "<!--"])
-endif
-
-" insert javascript to toggle folds open and closed
-if s:settings.dynamic_folds
-  call extend(s:lines, [
-	\ "",
-	\ "function toggleFold(objID)",
-	\ "{",
-	\ "  var fold;",
-	\ "  fold = document.getElementById(objID);",
-	\ "  if (fold.className == 'closed-fold')",
-	\ "  {",
-	\ "    fold.className = 'open-fold';",
-	\ "  }",
-	\ "  else if (fold.className == 'open-fold')",
-	\ "  {",
-	\ "    fold.className = 'closed-fold';",
-	\ "  }",
-	\ "}"
+	\ ("<title>".expand("%:p:~")."</title>"),
+	\ ("<meta name=\"Generator\" content=\"Vim/".v:version/100.".".v:version%100.'"'.s:tag_close),
+	\ ("<meta name=\"plugin-version\" content=\"".s:pluginversion.'"'.s:tag_close)
 	\ ])
-endif
+  call add(s:lines, '<meta name="syntax" content="'.s:current_syntax.'"'.s:tag_close)
+  call add(s:lines, '<meta name="settings" content="'.
+	\ join(filter(keys(s:settings),'s:settings[v:val]'),',').
+	\ ',prevent_copy='.s:settings.prevent_copy.
+	\ ',use_input_for_pc='.s:settings.use_input_for_pc.
+	\ '"'.s:tag_close)
+  call add(s:lines, '<meta name="colorscheme" content="'.
+	\ (exists('g:colors_name')
+	\ ? g:colors_name
+	\ : 'none'). '"'.s:tag_close)
 
-if s:settings.line_ids
-  " insert javascript to get IDs from line numbers, and to open a fold before
-  " jumping to any lines contained therein
-  call extend(s:lines, [
-	\ "",
-	\ "/* function to open any folds containing a jumped-to line before jumping to it */",
-	\ "function JumpToLine()",
-	\ "{",
-	\ "  var lineNum;",
-	\ "  lineNum = window.location.hash;",
-	\ "  lineNum = lineNum.substr(1); /* strip off '#' */",
-	\ "",
-	\ "  if (lineNum.indexOf('L') == -1) {",
-	\ "    lineNum = 'L'+lineNum;",
-	\ "  }",
-	\ "  var lineElem = document.getElementById(lineNum);"
-	\ ])
+  if s:settings.use_css
+    call extend(s:lines, [
+	  \ "<style" . (s:html5 ? "" : " type=\"text/css\"") . ">",
+	  \ s:settings.use_xhtml ? "" : "<!--"])
+    let s:ieonly = []
+    if s:settings.dynamic_folds
+      if s:settings.hover_unfold
+	" if we are doing hover_unfold, use css 2 with css 1 fallback for IE6
+	call extend(s:lines, [
+	      \ ".FoldColumn { text-decoration: none; white-space: pre; }",
+	      \ "",
+	      \ "body * { margin: 0; padding: 0; }", "",
+	      \ ".open-fold   > span.Folded { display: none;  }",
+	      \ ".open-fold   > .fulltext   { display: inline; }",
+	      \ ".closed-fold > .fulltext   { display: none;  }",
+	      \ ".closed-fold > span.Folded { display: inline; }",
+	      \ "",
+	      \ ".open-fold   > .toggle-open   { display: none;   }",
+	      \ ".open-fold   > .toggle-closed { display: inline; }",
+	      \ ".closed-fold > .toggle-open   { display: inline; }",
+	      \ ".closed-fold > .toggle-closed { display: none;   }",
+	      \ "", "",
+	      \ '/* opening a fold while hovering won''t be supported by IE6 and other',
+	      \ "similar browsers, but it should fail gracefully. */",
+	      \ ".closed-fold:hover > .fulltext      { display: inline; }",
+	      \ ".closed-fold:hover > .toggle-filler { display: none; }",
+	      \ ".closed-fold:hover > .Folded        { display: none; }"])
+	" TODO: IE6 is REALLY old and I can't even test it anymore. Maybe we
+	" should remove this? Leave it in for now, it was working at one point,
+	" and doesn't affect any modern browsers. Even newer IE versions should
+	" support the above code and ignore the following.
+	let s:ieonly = [
+	      \ "<!--[if lt IE 7]><style type=\"text/css\">",
+	      \ ".open-fold   .fulltext      { display: inline; }",
+	      \ ".open-fold   span.Folded    { display: none; }",
+	      \ ".open-fold   .toggle-open   { display: none; }",
+	      \ ".open-fold   .toggle-closed { display: inline; }",
+	      \ "",
+	      \ ".closed-fold .fulltext      { display: none; }",
+	      \ ".closed-fold span.Folded    { display: inline; }",
+	      \ ".closed-fold .toggle-open   { display: inline; }",
+	      \ ".closed-fold .toggle-closed { display: none; }",
+	      \ "</style>",
+	      \ "<![endif]-->",
+	      \]
+      else
+	" if we aren't doing hover_unfold, use CSS 1 only
+	call extend(s:lines, [
+	      \ ".FoldColumn { text-decoration: none; white-space: pre; }",
+	      \ ".open-fold   .fulltext      { display: inline; }",
+	      \ ".open-fold   span.Folded    { display: none; }",
+	      \ ".open-fold   .toggle-open   { display: none; }",
+	      \ ".open-fold   .toggle-closed { display: inline; }",
+	      \ "",
+	      \ ".closed-fold .fulltext      { display: none; }",
+	      \ ".closed-fold span.Folded    { display: inline; }",
+	      \ ".closed-fold .toggle-open   { display: inline; }",
+	      \ ".closed-fold .toggle-closed { display: none; }",
+	      \])
+      endif
+    endif
+    " else we aren't doing any dynamic folding, no need for any special rules
 
+    call extend(s:lines, [
+	    \ s:settings.use_xhtml ? "" : '-->',
+	    \ "</style>",
+	    \])
+    call extend(s:lines, s:ieonly)
+    unlet s:ieonly
+  endif
+
+  let s:uses_script = s:settings.dynamic_folds || s:settings.line_ids
+
+  " insert script tag if needed
+  if s:uses_script
+    call extend(s:lines, [
+	  \ "",
+	  \ "<script" . (s:html5 ? "" : " type='text/javascript'") . ">",
+	  \ s:settings.use_xhtml ? '//<![CDATA[' : "<!--"])
+  endif
+
+  " insert javascript to toggle folds open and closed
   if s:settings.dynamic_folds
     call extend(s:lines, [
 	  \ "",
-	  \ "  /* navigate upwards in the DOM tree to open all folds containing the line */",
-	  \ "  var node = lineElem;",
-	  \ "  while (node && node.id != 'vimCodeElement".s:settings.id_suffix."')",
+	  \ "function toggleFold(objID)",
+	  \ "{",
+	  \ "  var fold;",
+	  \ "  fold = document.getElementById(objID);",
+	  \ "  if (fold.className == 'closed-fold')",
 	  \ "  {",
-	  \ "    if (node.className == 'closed-fold')",
-	  \ "    {",
-	  \ "      node.className = 'open-fold';",
-	  \ "    }",
-	  \ "    node = node.parentNode;",
+	  \ "    fold.className = 'open-fold';",
 	  \ "  }",
+	  \ "  else if (fold.className == 'open-fold')",
+	  \ "  {",
+	  \ "    fold.className = 'closed-fold';",
+	  \ "  }",
+	  \ "}"
 	  \ ])
   endif
-  call extend(s:lines, [
-	\ "  /* Always jump to new location even if the line was hidden inside a fold, or",
-	\ "   * we corrected the raw number to a line ID.",
-	\ "   */",
-	\ "  if (lineElem) {",
-	\ "    lineElem.scrollIntoView(true);",
-	\ "  }",
-	\ "  return true;",
-	\ "}",
-	\ "if ('onhashchange' in window) {",
-	\ "  window.onhashchange = JumpToLine;",
-	\ "}"
-	\ ])
-endif
 
-" insert script closing tag if needed
-if s:uses_script
-  call extend(s:lines, [
-        \ '',
-        \ s:settings.use_xhtml ? '//]]>' : '-->',
-        \ "</script>"
-        \ ])
-endif
+  if s:settings.line_ids
+    " insert javascript to get IDs from line numbers, and to open a fold before
+    " jumping to any lines contained therein
+    call extend(s:lines, [
+	  \ "",
+	  \ "/* function to open any folds containing a jumped-to line before jumping to it */",
+	  \ "function JumpToLine()",
+	  \ "{",
+	  \ "  var lineNum;",
+	  \ "  lineNum = window.location.hash;",
+	  \ "  lineNum = lineNum.substr(1); /* strip off '#' */",
+	  \ "",
+	  \ "  if (lineNum.indexOf('L') == -1) {",
+	  \ "    lineNum = 'L'+lineNum;",
+	  \ "  }",
+	  \ "  var lineElem = document.getElementById(lineNum);"
+	  \ ])
 
-call extend(s:lines, ["</head>",
-      \ "<body".(s:settings.line_ids ? " onload='JumpToLine();'" : "").">"])
+    if s:settings.dynamic_folds
+      call extend(s:lines, [
+	    \ "",
+	    \ "  /* navigate upwards in the DOM tree to open all folds containing the line */",
+	    \ "  var node = lineElem;",
+	    \ "  while (node && node.id != 'vimCodeElement".s:settings.id_suffix."')",
+	    \ "  {",
+	    \ "    if (node.className == 'closed-fold')",
+	    \ "    {",
+	    \ "      node.className = 'open-fold';",
+	    \ "    }",
+	    \ "    node = node.parentNode;",
+	    \ "  }",
+	    \ ])
+    endif
+    call extend(s:lines, [
+	  \ "  /* Always jump to new location even if the line was hidden inside a fold, or",
+	  \ "   * we corrected the raw number to a line ID.",
+	  \ "   */",
+	  \ "  if (lineElem) {",
+	  \ "    lineElem.scrollIntoView(true);",
+	  \ "  }",
+	  \ "  return true;",
+	  \ "}",
+	  \ "if ('onhashchange' in window) {",
+	  \ "  window.onhashchange = JumpToLine;",
+	  \ "}"
+	  \ ])
+  endif
+
+  " insert script closing tag if needed
+  if s:uses_script
+    call extend(s:lines, [
+	  \ '',
+	  \ s:settings.use_xhtml ? '//]]>' : '-->',
+	  \ "</script>"
+	  \ ])
+  endif
+
+  call extend(s:lines, ["</head>",
+	\ "<body".(s:settings.line_ids ? " onload='JumpToLine();'" : "").">"])
+endif
 
 if s:settings.no_pre
   " if we're not using CSS we use a font tag which can't have a div inside
   if s:settings.use_css
-    call extend(s:lines, ["<div id='vimCodeElement".s:settings.id_suffix."'>"])
+    call extend(s:lines, ["<div id='vimCodeElement" .. s:settings.id_suffix .. "'>"])
   endif
 else
-  call extend(s:lines, ["<pre id='vimCodeElement".s:settings.id_suffix."'>"])
+  call extend(s:lines, ["<pre id='vimCodeElement" .. s:settings.id_suffix .. "'>"])
 endif
 
 exe s:orgwin . "wincmd w"
@@ -1721,12 +1723,15 @@
 if s:settings.no_pre
   if !s:settings.use_css
     " Close off the font tag that encapsulates the whole <body>
-    call extend(s:lines, ["</font>", "</body>", "</html>"])
+    call extend(s:lines, ["</font>"])
   else
-    call extend(s:lines, ["</div>", "</body>", "</html>"])
+    call extend(s:lines, ["</div>"])
   endif
 else
-  call extend(s:lines, ["</pre>", "</body>", "</html>"])
+  call extend(s:lines, ["</pre>"])
+endif
+if !s:settings.no_doc
+  call extend(s:lines, ["</body>", "</html>"])
 endif
 
 exe s:newwin . "wincmd w"
@@ -1742,15 +1747,15 @@
 " The generated HTML is admittedly ugly and takes a LONG time to fold.
 " Make sure the user doesn't do syntax folding when loading a generated file,
 " using a modeline.
-call append(line('$'), "<!-- vim: set foldmethod=manual : -->")
-
-" Now, when we finally know which, we define the colors and styles
-if s:settings.use_css
-  1;/<style\>/+1
+if !s:settings.no_modeline
+  call append(line('$'), "<!-- vim: set foldmethod=manual : -->")
 endif
 
-" Normal/global attributes
-if s:settings.use_css
+" Now, when we finally know which, we define the colors and styles
+if s:settings.use_css && !s:settings.no_doc
+  1;/<style\>/+1
+
+  " Normal/global attributes
   if s:settings.no_pre
     call append('.', "body { color: " . s:fgc . "; background-color: " . s:bgc . "; font-family: ". s:htmlfont ."; }")
     +
@@ -1874,7 +1879,9 @@
       endif
     endif
   endif
-else
+endif
+
+if !s:settings.use_css && !s:settings_no_doc
   " For Netscape 4, set <body> attributes too, though, strictly speaking, it's
   " incorrect.
   execute '%s:<body\([^>]*\):<body bgcolor="' . s:bgc . '" text="' . s:fgc . '"\1>\r<font face="'. s:htmlfont .'"'
@@ -1882,7 +1889,7 @@
 
 " Gather attributes for all other classes. Do diff first so that normal
 " highlight groups are inserted before it.
-if s:settings.use_css
+if s:settings.use_css && !s:settings.no_doc
   if s:diff_mode
     call append('.', filter(map(keys(s:diffstylelist), "s:diffstylelist[v:val]"), 'v:val != ""'))
   endif
@@ -1892,20 +1899,22 @@
 endif
 
 " Add hyperlinks
-" TODO: add option to not do this? Maybe just make the color the same as the
-" text highlight group normally is?
-%s+\(https\=://\S\{-}\)\(\([.,;:}]\=\(\s\|$\)\)\|[\\"'<>]\|&gt;\|&lt;\|&quot;\)+<a href="\1">\1</a>\2+ge
-
-" The DTD
-if s:settings.use_xhtml
-  exe "normal! gg$a\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">"
-elseif s:html5
-  exe "normal! gg0i<!DOCTYPE html>\n"
-else
-  exe "normal! gg0i<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n"
+if !s:settings.no_links
+  %s+\(https\=://\S\{-}\)\(\([.,;:}]\=\(\s\|$\)\)\|[\\"'<>]\|&gt;\|&lt;\|&quot;\)+<a href="\1">\1</a>\2+ge
 endif
 
-if s:settings.use_xhtml
+" The DTD
+if !s:settings.no_doc
+  if s:settings.use_xhtml
+    exe "normal! gg$a\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">"
+  elseif s:html5
+    exe "normal! gg0i<!DOCTYPE html>\n"
+  else
+    exe "normal! gg0i<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n"
+  endif
+endif
+
+if s:settings.use_xhtml && !s:settings.no_doc
   exe "normal! gg/<html/e\na xmlns=\"http://www.w3.org/1999/xhtml\"\e"
 endif