#!/usr/bin/env perl # converts vim documentation to simple html # Sirtaj Singh Kang (taj@kde.org) # Sun Feb 24 14:49:17 CET 2002 use strict; use vars qw/%url $date/; %url = (); $date = `date`; chop $date; sub maplink { my $tag = shift; if( exists $url{ $tag } ){ return $url{ $tag }; } else { #warn "Unknown hyperlink target: $tag\n"; $tag =~ s/\.txt//; $tag =~ s/</</g; $tag =~ s/>/>/g; return "<code class=\"badlink\">$tag</code>"; } } sub readTagFile { my($tagfile) = @_; my( $tag, $file, $name ); open(TAGS,"$tagfile") || die "can't read tags\n"; while( <TAGS> ) { next unless /^(\S+)\s+(\S+)\s+/; $tag = $1; my $label = $tag; ($file= $2) =~ s/.txt$/.html/g; $label =~ s/\.txt//; $url{ $tag } = "<a href=\"$file#".escurl($tag)."\">".esctext($label)."</a>"; } close( TAGS ); } sub esctext { my $text = shift; $text =~ s/&/&/g; $text =~ s/</</g; $text =~ s/>/>/g; return $text; } sub escurl { my $url = shift; $url =~ s/"/%22/g; $url =~ s/~/%7E/g; $url =~ s/</%3C/g; $url =~ s/>/%3E/g; $url =~ s/=/%20/g; $url =~ s/#/%23/g; $url =~ s/\//%2F/g; return $url; } sub vim2html { my( $infile ) = @_; my( $outfile ); open(IN, "$infile" ) || die "Couldn't read from $infile: $!.\n"; ($outfile = $infile) =~ s:.*/::g; $outfile =~ s/\.txt$//g; open( OUT, ">$outfile.html" ) || die "Couldn't write to $outfile.html: $!.\n"; my $head = uc( $outfile ); print OUT<<EOF; <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>VIM: $outfile</title> <link rel="stylesheet" href="vim-stylesheet.css" type="text/css"> </head> <body> <h2>$head</h2> <pre> EOF my $inexample = 0; while( <IN> ) { chop; if ( /^\s*[-=]+\s*$/ ) { print OUT "</pre><hr><pre>"; next; } # examples elsif( /^>$/ || /\s>$/ ) { $inexample = 1; chop; } elsif ( $inexample && /^([<\S])/ ) { $inexample = 0; $_ = $' if $1 eq "<"; } s/\s+$//g; # Various vim highlights. note that < and > have already been escaped # so that HTML doesn't get screwed up. my @out = (); # print "Text: $_\n"; LOOP: foreach my $token ( split /((?:\|[^\|]+\|)|(?:\*[^\*]+\*))/ ) { if ( $token =~ /^\|([^\|]+)\|/ ) { # link push( @out, "|".maplink( $1 )."|" ); next LOOP; } elsif ( $token =~ /^\*([^\*]+)\*/ ) { # target push( @out, "<b class=\"vimtag\">\*<a name=\"".escurl($1)."\">".esctext($1)."<\/a>\*<\/b>"); next LOOP; } $_ = esctext($token); s/CTRL-(\w+)/<code class="keystroke">CTRL-$1<\/code>/g; # parameter <...> s/<(.*?)>/<code class="special"><$1><\/code>/g; # parameter {...} s/\{([^}]*)\}/<code class="special">{$1}<\/code>/g; # parameter [...] s/\[(range|line|count|offset|cmd|[-+]?num)\]/<code class="special">\[$1\]<\/code>/g; # note s/(Note:?)/<code class="note">$1<\/code>/gi; # local heading s/^(.*)\~$/<code class="section">$1<\/code>/g; push( @out, $_ ); } $_ = join( "", @out ); if( $inexample == 2 ) { print OUT "<code class=\"example\">$_</code>\n"; } else { print OUT $_,"\n"; } $inexample = 2 if $inexample == 1; } print OUT<<EOF; </pre> <p><i>Generated by vim2html on $date</i></p> </body> </html> EOF } sub usage { die<<EOF; vim2html.pl: converts vim documentation to HTML. usage: vim2html.pl <tag file> <text files> EOF } sub writeCSS { open( CSS, ">vim-stylesheet.css" ) || die "Couldn't write stylesheet: $!\n"; print CSS<<EOF; body { background-color: white; color: black;} :link { color: rgb(0,137,139); } :visited { color: rgb(0,100,100); background-color: white; /* should be inherit */ } :active { color: rgb(0,200,200); background-color: white; /* should be inherit */ } B.vimtag { color : rgb(250,0,250); } h1, h2 { color: rgb(82,80,82); text-align: center; } h3, h4, h5, h6 { color: rgb(82,80,82); } .headline { color: rgb(0,137,139); } .header { color: rgb(164, 32, 246); } .section { color: rgb(164, 32, 246); } .keystroke { color: rgb(106, 89, 205); } .vim { } .example { color: rgb(0, 0, 255); } .option { } .notvi { } .special { color: rgb(106, 89, 205); } .note { color: blue; background-color: yellow; } .sub {} .badlink { color: rgb(0,37,39); } EOF } # main usage() if $#ARGV < 1; print "Processing tags...\n"; readTagFile( $ARGV[ 0 ] ); foreach my $file ( 1..$#ARGV ) { print "Processing ".$ARGV[ $file ]."...\n"; vim2html( $ARGV[ $file ] ); } print "Writing stylesheet...\n"; writeCSS(); print "done.\n"
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
README.Debian | File | 324 B | 0644 |
|
arabic.txt | File | 11.62 KB | 0644 |
|
autocmd.txt | File | 68.18 KB | 0644 |
|
change.txt | File | 74.89 KB | 0644 |
|
channel.txt | File | 47.41 KB | 0644 |
|
cmdline.txt | File | 46.88 KB | 0644 |
|
debug.txt | File | 6.73 KB | 0644 |
|
debugger.txt | File | 5.74 KB | 0644 |
|
develop.txt | File | 22.16 KB | 0644 |
|
diff.txt | File | 16.43 KB | 0644 |
|
digraph.txt | File | 60.43 KB | 0644 |
|
editing.txt | File | 71.36 KB | 0644 |
|
eval.txt | File | 480.89 KB | 0644 |
|
farsi.txt | File | 523 B | 0644 |
|
filetype.txt | File | 26.61 KB | 0644 |
|
fold.txt | File | 23.13 KB | 0644 |
|
ft_ada.txt | File | 17.82 KB | 0644 |
|
ft_rust.txt | File | 9.37 KB | 0644 |
|
ft_sql.txt | File | 29.98 KB | 0644 |
|
gui.txt | File | 50.91 KB | 0644 |
|
gui_w32.txt | File | 18.91 KB | 0644 |
|
gui_x11.txt | File | 29.08 KB | 0644 |
|
hangulin.txt | File | 3.22 KB | 0644 |
|
hebrew.txt | File | 5.53 KB | 0644 |
|
help.txt | File | 8.69 KB | 0644 |
|
help.txt.vim-tiny | File | 1.4 KB | 0644 |
|
helphelp.txt | File | 14.09 KB | 0644 |
|
howto.txt | File | 2.85 KB | 0644 |
|
if_cscop.txt | File | 18.87 KB | 0644 |
|
if_lua.txt | File | 15.23 KB | 0644 |
|
if_mzsch.txt | File | 11.68 KB | 0644 |
|
if_ole.txt | File | 7.19 KB | 0644 |
|
if_perl.txt | File | 11.01 KB | 0644 |
|
if_pyth.txt | File | 37.44 KB | 0644 |
|
if_ruby.txt | File | 8.33 KB | 0644 |
|
if_sniff.txt | File | 271 B | 0644 |
|
if_tcl.txt | File | 22.43 KB | 0644 |
|
indent.txt | File | 40.72 KB | 0644 |
|
index.txt | File | 77.7 KB | 0644 |
|
insert.txt | File | 82.33 KB | 0644 |
|
intro.txt | File | 37.94 KB | 0644 |
|
map.txt | File | 64.79 KB | 0644 |
|
mbyte.txt | File | 58.25 KB | 0644 |
|
message.txt | File | 30.5 KB | 0644 |
|
mlang.txt | File | 7.68 KB | 0644 |
|
motion.txt | File | 49.89 KB | 0644 |
|
netbeans.txt | File | 36.69 KB | 0644 |
|
options.txt | File | 378.37 KB | 0644 |
|
os_390.txt | File | 4.64 KB | 0644 |
|
os_amiga.txt | File | 5.34 KB | 0644 |
|
os_beos.txt | File | 10.73 KB | 0644 |
|
os_dos.txt | File | 11.74 KB | 0644 |
|
os_mac.txt | File | 6.7 KB | 0644 |
|
os_mint.txt | File | 1.37 KB | 0644 |
|
os_msdos.txt | File | 523 B | 0644 |
|
os_os2.txt | File | 299 B | 0644 |
|
os_qnx.txt | File | 3.98 KB | 0644 |
|
os_risc.txt | File | 328 B | 0644 |
|
os_unix.txt | File | 2.54 KB | 0644 |
|
os_vms.txt | File | 31.79 KB | 0644 |
|
os_win32.txt | File | 13.04 KB | 0644 |
|
pattern.txt | File | 58.29 KB | 0644 |
|
pi_getscript.txt | File | 20.59 KB | 0644 |
|
pi_gzip.txt | File | 1.26 KB | 0644 |
|
pi_logipat.txt | File | 4.09 KB | 0644 |
|
pi_netrw.txt | File | 172.43 KB | 0644 |
|
pi_paren.txt | File | 2.22 KB | 0644 |
|
pi_spec.txt | File | 4.03 KB | 0644 |
|
pi_tar.txt | File | 6.51 KB | 0644 |
|
pi_vimball.txt | File | 11.58 KB | 0644 |
|
pi_zip.txt | File | 6.88 KB | 0644 |
|
popup.txt | File | 35.68 KB | 0644 |
|
print.txt | File | 30.48 KB | 0644 |
|
quickfix.txt | File | 77.23 KB | 0644 |
|
quickref.txt | File | 70.29 KB | 0644 |
|
quotes.txt | File | 12.45 KB | 0644 |
|
recover.txt | File | 10.45 KB | 0644 |
|
remote.txt | File | 8.22 KB | 0644 |
|
repeat.txt | File | 40.06 KB | 0644 |
|
rileft.txt | File | 4.82 KB | 0644 |
|
russian.txt | File | 2.95 KB | 0644 |
|
scroll.txt | File | 13.46 KB | 0644 |
|
sign.txt | File | 24.34 KB | 0644 |
|
spell.txt | File | 62.38 KB | 0644 |
|
sponsor.txt | File | 7.03 KB | 0644 |
|
starting.txt | File | 71.58 KB | 0644 |
|
syntax.txt | File | 216.25 KB | 0644 |
|
tabpage.txt | File | 16.5 KB | 0644 |
|
tags | File | 337.32 KB | 0644 |
|
tags.vim-tiny | File | 30 B | 0644 |
|
tagsrch.txt | File | 38.22 KB | 0644 |
|
term.txt | File | 45.81 KB | 0644 |
|
terminal.txt | File | 52.45 KB | 0644 |
|
testing.txt | File | 12.63 KB | 0644 |
|
textprop.txt | File | 13.54 KB | 0644 |
|
tips.txt | File | 19.8 KB | 0644 |
|
todo.txt | File | 301.55 KB | 0644 |
|
uganda.txt | File | 13.7 KB | 0644 |
|
undo.txt | File | 16.2 KB | 0644 |
|
usr_01.txt | File | 6.93 KB | 0644 |
|
usr_02.txt | File | 23.77 KB | 0644 |
|
usr_03.txt | File | 23.06 KB | 0644 |
|
usr_04.txt | File | 18.64 KB | 0644 |
|
usr_05.txt | File | 26.42 KB | 0644 |
|
usr_06.txt | File | 9.39 KB | 0644 |
|
usr_07.txt | File | 15.61 KB | 0644 |
|
usr_08.txt | File | 18.92 KB | 0644 |
|
usr_09.txt | File | 11.23 KB | 0644 |
|
usr_10.txt | File | 28.5 KB | 0644 |
|
usr_11.txt | File | 12.62 KB | 0644 |
|
usr_12.txt | File | 13.11 KB | 0644 |
|
usr_20.txt | File | 13.39 KB | 0644 |
|
usr_21.txt | File | 18.02 KB | 0644 |
|
usr_22.txt | File | 14.65 KB | 0644 |
|
usr_23.txt | File | 12.41 KB | 0644 |
|
usr_24.txt | File | 20.38 KB | 0644 |
|
usr_25.txt | File | 18.73 KB | 0644 |
|
usr_26.txt | File | 8.07 KB | 0644 |
|
usr_27.txt | File | 17.31 KB | 0644 |
|
usr_28.txt | File | 15.64 KB | 0644 |
|
usr_29.txt | File | 19.65 KB | 0644 |
|
usr_30.txt | File | 22.13 KB | 0644 |
|
usr_31.txt | File | 10.16 KB | 0644 |
|
usr_32.txt | File | 5.25 KB | 0644 |
|
usr_40.txt | File | 22.65 KB | 0644 |
|
usr_41.txt | File | 91.23 KB | 0644 |
|
usr_42.txt | File | 13.53 KB | 0644 |
|
usr_43.txt | File | 7.24 KB | 0644 |
|
usr_44.txt | File | 28.53 KB | 0644 |
|
usr_45.txt | File | 17.24 KB | 0644 |
|
usr_90.txt | File | 17.17 KB | 0644 |
|
usr_toc.txt | File | 9.05 KB | 0644 |
|
various.txt | File | 29.62 KB | 0644 |
|
version4.txt | File | 13.58 KB | 0644 |
|
version5.txt | File | 301.31 KB | 0644 |
|
version6.txt | File | 563.53 KB | 0644 |
|
version7.txt | File | 658.96 KB | 0644 |
|
version8.txt | File | 1.26 MB | 0644 |
|
vi_diff.txt | File | 56.27 KB | 0644 |
|
vim2html.pl | File | 4.41 KB | 0755 |
|
visual.txt | File | 21.26 KB | 0644 |
|
windows.txt | File | 53.64 KB | 0644 |
|
workshop.txt | File | 371 B | 0644 |
|