blob: 0ae6c81dfa7682daf0676aac75afa293928a568e [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 Moolenaar6c35bea2012-07-25 17:49:10 +02003" Last Change: 2012 Jul 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: {{{
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.
Bram Moolenaar8e5af3e2011-04-28 19:02:44 +020019" * 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?
Bram Moolenaar6c35bea2012-07-25 17:49:10 +020022" * 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.
Bram Moolenaar8e5af3e2011-04-28 19:02:44 +020042" * Pull in code from http://www.vim.org/scripts/script.php?script_id=3113 :
43" - listchars support
44" - full-line background highlight
45" - other?
Bram Moolenaar6c35bea2012-07-25 17:49:10 +020046" * 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).
Bram Moolenaar8df7f882010-08-13 11:30:02 +020049" * Restore open/closed folds and cursor position after processing each file
Bram Moolenaar6c35bea2012-07-25 17:49:10 +020050" with option not to restore for speed increase.
Bram Moolenaar2a8a3ec2011-01-08 16:06:37 +010051" * Add extra meta info (generation time, etc.)?
52" * Tidy up so we can use strict doctype in even more situations
Bram Moolenaar8df7f882010-08-13 11:30:02 +020053" * Implementation detail: add threshold for writing the lines to the html
54" buffer before we're done (5000 or so lines should do it)
Bram Moolenaar8ada2cc2010-07-29 20:43:36 +020055" * TODO comments for code cleanup scattered throughout
Bram Moolenaar6c35bea2012-07-25 17:49:10 +020056"}}}
Bram Moolenaar071d4272004-06-13 20:20:40 +000057
Bram Moolenaar7510fe72010-07-25 12:46:44 +020058if exists('g:loaded_2html_plugin')
59 finish
60endif
Bram Moolenaar6c35bea2012-07-25 17:49:10 +020061let g:loaded_2html_plugin = 'vim7.3_v12'
Bram Moolenaar251e1912011-06-19 05:09:16 +020062
63"
Bram Moolenaar6c35bea2012-07-25 17:49:10 +020064" 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
Bram Moolenaar251e1912011-06-19 05:09:16 +020093" 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
Bram Moolenaar6c35bea2012-07-25 17:49:10 +0200139"}}}
Bram Moolenaar7510fe72010-07-25 12:46:44 +0200140
Bram Moolenaarb02cbe32010-07-11 22:38:52 +0200141" Define the :TOhtml command when:
142" - 'compatible' is not set
143" - this plugin was not already loaded
Bram Moolenaar6c35bea2012-07-25 17:49:10 +0200144" - user commands are available. {{{
Bram Moolenaar071d4272004-06-13 20:20:40 +0000145if !&cp && !exists(":TOhtml") && has("user_commands")
Bram Moolenaarb02cbe32010-07-11 22:38:52 +0200146 command -range=% TOhtml :call tohtml#Convert2HTML(<line1>, <line2>)
Bram Moolenaar6c35bea2012-07-25 17:49:10 +0200147endif "}}}
Bram Moolenaar349b2fb2010-07-16 20:35:36 +0200148
149" Make sure any patches will probably use consistent indent
Bram Moolenaar6c35bea2012-07-25 17:49:10 +0200150" vim: ts=8 sw=2 sts=2 noet fdm=marker