E2 Source Code Formatter
This script will reformat your entire node containing source code as long as you've used <pre></pre> and/or <code></code> pairs. This script takes a text file containing an entire node as its input, HTML and all. It won't work if you nest <pre></pre> or <code></code> pairs. It also doesn't handle <code> inside <pre> or vice versa, but unless you're noding about <pre> or <code> none of those should ever happen.
Usage example: ./source.prl node.e2 > node.e2.out
#!/usr/bin/perl
use strict;
my @open = qw(<pre> <code>);
my @close = qw(</pre> </code>);
open(IN, $ARGV[0]);
my @node = <IN>;
close(IN);
my $node = join('__JOIN__STRING__', @node);
for my $i (0..1) {
$node =~ s/($open[$i])/__PADDING__STRING__\1/g;
@node = split($open[$i], $node);
for my $j (0..$#node) {
if($j == 0) {
push(@node, shift(@node));
} else {
my ($left, $right) = split($close[$i], shift(@node));
$left =~ s/&/&/g;
$left =~ s/</</g;
$left =~ s/>/>/g;
$left =~ s/\[/[/g;
$left =~ s/\]/]/g;
$left =~ s/\t/ /g;
push(@node, $left . $close[$i] . $right);
}
}
$node = join($open[$i], @node);
$node =~ s/__PADDING__STRING__//g;
}
@node = split('__JOIN__STRING__', $node);
print foreach (@node);
E2 Offline Node Preview
For those of us without QBASIC (I don't know when Microsoft quit distibuting it, but my installation of Windows XP Professional doesn't have it), here is a Windows Scripting Host/Perl offline node previewer. If you're looking for a Windows-friendly version of Perl, Active Perl1 is free, and it works well for me. This script currently uses a table width of 600, but that's easy to change (even if you don't know Perl). Just change the 600 in <table width="600"...> to whatever you'd prefer, and you're good to go. If you'd prefer to use a browser other than Internet Explorer (which I preview nodes in so it doesn't interfere with browsing with Mozilla Firefox), it's a one line change in the second to last line. Just replace iexplore with your favorite browser's executable.
Usage example: cscript node_preview.wsf node.txt
<Job ID="Offline_Node_Preview">
<script language=PerlScript>
# File name: node_preview.wsf
# Usage: cscript node_preview.wsf <file>
open(IN,$WScript->Arguments(0)) or die "Couldn't open input\n";
open(OUT,'>C:\\tempNode.html') or die "Couldn't open output\n";
print OUT<<'HEADER';
<html>
<head>
<style type="text/css">
body, p, td, li {font: normal normal normal 10pt Arial;}
a {color: #003366;}
</style>
<title>Offline Node Preview</title>
</head>
<body>
<table width="600" border="1" cellpadding="5">
<tr>
<td>
HEADER
@node = <IN>;
$node = join('__JOIN__STRING__', @node);
@node = split(/\[/, $node);
for $i (0..$#node) {
unless($i == 0) {
($link, $rest) = split(/\]/, $node[$i]);
$link =~ /(.+)/ unless($link =~ /(.+)\|(.+)/);
$link = '<a href="http://www.everything2.org/?node=';
$link .= $1;
$link .= '">';
$link .= $1 unless(($2 ne '') and ($link .= $2));
$link .= '</a>';
$node[$i] = $link . $rest;
}
}
$node = join('', @node);
@node = split('__JOIN__STRING__', $node);
print OUT foreach (@node);
print OUT<<'FOOTER';
</td>
</tr>
</table>
</body>
</html>
FOOTER
close(OUT);
close(IN);
$WshShell = $WScript->CreateObject('WScript.Shell');
$WshShell->Run('iexplore C:\\tempNode.html', 1, true);
system('del C:\\tempNode.html');
</script>
</Job>
1 - Active Perl is available for download at http://www.activestate.com/Products/ActivePerl/