summaryrefslogtreecommitdiffstats
path: root/runtime/autoload/tohtml.vim
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2010-07-11 22:38:52 +0200
committerBram Moolenaar <Bram@vim.org>2010-07-11 22:38:52 +0200
commitb02cbe34686b913e70a64969c0a92998c7872009 (patch)
tree8a929235b33547b020df1b5dd71d7d921a9ca309 /runtime/autoload/tohtml.vim
parent69f787af848f4c1271d331a2ae541267fa1404fa (diff)
When the buffer is in diff mode, have :TOhtml create HTML to show the diff
side-by-side. (Christian Brabandt)
Diffstat (limited to 'runtime/autoload/tohtml.vim')
-rw-r--r--runtime/autoload/tohtml.vim111
1 files changed, 111 insertions, 0 deletions
diff --git a/runtime/autoload/tohtml.vim b/runtime/autoload/tohtml.vim
new file mode 100644
index 0000000000..8a51b35440
--- /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