Admin/page/bin/genpage
changeset 16302 322e2a3335d4
parent 16301 f9f2e1643593
child 16303 fee0a02f61bb
--- a/Admin/page/bin/genpage	Mon Jun 06 14:12:07 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,420 +0,0 @@
-#!/usr/bin/perl -w
-
-# Genpage - Webpage Generator.
-#
-# Copyright (C) Joe Vaughan <joev@freddyfrog.com> 1998-1999
-# Some portions Copyright (C)  Ronan Waide <waider@waider.ie> 1999
-# Some portions Copyright (C)  Rocco Caputo <troc@netrus.net> 1999
-# 
-#   This program is free software; you can redistribute it and/or modify
-#   it under the terms of the GNU General Public License as published by
-#   the Free Software Foundation; either version 2 of the License, or
-#   (at your option) any later version.
-#   
-#   This program is distributed in the hope that it will be useful,
-#   but WITHOUT ANY WARRANTY; without even the implied warranty of
-#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#   GNU General Public License for more details.
-#   
-#   You should have received a copy of the GNU General Public License
-#   along with this program; if not, write to the Free Software
-#   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-$|=1;
-
-$version = "1.0b3";
-
-# following fix for Mac Perl submitted by Dair Grant <dair@webthing.net>
-# I shoulda thought of this, but I don't have a mac :) Thanks Dair.
-#  
-# dair, construct a path procedurally
-sub build_path
-{
-
-    # Retrieve our parameters
-    #
-    my $thePath = $_[0];
-    my $theItem = $_[1];
-
-
-
-    # If we're running on a Mac, munge the path/item/separator
-    #
-    if ($^O eq "MacOS")
-        {
-        $thePath =~ s/:$//;     # Strip off trailing ':'
-        $theItem =~ s/^:$//;    # Drop theItem == ':'
-        $pathDiv  = ":";        # Use Mac separator
-        }
-    else
-        {
-        $pathDiv = "/";         # Use Unix separator
-        }
-
-
-
-    # Return the path to the item
-    #
-    return($thePath . $pathDiv . $theItem);
-}
-
-
-
-# Some handy variables.
-$numfiles = 0;
-$numcontentfiles = 0;
-$numignoredfiles = 0;
-$numskippedfiles = 0;
-$numcpfiles = 0;
-$numdirfiles =0;
-
-use Getopt::Std;
-use File::Find;
-use File::Copy 'cp';
-
-# Current Working Dir.
-$pwd = `pwd`;
-chomp ($pwd);
-
-getopts('dt:c:o:fqhi:') || die "Invalid args, use $0 -h for help\n";
-
-# $opt_d is debug flag
-# $opt_t is template file. If not set, use standard template.
-# $opt_c is content directory. If not set, use standard content dir.
-# $opt_o is output dir, if not set, use standard output dir.
-# $opt_q sets quiet mode (no stdout output)
-# $opt_f sets a force flag - force generation even if output file is present
-#        and newer.
-# $opt_h runs usage and exits
-    
-# dair, build paths procedurally
-$opt_t ||= build_path("", "layout") . build_path("", "template.html");
-$opt_c ||= build_path("", "content");
-$opt_o ||= build_path("", "www");
-$opt_f ||= 0;
-$opt_d ||= 0;
-$opt_q ||= 0;
-$opt_h ||= 0;
-$opt_i ||= 'CVS|.*,v$';
-
-# dair, build paths procedurally
-$opt_t = build_path($pwd, $opt_t);
-$opt_c = build_path($pwd, $opt_c);
-$opt_o = build_path($pwd, $opt_o);
-
-
-if ($opt_h) { &usage; }
-
-if (!$opt_q) { 
-  print "Genpage, version $version starting run...\n";
-}
-
-if ($opt_d) { print "pwd = $pwd\n"; }
-
-#Swallow template file whole... 
-open( TEMPLATE, "<$opt_t" ) || die "Can\'t open template file $opt_t: $!\n";
-{ 
-local $/;
-undef $/;
-$template = <TEMPLATE>;
-close( TEMPLATE );
-}
-if (!$opt_q) {print "Using template file: $opt_t\n";}
-
-# Go through files in content dir and if it's a content file then 
-# process it otherwise, copy it (and it's dir structure) to the output dir.
-
-# if the output dir doesn't exist, create it.
-if (! -d $opt_o)
-{ 
-  mkdir $opt_o, 0755;
-  if (!$opt_q) 
-    {
-      print "Creating output directory: $opt_o\n"; 
-    }
-}
-
-if (!$opt_q) 
-  {
-    print "Processing files:\n"; 
-  }
-
-if (! -d $opt_c) { die "Can\'t open content dir\n" }
-
-find( \&process_file, $opt_c );
-
-if (!$opt_q) 
-  {
-    #numfiles reports one too many...
-    $numfiles--;
-    print "\nFinished.\n\n";
-    print "Run Summary.\n===========\n";
-    print "$numfiles total files and directories processed.\n";
-    print "$numcontentfiles content files parsed.\n";
-    print "$numskippedfiles content files skipped.\n"; 
-    print "$numcpfiles files copied.\n"; 
-    print "$numdirfiles directories created\n"; 
-    print "$numignoredfiles files or directories ignored.\n";
-  }
-
-exit;
-
-##############################################################################
-# Process_file the current file.
-##############################################################################
-sub process_file
-  {
-    if (!$opt_q) 
-      {
-	print "."; 
-      }
-
-    $numfiles++;
-    my $filename = $_;
-    my $dir = $File::Find::dir;
-    (undef,$reldir) = split( $opt_c, $dir);
-    if (!defined ($reldir) ) { $reldir = ""; }
-
-    # dair, build paths procedurally
-    $outdir  = build_path($opt_o,  $reldir);
-    $outfile = build_path($outdir, $filename);
-    $infile  = build_path($dir,    $filename);
-
-    # Ignore CVS stuff, ./ etc.
-    if ($infile =~ /$opt_i/) {
-      $numignoredfiles++;
-      return;
-    }
-
-    # Find returns ./ in each directory... avoid.
-
-    if ($infile =~ /\/.$/) {
-      return;
-    }
-    
-    # Ok, If the file is a dir, we create it (if necessary)
-    # if it's a content file, we parse it, otherwise, we
-    # copy it to the appropriate location.
-    
-    if ( -d $infile ) {
-      if ($opt_d) { print "Making dir $outfile\n"; };
-      mkdir $outfile, 0755 unless -d $outfile;
-      $numdirfiles++;
-      return;
-    }
-    
-    if ($filename =~ /^(.*)\.content$/) 
-      {
-
-    # dair, build paths procedurally
-    $outfile = build_path($outdir, "$1.html");
-
-	if ($opt_d) {print "Parsing: $infile\n Outputing to: $outfile\n";};
-	process_content($infile,$outfile);
-      }
-    else
-      {
-	if ($opt_d) { print "Copying: $infile => $outfile\n"; };
-	cp($infile,$outfile);
-	$numcpfiles++;
-      }
-    $_ = $filename; # because we broke it...
-  }
-
-##############################################################################
-# Process the tags in the template, substituting in the content file 
-# components and other things like inline function definitions and 
-# "include" directives
-##############################################################################
- 
-sub process_content
-  {
-    
-    $inputfile = shift;
-    $outputfile = shift;
-    my @content = "";
-   
-    $temp = $template;
-
-    if ($opt_d) { print "processing $inputfile to $outputfile\n";}
-
-# Make-like check for last modification times to see if it's necessary
-# to re-gen this page.
-
-    if ( -f $outputfile) 
-      {
-	   
-	if (!$opt_f && ( -M $outputfile < -M $inputfile)) 
-	  {
-	    $numskippedfiles++;
-	    if ($opt_d) { 
-	      print "skipping $inputfile because $outputfile is newer\n";
-	    }
-	    return;
-	  }
-      }
-    # Read content file
-    open( CONTENT, "<$inputfile" ) || die $!;
-    @content = <CONTENT>;
-    close( CONTENT );
-
-    $numcontentfiles++;
-
-    undef %page;
-    undef $tag;
-    foreach $line ( @content )
-      {
-	if ( $line =~ /^\s*\%(.+)\%/ )
-	{
-	  $tag = $1;
-	  next;
-	}
-	next if !defined( $tag );
-	
-	 $line .= "\n" if $line !~ /\n$/;
-	
-	if ( defined( $page{ $tag } ))
-	  {
-	    $page{ $tag } .= $line;
-	  }
-	else
-	  {
-	    $page{ $tag } = $line;
-	  }
-      }
-    
-    open( HTML, ">$outputfile" ) || die $1;
-    
-    while ($temp =~ /^(.*?)<!--\s*_GP_\s*(.*?)\s*-->(.*)$/s)
-      {
-	local $replacement = "";
-	my ($left, $middle, $right) = ($1, $2, $3);
-        if (!defined($replacement = eval ($middle))) 
-	  { 
-	    $replacement = "";
-	  }
-	
-	if ($@) {
-          $middle =~ s/\s+/ /g;
-          print STDERR "error evaluating { $middle }: $@\n";
-        }
-        else {
-          if ($opt_d) {
-	    print "evaluation output: $replacement\n";
-	  }
-        }
-	
-	$temp = $left . $replacement . $right;
-      }
-    print HTML $temp;
-    close( HTML );
-  }
-
-
-sub include
-  {
-    my ($file) = shift;
-    my ($section) = shift;
-
-    if ($opt_d) { 
-      print "include: file = $file\n"; 
-    }
-    if (!open( INCLUDE, "<$file" )) { 
-      return "<!-- include: file not found: $file -->";
-    }
-    
-    if (defined($section)) {
-    undef %incpage;
-    undef $inctag;
-
-      @content = <INCLUDE>;
-      close (INCLUDE);
-
-      foreach $line ( @content )
-	{
-	  if ( $line =~ /^\s*\%(.+)\%/ )
-	    {
-	      $inctag = $1; 
-	      next;
-	    }
-	  next if !defined( $inctag );
-	  $line .= "\n" if $line !~ /\n$/;
-
-	  if ( defined( $incpage{ $inctag } ))
-	    {
-	      $incpage{ $inctag } .= $line;
-	    }
-	  else
-	    {
-	      $incpage{ $inctag } = $line;
-	    }
-	}
-      if (defined( $incpage{$section}) ) {
-	$inline = $incpage{$section};
-      }
-      else {
-	$inline = "<!-- include: no such section - $section - in $file -->";  
-      }
-    } 
-    else
-      {	
-	local $/;
-	undef $/;
-	$inline = <INCLUDE>;
-	close( INCLUDE );
-      }
-    return "$inline";
-  }
-
-sub content
-  {
-    my $tag = shift;
-
-    if ($opt_d) { print "content: tag = $tag\n"; }
-    if (defined( $page{ $tag } ))
-      {      
-	$output = $page { $tag };
-	if ($opt_d) { print "content: output = $output\n"; }
-	return "$output";
-      }
-    else
-      {
-	return "<!-- content: undefined tag: $tag -->";
-      }
-  }
-
-sub version
-  {
-    return ( "<a href=\"http://www.mnemonic.org/genpage/\">Genpage</a> - Version: $version" );
-  }
-
-sub usage
-  {
-    print <<EOT;
-usage: genpage [-dqfh] [-c <content dir>] [-o <output dir>] 
-               [-t <template file>] [ -i <ignore regexp> ]
-
-
-       -d debug mode.     Turn on debugging (very verbose!)
-       -q quiet mode.     Don't print anything while running.
-       -f force mode.     Force the parsing of content files.
-       -h help.           Print this help text.
-       -c <content dir>   The directory where your content tree exists.
-                          Defaults to ./content.
-       -o <output dir>    The directory to put the output website.
-                          Defaults to ./www
-       -t <template file> The template to use to generate the site.
-                          Defaults to ./layout/template.html
-       -i <ignore regexp> Regular expression telling genpage to ignore certain
-                          files or directories. defaults to "CVS|.*,v$"
-
-       Genpage $version Copyright (C) Joe Vaughan <joev\@mnemonic.org> 1999
-       This program is released under the terms of the GNU Public License
-       Please read the accompanying COPYING file for details.
-
-       For detailed instructions on how to use Genpage, please consult the 
-       accompanying documentation. If you have questions, comments or 
-       suggestions for Genpage please contact the author.
-EOT
-exit;
-}