blob: a56b95b8a63e5027e443324568b3efd926d4e309 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim plugin for converting a syntax highlighted file to HTML.
Bram Moolenaar349b2fb2010-07-16 20:35:36 +02002" Maintainer: Ben Fritz <fritzophrenic@gmail.com>
Bram Moolenaar31c31672013-06-26 13:28:14 +02003" Last Change: 2013 Jun 12
Bram Moolenaarb02cbe32010-07-11 22:38:52 +02004"
Bram Moolenaar349b2fb2010-07-16 20:35:36 +02005" The core of the code is in $VIMRUNTIME/autoload/tohtml.vim and
6" $VIMRUNTIME/syntax/2html.vim
Bram Moolenaar8ada2cc2010-07-29 20:43:36 +02007"
Bram Moolenaar6c35bea2012-07-25 17:49:10 +02008" TODO: {{{
Bram Moolenaar543b7ef2013-06-01 14:50:56 +02009" * Options for generating the CSS in external style sheets. New :TOcss
10" command to convert the current color scheme into a (mostly) generic CSS
11" stylesheet which can be re-used. Alternate stylesheet support? Good start
12" by Erik Falor
13" ( https://groups.google.com/d/topic/vim_use/7XTmC4D22dU/discussion ).
14" * Add optional argument to :TOhtml command to specify mode (gui, cterm,
15" term) to use for the styling. Suggestion by "nacitar".
16" * Add way to override or specify which RGB colors map to the color numbers
17" in cterm. Get better defaults than just guessing? Suggestion by "nacitar".
18" * Disable filetype detection until after all processing is done.
19" * Add option for not generating the hyperlink on stuff that looks like a
20" URL? Or just color the link to fit with the colorscheme (and only special
21" when hovering)?
22" * Bug: Opera does not allow printing more than one page if uncopyable
23" regions is turned on. Possible solution: Add normal text line numbers with
24" display:none, set to display:inline for print style sheets, and hide
25" <input> elements for print, to allow Opera printing multiple pages (and
26" other uncopyable areas?). May need to make the new text invisible to IE
27" with conditional comments to prevent copying it, IE for some reason likes
28" to copy hidden text. Other browsers too?
Bram Moolenaar6c35bea2012-07-25 17:49:10 +020029" * Bug: still a 1px gap throughout the fold column when html_prevent_copy is
30" "fn" in some browsers. Specifically, in Chromium on Ubuntu (but not Chrome
31" on Windows). Perhaps it is font related?
32" * Bug: still some gaps in the fold column when html_prevent_copy contains
33" 'd' and showing the whole diff (observed in multiple browsers). Only gaps
34" on diff lines though.
Bram Moolenaar6c35bea2012-07-25 17:49:10 +020035" * Undercurl support via CSS3, with fallback to dotted or something:
36" https://groups.google.com/d/topic/vim_use/BzXA6He1pHg/discussion
37" * Redo updates for modified default foldtext (v11) when/if the patch is
38" accepted to modify it.
39" * Test case +diff_one_file-dynamic_folds+expand_tabs-hover_unfold
40" +ignore_conceal-ignore_folding+no_foldcolumn+no_pre+no_progress
41" +number_lines-pre_wrap-use_css+use_xhtml+whole_filler.xhtml
Bram Moolenaar543b7ef2013-06-01 14:50:56 +020042" does not show the whole diff filler as it is supposed to?
Bram Moolenaar6c35bea2012-07-25 17:49:10 +020043" * Bug: when 'isprint' is wrong for the current encoding, will generate
44" invalid content. Can/should anything be done about this? Maybe a separate
45" plugin to correct 'isprint' based on encoding?
46" * Check to see if the windows-125\d encodings actually work in Unix without
47" the 8bit- prefix. Add prefix to autoload dictionaries for Unix if not.
48" * Font auto-detection similar to
49" http://www.vim.org/scripts/script.php?script_id=2384 but for a variety of
50" platforms.
51" * Error thrown when sourcing 2html.vim directly when plugins are not loaded.
Bram Moolenaar8e5af3e2011-04-28 19:02:44 +020052" * Pull in code from http://www.vim.org/scripts/script.php?script_id=3113 :
53" - listchars support
54" - full-line background highlight
55" - other?
Bram Moolenaar6c35bea2012-07-25 17:49:10 +020056" * Make it so deleted lines in a diff don't create side-scrolling (get it
57" free with full-line background highlight above).
Bram Moolenaar8df7f882010-08-13 11:30:02 +020058" * Restore open/closed folds and cursor position after processing each file
Bram Moolenaar6c35bea2012-07-25 17:49:10 +020059" with option not to restore for speed increase.
Bram Moolenaar2a8a3ec2011-01-08 16:06:37 +010060" * Add extra meta info (generation time, etc.)?
61" * Tidy up so we can use strict doctype in even more situations
Bram Moolenaar8df7f882010-08-13 11:30:02 +020062" * Implementation detail: add threshold for writing the lines to the html
63" buffer before we're done (5000 or so lines should do it)
Bram Moolenaar8ada2cc2010-07-29 20:43:36 +020064" * TODO comments for code cleanup scattered throughout
Bram Moolenaar6c35bea2012-07-25 17:49:10 +020065"}}}
Bram Moolenaar071d4272004-06-13 20:20:40 +000066
Bram Moolenaar7510fe72010-07-25 12:46:44 +020067if exists('g:loaded_2html_plugin')
68 finish
69endif
Bram Moolenaar31c31672013-06-26 13:28:14 +020070let g:loaded_2html_plugin = 'vim7.3_v14'
Bram Moolenaar251e1912011-06-19 05:09:16 +020071
72"
Bram Moolenaar6c35bea2012-07-25 17:49:10 +020073" Changelog: {{{
74"
Bram Moolenaar31c31672013-06-26 13:28:14 +020075" 7.3_v14 (this version): Allow suppressing empty <span> created for line
76" number anchors when line numbers are not included,
77" using g:html_empty_anchors=0. Allow customizing
78" important IDs (like line IDs and fold IDs) using
79" g:html_id_expr evalutated when the buffer conversion
80" is started.
81" 7.3_v13 (2eb30f341e8d): Keep foldmethod at manual in the generated file and
Bram Moolenaar543b7ef2013-06-01 14:50:56 +020082" insert modeline to set it to manual.
83" Fix bug: diff mode with 2 unsaved buffers creates a
84" duplicate of one buffer instead of including both.
85" Add anchors to each line so you can put '#L123'
86" or '#123' at the end of the URL to jump to line 123
87" (idea by Andy Spencer). Add javascript to open folds
88" to show the anchor being jumped to if it is hidden.
89" Fix XML validation error: &nsbp; not part of XML.
90" Allow TOhtml to chain together with other commands
91" using |.
92" 7.3_v12 (9910cbff5f16): Fix modeline mangling to also work for when multiple
93" highlight groups make up the start-of-modeline text.
94" Improve render time of page with uncopyable regions
95" by not using one-input-per-char. Change name of
96" uncopyable option from html_unselectable to
97" html_prevent_copy. Added html_no_invalid option and
98" default to inserting invalid markup for uncopyable
99" regions to prevent MS Word from pasting undeletable
100" <input> elements. Fix 'cpo' handling (Thilo Six).
101" 7.3_v12b1: Add html_unselectable option. Rework logic to
102" eliminate post-processing substitute commands in
103" favor of doing the work up front. Remove unnecessary
104" special treatment of 'LineNr' highlight group. Minor
105" speed improvements. Fix modeline mangling in
106" generated output so it works for text in the first
107" column. Fix missing line number and fold column in
108" diff filler lines. Fix that some fonts have a 1px
109" gap (using a dirty hack, improvements welcome). Add
110" "colorscheme" meta tag. Does NOT include support for
111" the new default foldtext added in v11, as the patch
112" adding it has not yet been included in Vim.
Bram Moolenaar6c35bea2012-07-25 17:49:10 +0200113" 7.3_v11 ( unreleased ): Support new default foldtext from patch by Christian
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200114" Brabandt in
115" http://groups.google.com/d/topic/vim_dev/B6FSGfq9VoI/discussion.
116" This patch has not yet been included in Vim, thus
117" these changes are removed in the next version.
Bram Moolenaar6c35bea2012-07-25 17:49:10 +0200118" 7.3_v10 (fd09a9c8468e): Fix error E684 when converting a range wholly inside
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200119" multiple nested folds with dynamic folding on.
120" Also fix problem with foldtext in this situation.
Bram Moolenaar251e1912011-06-19 05:09:16 +0200121" 7.3_v9 (0877b8d6370e): Add html_pre_wrap option active with html_use_css
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200122" and without html_no_pre, default value same as
123" 'wrap' option, (Andy Spencer). Don't use
124" 'fileencoding' for converted document encoding if
125" 'buftype' indicates a special buffer which isn't
126" written.
Bram Moolenaar251e1912011-06-19 05:09:16 +0200127" 7.3_v8 (85c5a72551e2): Add html_expand_tabs option to allow leaving tab
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200128" characters in generated output (Andy Spencer).
129" Escape text that looks like a modeline so Vim
130" doesn't use anything in the converted HTML as a
131" modeline. Bugfixes: Fix folding when a fold starts
132" before the conversion range. Remove fold column when
133" there are no folds.
Bram Moolenaar251e1912011-06-19 05:09:16 +0200134" 7.3_v7 (840c3cadb842): see betas released on vim_dev below:
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200135" 7.3_v7b3: Fixed bug, convert Unicode to UTF-8 all the way.
136" 7.3_v7b2: Remove automatic detection of encodings that are not
137" supported by all major browsers according to
138" http://wiki.whatwg.org/wiki/Web_Encodings and
139" convert to UTF-8 for all Unicode encodings. Make
140" HTML encoding to Vim encoding detection be
141" case-insensitive for built-in pairs.
142" 7.3_v7b1: Remove use of setwinvar() function which cannot be
143" called in restricted mode (Andy Spencer). Use
144" 'fencoding' instead of 'encoding' to determine by
145" charset, and make sure the 'fenc' of the generated
146" file matches its indicated charset. Add charsets for
147" all of Vim's natively supported encodings.
Bram Moolenaar251e1912011-06-19 05:09:16 +0200148" 7.3_v6 (0d3f0e3d289b): Really fix bug with 'nowrapscan', 'magic' and other
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200149" user settings interfering with diff mode generation,
150" trailing whitespace (e.g. line number column) when
151" using html_no_pre, and bugs when using
152" html_hover_unfold.
Bram Moolenaar251e1912011-06-19 05:09:16 +0200153" 7.3_v5 ( unreleased ): Fix bug with 'nowrapscan' and also with out-of-sync
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200154" folds in diff mode when first line was folded.
Bram Moolenaar251e1912011-06-19 05:09:16 +0200155" 7.3_v4 (7e008c174cc3): Bugfixes, especially for xhtml markup, and diff mode
156" 7.3_v3 (a29075150aee): Refactor option handling and make html_use_css
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200157" default to true when not set to anything. Use strict
158" doctypes where possible. Rename use_xhtml option to
159" html_use_xhtml for consistency. Use .xhtml extension
160" when using this option. Add meta tag for settings.
Bram Moolenaar251e1912011-06-19 05:09:16 +0200161" 7.3_v2 (80229a724a11): Fix syntax highlighting in diff mode to use both the
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200162" diff colors and the normal syntax colors
Bram Moolenaar251e1912011-06-19 05:09:16 +0200163" 7.3_v1 (e7751177126b): Add conceal support and meta tags in output
164" Pre-v1 baseline: Mercurial changeset 3c9324c0800e
Bram Moolenaar6c35bea2012-07-25 17:49:10 +0200165"}}}
Bram Moolenaar7510fe72010-07-25 12:46:44 +0200166
Bram Moolenaarb02cbe32010-07-11 22:38:52 +0200167" Define the :TOhtml command when:
168" - 'compatible' is not set
169" - this plugin was not already loaded
Bram Moolenaar6c35bea2012-07-25 17:49:10 +0200170" - user commands are available. {{{
Bram Moolenaar071d4272004-06-13 20:20:40 +0000171if !&cp && !exists(":TOhtml") && has("user_commands")
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200172 command -range=% -bar TOhtml :call tohtml#Convert2HTML(<line1>, <line2>)
Bram Moolenaar6c35bea2012-07-25 17:49:10 +0200173endif "}}}
Bram Moolenaar349b2fb2010-07-16 20:35:36 +0200174
175" Make sure any patches will probably use consistent indent
Bram Moolenaar6c35bea2012-07-25 17:49:10 +0200176" vim: ts=8 sw=2 sts=2 noet fdm=marker