diff --git a/runtime/autoload/tohtml.vim b/runtime/autoload/tohtml.vim
index 270891a..1086347 100644
--- a/runtime/autoload/tohtml.vim
+++ b/runtime/autoload/tohtml.vim
@@ -1,6 +1,6 @@
 " Vim autoload file for the tohtml plugin.
 " Maintainer: Ben Fritz <fritzophrenic@gmail.com>
-" Last Change: 2019 Aug 16
+" Last Change: 2023 Jan 01
 "
 " Additional contributors:
 "
@@ -351,63 +351,65 @@
   let s:old_magic = &magic
   set magic
 
-  if s:settings.use_xhtml
-    if s:settings.encoding != ""
-      let xml_line = "<?xml version=\"1.0\" encoding=\"" . s:settings.encoding . "\"?>"
-    else
-      let xml_line = "<?xml version=\"1.0\"?>"
-    endif
-    let tag_close = ' />'
-  endif
-
-  let style = [s:settings.use_xhtml ? "" : '-->']
-  let body_line = ''
-
   let html = []
-  let s:html5 = 0
-  if s:settings.use_xhtml
-    call add(html, xml_line)
-  endif
-  if s:settings.use_xhtml
-    call add(html, "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">")
-    call add(html, '<html xmlns="http://www.w3.org/1999/xhtml">')
-  elseif s:settings.use_css && !s:settings.no_pre
-    call add(html, "<!DOCTYPE html>")
-    call add(html, '<html>')
-    let s:html5 = 1
-  else
-    call add(html, '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"')
-    call add(html, '  "http://www.w3.org/TR/html4/loose.dtd">')
-    call add(html, '<html>')
-  endif
-  call add(html, '<head>')
-
-  " include encoding as close to the top as possible, but only if not already
-  " contained in XML information
-  if s:settings.encoding != "" && !s:settings.use_xhtml
-    if s:html5
-      call add(html, '<meta charset="' . s:settings.encoding . '"' . tag_close)
-    else
-      call add(html, "<meta http-equiv=\"content-type\" content=\"text/html; charset=" . s:settings.encoding . '"' . tag_close)
+  if !s:settings.no_doc
+    if s:settings.use_xhtml
+      if s:settings.encoding != ""
+	let xml_line = "<?xml version=\"1.0\" encoding=\"" . s:settings.encoding . "\"?>"
+      else
+	let xml_line = "<?xml version=\"1.0\"?>"
+      endif
+      let tag_close = ' />'
     endif
+
+    let style = [s:settings.use_xhtml ? "" : '-->']
+    let body_line = ''
+
+    let s:html5 = 0
+    if s:settings.use_xhtml
+      call add(html, xml_line)
+    endif
+    if s:settings.use_xhtml
+      call add(html, "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">")
+      call add(html, '<html xmlns="http://www.w3.org/1999/xhtml">')
+    elseif s:settings.use_css && !s:settings.no_pre
+      call add(html, "<!DOCTYPE html>")
+      call add(html, '<html>')
+      let s:html5 = 1
+    else
+      call add(html, '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"')
+      call add(html, '  "http://www.w3.org/TR/html4/loose.dtd">')
+      call add(html, '<html>')
+    endif
+    call add(html, '<head>')
+
+    " include encoding as close to the top as possible, but only if not already
+    " contained in XML information
+    if s:settings.encoding != "" && !s:settings.use_xhtml
+      if s:html5
+	call add(html, '<meta charset="' . s:settings.encoding . '"' . tag_close)
+      else
+	call add(html, "<meta http-equiv=\"content-type\" content=\"text/html; charset=" . s:settings.encoding . '"' . tag_close)
+      endif
+    endif
+
+    call add(html, '<title>diff</title>')
+    call add(html, '<meta name="Generator" content="Vim/'.v:version/100.'.'.v:version%100.'"'.tag_close)
+    call add(html, '<meta name="plugin-version" content="'.g:loaded_2html_plugin.'"'.tag_close)
+    call add(html, '<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.
+	  \ '"'.tag_close)
+    call add(html, '<meta name="colorscheme" content="'.
+	  \ (exists('g:colors_name')
+	  \ ? g:colors_name
+	  \ : 'none'). '"'.tag_close)
+
+    call add(html, '</head>')
+    let body_line_num = len(html)
+    call add(html, '<body'.(s:settings.line_ids ? ' onload="JumpToLine();"' : '').'>')
   endif
-
-  call add(html, '<title>diff</title>')
-  call add(html, '<meta name="Generator" content="Vim/'.v:version/100.'.'.v:version%100.'"'.tag_close)
-  call add(html, '<meta name="plugin-version" content="'.g:loaded_2html_plugin.'"'.tag_close)
-  call add(html, '<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.
-	\ '"'.tag_close)
-  call add(html, '<meta name="colorscheme" content="'.
-	\ (exists('g:colors_name')
-	\ ? g:colors_name
-	\ : 'none'). '"'.tag_close)
-
-  call add(html, '</head>')
-  let body_line_num = len(html)
-  call add(html, '<body'.(s:settings.line_ids ? ' onload="JumpToLine();"' : '').'>')
   call add(html, "<table ".(s:settings.use_css? "" : "border='1' width='100%' ")."id='vimCodeElement".s:settings.id_suffix."'>")
 
   call add(html, '<tr>')
@@ -430,47 +432,53 @@
     " When not using CSS or when using xhtml, the <body> line can be important.
     " Assume it will be the same for all buffers and grab it from the first
     " buffer. Similarly, need to grab the body end line as well.
-    if body_line == ''
+    if !s:settings.no_doc
+      if body_line == ''
+	1
+	call search('<body')
+	let body_line = getline('.')
+	$
+	call search('</body>', 'b')
+	let s:body_end_line = getline('.')
+      endif
+
+      " Grab the style information. Some of this will be duplicated so only insert
+      " it if it's not already there. {{{
       1
-      call search('<body')
-      let body_line = getline('.')
-      $
-      call search('</body>', 'b')
-      let s:body_end_line = getline('.')
-    endif
-
-    " Grab the style information. Some of this will be duplicated so only insert
-    " it if it's not already there. {{{
-    1
-    let style_start = search('^<style\( type="text/css"\)\?>')
-    1
-    let style_end = search('^</style>')
-    if style_start > 0 && style_end > 0
-      let buf_styles = getline(style_start + 1, style_end - 1)
-      for a_style in buf_styles
-	if index(style, a_style) == -1
-	  if diff_style_start == 0
-	    if a_style =~ '\<Diff\(Change\|Text\|Add\|Delete\)'
-	      let diff_style_start = len(style)-1
+      let style_start = search('^<style\( type="text/css"\)\?>')
+      1
+      let style_end = search('^</style>')
+      if style_start > 0 && style_end > 0
+	let buf_styles = getline(style_start + 1, style_end - 1)
+	for a_style in buf_styles
+	  if index(style, a_style) == -1
+	    if diff_style_start == 0
+	      if a_style =~ '\<Diff\(Change\|Text\|Add\|Delete\)'
+		let diff_style_start = len(style)-1
+	      endif
 	    endif
+	    call insert(style, a_style, insert_index)
+	    let insert_index += 1
 	  endif
-	  call insert(style, a_style, insert_index)
-	  let insert_index += 1
-	endif
-      endfor
-    endif " }}}
+	endfor
+      endif " }}}
 
-    " everything new will get added before the diff styles so diff highlight
-    " properly overrides normal highlight
-    if diff_style_start != 0
-      let insert_index = diff_style_start
+      " everything new will get added before the diff styles so diff highlight
+      " properly overrides normal highlight
+      if diff_style_start != 0
+	let insert_index = diff_style_start
+      endif
+
+      " Delete those parts that are not needed so we can include the rest into the
+      " resulting table.
+      1,/^<body.*\%(\n<!--.*-->\_s\+.*id='oneCharWidth'.*\_s\+.*id='oneInputWidth'.*\_s\+.*id='oneEmWidth'\)\?\zs/d_
+      $
+      ?</body>?,$d_
+    elseif !s:settings.no_modeline
+      " remove modeline from source files if it is included and we haven't deleted
+      " due to removing html footer already
+      $d
     endif
-
-    " Delete those parts that are not needed so we can include the rest into the
-    " resulting table.
-    1,/^<body.*\%(\n<!--.*-->\_s\+.*id='oneCharWidth'.*\_s\+.*id='oneInputWidth'.*\_s\+.*id='oneEmWidth'\)\?\zs/d_
-    $
-    ?</body>?,$d_
     let temp = getline(1,'$')
     " clean out id on the main content container because we already set it on
     " the table
@@ -478,7 +486,11 @@
     " undo deletion of start and end part
     " so we can later save the file as valid html
     " TODO: restore using grabbed lines if undolevel is 1?
-    normal! 2u
+    if !s:settings.no_doc
+      normal! 2u
+    elseif !s:settings.no_modeline
+      normal! u
+    endif
     if s:settings.use_css
       call add(html, '<td><div>')
     elseif s:settings.use_xhtml
@@ -495,17 +507,23 @@
     quit!
   endfor
 
-  let html[body_line_num] = body_line
+  if !s:settings.no_doc
+    let html[body_line_num] = body_line
+  endif
 
   call add(html, '</tr>')
   call add(html, '</table>')
-  call add(html, s:body_end_line)
-  call add(html, '</html>')
+  if !s:settings.no_doc
+    call add(html, s:body_end_line)
+    call add(html, '</html>')
+  endif
 
   " 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 add(html, '<!-- vim: set foldmethod=manual : -->')
+  if !s:settings.no_modeline
+    call add(html, '<!-- vim: set foldmethod=manual : -->')
+  endif
 
   let i = 1
   let name = "Diff" . (s:settings.use_xhtml ? ".xhtml" : ".html")
@@ -542,129 +560,131 @@
 
   call append(0, html)
 
-  if len(style) > 0
-    1
-    let style_start = search('^</head>')-1
+  if !s:settings.no_doc
+    if len(style) > 0
+      1
+      let style_start = search('^</head>')-1
 
-    " add required javascript in reverse order so we can just call append again
-    " and again without adjusting {{{
+      " add required javascript in reverse order so we can just call append again
+      " and again without adjusting {{{
 
-    let s:uses_script = s:settings.dynamic_folds || s:settings.line_ids
+      let s:uses_script = s:settings.dynamic_folds || s:settings.line_ids
 
-    " insert script closing tag if needed
-    if s:uses_script
-      call append(style_start, [
-	    \ '',
-	    \ s:settings.use_xhtml ? '//]]>' : '-->',
-	    \ "</script>"
-	    \ ])
-    endif
-
-    " insert javascript to get IDs from line numbers, and to open a fold before
-    " jumping to any lines contained therein
-    if s:settings.line_ids
-      call append(style_start, [
-	    \ "  /* 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;",
-	    \ "}"
-	    \ ])
-
-      if s:settings.dynamic_folds
+      " insert script closing tag if needed
+      if s:uses_script
 	call append(style_start, [
-	      \ "",
-	      \ "  /* 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')",
-	      \ "    {",
-	      \ "      /* toggle open the fold ID (remove window ID) */",
-	      \ "      toggleFold(node.id.substr(4));",
-	      \ "    }",
-	      \ "    node = node.parentNode;",
-	      \ "  }",
+	      \ '',
+	      \ s:settings.use_xhtml ? '//]]>' : '-->',
+	      \ "</script>"
 	      \ ])
       endif
-    endif
 
-    if s:settings.line_ids
-      call append(style_start, [
-	    \ "",
-	    \ "/* 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;",
-	    \ "  }",
-	    \ "  if (lineNum.indexOf('W') == -1) {",
-	    \ "    lineNum = 'W1'+lineNum;",
-	    \ "  }",
-	    \ "  var lineElem = document.getElementById(lineNum);"
-	    \ ])
-    endif
+      " insert javascript to get IDs from line numbers, and to open a fold before
+      " jumping to any lines contained therein
+      if s:settings.line_ids
+	call append(style_start, [
+	      \ "  /* 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;",
+	      \ "}"
+	      \ ])
 
-    " Insert javascript to toggle matching folds open and closed in all windows,
-    " if dynamic folding is active.
-    if s:settings.dynamic_folds
-      call append(style_start, [
-	    \  "  function toggleFold(objID)",
-	    \  "  {",
-	    \  "    for (win_num = 1; win_num <= ".len(a:buf_list)."; win_num++)",
-	    \  "    {",
-	    \  "      var fold;",
-	    \  '      fold = document.getElementById("win"+win_num+objID);',
-	    \  "      if(fold.className == 'closed-fold')",
-	    \  "      {",
-	    \  "        fold.className = 'open-fold';",
-	    \  "      }",
-	    \  "      else if (fold.className == 'open-fold')",
-	    \  "      {",
-	    \  "        fold.className = 'closed-fold';",
-	    \  "      }",
-	    \  "    }",
-	    \  "  }",
-	    \ ])
-    endif
+	if s:settings.dynamic_folds
+	  call append(style_start, [
+		\ "",
+		\ "  /* 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')",
+		\ "    {",
+		\ "      /* toggle open the fold ID (remove window ID) */",
+		\ "      toggleFold(node.id.substr(4));",
+		\ "    }",
+		\ "    node = node.parentNode;",
+		\ "  }",
+		\ ])
+	endif
+      endif
 
-    if s:uses_script
-      " insert script tag if needed
-      call append(style_start, [
-	    \ "<script" . (s:html5 ? "" : " type='text/javascript'") . ">",
-	    \ s:settings.use_xhtml ? '//<![CDATA[' : "<!--"])
-    endif
+      if s:settings.line_ids
+	call append(style_start, [
+	      \ "",
+	      \ "/* 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;",
+	      \ "  }",
+	      \ "  if (lineNum.indexOf('W') == -1) {",
+	      \ "    lineNum = 'W1'+lineNum;",
+	      \ "  }",
+	      \ "  var lineElem = document.getElementById(lineNum);"
+	      \ ])
+      endif
 
-    " Insert styles from all the generated html documents and additional styles
-    " for the table-based layout of the side-by-side diff. The diff should take
-    " up the full browser window (but not more), and be static in size,
-    " horizontally scrollable when the lines are too long. Otherwise, the diff
-    " is pretty useless for really long lines. {{{
-    if s:settings.use_css
-      call append(style_start,
-	    \ ['<style' . (s:html5 ? '' : 'type="text/css"') . '>']+
-	    \ style+
-	    \ [ s:settings.use_xhtml ? '' : '<!--',
-	    \   'table { table-layout: fixed; }',
-	    \   'html, body, table, tbody { width: 100%; margin: 0; padding: 0; }',
-	    \   'table, td, th { border: 1px solid; }',
-	    \   'td { vertical-align: top; }',
-	    \   'th, td { width: '.printf("%.1f",100.0/len(a:win_list)).'%; }',
-	    \   'td div { overflow: auto; }',
-	    \   s:settings.use_xhtml ? '' : '-->',
-	    \   '</style>'
-	    \])
-    endif "}}}
+      " Insert javascript to toggle matching folds open and closed in all windows,
+      " if dynamic folding is active.
+      if s:settings.dynamic_folds
+	call append(style_start, [
+	      \  "  function toggleFold(objID)",
+	      \  "  {",
+	      \  "    for (win_num = 1; win_num <= ".len(a:buf_list)."; win_num++)",
+	      \  "    {",
+	      \  "      var fold;",
+	      \  '      fold = document.getElementById("win"+win_num+objID);',
+	      \  "      if(fold.className == 'closed-fold')",
+	      \  "      {",
+	      \  "        fold.className = 'open-fold';",
+	      \  "      }",
+	      \  "      else if (fold.className == 'open-fold')",
+	      \  "      {",
+	      \  "        fold.className = 'closed-fold';",
+	      \  "      }",
+	      \  "    }",
+	      \  "  }",
+	      \ ])
+      endif
+
+      if s:uses_script
+	" insert script tag if needed
+	call append(style_start, [
+	      \ "<script" . (s:html5 ? "" : " type='text/javascript'") . ">",
+	      \ s:settings.use_xhtml ? '//<![CDATA[' : "<!--"])
+      endif
+
+      " Insert styles from all the generated html documents and additional styles
+      " for the table-based layout of the side-by-side diff. The diff should take
+      " up the full browser window (but not more), and be static in size,
+      " horizontally scrollable when the lines are too long. Otherwise, the diff
+      " is pretty useless for really long lines. {{{
+      if s:settings.use_css
+	call append(style_start,
+	      \ ['<style' . (s:html5 ? '' : 'type="text/css"') . '>']+
+	      \ style+
+	      \ [ s:settings.use_xhtml ? '' : '<!--',
+	      \   'table { table-layout: fixed; }',
+	      \   'html, body, table, tbody { width: 100%; margin: 0; padding: 0; }',
+	      \   'table, td, th { border: 1px solid; }',
+	      \   'td { vertical-align: top; }',
+	      \   'th, td { width: '.printf("%.1f",100.0/len(a:win_list)).'%; }',
+	      \   'td div { overflow: auto; }',
+	      \   s:settings.use_xhtml ? '' : '-->',
+	      \   '</style>'
+	      \])
+      endif "}}}
+    endif
   endif
 
   let &paste = s:old_paste
