When the buffer is in diff mode, have :TOhtml create HTML to show the diff
side-by-side.  (Christian Brabandt)
diff --git a/runtime/autoload/tohtml.vim b/runtime/autoload/tohtml.vim
new file mode 100644
index 0000000..8a51b35
--- /dev/null
+++ b/runtime/autoload/tohtml.vim
@@ -0,0 +1,111 @@
+" Vim autoload file for the tohtml plugin.
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2010 Jul 11
+"
+" Diff2HTML() added by Christian Brabandt <cb@256bit.org>
+
+func! tohtml#Convert2HTML(line1, line2)
+  if !&diff || exists("g:diff_one_file")
+    if a:line2 >= a:line1
+      let g:html_start_line = a:line1
+      let g:html_end_line = a:line2
+    else
+      let g:html_start_line = a:line2
+      let g:html_end_line = a:line1
+    endif
+    runtime syntax/2html.vim
+  else
+    let win_list = []
+    let buf_list = []
+    windo | if (&diff) | call add(win_list, winbufnr(0)) | endif
+    let save_hwf = exists("g:html_whole_filler")
+    let g:html_whole_filler = 1
+    for window in win_list
+      exe ":" . bufwinnr(window) . "wincmd w"
+      let g:html_start_line = 1
+      let g:html_end_line = line('$')
+      runtime syntax/2html.vim
+      call add(buf_list, bufnr('%'))
+    endfor
+    if !save_hwf
+      unlet g:html_whole_filler
+    endif
+    call tohtml#Diff2HTML(win_list, buf_list)
+  endif
+
+  unlet g:html_start_line
+  unlet g:html_end_line
+endfunc
+
+func! tohtml#Diff2HTML(win_list, buf_list)
+  let style = []
+  let html = []
+  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>')
+  call add(html, '<head>')
+  call add(html, '<title>diff</title>')
+  call add(html, '<meta name="Generator" content="Vim/7.3">')
+  "call add(html, '<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">')
+  call add(html, '</head>')
+  call add(html, '<body>')
+  call add(html, '<table border="1" width="100%">')
+  "call add(html, '<font face="monospace">')
+  call add(html, '<tr>')
+  for buf in a:win_list
+    call add(html, '<th>'.bufname(buf).'</th>')
+  endfor
+  call add(html, '</tr><tr>')
+
+  for buf in a:buf_list
+    let temp = []
+    exe bufwinnr(buf) . 'wincmd w'
+
+    " Grab the style information.  Some of this will be duplicated...
+    1
+    let style_start = search('^<style type="text/css">')
+    1
+    let style_end = search('^</style>')
+    if style_start > 0 && style_end > 0
+      let style += getline(style_start + 1, style_end - 1)
+    endif
+
+    " Delete those parts that are not needed so
+    " we can include the rest into the resulting table
+    1,/^<body/d_
+    $
+    ?</body>?,$d_
+    let temp = getline(1,'$')
+    " undo deletion of start and end part
+    " so we can later save the file as valid html
+    normal 2u
+    call add(html, '<td nowrap valign="top">')
+    let html += temp
+    call add(html, '</td>')
+
+    " Close this buffer
+    quit!
+  endfor
+
+  call add(html, '</tr>')
+  call add(html, '</table>')
+  call add(html, '</body>')
+  call add(html, '</html>')
+
+  let i = 1
+  let name = "Diff" . ".html"
+  while filereadable(name)
+    let name = substitute(name, '\d*\.html$', '', '') . i . ".html"
+    let i += 1
+  endw
+  exe "new " . name
+  set modifiable
+  call append(0, html)
+  if len(style) > 0
+    1
+    let style_start = search('^</head>')
+    call append(style_start, '</style>')
+    call append(style_start, style)
+    call append(style_start, '<style type="text/css">')
+  endif
+endfunc