1" Vim plugin for converting a syntax highlighted file to HTML. 2" Maintainer: Ben Fritz <[email protected]> 3" Last Change: 2012 Jul 12 4" 5" The core of the code is in $VIMRUNTIME/autoload/tohtml.vim and 6" $VIMRUNTIME/syntax/2html.vim 7" 8" TODO: {{{ 9" * Bug: still a 1px gap throughout the fold column when html_prevent_copy is 10" "fn" in some browsers. Specifically, in Chromium on Ubuntu (but not Chrome 11" on Windows). Perhaps it is font related? 12" * Bug: still some gaps in the fold column when html_prevent_copy contains 13" 'd' and showing the whole diff (observed in multiple browsers). Only gaps 14" on diff lines though. 15" * anchors on each line so you can do file.html#1234 to get to line 1234 16" * add a modeline to the generated html to set nofoldenable or fdm=manual 17" because syntax folding takes a terribly long time to work with the weird 18" formatting the script does. 19" * Options for generating the CSS in external style sheets. New :TOcss 20" command to convert the current color scheme into a (mostly) generic CSS 21" stylesheet which can be re-used. Alternate stylesheet support? 22" * Undercurl support via CSS3, with fallback to dotted or something: 23" https://groups.google.com/d/topic/vim_use/BzXA6He1pHg/discussion 24" * Redo updates for modified default foldtext (v11) when/if the patch is 25" accepted to modify it. 26" * Test case +diff_one_file-dynamic_folds+expand_tabs-hover_unfold 27" +ignore_conceal-ignore_folding+no_foldcolumn+no_pre+no_progress 28" +number_lines-pre_wrap-use_css+use_xhtml+whole_filler.xhtml 29" does not show the whole diff filler as it is supposed to. 30" * Add option for not generating the hyperlink on stuff that looks like a 31" URL? Or just color the link to fit with the colorscheme (and only special 32" when hovering)? 33" * Bug: when 'isprint' is wrong for the current encoding, will generate 34" invalid content. Can/should anything be done about this? Maybe a separate 35" plugin to correct 'isprint' based on encoding? 36" * Check to see if the windows-125\d encodings actually work in Unix without 37" the 8bit- prefix. Add prefix to autoload dictionaries for Unix if not. 38" * Font auto-detection similar to 39" http://www.vim.org/scripts/script.php?script_id=2384 but for a variety of 40" platforms. 41" * Error thrown when sourcing 2html.vim directly when plugins are not loaded. 42" * Pull in code from http://www.vim.org/scripts/script.php?script_id=3113 : 43" - listchars support 44" - full-line background highlight 45" - other? 46" * Explicitly trigger IE8+ Standards Mode? Doesn't seem necessary yet. 47" * Make it so deleted lines in a diff don't create side-scrolling (get it 48" free with full-line background highlight above). 49" * Restore open/closed folds and cursor position after processing each file 50" with option not to restore for speed increase. 51" * Add extra meta info (generation time, etc.)? 52" * Tidy up so we can use strict doctype in even more situations 53" * Implementation detail: add threshold for writing the lines to the html 54" buffer before we're done (5000 or so lines should do it) 55" * TODO comments for code cleanup scattered throughout 56"}}} 57 58if exists('g:loaded_2html_plugin') 59 finish 60endif 61let g:loaded_2html_plugin = 'vim7.3_v12' 62 63" 64" Changelog: {{{ 65" 66" 7.3_v12 (this version): Fix modeline mangling to also work for when multiple 67" highlight groups make up the start-of-modeline text. 68" Improve render time of page with uncopyable regions 69" by not using one-input-per-char. Change name of 70" uncopyable option from html_unselectable to 71" html_prevent_copy. Added html_no_invalid option and 72" default to inserting invalid markup for uncopyable 73" regions to prevent MS Word from pasting undeletable 74" <input> elements. Fix 'cpo' handling (Thilo Six). 75" 7.3_v12b1: Add html_unselectable option. Rework logic to 76" eliminate post-processing substitute commands in 77" favor of doing the work up front. Remove unnecessary 78" special treatment of 'LineNr' highlight group. Minor 79" speed improvements. Fix modeline mangling in 80" generated output so it works for text in the first 81" column. Fix missing line number and fold column in 82" diff filler lines. Fix that some fonts have a 1px 83" gap (using a dirty hack, improvements welcome). Add 84" "colorscheme" meta tag. Does NOT include support for 85" the new default foldtext added in v11, as the patch 86" adding it has not yet been included in Vim. 87" 7.3_v11 ( unreleased ): Support new default foldtext from patch by Christian 88" Brabandt in 89" http://groups.google.com/d/topic/vim_dev/B6FSGfq9VoI/discussion. 90" This patch has not yet been included in Vim, thus 91" these changes are removed in the next version. 92" 7.3_v10 (fd09a9c8468e): Fix error E684 when converting a range wholly inside 93" multiple nested folds with dynamic folding on. 94" Also fix problem with foldtext in this situation. 95" 7.3_v9 (0877b8d6370e): Add html_pre_wrap option active with html_use_css 96" and without html_no_pre, default value same as 97" 'wrap' option, (Andy Spencer). Don't use 98" 'fileencoding' for converted document encoding if 99" 'buftype' indicates a special buffer which isn't 100" written. 101" 7.3_v8 (85c5a72551e2): Add html_expand_tabs option to allow leaving tab 102" characters in generated output (Andy Spencer). 103" Escape text that looks like a modeline so Vim 104" doesn't use anything in the converted HTML as a 105" modeline. Bugfixes: Fix folding when a fold starts 106" before the conversion range. Remove fold column when 107" there are no folds. 108" 7.3_v7 (840c3cadb842): see betas released on vim_dev below: 109" 7.3_v7b3: Fixed bug, convert Unicode to UTF-8 all the way. 110" 7.3_v7b2: Remove automatic detection of encodings that are not 111" supported by all major browsers according to 112" http://wiki.whatwg.org/wiki/Web_Encodings and 113" convert to UTF-8 for all Unicode encodings. Make 114" HTML encoding to Vim encoding detection be 115" case-insensitive for built-in pairs. 116" 7.3_v7b1: Remove use of setwinvar() function which cannot be 117" called in restricted mode (Andy Spencer). Use 118" 'fencoding' instead of 'encoding' to determine by 119" charset, and make sure the 'fenc' of the generated 120" file matches its indicated charset. Add charsets for 121" all of Vim's natively supported encodings. 122" 7.3_v6 (0d3f0e3d289b): Really fix bug with 'nowrapscan', 'magic' and other 123" user settings interfering with diff mode generation, 124" trailing whitespace (e.g. line number column) when 125" using html_no_pre, and bugs when using 126" html_hover_unfold. 127" 7.3_v5 ( unreleased ): Fix bug with 'nowrapscan' and also with out-of-sync 128" folds in diff mode when first line was folded. 129" 7.3_v4 (7e008c174cc3): Bugfixes, especially for xhtml markup, and diff mode 130" 7.3_v3 (a29075150aee): Refactor option handling and make html_use_css 131" default to true when not set to anything. Use strict 132" doctypes where possible. Rename use_xhtml option to 133" html_use_xhtml for consistency. Use .xhtml extension 134" when using this option. Add meta tag for settings. 135" 7.3_v2 (80229a724a11): Fix syntax highlighting in diff mode to use both the 136" diff colors and the normal syntax colors 137" 7.3_v1 (e7751177126b): Add conceal support and meta tags in output 138" Pre-v1 baseline: Mercurial changeset 3c9324c0800e 139"}}} 140 141" Define the :TOhtml command when: 142" - 'compatible' is not set 143" - this plugin was not already loaded 144" - user commands are available. {{{ 145if !&cp && !exists(":TOhtml") && has("user_commands") 146 command -range=% TOhtml :call tohtml#Convert2HTML(<line1>, <line2>) 147endif "}}} 148 149" Make sure any patches will probably use consistent indent 150" vim: ts=8 sw=2 sts=2 noet fdm=marker 151