BEGIN {
foreach (qw(Mac::Files)) {
$MOD_AVAIL{$_} = eval "use $_; 1";
}
}
package HeaderDoc::ObjCContainer;
use HeaderDoc::Utilities qw(findRelativePath safeName getAPINameAndDisc 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 $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 _initialize {
my($self) = shift;
$self->SUPER::_initialize();
$self->tocTitlePrefix('Class:');
}
sub _getCompositePageString {
my $self = shift;
my $name = $self->name();
my $compositePageString;
my $contentString;
my $abstract = $self->abstract();
if (length($abstract)) {
$compositePageString .= "<h2>Abstract</h2>\n";
$compositePageString .= $abstract;
}
my $discussion = $self->discussion();
if (length($discussion)) {
$compositePageString .= "<h2>Discussion</h2>\n";
$compositePageString .= $discussion;
}
if ((length($abstract)) || (length($discussion))) {
$compositePageString .= "<hr><br>";
}
$contentString= $self->_getMethodDetailString();
if (length($contentString)) {
$compositePageString .= "<h2>Methods</h2>\n";
$contentString = $self->stripAppleRefs($contentString);
$compositePageString .= $contentString;
}
$contentString= $self->_getConstantDetailString();
if (length($contentString)) {
$compositePageString .= "<h2>Constants</h2>\n";
$contentString = $self->stripAppleRefs($contentString);
$compositePageString .= $contentString;
}
return $compositePageString;
}
sub XMLdocumentationBlock {
my $self = shift;
my $compositePageString = "";
my $name = $self->name();
my $abstract = $self->abstract();
my $discussion = $self->discussion();
my $contentString;
if ($self->tocTitlePrefix() eq "Class:") {
$compositePageString .= "<class type=\"objC\">";
} else {
$compositePageString .= "<category type=\"objC\">";
}
if (length($name)) {
$compositePageString .= "<name>$name</name>\n";
}
if (length($abstract)) {
$compositePageString .= "<abstract>$abstract</abstract>\n";
}
if (length($discussion)) {
$compositePageString .= "<discussion>$discussion</discussion>\n";
}
$contentString= $self->_getFunctionXMLDetailString();
if (length($contentString)) {
$contentString = $self->stripAppleRefs($contentString);
$compositePageString .= "<functions>$contentString</functions>\n";
}
$contentString= $self->_getMethodXMLDetailString();
if (length($contentString)) {
$contentString = $self->stripAppleRefs($contentString);
$compositePageString .= "<methods>$contentString</methods>\n";
}
$contentString= $self->_getVarXMLDetailString();
if (length($contentString)) {
$contentString = $self->stripAppleRefs($contentString);
$compositePageString .= "<globals>$contentString</globals>\n";
}
$contentString= $self->_getConstantXMLDetailString();
if (length($contentString)) {
$contentString = $self->stripAppleRefs($contentString);
$compositePageString .= "<constants>$contentString</constants>\n";
}
$contentString= $self->_getTypedefXMLDetailString();
if (length($contentString)) {
$contentString = $self->stripAppleRefs($contentString);
$compositePageString .= "<typedefs>$contentString</typedefs>";
}
$contentString= $self->_getStructXMLDetailString();
if (length($contentString)) {
$contentString = $self->stripAppleRefs($contentString);
$compositePageString .= "<structs>$contentString</structs>";
}
$contentString= $self->_getEnumXMLDetailString();
if (length($contentString)) {
$contentString = $self->stripAppleRefs($contentString);
$compositePageString .= "<enums>$contentString</enums>";
}
$contentString= $self->_getPDefineXMLDetailString();
if (length($contentString)) {
$contentString = $self->stripAppleRefs($contentString);
$compositePageString .= "<defines>$contentString</defines>";
}
if ($self->tocTitlePrefix() eq "Class:") {
$compositePageString .= "</class>";
} else {
$compositePageString .= "</category>";
}
return $compositePageString;
}
sub tocString {
my $self = shift;
my $contentFrameName = $self->name();
$contentFrameName =~ s/(.*)\.h/$1/;
if (1 || $isMacOS) {$contentFrameName = &safeName(filename => $contentFrameName);};
$contentFrameName = $contentFrameName . ".html";
my $header = $self->headerObject();
my @meths = $self->methods();
my $compositePageName = HeaderDoc::APIOwner->compositePageName();
my $defaultFrameName = HeaderDoc::APIOwner->defaultFrameName();
my $tocString = "<nobr> <a href=\"$contentFrameName\" target=\"doc\">Introduction</a>\n";
if (@meths) {
my @classMethods;
my @instanceMethods;
$tocString .= "<br><h4>Methods</h4><hr>\n";
foreach my $obj (sort byMethodType @meths) {
my $type = $obj->isInstanceMethod();
if ($type =~ /NO/){
push (@classMethods, $obj);
} elsif ($type =~ /YES/){
push (@instanceMethods, $obj);
} else {
push (@instanceMethods, $obj);
}
}
if (@classMethods) {
$tocString .= "<h5>Class Methods</h5>\n";
foreach my $obj (sort objName @classMethods) {
my $name = $obj->name();
my $prefix = $self->getMethodPrefix($obj);
$tocString .= "<nobr> <a href=\"Methods/Methods.html#$name\" target=\"doc\">$prefix$name</a></nobr><br>\n";
}
}
if (@instanceMethods) {
$tocString .= "<h5>Instance Methods</h5>\n";
foreach my $obj (sort objName @instanceMethods) {
my $name = $obj->name();
my $prefix = $self->getMethodPrefix($obj);
$tocString .= "<nobr> <a href=\"Methods/Methods.html#$name\" target=\"doc\">$prefix$name</a></nobr><br>\n";
}
}
}
$tocString .= "<br><h4>Other Reference</h4><hr>\n";
$tocString .= "<nobr> <a href=\"../../$defaultFrameName\" target=\"_top\">Header</a></nobr><br>\n";
$tocString .= "<br><hr><a href=\"$compositePageName\" target=\"_blank\">[Printable HTML Page]</a>\n";
return $tocString;
}
sub getMethodPrefix {
my $self = shift;
my $obj = shift;
my $prefix;
my $type;
$type = $obj->isInstanceMethod();
if ($type =~ /YES/) {
$prefix = "- ";
} elsif ($type =~ /NO/) {
$prefix = "+ ";
} else {
$prefix = "";
}
return $prefix;
}
sub docNavigatorComment {
my $self = shift;
my $name = $self->name();
return "<!-- headerDoc=cl; name=$name-->";
}
sub objName { my $obj1 = $a;
my $obj2 = $b;
return ($obj1->name() cmp $obj2->name());
}
sub byMethodType { my $obj1 = $a;
my $obj2 = $b;
return ($obj1->isInstanceMethod() cmp $obj2->isInstanceMethod());
}
sub printObject {
my $self = shift;
print "------------------------------------\n";
print "ObjCContainer\n";
print " - no ivars\n";
print "Inherits from:\n";
$self->SUPER::printObject();
}
1;