Apache::CVS is a mod_perl handler that provides
a web interface to CVS repositories. It's distro includes
a subclass, Apache::CVS::HTML, which outputs HTML instead
of plain ole text.
Perl::Tidy is the core of
perltidy, a utility that
indents and reformats Perl scripts, as well as provides an
excellent syntax highlighter via HTML and CSS. Put the two
together and you have a web interface to a CVS repository
with syntax highlighting.
package Apache::CVS::Tidy;
use strict;
use warnings;
use base qw(Apache::CVS::HTML);
use Perl::Tidy;
use CGI qw(start_html);
sub print_page_header {
my $self = shift;
return if $self->page_headers_sent();
$self->request()->print(start_html(
-title => 'CVS Repository',
-style => { src => '/path/to/perltidy.css' },
));
$self->print_path_links();
$self->page_headers_sent(1);
}
sub print_text_revision {
my ($self,$content) = @_;
my $html;
perltidy(
source => \$content,
destination => \$html,
argv => '-html -npod -css=/path/to/perltidy.css',
errorfile => '/dev/null',
);
# big thanks to Beatnik for this little snippet
# Apache::CVS::HTML double-spaces the code, this remedies that
$html =~ s/\n\n/\n/g;
$self->request()->print($html);
}
1;
And an example stylesheet:
body {background: #fffff3; color: #35351d}
pre { color: #35351d;
background: #fffff3;
font-family: courier;
}
a { color: #de022a;}
th { background: gray; }
.c { color: #777777;} /* comment */
.cm { color: #35351d;} /* comma */
.co { color: #35351d;} /* colon */
.h { color: #CD5555; font-weight:bold;} /* here-doc-target */
.hh { color: #0f6d30; font-style:italic;} /* here-doc-text */
.i { color: #2c2255;} /* identifier */
.j { color: #2c2255; font-weight:bold;} /* label */
.k { color: #8d6b5f; font-weight:bold;} /* keyword */
.m { color: #2c2255; font-weight:bold;} /* subroutine */
.n { color: #B452CD;} /* numeric */
.p { color: #35351d;} /* paren */
.pd { color: #228B22; font-style:italic;} /* pod-text */
.pu { color: #35351d;} /* punctuation */
.q { color: #0f6d30;} /* quote */
.s { color: #35351d;} /* structure */
.sc { color: #35351d;} /* semicolon */
.v { color: #B452CD;} /* v-string */
.w { color: #35351d;} /* bareword */
Last note: i use the -npod option in the
argv argument for perltidy() - this
prevents POD from being parsed by POD::HTML.
Instead, POD is simply italicized, which makes for a faster
processing time.
jeffa
L-LL-L--L-LL-L--L-LL-L--
-R--R-RR-R--R-RR-R--R-RR
B--B--B--B--B--B--B--B--
H---H---H---H---H---H---
(the triplet paradiddle with high-hat)
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.