" Vim plugin for converting a syntax highlighted file to HTML.
" Maintainer: Ben Fritz <fritzophrenic@gmail.com>
-" Last Change: 2010 Aug 07
+" Last Change: 2010 Aug 12
"
" The core of the code is in $VIMRUNTIME/autoload/tohtml.vim and
" $VIMRUNTIME/syntax/2html.vim
"
" TODO:
-" * Bug: error thrown when nowrapscan is set
-" * Line number column has one character too few on empty lines
-" without CSS.
+" * Restore open/closed folds and cursor position after processing each file
+" with option not to restore for speed increase
" * Add extra meta info (generation time, etc.)
" * Tidy up so we can use strict doctype more?
+" * Implementation detail: add threshold for writing the lines to the html
+" buffer before we're done (5000 or so lines should do it)
" * TODO comments for code cleanup scattered throughout
if exists('g:loaded_2html_plugin')
finish
endif
-let g:loaded_2html_plugin = 'vim7.3_v4'
+let g:loaded_2html_plugin = 'vim7.3_v6'
" Define the :TOhtml command when:
" - 'compatible' is not set
" Vim syntax support file
" Maintainer: Ben Fritz <fritzophrenic@gmail.com>
-" Last Change: 2010 Aug 07
+" Last Change: 2010 Aug 12
"
" Additional contributors:
"
" Replace the reserved html characters
let formatted = substitute(substitute(substitute(substitute(substitute(formatted, '&', '\&', 'g'), '<', '\<', 'g'), '>', '\>', 'g'), '"', '\"', 'g'), "\x0c", '<hr class="PAGE-BREAK">', 'g')
- " Replace double spaces and leading spaces
+ " Replace double spaces, leading spaces, and trailing spaces if needed
if ' ' != s:HtmlSpace
let formatted = substitute(formatted, ' ', s:HtmlSpace . s:HtmlSpace, 'g')
let formatted = substitute(formatted, '^ ', s:HtmlSpace, 'g')
+ let formatted = substitute(formatted, ' \+$', s:HtmlSpace, 'g')
endif
" Enclose in a span of class style_name
" Set some options to make it work faster.
" Don't report changes for :substitute, there will be many of them.
+" Don't change other windows; turn off scroll bind temporarily
let s:old_title = &title
let s:old_icon = &icon
let s:old_et = &l:et
+let s:old_bind = &l:scrollbind
let s:old_report = &report
let s:old_search = @/
let s:old_more = &more
setlocal et
set nomore
set report=1000000
+setlocal noscrollbind
if exists(':ownsyntax') && exists('w:current_syntax')
let s:current_syntax = w:current_syntax
" on the new window, set the least time-consuming fold method
let s:old_fdm = &foldmethod
+let s:old_fen = &foldenable
setlocal foldmethod=manual
+setlocal nofoldenable
let s:newwin = winnr()
let s:orgwin = bufwinnr(s:orgbufnr)
\ ".closed-fold:hover > .toggle-filler { display: none; }",
\ ".closed-fold:hover > .Folded { display: none; }",
\ s:settings.use_xhtml ? "" : '-->',
- \ '<style>'])
+ \ '</style>'])
" TODO: IE7 doesn't *actually* support XHTML, maybe we should remove this.
" But if it's served up as tag soup, maybe the following will work, so
" leave it in for now.
%s:\s\+$::e
" Restore old settings
+let &l:foldenable = s:old_fen
let &l:foldmethod = s:old_fdm
let &report = s:old_report
let &title = s:old_title
let &more = s:old_more
exe s:orgwin . "wincmd w"
let &l:et = s:old_et
+let &l:scrollbind = s:old_bind
exe s:newwin . "wincmd w"
exec 'resize' s:old_winheight
let &l:winfixheight = s:old_winfixheight
" Save a little bit of memory (worth doing?)
unlet s:htmlfont
-unlet s:old_et s:old_paste s:old_icon s:old_report s:old_title s:old_search s:old_magic s:old_more s:old_fdm s:old_winheight s:old_winfixheight
-unlet s:whatterm s:idlist s:lnum s:end s:margin s:fgc s:bgc
+unlet s:old_et s:old_paste s:old_icon s:old_report s:old_title s:old_search
+unlet s:old_magic s:old_more s:old_fdm s:old_fen s:old_winheight
+unlet s:whatterm s:idlist s:lnum s:end s:margin s:fgc s:bgc s:old_winfixheight
unlet! s:col s:id s:attr s:len s:line s:new s:expandedtab s:concealinfo
-unlet! s:orgwin s:newwin s:orgbufnr s:idx s:i s:offset s:ls s:origwin_stl s:newwin_stl s:current_syntax
+unlet! s:orgwin s:newwin s:orgbufnr s:idx s:i s:offset s:ls s:origwin_stl
+unlet! s:newwin_stl s:current_syntax
if !v:profiling
delfunc s:HtmlColor
delfunc s:HtmlFormat
endif
endif
-unlet! s:new_lnum s:diffattr s:difffillchar s:foldfillchar s:HtmlSpace s:LeadingSpace s:HtmlEndline s:firstfold s:foldcolumn
+unlet! s:new_lnum s:diffattr s:difffillchar s:foldfillchar s:HtmlSpace
+unlet! s:LeadingSpace s:HtmlEndline s:firstfold s:foldcolumn
unlet s:foldstack s:allfolds s:foldId s:numcol s:settings
let &cpo = s:cpo_sav