1" Vim plugin for converting a syntax highlighted file to HTML. 2" Maintainer: Ben Fritz <[email protected]> 3" Last Change: 2018 Nov 11 4" 5" The core of the code is in $VIMRUNTIME/autoload/tohtml.vim and 6" $VIMRUNTIME/syntax/2html.vim 7" 8if exists('g:loaded_2html_plugin') 9 finish 10endif 11let g:loaded_2html_plugin = 'vim8.1_v1' 12 13" 14" Changelog: {{{ 15" 8.1_v1 (this version): Fix Bitbucket issue #6: Don't generate empty script 16" tag. 17" Fix Bitbucket issue #5: javascript should 18" declare variables with "var". 19" Fix Bitbucket issue #13: errors thrown sourcing 20" 2html.vim directly when plugins not loaded. 21" Fix Bitbucket issue #16: support 'vartabstop'. 22" 23" 7.4 updates: {{{ 24" 7.4_v2 (Vim 7.4.0899): Fix error raised when converting a diff containing 25" an empty buffer. Jan Stocker: allow g:html_font to 26" take a list so it is easier to specfiy fallback 27" fonts in the generated CSS. 28" 7.4_v1 (Vim 7.4.0000): Fix modeline mangling for new "Vim:" format, and 29" also for version-specific modelines like "vim>703:". 30"}}} 31" 32" 7.3 updates: {{{ 33" 7.3_v14 (Vim 7.3.1246): Allow suppressing line number anchors using 34" g:html_line_ids=0. Allow customizing 35" important IDs (like line IDs and fold IDs) using 36" g:html_id_expr evalutated when the buffer conversion 37" is started. 38" 7.3_v13 (Vim 7.3.1088): Keep foldmethod at manual in the generated file and 39" insert modeline to set it to manual. 40" Fix bug: diff mode with 2 unsaved buffers creates a 41" duplicate of one buffer instead of including both. 42" Add anchors to each line so you can put '#L123' 43" or '#123' at the end of the URL to jump to line 123 44" (idea by Andy Spencer). Add javascript to open folds 45" to show the anchor being jumped to if it is hidden. 46" Fix XML validation error: &nsbp; not part of XML. 47" Allow TOhtml to chain together with other commands 48" using |. 49" 7.3_v12 (Vim 7.3.0616): Fix modeline mangling to also work for when multiple 50" highlight groups make up the start-of-modeline text. 51" Improve render time of page with uncopyable regions 52" by not using one-input-per-char. Change name of 53" uncopyable option from html_unselectable to 54" html_prevent_copy. Added html_no_invalid option and 55" default to inserting invalid markup for uncopyable 56" regions to prevent MS Word from pasting undeletable 57" <input> elements. Fix 'cpo' handling (Thilo Six). 58" 7.3_v12b1: Add html_unselectable option. Rework logic to 59" eliminate post-processing substitute commands in 60" favor of doing the work up front. Remove unnecessary 61" special treatment of 'LineNr' highlight group. Minor 62" speed improvements. Fix modeline mangling in 63" generated output so it works for text in the first 64" column. Fix missing line number and fold column in 65" diff filler lines. Fix that some fonts have a 1px 66" gap (using a dirty hack, improvements welcome). Add 67" "colorscheme" meta tag. Does NOT include support for 68" the new default foldtext added in v11, as the patch 69" adding it has not yet been included in Vim. 70" 7.3_v11 ( unreleased ): Support new default foldtext from patch by Christian 71" Brabandt in 72" http://groups.google.com/d/topic/vim_dev/B6FSGfq9VoI/discussion. 73" This patch has not yet been included in Vim, thus 74" these changes are removed in the next version. 75" 7.3_v10 (Vim 7.3.0227): Fix error E684 when converting a range wholly inside 76" multiple nested folds with dynamic folding on. 77" Also fix problem with foldtext in this situation. 78" 7.3_v9 (Vim 7.3.0170): Add html_pre_wrap option active with html_use_css 79" and without html_no_pre, default value same as 80" 'wrap' option, (Andy Spencer). Don't use 81" 'fileencoding' for converted document encoding if 82" 'buftype' indicates a special buffer which isn't 83" written. 84" 7.3_v8 (Vim 7.3.0100): Add html_expand_tabs option to allow leaving tab 85" characters in generated output (Andy Spencer). 86" Escape text that looks like a modeline so Vim 87" doesn't use anything in the converted HTML as a 88" modeline. Bugfixes: Fix folding when a fold starts 89" before the conversion range. Remove fold column when 90" there are no folds. 91" 7.3_v7 (Vim 7-3-0063): see betas released on vim_dev below: 92" 7.3_v7b3: Fixed bug, convert Unicode to UTF-8 all the way. 93" 7.3_v7b2: Remove automatic detection of encodings that are not 94" supported by all major browsers according to 95" http://wiki.whatwg.org/wiki/Web_Encodings and 96" convert to UTF-8 for all Unicode encodings. Make 97" HTML encoding to Vim encoding detection be 98" case-insensitive for built-in pairs. 99" 7.3_v7b1: Remove use of setwinvar() function which cannot be 100" called in restricted mode (Andy Spencer). Use 101" 'fencoding' instead of 'encoding' to determine by 102" charset, and make sure the 'fenc' of the generated 103" file matches its indicated charset. Add charsets for 104" all of Vim's natively supported encodings. 105" 7.3_v6 (Vim 7.3.0000): Really fix bug with 'nowrapscan', 'magic' and other 106" user settings interfering with diff mode generation, 107" trailing whitespace (e.g. line number column) when 108" using html_no_pre, and bugs when using 109" html_hover_unfold. 110" 7.3_v5 ( unreleased ): Fix bug with 'nowrapscan' and also with out-of-sync 111" folds in diff mode when first line was folded. 112" 7.3_v4 (Vim 7.3.0000): Bugfixes, especially for xhtml markup, and diff mode 113" 7.3_v3 (Vim 7.3.0000): Refactor option handling and make html_use_css 114" default to true when not set to anything. Use strict 115" doctypes where possible. Rename use_xhtml option to 116" html_use_xhtml for consistency. Use .xhtml extension 117" when using this option. Add meta tag for settings. 118" 7.3_v2 (Vim 7.3.0000): Fix syntax highlighting in diff mode to use both the 119" diff colors and the normal syntax colors 120" 7.3_v1 (Vim 7.3.0000): Add conceal support and meta tags in output 121"}}} 122"}}} 123 124" TODO: {{{ 125" * Check the issue tracker: 126" https://bitbucket.org/fritzophrenic/vim-tohtml/issues?status=new&status=open 127" * Options for generating the CSS in external style sheets. New :TOcss 128" command to convert the current color scheme into a (mostly) generic CSS 129" stylesheet which can be re-used. Alternate stylesheet support? Good start 130" by Erik Falor 131" ( https://groups.google.com/d/topic/vim_use/7XTmC4D22dU/discussion ). 132" * Add optional argument to :TOhtml command to specify mode (gui, cterm, 133" term) to use for the styling. Suggestion by "nacitar". 134" * Add way to override or specify which RGB colors map to the color numbers 135" in cterm. Get better defaults than just guessing? Suggestion by "nacitar". 136" * Disable filetype detection until after all processing is done. 137" * Add option for not generating the hyperlink on stuff that looks like a 138" URL? Or just color the link to fit with the colorscheme (and only special 139" when hovering)? 140" * Bug: Opera does not allow printing more than one page if uncopyable 141" regions is turned on. Possible solution: Add normal text line numbers with 142" display:none, set to display:inline for print style sheets, and hide 143" <input> elements for print, to allow Opera printing multiple pages (and 144" other uncopyable areas?). May need to make the new text invisible to IE 145" with conditional comments to prevent copying it, IE for some reason likes 146" to copy hidden text. Other browsers too? 147" * Bug: still a 1px gap throughout the fold column when html_prevent_copy is 148" "fn" in some browsers. Specifically, in Chromium on Ubuntu (but not Chrome 149" on Windows). Perhaps it is font related? 150" * Bug: still some gaps in the fold column when html_prevent_copy contains 151" 'd' and showing the whole diff (observed in multiple browsers). Only gaps 152" on diff lines though. 153" * Undercurl support via CSS3, with fallback to dotted or something: 154" https://groups.google.com/d/topic/vim_use/BzXA6He1pHg/discussion 155" * Redo updates for modified default foldtext (v11) when/if the patch is 156" accepted to modify it. 157" * Test case +diff_one_file-dynamic_folds+expand_tabs-hover_unfold 158" +ignore_conceal-ignore_folding+no_foldcolumn+no_pre+no_progress 159" +number_lines-pre_wrap-use_css+use_xhtml+whole_filler.xhtml 160" does not show the whole diff filler as it is supposed to? 161" * Bug: when 'isprint' is wrong for the current encoding, will generate 162" invalid content. Can/should anything be done about this? Maybe a separate 163" plugin to correct 'isprint' based on encoding? 164" * Check to see if the windows-125\d encodings actually work in Unix without 165" the 8bit- prefix. Add prefix to autoload dictionaries for Unix if not. 166" * Font auto-detection similar to 167" http://www.vim.org/scripts/script.php?script_id=2384 but for a variety of 168" platforms. 169" * Pull in code from http://www.vim.org/scripts/script.php?script_id=3113 : 170" - listchars support 171" - full-line background highlight 172" - other? 173" * Make it so deleted lines in a diff don't create side-scrolling (get it 174" free with full-line background highlight above). 175" * Restore open/closed folds and cursor position after processing each file 176" with option not to restore for speed increase. 177" * Add extra meta info (generation time, etc.)? 178" * Tidy up so we can use strict doctype in even more situations 179" * Implementation detail: add threshold for writing the lines to the html 180" buffer before we're done (5000 or so lines should do it) 181" * TODO comments for code cleanup scattered throughout 182"}}} 183 184" Define the :TOhtml command when: 185" - 'compatible' is not set 186" - this plugin or user override was not already loaded 187" - user commands are available. {{{ 188if !&cp && !exists(":TOhtml") && has("user_commands") 189 command -range=% -bar TOhtml :call tohtml#Convert2HTML(<line1>, <line2>) 190endif "}}} 191 192" Make sure any patches will probably use consistent indent 193" vim: ts=8 sw=2 sts=2 noet fdm=marker 194