package HeaderDoc::Header;
BEGIN {
foreach (qw(Mac::Files)) {
$MOD_AVAIL{$_} = eval "use $_; 1";
}
}
use HeaderDoc::Utilities qw(findRelativePath safeName getAPINameAndDisc convertCharsForFileMaker printArray printHash);
use HeaderDoc::APIOwner;
@ISA = qw( HeaderDoc::APIOwner );
use strict;
use vars qw($VERSION @ISA);
$VERSION = '1.20';
my $isMacOS;
my $pathSeparator;
if ($^O =~ /MacOS/i) {
$pathSeparator = ":";
$isMacOS = 1;
} else {
$pathSeparator = "/";
$isMacOS = 0;
}
my $debugging = 0;
my $tracing = 0;
my $outputExtension = ".html";
my $tocFrameName = "toc.html";
my $defaultFrameName = "index.html";
my $compositePageName = "CompositePage.html";
my $theTime = time();
my ($sec, $min, $hour, $dom, $moy, $year, @rest);
($sec, $min, $hour, $dom, $moy, $year, @rest) = localtime($theTime);
$moy++;
$year += 1900;
my $dateStamp = "$moy/$dom/$year";
sub new {
my($param) = shift;
my($class) = ref($param) || $param;
my $self = {};
bless($self, $class);
$self->SUPER::_initialize();
$self->_initialize();
return($self);
}
sub _initialize {
my($self) = shift;
$self->{CLASSES} = [];
$self->{CLASSESDIR} = undef;
$self->{CURRENTCLASS} = undef;
}
sub outputDir {
my $self = shift;
if (@_) {
my $rootOutputDir = shift;
$self->SUPER::outputDir($rootOutputDir);
$self->{OUTPUTDIR} = $rootOutputDir;
$self->classesDir("$rootOutputDir$pathSeparator"."Classes");
}
return $self->{OUTPUTDIR};
}
sub classesDir {
my $self = shift;
if (@_) {
$self->{CLASSESDIR} = shift;
}
return $self->{CLASSESDIR};
}
sub classes {
my $self = shift;
if (@_) {
@{ $self->{CLASSES} } = @_;
}
return @{ $self->{CLASSES} };
}
sub currentClass {
my $self = shift;
if (@_) {
@{ $self->{CURRENTCLASS} } = @_;
}
return @{ $self->{CURRENTCLASS} };
}
sub addToClasses {
my $self = shift;
if (@_) {
foreach my $item (@_) {
$self->currentClass($item);
push (@{ $self->{CLASSES} }, $item);
}
}
return @{ $self->{CLASSES} };
}
sub writeHeaderElements {
my $self = shift;
my $classesDir = $self->classesDir();
$self->SUPER::writeHeaderElements();
if ($self->classes()) {
if (! -e $classesDir) {
unless (mkdir ("$classesDir", 0777)) {die ("Can't create output folder $classesDir. \n$!\n");};
}
$self->writeClasses();
}
}
sub writeHeaderElementsToCompositePage {
my $self = shift;
my @classObjs = $self->classes();
$self->SUPER::writeHeaderElementsToCompositePage();
if ($self->classes()) {
foreach my $obj (@classObjs) {
$obj->writeHeaderElementsToCompositePage();
}
}
}
sub writeClasses {
my $self = shift;
my @classObjs = $self->classes();
my $classRootDir = $self->classesDir();
foreach my $obj (sort objName @classObjs) {
my $className = $obj->name();
if (1 || $isMacOS) {$className = &safeName($className);};
$obj->outputDir("$classRootDir$pathSeparator$className");
$obj->createFramesetFile();
$obj->createContentFile();
$obj->createTOCFile();
$obj->writeHeaderElements();
}
}
sub createTOCFile {
my $self = shift;
my $rootDir = $self->outputDir();
my $outputFileName = "toc.html";
my $outputFile = "$rootDir$pathSeparator$outputFileName";
my $fileString = $self->tocString();
my $filename = $self->name();
open(OUTFILE, ">$outputFile") || die "Can't write $outputFile.\n$!\n";
if ($isMacOS) {MacPerl::SetFileInfo('MSIE', 'TEXT', "$outputFile");};
print OUTFILE "<html><head><title>Draft Documentation for $filename</title></head>\n";
print OUTFILE "<body bgcolor=\"#cccccc\">\n";
print OUTFILE "<table border=\"0\" cellpadding=\"0\" cellspacing=\"2\" width=\"148\">\n";
print OUTFILE "<tr><td colspan=\"2\"><font size=\"5\" color=\"#330066\"><b>Header:</b></font></td></tr>\n";
print OUTFILE "<tr><td width=\"15\"></td><td><b><font size=\"+1\">$filename</font></b></td></tr>\n";
print OUTFILE "</table><hr>\n";
print OUTFILE $fileString;
print OUTFILE "</body></html>\n";
close OUTFILE;
}
sub tocString {
my $self = shift;
my @classes = $self->classes();
my $tocString = $self->SUPER::tocString();
if (@classes) {
$tocString .= "<h4>Classes</h4>\n";
foreach my $obj (sort objName @classes) {
my $name = $obj->name();
my $safeName = $name;
if (1 || $isMacOS) {$safeName = &safeName($name);};
$tocString .= "<nobr> <a href = \"Classes/$safeName/index.html\" target =\"_top\">$name</a></nobr><br>\n";
}
}
$tocString .= "<br><hr><a href=\"$compositePageName\" target =\"_blank\">[Printable HTML Page]</a>\n";
return $tocString;
}
sub objName { my $obj1 = $a;
my $obj2 = $b;
return ($obj1->name() cmp $obj2->name());
}
sub printObject {
my $self = shift;
print "Header\n";
$self->SUPER::printObject();
print "outputDir: $self->{OUTPUTDIR}\n";
print "constantsDir: $self->{CONSTANTSDIR}\n";
print "datatypesDir: $self->{DATATYPESDIR}\n";
print "functionsDir: $self->{FUNCTIONSDIR}\n";
print "typedefsDir: $self->{TYPEDEFSDIR}\n";
print "constants:\n";
&printArray(@{$self->{CONSTANTS}});
print "functions:\n";
&printArray(@{$self->{FUNCTIONS}});
print "typedefs:\n";
&printArray(@{$self->{TYPEDEFS}});
print "\n";
}
1;