Bram Moolenaar | b02cbe3 | 2010-07-11 22:38:52 +0200 | [diff] [blame] | 1 | " Vim autoload file for the tohtml plugin. |
| 2 | " Maintainer: Bram Moolenaar <Bram@vim.org> |
| 3 | " Last Change: 2010 Jul 11 |
| 4 | " |
| 5 | " Diff2HTML() added by Christian Brabandt <cb@256bit.org> |
| 6 | |
| 7 | func! tohtml#Convert2HTML(line1, line2) |
| 8 | if !&diff || exists("g:diff_one_file") |
| 9 | if a:line2 >= a:line1 |
| 10 | let g:html_start_line = a:line1 |
| 11 | let g:html_end_line = a:line2 |
| 12 | else |
| 13 | let g:html_start_line = a:line2 |
| 14 | let g:html_end_line = a:line1 |
| 15 | endif |
| 16 | runtime syntax/2html.vim |
| 17 | else |
| 18 | let win_list = [] |
| 19 | let buf_list = [] |
| 20 | windo | if (&diff) | call add(win_list, winbufnr(0)) | endif |
| 21 | let save_hwf = exists("g:html_whole_filler") |
| 22 | let g:html_whole_filler = 1 |
| 23 | for window in win_list |
| 24 | exe ":" . bufwinnr(window) . "wincmd w" |
| 25 | let g:html_start_line = 1 |
| 26 | let g:html_end_line = line('$') |
| 27 | runtime syntax/2html.vim |
| 28 | call add(buf_list, bufnr('%')) |
| 29 | endfor |
| 30 | if !save_hwf |
| 31 | unlet g:html_whole_filler |
| 32 | endif |
| 33 | call tohtml#Diff2HTML(win_list, buf_list) |
| 34 | endif |
| 35 | |
| 36 | unlet g:html_start_line |
| 37 | unlet g:html_end_line |
| 38 | endfunc |
| 39 | |
| 40 | func! tohtml#Diff2HTML(win_list, buf_list) |
| 41 | let style = [] |
| 42 | let html = [] |
| 43 | call add(html, '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"') |
| 44 | call add(html, ' "http://www.w3.org/TR/html4/loose.dtd">') |
| 45 | call add(html, '<html>') |
| 46 | call add(html, '<head>') |
| 47 | call add(html, '<title>diff</title>') |
| 48 | call add(html, '<meta name="Generator" content="Vim/7.3">') |
| 49 | "call add(html, '<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">') |
| 50 | call add(html, '</head>') |
| 51 | call add(html, '<body>') |
| 52 | call add(html, '<table border="1" width="100%">') |
| 53 | "call add(html, '<font face="monospace">') |
| 54 | call add(html, '<tr>') |
| 55 | for buf in a:win_list |
| 56 | call add(html, '<th>'.bufname(buf).'</th>') |
| 57 | endfor |
| 58 | call add(html, '</tr><tr>') |
| 59 | |
| 60 | for buf in a:buf_list |
| 61 | let temp = [] |
| 62 | exe bufwinnr(buf) . 'wincmd w' |
| 63 | |
| 64 | " Grab the style information. Some of this will be duplicated... |
| 65 | 1 |
| 66 | let style_start = search('^<style type="text/css">') |
| 67 | 1 |
| 68 | let style_end = search('^</style>') |
| 69 | if style_start > 0 && style_end > 0 |
| 70 | let style += getline(style_start + 1, style_end - 1) |
| 71 | endif |
| 72 | |
| 73 | " Delete those parts that are not needed so |
| 74 | " we can include the rest into the resulting table |
| 75 | 1,/^<body/d_ |
| 76 | $ |
| 77 | ?</body>?,$d_ |
| 78 | let temp = getline(1,'$') |
| 79 | " undo deletion of start and end part |
| 80 | " so we can later save the file as valid html |
| 81 | normal 2u |
| 82 | call add(html, '<td nowrap valign="top">') |
| 83 | let html += temp |
| 84 | call add(html, '</td>') |
| 85 | |
| 86 | " Close this buffer |
| 87 | quit! |
| 88 | endfor |
| 89 | |
| 90 | call add(html, '</tr>') |
| 91 | call add(html, '</table>') |
| 92 | call add(html, '</body>') |
| 93 | call add(html, '</html>') |
| 94 | |
| 95 | let i = 1 |
| 96 | let name = "Diff" . ".html" |
| 97 | while filereadable(name) |
| 98 | let name = substitute(name, '\d*\.html$', '', '') . i . ".html" |
| 99 | let i += 1 |
| 100 | endw |
| 101 | exe "new " . name |
| 102 | set modifiable |
| 103 | call append(0, html) |
| 104 | if len(style) > 0 |
| 105 | 1 |
| 106 | let style_start = search('^</head>') |
| 107 | call append(style_start, '</style>') |
| 108 | call append(style_start, style) |
| 109 | call append(style_start, '<style type="text/css">') |
| 110 | endif |
| 111 | endfunc |