diff options
author | Bram Moolenaar <Bram@vim.org> | 2010-07-11 22:38:52 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2010-07-11 22:38:52 +0200 |
commit | b02cbe34686b913e70a64969c0a92998c7872009 (patch) | |
tree | 8a929235b33547b020df1b5dd71d7d921a9ca309 /runtime/autoload/tohtml.vim | |
parent | 69f787af848f4c1271d331a2ae541267fa1404fa (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.vim | 111 |
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 |