Just work on numbered chapters.
authorPhil Pennock <pdp@exim.org>
Thu, 6 Dec 2012 13:37:54 +0000 (08:37 -0500)
committerPhil Pennock <pdp@exim.org>
Thu, 6 Dec 2012 13:37:54 +0000 (08:37 -0500)
We want to move to named chapters.  This tool relies upon directory walking to get the chapters in order.
So, get _just_ the numbered chapters, sort, then chase any links.

script/eximhtml2txt.pl

index 0f03ea4ec009d7cf56ef60df2202515bbd57533f..38892e1c458644080e2ff1a55320a61f7df20890 100755 (executable)
@@ -3,6 +3,7 @@
 use strict;
 use warnings;
 
 use strict;
 use warnings;
 
+use File::Spec;
 use HTML::FormatText;
 use HTML::TreeBuilder;
 
 use HTML::FormatText;
 use HTML::TreeBuilder;
 
@@ -19,8 +20,30 @@ sub process_chapter {
     return $text;
 }
 
     return $text;
 }
 
+sub chapters_in_order {
+    my $dir = shift;
+
+    opendir DIR, $dir or die "opendir($dir) failed: $!\n";
+    my @numeric = sort grep {/^ch\d+\.html$/} readdir(DIR);
+    closedir(DIR) or die "closedir($dir) failed: $!\n";
+
+    my @results = map {
+        $_ = File::Spec->catfile($dir, $_);
+        if (-l $_) {
+            my $t;
+            eval { $t = readlink $_ };
+            $_ = File::Spec->rel2abs($t, $dir) if defined $t;
+        }
+        $_
+    } @numeric;
+    return @results;
+}
+
+
 my $dir = shift;
 my $dir = shift;
-foreach my $fn ( glob("$dir/ch*.html") ) {
+die "Need a directory\n" unless defined $dir;
+
+foreach my $fn ( chapters_in_order($dir) ) {
     print "=" x 72, "\n";
     print $fn, "\n";
     print "=" x 72, "\n";
     print "=" x 72, "\n";
     print $fn, "\n";
     print "=" x 72, "\n";