codekingpro/portable-devtools
114k
1" Vim plugin for converting a syntax highlighted file to HTML.2" Maintainer: Ben Fritz <fritzophrenic@gmail.com>3" Last Change: 2023 Sep 074"5" The core of the code is in $VIMRUNTIME/autoload/tohtml.vim and6" $VIMRUNTIME/syntax/2html.vim7"8if exists('g:loaded_2html_plugin')9 finish10endif11let g:loaded_2html_plugin = 'vim9.0_v2'12 13"14" Changelog: {{{15" 9.0_v2 (this version): - Warn if using deprecated g:use_xhtml option16" - Change default g:html_use_input_for_pc to "none"17" instead of "fallback". All modern browsers support18" the "user-select: none" and "content:" CSS19" properties so the older method relying on extra20" markup and unspecified browser/app clipboard21" handling is only needed in rare special cases.22" - Fix SourceForge issue #33: generate diff filler23" correctly when new lines have been added to or24" removed from end of buffer.25" - Fix SourceForge issue #32/Vim Github issue #8547:26" use translated highlight ID for styling the27" special-use group names (e.g. LineNr) used28" directly by name in the 2html processing.29" - Fix SourceForge issue #26, refactoring to use30" :let-heredoc style string assignment and31" additional fixes for ".." vs. "." style string32" concatenation. Requires Vim v8.1.1354 or higher.33" 9.0_v1 (Vim 9.0.1275): - Implement g:html_no_doc and g:html_no_modeline34" for diff mode. Add tests.35" (Vim 9.0.1122): NOTE: no version string update for this version!36" - Bugfix for variable name in g:html_no_doc37" (Vim 9.0.0819): NOTE: no version string update for this version!38" - Add options g:html_no_doc, g:html_no_lines,39" and g:html_no_modeline (partially included in Vim40" runtime prior to version string update).41" - Updates for new Vim9 string append style (i.e. use42" ".." instead of "."). Requires Vim version43" 8.1.1114 or higher.44"45" 8.1 updates: {{{46" 8.1_v2 (Vim 8.1.2312): - Fix SourceForge issue #19: fix calculation of tab47" stop position to use in expanding a tab, when that48" tab occurs after a syntax match which in turn49" comes after previously expanded tabs.50" - Set eventignore while splitting a window for the51" destination file to ignore FileType events;52" speeds up processing when the destination file53" already exists and HTML highlight takes too long.54" - Fix SourceForge issue #20: progress bar could not be55" seen when DiffDelete background color matched56" StatusLine background color. Added TOhtmlProgress57" highlight group for manual user override, but58" calculate it to be visible compared to StatusLine59" by default.60" - Fix SourceForge issue #1: Remove workaround for old61" browsers which don't support 'ch' CSS unit, since62" all modern browsers, including IE>=9, support it.63" - Fix SourceForge issue #10: support termguicolors64" - Fix SourceForge issue #21: default to using65" generated content instead of <input> tags for66" uncopyable text, so that text is correctly67" prevented from being copied in chrome. Use68" g:html_use_input_for_pc option to control the69" method used.70" - Switch to HTML5 to allow using vnu as a validator71" in unit test.72" - Fix fallback sizing of <input> tags for browsers73" without "ch" support.74" - Fix cursor on unselectable diff filler text.75" 8.1_v1 (Vim 8.1.0528): - Fix SourceForge issue #6: Don't generate empty76" script tag.77" - Fix SourceForge issue #5: javascript should78" declare variables with "var".79" - Fix SourceForge issue #13: errors thrown sourcing80" 2html.vim directly when plugins not loaded.81" - Fix SourceForge issue #16: support 'vartabstop'.82"}}}83"84" 7.4 updates: {{{85" 7.4_v2 (Vim 7.4.0899): Fix error raised when converting a diff containing86" an empty buffer. Jan Stocker: allow g:html_font to87" take a list so it is easier to specfiy fallback88" fonts in the generated CSS.89" 7.4_v1 (Vim 7.4.0000): Fix modeline mangling for new "Vim:" format, and90" also for version-specific modelines like "vim>703:".91"}}}92"93" 7.3 updates: {{{94" 7.3_v14 (Vim 7.3.1246): Allow suppressing line number anchors using95" g:html_line_ids=0. Allow customizing96" important IDs (like line IDs and fold IDs) using97" g:html_id_expr evaluated when the buffer conversion98" is started.99" 7.3_v13 (Vim 7.3.1088): Keep foldmethod at manual in the generated file and100" insert modeline to set it to manual.101" Fix bug: diff mode with 2 unsaved buffers creates a102" duplicate of one buffer instead of including both.103" Add anchors to each line so you can put '#L123'104" or '#123' at the end of the URL to jump to line 123105" (idea by Andy Spencer). Add javascript to open folds106" to show the anchor being jumped to if it is hidden.107" Fix XML validation error: &nsbp; not part of XML.108" Allow TOhtml to chain together with other commands109" using |.110" 7.3_v12 (Vim 7.3.0616): Fix modeline mangling to also work for when multiple111" highlight groups make up the start-of-modeline text.112" Improve render time of page with uncopyable regions113" by not using one-input-per-char. Change name of114" uncopyable option from html_unselectable to115" html_prevent_copy. Added html_no_invalid option and116" default to inserting invalid markup for uncopyable117" regions to prevent MS Word from pasting undeletable118" <input> elements. Fix 'cpo' handling (Thilo Six).119" 7.3_v12b1: Add html_unselectable option. Rework logic to120" eliminate post-processing substitute commands in121" favor of doing the work up front. Remove unnecessary122" special treatment of 'LineNr' highlight group. Minor123" speed improvements. Fix modeline mangling in124" generated output so it works for text in the first125" column. Fix missing line number and fold column in126" diff filler lines. Fix that some fonts have a 1px127" gap (using a dirty hack, improvements welcome). Add128" "colorscheme" meta tag. Does NOT include support for129" the new default foldtext added in v11, as the patch130" adding it has not yet been included in Vim.131" 7.3_v11 ( unreleased ): Support new default foldtext from patch by Christian132" Brabandt in133" http://groups.google.com/d/topic/vim_dev/B6FSGfq9VoI/discussion.134" This patch has not yet been included in Vim, thus135" these changes are removed in the next version.136" 7.3_v10 (Vim 7.3.0227): Fix error E684 when converting a range wholly inside137" multiple nested folds with dynamic folding on.138" Also fix problem with foldtext in this situation.139" 7.3_v9 (Vim 7.3.0170): Add html_pre_wrap option active with html_use_css140" and without html_no_pre, default value same as141" 'wrap' option, (Andy Spencer). Don't use142" 'fileencoding' for converted document encoding if143" 'buftype' indicates a special buffer which isn't144" written.145" 7.3_v8 (Vim 7.3.0100): Add html_expand_tabs option to allow leaving tab146" characters in generated output (Andy Spencer).147" Escape text that looks like a modeline so Vim148" doesn't use anything in the converted HTML as a149" modeline. Bugfixes: Fix folding when a fold starts150" before the conversion range. Remove fold column when151" there are no folds.152" 7.3_v7 (Vim 7-3-0063): see betas released on vim_dev below:153" 7.3_v7b3: Fixed bug, convert Unicode to UTF-8 all the way.154" 7.3_v7b2: Remove automatic detection of encodings that are not155" supported by all major browsers according to156" http://wiki.whatwg.org/wiki/Web_Encodings and157" convert to UTF-8 for all Unicode encodings. Make158" HTML encoding to Vim encoding detection be159" case-insensitive for built-in pairs.160" 7.3_v7b1: Remove use of setwinvar() function which cannot be161" called in restricted mode (Andy Spencer). Use162" 'fencoding' instead of 'encoding' to determine by163" charset, and make sure the 'fenc' of the generated164" file matches its indicated charset. Add charsets for165" all of Vim's natively supported encodings.166" 7.3_v6 (Vim 7.3.0000): Really fix bug with 'nowrapscan', 'magic' and other167" user settings interfering with diff mode generation,168" trailing whitespace (e.g. line number column) when169" using html_no_pre, and bugs when using170" html_hover_unfold.171" 7.3_v5 ( unreleased ): Fix bug with 'nowrapscan' and also with out-of-sync172" folds in diff mode when first line was folded.173" 7.3_v4 (Vim 7.3.0000): Bugfixes, especially for xhtml markup, and diff mode174" 7.3_v3 (Vim 7.3.0000): Refactor option handling and make html_use_css175" default to true when not set to anything. Use strict176" doctypes where possible. Rename use_xhtml option to177" html_use_xhtml for consistency. Use .xhtml extension178" when using this option. Add meta tag for settings.179" 7.3_v2 (Vim 7.3.0000): Fix syntax highlighting in diff mode to use both the180" diff colors and the normal syntax colors181" 7.3_v1 (Vim 7.3.0000): Add conceal support and meta tags in output182"}}}183"}}}184 185" TODO: {{{186" * Check the issue tracker:187" https://sourceforge.net/p/vim-tohtml/issues/search/?q=%21status%3Aclosed188" * Options for generating the CSS in external style sheets. New :TOcss189" command to convert the current color scheme into a (mostly) generic CSS190" stylesheet which can be re-used. Alternate stylesheet support? Good start191" by Erik Falor192" ( https://groups.google.com/d/topic/vim_use/7XTmC4D22dU/discussion ).193" * Add optional argument to :TOhtml command to specify mode (gui, cterm,194" term) to use for the styling. Suggestion by "nacitar".195" * Add way to override or specify which RGB colors map to the color numbers196" in cterm. Get better defaults than just guessing? Suggestion by "nacitar".197" * Disable filetype detection until after all processing is done.198" * Add option for not generating the hyperlink on stuff that looks like a199" URL? Or just color the link to fit with the colorscheme (and only special200" when hovering)?201" * Bug: Opera does not allow printing more than one page if uncopyable202" regions is turned on. Possible solution: Add normal text line numbers with203" display:none, set to display:inline for print style sheets, and hide204" <input> elements for print, to allow Opera printing multiple pages (and205" other uncopyable areas?). May need to make the new text invisible to IE206" with conditional comments to prevent copying it, IE for some reason likes207" to copy hidden text. Other browsers too?208" * Bug: still a 1px gap throughout the fold column when html_prevent_copy is209" "fn" in some browsers. Specifically, in Chromium on Ubuntu (but not Chrome210" on Windows). Perhaps it is font related?211" * Bug: still some gaps in the fold column when html_prevent_copy contains212" 'd' and showing the whole diff (observed in multiple browsers). Only gaps213" on diff lines though.214" * Undercurl support via CSS3, with fallback to dotted or something:215" https://groups.google.com/d/topic/vim_use/BzXA6He1pHg/discussion216" * Redo updates for modified default foldtext (v11) when/if the patch is217" accepted to modify it.218" * Test case +diff_one_file-dynamic_folds+expand_tabs-hover_unfold219" +ignore_conceal-ignore_folding+no_foldcolumn+no_pre+no_progress220" +number_lines-pre_wrap-use_css+use_xhtml+whole_filler.xhtml221" does not show the whole diff filler as it is supposed to?222" * Bug: when 'isprint' is wrong for the current encoding, will generate223" invalid content. Can/should anything be done about this? Maybe a separate224" plugin to correct 'isprint' based on encoding?225" * Check to see if the windows-125\d encodings actually work in Unix without226" the 8bit- prefix. Add prefix to autoload dictionaries for Unix if not.227" * Font auto-detection similar to228" http://www.vim.org/scripts/script.php?script_id=2384 but for a variety of229" platforms.230" * Pull in code from http://www.vim.org/scripts/script.php?script_id=3113 :231" - listchars support232" - full-line background highlight233" - other?234" * Make it so deleted lines in a diff don't create side-scrolling (get it235" free with full-line background highlight above).236" * Restore open/closed folds and cursor position after processing each file237" with option not to restore for speed increase.238" * Add extra meta info (generation time, etc.)?239" * Tidy up so we can use strict doctype in even more situations240" * Implementation detail: add threshold for writing the lines to the html241" buffer before we're done (5000 or so lines should do it)242" * TODO comments for code cleanup scattered throughout243"}}}244 245" Define the :TOhtml command when:246" - 'compatible' is not set247" - this plugin or user override was not already loaded248" - user commands are available. {{{249if !&cp && !exists(":TOhtml") && has("user_commands")250 command -range=% -bar TOhtml :call tohtml#Convert2HTML(<line1>, <line2>)251endif "}}}252 253" Make sure any patches will probably use consistent indent254" vim: ts=8 sw=2 sts=2 noet fdm=marker255 