#!/usr/bin/perl -w
# gutenpod.pl
# Program to convert plain text documents into iPod readable format
# by fridgemagnet, 2004-10-15 10:12 EDT
# http://www.fridgemagnet.org.uk/
# iPod notes must be less than 4kb long each
my $previous = "previous\n---\n";
my $next = "\n---\nnext";
my $header = "home\n";
my $maxsize = 4*1024 - length($next);
use strict;
sub writepage {
my ($pagenum, $pagetext, $line, $outdir, $newpage)
= (shift, shift, shift, shift, shift);
if ($newpage) {
# Add "Next" link if required
my $thisnext = $next;
my $nextnum = sprintf("%03d", $pagenum+1);
$thisnext =~ s/xxx/$nextnum/;
$pagetext .= $thisnext;
}
# Output collected data to page
print "$pagenum ";
my $pagefile = "$outdir/".sprintf("%03d", $pagenum);
open OUT, ">$pagefile" || die "Couldn't write to $pagefile";
print OUT $pagetext;
close OUT;
# Return start of new page if required
if ($newpage) {
my $thisprev = $previous;
my $prevnum = sprintf("%03d", $pagenum);
$thisprev =~ s/xxx/$prevnum/;
return $header.$thisprev.$line;
} else {
return 0;
}
}
foreach my $textfile (@ARGV) {
if (-e $textfile and !(-d $textfile)) {
print "Processing $textfile... ";
# Get output directory filename
my $outdir = $textfile.".ipodnote";
# Create directory
unless (-d $outdir) {
mkdir ($outdir, 0777) || die "Couldn't make $outdir";
}
# Initialise variables
my ($line, $pagetext, $pagenum) = ("", $header, 1);
open TEXT, "<$textfile" || die "Can't open $textfile";
while (!eof(TEXT)) {
$line = ;
$line =~ s/[\n\r]//g;
# If new paragraph put double linebreak
if ($line eq "" or $line =~ /^ /) {
$line = "\n\n$line";
} else {
$line .= " ";
}
# If page is too long or we've finished, output and start a new page
if (length($pagetext.$line) > $maxsize) {
$pagetext = writepage($pagenum, $pagetext, $line, $outdir, 1);
$pagenum++;
} else {
$pagetext .= $line;
}
}
# Write any remaining text
writepage($pagenum, $pagetext, "", $outdir, 0);
close TEXT;
print "done.\nData is in directory $outdir\n";
}
}
print "All done.\n";