perltidy attack on generation scripts
[exim-website.git] / script / gen.pl
index ac3d3d605d646891eff10d17f2cfcc3ebf0a8c80..bb94a7c2e9bb2898898d4c9a13bc616de2cc6079 100755 (executable)
@@ -21,6 +21,7 @@ my $canonical_url = 'http://www.exim.org/';
 my %opt = parse_arguments();
 
 ## Generate the pages
+my %cache;    # General cache object
 do_doc( 'spec',   $_ ) foreach @{ $opt{spec}   || [] };
 do_doc( 'filter', $_ ) foreach @{ $opt{filter} || [] };
 do_web() if exists $opt{web};
@@ -111,6 +112,13 @@ sub do_doc {
         ->appendTextChild( 'canonical_url',
         "${canonical_url}exim-html-current/doc/html/spec_html/" . ( $type eq 'spec' ? 'index' : 'filter' ) . ".html" );
 
+    ## Add a url for the latest version of this document
+    if ( $version ne $opt{latest} ) {
+        $xml->documentElement()
+            ->appendTextChild( 'current_url',
+            "../../../../exim-html-current/doc/html/spec_html/" . ( $type eq 'spec' ? 'index' : 'filter' ) . ".html" );
+    }
+
     ## Fixup the XML
     xref_fixup( $xml, $prepend_chapter );
 
@@ -132,7 +140,7 @@ sub do_doc {
     ## Generate the chapters
     my $counter = 0;
     my @chapters = map { $_->cloneNode(1) } $xml->findnodes('/book/chapter');
-    foreach my $chapter ( @chapters ) {
+    foreach my $chapter (@chapters) {
 
         ## Add a <chapter_id>N</chapter_id> node for the stylesheet to use
         $chapter->appendTextChild( 'chapter_id', ++$counter );
@@ -145,7 +153,8 @@ sub do_doc {
                         ? 'filter.html'
                         : 'index.html'
                 : sprintf( '%sch%02d.html', $prepend_chapter, $counter - 1 ) );
-            $chapter->appendTextChild( 'next_url', sprintf( '%sch%02d.html', $prepend_chapter, $counter + 1 ) ) unless int(@chapters) == $counter;
+            $chapter->appendTextChild( 'next_url', sprintf( '%sch%02d.html', $prepend_chapter, $counter + 1 ) )
+                unless int(@chapters) == $counter;
             $chapter->appendTextChild(
                 'canonical_url',
                 sprintf(
@@ -153,6 +162,15 @@ sub do_doc {
                     $prepend_chapter, $counter
                 )
             );
+            if ( $version ne $opt{latest} ) {
+                $chapter->appendTextChild(
+                    'current_url',
+                    sprintf(
+                        '../../../../exim-html-current/doc/html/spec_html/%sch%02d.html',
+                        $prepend_chapter, $counter
+                    )
+                );
+            }
         }
 
         ## Create an XML document from the chapter
@@ -316,6 +334,9 @@ sub transform {
     ## Add the current version of Exim to the XML
     $xml->documentElement()->appendTextChild( 'current_version', $opt{latest} );
 
+    ## Add the old versions of Exim to the XML
+    $xml->documentElement()->appendTextChild( 'old_versions', $_ ) foreach old_docs_versions();
+
     ## Parse the ".xsl" file as XML
     my $xsl = XML::LibXML->new()->parse_file($xsl_path) or die $!;
 
@@ -334,6 +355,18 @@ sub transform {
     close $out;
 }
 
+## Look in the docroot for old versions of the documentation
+sub old_docs_versions {
+    if ( !exists $cache{old_docs_versions} ) {
+        my @versions;
+        foreach ( glob("$opt{docroot}/exim-html-*") ) {
+            push @versions, $1 if /-(\d+(?:\.\d+)?)$/ && $1 < $opt{latest} && -d $_;
+        }
+        $cache{old_docs_versions} = [ reverse sort { $a <=> $b } @versions ];
+    }
+    return @{ $cache{old_docs_versions} };
+}
+
 ## error_help
 sub error_help {
     my $msg = shift;
@@ -482,6 +515,6 @@ Mike produced.
 
 =head1 COPYRIGHT
 
-Copyright 2010 Exim Maintainers. All rights reserved.
+Copyright 2010-2011 Exim Maintainers. All rights reserved.
 
 =cut