annotate runtime/doc/vim2html.pl @ 39:c16898406ff2

synchorinize version 7.3.081
author one@zeus.cr.ie.u-ryukyu.ac.jp
date Fri, 17 Dec 2010 17:43:06 +0900
parents 76efa0be13f1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
1 #!/usr/bin/env perl
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
2
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
3 # converts vim documentation to simple html
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
4 # Sirtaj Singh Kang (taj@kde.org)
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
5
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
6 # Sun Feb 24 14:49:17 CET 2002
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
7
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
8 use strict;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
9 use vars qw/%url $date/;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
10
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
11 %url = ();
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
12 $date = `date`;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
13 chop $date;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
14
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
15 sub maplink
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
16 {
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
17 my $tag = shift;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
18 if( exists $url{ $tag } ){
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
19 return $url{ $tag };
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
20 } else {
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
21 #warn "Unknown hyperlink target: $tag\n";
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
22 $tag =~ s/\.txt//;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
23 $tag =~ s/</&lt;/g;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
24 $tag =~ s/>/&gt;/g;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
25 return "<code class=\"badlink\">$tag</code>";
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
26 }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
27 }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
28
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
29 sub readTagFile
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
30 {
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
31 my($tagfile) = @_;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
32 my( $tag, $file, $name );
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
33
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
34 open(TAGS,"$tagfile") || die "can't read tags\n";
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
35
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
36 while( <TAGS> ) {
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
37 next unless /^(\S+)\s+(\S+)\s+/;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
38
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
39 $tag = $1;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
40 my $label = $tag;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
41 ($file= $2) =~ s/.txt$/.html/g;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
42 $label =~ s/\.txt//;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
43
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
44 $url{ $tag } = "<a href=\"$file#".escurl($tag)."\">".esctext($label)."</a>";
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
45 }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
46 close( TAGS );
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
47 }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
48
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
49 sub esctext
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
50 {
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
51 my $text = shift;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
52 $text =~ s/&/&amp;/g;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
53 $text =~ s/</&lt;/g;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
54 $text =~ s/>/&gt;/g;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
55 return $text;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
56 }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
57
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
58 sub escurl
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
59 {
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
60 my $url = shift;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
61 $url =~ s/"/%22/g;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
62 $url =~ s/~/%7E/g;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
63 $url =~ s/</%3C/g;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
64 $url =~ s/>/%3E/g;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
65 $url =~ s/=/%20/g;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
66 $url =~ s/#/%23/g;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
67 $url =~ s/\//%2F/g;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
68
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
69 return $url;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
70 }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
71
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
72 sub vim2html
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
73 {
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
74 my( $infile ) = @_;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
75 my( $outfile );
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
76
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
77 open(IN, "$infile" ) || die "Couldn't read from $infile: $!.\n";
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
78
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
79 ($outfile = $infile) =~ s:.*/::g;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
80 $outfile =~ s/\.txt$//g;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
81
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
82 open( OUT, ">$outfile.html" )
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
83 || die "Couldn't write to $outfile.html: $!.\n";
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
84 my $head = uc( $outfile );
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
85
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
86 print OUT<<EOF;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
87 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
88 <html>
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
89 <head>
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
90 <title>VIM: $outfile</title>
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
91 <link rel="stylesheet" href="vim-stylesheet.css" type="text/css">
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
92 </head>
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
93 <body>
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
94 <h2>$head</h2>
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
95 <pre>
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
96 EOF
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
97
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
98 my $inexample = 0;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
99 while( <IN> ) {
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
100 chop;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
101 if ( /^\s*[-=]+\s*$/ ) {
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
102 print OUT "</pre><hr><pre>";
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
103 next;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
104 }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
105
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
106 # examples
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
107 elsif( /^>$/ || /\s>$/ ) {
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
108 $inexample = 1;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
109 chop;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
110 }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
111 elsif ( $inexample && /^([<\S])/ ) {
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
112 $inexample = 0;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
113 $_ = $' if $1 eq "<";
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
114 }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
115
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
116 s/\s+$//g;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
117
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
118 # Various vim highlights. note that < and > have already been escaped
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
119 # so that HTML doesn't get screwed up.
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
120
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
121 my @out = ();
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
122 # print "Text: $_\n";
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
123 LOOP:
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
124 foreach my $token ( split /((?:\|[^\|]+\|)|(?:\*[^\*]+\*))/ ) {
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
125 if ( $token =~ /^\|([^\|]+)\|/ ) {
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
126 # link
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
127 push( @out, "|".maplink( $1 )."|" );
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
128 next LOOP;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
129 }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
130 elsif ( $token =~ /^\*([^\*]+)\*/ ) {
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
131 # target
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
132 push( @out,
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
133 "<b class=\"vimtag\">\*<a name=\"".escurl($1)."\">".esctext($1)."<\/a>\*<\/b>");
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
134 next LOOP;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
135 }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
136
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
137 $_ = esctext($token);
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
138 s/CTRL-(\w+)/<code class="keystroke">CTRL-$1<\/code>/g;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
139 # parameter <...>
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
140 s/&lt;(.*?)&gt;/<code class="special">&lt;$1&gt;<\/code>/g;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
141
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
142 # parameter {...}
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
143 s/\{([^}]*)\}/<code class="special">{$1}<\/code>/g;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
144
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
145 # parameter [...]
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
146 s/\[(range|line|count|offset|cmd|[-+]?num)\]/<code class="special">\[$1\]<\/code>/g;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
147 # note
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
148 s/(Note:?)/<code class="note">$1<\/code>/gi;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
149
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
150 # local heading
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
151 s/^(.*)\~$/<code class="section">$1<\/code>/g;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
152 push( @out, $_ );
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
153 }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
154
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
155 $_ = join( "", @out );
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
156
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
157 if( $inexample == 2 ) {
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
158 print OUT "<code class=\"example\">$_</code>\n";
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
159 } else {
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
160 print OUT $_,"\n";
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
161 }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
162
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
163 $inexample = 2 if $inexample == 1;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
164 }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
165 print OUT<<EOF;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
166 </pre>
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
167 <p><i>Generated by vim2html on $date</i></p>
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
168 </body>
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
169 </html>
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
170 EOF
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
171
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
172 }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
173
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
174 sub usage
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
175 {
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
176 die<<EOF;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
177 vim2html.pl: converts vim documentation to HTML.
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
178 usage:
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
179
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
180 vim2html.pl <tag file> <text files>
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
181 EOF
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
182 }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
183
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
184
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
185 sub writeCSS
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
186 {
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
187 open( CSS, ">vim-stylesheet.css" ) || die "Couldn't write stylesheet: $!\n";
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
188 print CSS<<EOF;
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
189 body { background-color: white; color: black;}
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
190 :link { color: rgb(0,137,139); }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
191 :visited { color: rgb(0,100,100);
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
192 background-color: white; /* should be inherit */ }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
193 :active { color: rgb(0,200,200);
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
194 background-color: white; /* should be inherit */ }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
195
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
196 B.vimtag { color : rgb(250,0,250); }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
197
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
198 h1, h2 { color: rgb(82,80,82); text-align: center; }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
199 h3, h4, h5, h6 { color: rgb(82,80,82); }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
200 .headline { color: rgb(0,137,139); }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
201 .header { color: rgb(164, 32, 246); }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
202 .section { color: rgb(164, 32, 246); }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
203 .keystroke { color: rgb(106, 89, 205); }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
204 .vim { }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
205 .example { color: rgb(0, 0, 255); }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
206 .option { }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
207 .notvi { }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
208 .special { color: rgb(106, 89, 205); }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
209 .note { color: blue; background-color: yellow; }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
210 .sub {}
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
211 .badlink { color: rgb(0,37,39); }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
212 EOF
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
213
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
214 }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
215
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
216 # main
39
c16898406ff2 synchorinize version 7.3.081
one@zeus.cr.ie.u-ryukyu.ac.jp
parents: 0
diff changeset
217 usage() if $#ARGV < 1;
0
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
218
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
219 print "Processing tags...\n";
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
220 readTagFile( $ARGV[ 0 ] );
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
221
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
222 foreach my $file ( 1..$#ARGV ) {
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
223 print "Processing ".$ARGV[ $file ]."...\n";
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
224 vim2html( $ARGV[ $file ] );
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
225 }
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
226 print "Writing stylesheet...\n";
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
227 writeCSS();
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
228 print "done.\n"