############################################################################### # # Package: NaturalDocs::Builder::FramedHTML # ############################################################################### # # A package that generates output in HTML with frames. # # All functions are called with Package->Function() notation. # ############################################################################### # This file is part of Natural Docs, which is Copyright (C) 2003-2008 Greg Valure # Natural Docs is licensed under the GPL use strict; use integer; package NaturalDocs::Builder::FramedHTML; use base 'NaturalDocs::Builder::HTMLBase'; ############################################################################### # Group: Implemented Interface Functions # # Function: INIT # # Registers the package with . # sub INIT { NaturalDocs::Builder->Add(__PACKAGE__); }; # # Function: CommandLineOption # # Returns the option to follow -o to use this package. In this case, "html". # sub CommandLineOption { return 'FramedHTML'; }; # # Function: BuildFile # # Builds the output file from the parsed source file. # # Parameters: # # sourcefile - The of the source file. # parsedFile - An arrayref of the source file as objects. # sub BuildFile #(sourceFile, parsedFile) { my ($self, $sourceFile, $parsedFile) = @_; my $outputFile = $self->OutputFileOf($sourceFile); # 99.99% of the time the output directory will already exist, so this will actually be more efficient. It only won't exist # if a new file was added in a new subdirectory and this is the first time that file was ever parsed. if (!open(OUTPUTFILEHANDLE, '>' . $outputFile)) { NaturalDocs::File->CreatePath( NaturalDocs::File->NoFileName($outputFile) ); open(OUTPUTFILEHANDLE, '>' . $outputFile) or die "Couldn't create output file " . $outputFile . "\n"; }; print OUTPUTFILEHANDLE # IE 6 doesn't like any doctype here at all. Add one (strict or transitional doesn't matter) and it makes the page slightly too # wide for the frame. Mozilla and Opera handle it like champs either way because they Don't Suck(tm). # '' . "\n\n" '' . (NaturalDocs::Settings->CharSet() ? '' : '') . '' . $self->BuildTitle($sourceFile) . '' . '' . '' . '' . $self->OpeningBrowserStyles() . $self->StandardComments() . "\n\n\n" . $self->BuildContent($sourceFile, $parsedFile) . "\n\n\n" . $self->BuildToolTips() . $self->ClosingBrowserStyles() . ''; close(OUTPUTFILEHANDLE); }; # # Function: BuildIndex # # Builds an index for the passed type. # # Parameters: # # type - The to limit the index to, or undef if none. # sub BuildIndex #(type) { my ($self, $type) = @_; my $indexTitle = $self->IndexTitleOf($type); my $indexFile = $self->IndexFileOf($type); my $startIndexPage = '' . "\n\n" . '' . (NaturalDocs::Settings->CharSet() ? '' : '') . ''; if (defined NaturalDocs::Menu->Title()) { $startIndexPage .= $self->StringToHTML(NaturalDocs::Menu->Title()) . ' - '; }; $startIndexPage .= $indexTitle . '' . '' . '' . '' . $self->OpeningBrowserStyles() . "\n\n\n" . $self->StandardComments() . "\n\n\n" . '
' . '
' . $indexTitle . '
'; my $endIndexPage = '
' . "\n\n\n" . $self->ClosingBrowserStyles() . ''; my $startSearchResultsPage = '' . "\n\n" . '' . (NaturalDocs::Settings->CharSet() ? '' : '') . '' . '' . '' . '' . $self->OpeningBrowserStyles() . "\n\n\n" . $self->StandardComments() . "\n\n\n" . '
' . '
' . 'Search Results' . '
'; my $endSearchResultsPage = '
' . "\n\n\n" . $self->ClosingBrowserStyles() . ''; my $indexContent = NaturalDocs::SymbolTable->Index($type); my $pageCount = $self->BuildIndexPages($type, $indexContent, $startIndexPage, $endIndexPage, $startSearchResultsPage, $endSearchResultsPage); $self->PurgeIndexFiles($type, $indexContent, $pageCount + 1); }; # # Function: UpdateMenu # # Builds the menu file. Also generates index.html. # sub UpdateMenu { my $self = shift; my $outputDirectory = NaturalDocs::Settings->OutputDirectoryOf($self); my $outputFile = NaturalDocs::File->JoinPaths($outputDirectory, 'menu.html'); open(OUTPUTFILEHANDLE, '>' . $outputFile) or die "Couldn't create output file " . $outputFile . "\n"; my $title = 'Menu'; if (defined $title) { $title .= ' - ' . NaturalDocs::Menu->Title(); }; $title = $self->StringToHTML($title); print OUTPUTFILEHANDLE '' . "\n\n" . '' . (NaturalDocs::Settings->CharSet() ? '' : '') . '' . $title . '' . '' . '' . '' . '' . '' . $self->OpeningBrowserStyles() . $self->StandardComments() . "\n\n\n" . $self->BuildMenu(undef, undef) . "\n\n\n" . $self->BuildFooter(1) . "\n\n\n" . $self->ClosingBrowserStyles() . ''; close(OUTPUTFILEHANDLE); # Update index.html my $firstMenuEntry = $self->FindFirstFile(); my $indexFile = NaturalDocs::File->JoinPaths( NaturalDocs::Settings->OutputDirectoryOf($self), 'index.html' ); # We have to check because it's possible that there may be no files with Natural Docs content and thus no files on the menu. if (defined $firstMenuEntry) { open(INDEXFILEHANDLE, '>' . $indexFile) or die "Couldn't create output file " . $indexFile . ".\n"; print INDEXFILEHANDLE '' . '' . '' . (NaturalDocs::Settings->CharSet() ? '' : '') . '' . $self->StringToHTML(NaturalDocs::Menu->Title()) . '' . '' . $self->StandardComments() . '' . '' . '' . '' . '' . 'This documentation was designed for use with frames. However, you can still use it by ' . '<a href="menu.html">starting from the menu page</a>.' . "<script language=JavaScript><!--\n" . 'location.href="menu.html";' . "\n// --></script>" . '' . ''; close INDEXFILEHANDLE; } elsif (-e $indexFile) { unlink($indexFile); }; }; 1;