Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(127)

Unified Diff: source/libvpx/examples/includes/HTML-Toc-0.91/TocInsertor.pm

Issue 148913004: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: source/libvpx/examples/includes/HTML-Toc-0.91/TocInsertor.pm
===================================================================
--- source/libvpx/examples/includes/HTML-Toc-0.91/TocInsertor.pm (revision 247498)
+++ source/libvpx/examples/includes/HTML-Toc-0.91/TocInsertor.pm (working copy)
@@ -1,1066 +0,0 @@
-#--- TocInsertor.pm -----------------------------------------------------------
-# function: Insert Table of Contents HTML::Toc, generated by
-# HTML::TocGenerator.
-# note: - The term 'propagate' is used as a shortcut for the process of
-# both generating and inserting a ToC at the same time.
-# - 'TIP' is an abbreviation of 'Toc Insertion Point'.
-
-
-package HTML::TocInsertor;
-
-
-use strict;
-use FileHandle;
-use HTML::TocGenerator;
-
-
-BEGIN {
- use vars qw(@ISA $VERSION);
-
- $VERSION = '0.91';
-
- @ISA = qw(HTML::TocGenerator);
-}
-
- # TocInsertionPoint (TIP) constants
-
-use constant TIP_PREPOSITION_REPLACE => 'replace';
-use constant TIP_PREPOSITION_BEFORE => 'before';
-use constant TIP_PREPOSITION_AFTER => 'after';
-
-use constant TIP_TOKEN_ID => 0;
-use constant TIP_PREPOSITION => 1;
-use constant TIP_INCLUDE_ATTRIBUTES => 2;
-use constant TIP_EXCLUDE_ATTRIBUTES => 3;
-use constant TIP_TOC => 4;
-
-use constant MODE_DO_NOTHING => 0; # 0b00
-use constant MODE_DO_INSERT => 1; # 0b01
-use constant MODE_DO_PROPAGATE => 3; # 0b11
-
-END {}
-
-
-#--- HTML::TocInsertor::new() -------------------------------------------------
-# function: Constructor.
-
-sub new {
- # Get arguments
- my ($aType) = @_;
- my $self = $aType->SUPER::new;
- # TRUE if insertion point token must be output, FALSE if not
- $self->{_doOutputInsertionPointToken} = 1;
- # Reset batch variables
- $self->_resetBatchVariables;
- # Bias to not insert ToC
- $self->{hti__Mode} = MODE_DO_NOTHING;
-
- # TODO: Initialize output
-
- return $self;
-} # new()
-
-
-#--- HTML::TocInsertor::_deinitializeOutput() ---------------------------------
-# function: Deinitialize output.
-
-sub _deinitializeOutput {
- # Get arguments
- my ($self) = @_;
- # Filehandle is defined?
- if (defined($self->{_outputFileHandle})) {
- # Yes, filehandle is defined;
- # Restore selected filehandle
- select($self->{_oldFileHandle});
- # Undefine filehandle, closing it automatically
- undef $self->{_outputFileHandle};
- }
-} # _deinitializeOutput()
-
-
-#--- HTML::TocInsertor::_initializeOutput() -----------------------------------
-# function: Initialize output.
-
-sub _initializeOutput {
- # Get arguments
- my ($self) = @_;
- # Bias to write to outputfile
- my $doOutputToFile = 1;
-
- # Is output specified?
- if (defined($self->{options}{'output'})) {
- # Yes, output is specified;
- # Indicate to not output to outputfile
- $doOutputToFile = 0;
- # Alias output reference
- $self->{_output} = $self->{options}{'output'};
- # Clear output
- ${$self->{_output}} = "";
- }
-
- # Is output file specified?
- if (defined($self->{options}{'outputFile'})) {
- # Yes, output file is specified;
- # Indicate to output to outputfile
- $doOutputToFile = 1;
- # Open file
- $self->{_outputFileHandle} =
- new FileHandle ">" . $self->{options}{'outputFile'};
-
- # Backup currently selected filehandle
- $self->{_oldFileHandle} = select;
- # Set new default filehandle
- select($self->{_outputFileHandle});
- }
-
- # Alias output-to-file indicator
- $self->{_doOutputToFile} = $doOutputToFile;
-} # _initializeOutput()
-
-
-#--- HTML::TocInsertor::_deinitializeInsertorBatch() --------------------------
-# function: Deinitialize insertor batch.
-
-sub _deinitializeInsertorBatch {
- # Get arguments
- my ($self) = @_;
- # Indicate ToC insertion has finished
- $self->{_isTocInsertionPointPassed} = 0;
- # Write buffered output
- $self->_writeBufferedOutput();
- # Propagate?
- if ($self->{hti__Mode} == MODE_DO_PROPAGATE) {
- # Yes, propagate;
- # Deinitialize generator batch
- $self->_deinitializeGeneratorBatch();
- }
- else {
- # No, insert only;
- # Do general batch deinitialization
- $self->_deinitializeBatch();
- }
- # Deinitialize output
- $self->_deinitializeOutput();
- # Indicate end of batch
- $self->{hti__Mode} = MODE_DO_NOTHING;
- # Reset batch variables
- $self->_resetBatchVariables();
-} # _deinitializeInsertorBatch()
-
-
-#--- HTML::TocInsertor::_initializeInsertorBatch() ----------------------------
-# function: Initialize insertor batch.
-# args: - $aTocs: Reference to array of tocs.
-# - $aOptions: optional options
-
-sub _initializeInsertorBatch {
- # Get arguments
- my ($self, $aTocs, $aOptions) = @_;
- # Add invocation options
- $self->setOptions($aOptions);
- # Option 'doGenerateToc' specified?
- if (!defined($self->{options}{'doGenerateToc'})) {
- # No, options 'doGenerateToc' not specified;
- # Default to 'doGenerateToc'
- $self->{options}{'doGenerateToc'} = 1;
- }
- # Propagate?
- if ($self->{options}{'doGenerateToc'}) {
- # Yes, propagate;
- # Indicate mode
- $self->{hti__Mode} = MODE_DO_PROPAGATE;
- # Initialize generator batch
- # NOTE: This method takes care of calling '_initializeBatch()'
- $self->_initializeGeneratorBatch($aTocs);
- }
- else {
- # No, insert;
- # Indicate mode
- $self->{hti__Mode} = MODE_DO_INSERT;
- # Do general batch initialization
- $self->_initializeBatch($aTocs);
- }
- # Initialize output
- $self->_initializeOutput();
- # Parse ToC insertion points
- $self->_parseTocInsertionPoints();
-} # _initializeInsertorBatch()
-
-
-#--- HTML::TocInsertor::_insert() ---------------------------------------------
-# function: Insert ToC in string.
-# args: - $aString: Reference to string to parse.
-# note: Used internally.
-
-sub _insert {
- # Get arguments
- my ($self, $aString) = @_;
- # Propagate?
- if ($self->{options}{'doGenerateToc'}) {
- # Yes, propagate;
- # Generate & insert ToC
- $self->_generate($aString);
- }
- else {
- # No, just insert ToC
- # Insert by parsing file
- $self->parse($aString);
- # Flush remaining buffered text
- $self->eof();
- }
-} # _insert()
-
-
-#--- HTML::TocInsertor::_insertIntoFile() -------------------------------------
-# function: Do insert generated ToCs in file.
-# args: - $aToc: (reference to array of) ToC object(s) to insert.
-# - $aFile: (reference to array of) file(s) to parse for insertion
-# points.
-# - $aOptions: optional insertor options
-# note: Used internally.
-
-sub _insertIntoFile {
- # Get arguments
- my ($self, $aFile) = @_;
- # Local variables;
- my ($file, @files);
- # Dereference array reference or make array of file specification
- @files = (ref($aFile) =~ m/ARRAY/) ? @$aFile : ($aFile);
- # Loop through files
- foreach $file (@files) {
- # Propagate?
- if ($self->{options}{'doGenerateToc'}) {
- # Yes, propagate;
- # Generate and insert ToC
- $self->_generateFromFile($file);
- }
- else {
- # No, just insert ToC
- # Insert by parsing file
- $self->parse_file($file);
- }
- }
-} # _insertIntoFile()
-
-
-#--- HTML::TocInsertor::_parseTocInsertionPoints() ----------------------------
-# function: Parse ToC insertion point specifier.
-
-sub _parseTocInsertionPoints {
- # Get arguments
- my ($self) = @_;
- # Local variables
- my ($tipPreposition, $tipToken, $toc, $tokenTipParser);
- # Create parser for TIP tokens
- $tokenTipParser = HTML::_TokenTipParser->new(
- $self->{_tokensTip}
- );
- # Loop through ToCs
- foreach $toc (@{$self->{_tocs}}) {
- # Split TIP in preposition and token
- ($tipPreposition, $tipToken) = split(
- '\s+', $toc->{options}{'insertionPoint'}, 2
- );
- # Known preposition?
- if (
- ($tipPreposition ne TIP_PREPOSITION_REPLACE) &&
- ($tipPreposition ne TIP_PREPOSITION_BEFORE) &&
- ($tipPreposition ne TIP_PREPOSITION_AFTER)
- ) {
- # No, unknown preposition;
- # Use default preposition
- $tipPreposition = TIP_PREPOSITION_AFTER;
- # Use entire 'insertionPoint' as token
- $tipToken = $toc->{options}{'insertionPoint'};
- }
- # Indicate current ToC to parser
- $tokenTipParser->setToc($toc);
- # Indicate current preposition to parser
- $tokenTipParser->setPreposition($tipPreposition);
- # Parse ToC Insertion Point
- $tokenTipParser->parse($tipToken);
- # Flush remaining buffered text
- $tokenTipParser->eof();
- }
-} # _parseTocInsertionPoints()
-
-
-#--- HTML::TocInsertor::_processTokenAsInsertionPoint() -----------------------
-# function: Check for token being a ToC insertion point (Tip) token and
-# process it accordingly.
-# args: - $aTokenType: type of token: start, end, comment or text.
-# - $aTokenId: token id of currently parsed token
-# - $aTokenAttributes: attributes of currently parsed token
-# - $aOrigText: complete token
-# returns: 1 if successful -- token is processed as insertion point, 0
-# if not.
-
-sub _processTokenAsInsertionPoint {
- # Get arguments
- my ($self, $aTokenType, $aTokenId, $aTokenAttributes, $aOrigText) = @_;
- # Local variables
- my ($i, $result, $tipToken, $tipTokenId, $tipTokens);
- # Bias to token not functioning as a ToC insertion point (Tip) token
- $result = 0;
- # Alias ToC insertion point (Tip) array of right type
- $tipTokens = $self->{_tokensTip}[$aTokenType];
- # Loop through tipTokens
- $i = 0;
- while ($i < scalar @{$tipTokens}) {
- # Aliases
- $tipToken = $tipTokens->[$i];
- $tipTokenId = $tipToken->[TIP_TOKEN_ID];
- # Id & attributes match?
- if (
- ($aTokenId =~ m/$tipTokenId/) && (
- HTML::TocGenerator::_doesHashContainHash(
- $aTokenAttributes, $tipToken->[TIP_INCLUDE_ATTRIBUTES], 0
- ) &&
- HTML::TocGenerator::_doesHashContainHash(
- $aTokenAttributes, $tipToken->[TIP_EXCLUDE_ATTRIBUTES], 1
- )
- )
- ) {
- # Yes, id and attributes match;
- # Process ToC insertion point
- $self->_processTocInsertionPoint($tipToken);
- # Indicate token functions as ToC insertion point
- $result = 1;
- # Remove Tip token, automatically advancing to next token
- splice(@$tipTokens, $i, 1);
- }
- else {
- # No, tag doesn't match ToC insertion point
- # Advance to next start token
- $i++;
- }
- }
- # Token functions as ToC insertion point?
- if ($result) {
- # Yes, token functions as ToC insertion point;
- # Process insertion point(s)
- $self->_processTocInsertionPoints($aOrigText);
- }
- # Return value
- return $result;
-} # _processTokenAsInsertionPoint()
-
-
-#--- HTML::TocInsertor::toc() -------------------------------------------------
-# function: Toc processing method. Add toc reference to scenario.
-# args: - $aScenario: Scenario to add ToC reference to.
-# - $aToc: Reference to ToC to insert.
-# note: The ToC hasn't been build yet; only a reference to the ToC to be
-# build is inserted.
-
-sub toc {
- # Get arguments
- my ($self, $aScenario, $aToc) = @_;
- # Add toc to scenario
- push(@$aScenario, $aToc);
-} # toc()
-
-
-#--- HTML::TocInsertor::_processTocInsertionPoint() ----------------------------
-# function: Process ToC insertion point.
-# args: - $aTipToken: Reference to token array item which matches the ToC
-# insertion point.
-
-sub _processTocInsertionPoint {
- # Get arguments
- my ($self, $aTipToken) = @_;
- # Local variables
- my ($tipToc, $tipPreposition);
-
- # Aliases
- $tipToc = $aTipToken->[TIP_TOC];
- $tipPreposition = $aTipToken->[TIP_PREPOSITION];
-
- SWITCH: {
- # Replace token with ToC?
- if ($tipPreposition eq TIP_PREPOSITION_REPLACE) {
- # Yes, replace token;
- # Indicate ToC insertion point has been passed
- $self->{_isTocInsertionPointPassed} = 1;
- # Add ToC reference to scenario reference by calling 'toc' method
- $self->toc($self->{_scenarioAfterToken}, $tipToc);
- #push(@{$self->{_scenarioAfterToken}}, $tipTokenToc);
- # Indicate token itself must not be output
- $self->{_doOutputInsertionPointToken} = 0;
- last SWITCH;
- }
- # Output ToC before token?
- if ($tipPreposition eq TIP_PREPOSITION_BEFORE) {
- # Yes, output ToC before token;
- # Indicate ToC insertion point has been passed
- $self->{_isTocInsertionPointPassed} = 1;
- # Add ToC reference to scenario reference by calling 'toc' method
- $self->toc($self->{_scenarioBeforeToken}, $tipToc);
- #push(@{$self->{_scenarioBeforeToken}}, $tipTokenToc);
- last SWITCH;
- }
- # Output ToC after token?
- if ($tipPreposition eq TIP_PREPOSITION_AFTER) {
- # Yes, output ToC after token;
- # Indicate ToC insertion point has been passed
- $self->{_isTocInsertionPointPassed} = 1;
- # Add ToC reference to scenario reference by calling 'toc' method
- $self->toc($self->{_scenarioAfterToken}, $tipToc);
- #push(@{$self->{_scenarioAfterToken}}, $tipTokenToc);
- last SWITCH;
- }
- }
-} # _processTocInsertionPoint()
-
-
-#--- HTML::TocInsertor::_processTocInsertionPoints() --------------------------
-# function: Process ToC insertion points
-# args: - $aTokenText: Text of token which acts as insertion point for one
-# or multiple ToCs.
-
-sub _processTocInsertionPoints {
- # Get arguments
- my ($self, $aTokenText) = @_;
- # Local variables
- my ($outputPrefix, $outputSuffix);
- # Extend scenario
- push(@{$self->{_scenario}}, @{$self->{_scenarioBeforeToken}});
-
- if ($outputPrefix = $self->{_outputPrefix}) {
- push(@{$self->{_scenario}}, \$outputPrefix);
- $self->{_outputPrefix} = "";
- }
-
- # Must insertion point token be output?
- if ($self->{_doOutputInsertionPointToken}) {
- # Yes, output insertion point token;
- push(@{$self->{_scenario}}, \$aTokenText);
- }
-
- if ($outputSuffix = $self->{_outputSuffix}) {
- push(@{$self->{_scenario}}, \$outputSuffix);
- $self->{_outputSuffix} = "";
- }
-
- push(@{$self->{_scenario}}, @{$self->{_scenarioAfterToken}});
- # Add new act to scenario for output to come
- my $output = "";
- push(@{$self->{_scenario}}, \$output);
- # Write output, processing possible '_outputSuffix'
- #$self->_writeOrBufferOutput("");
- # Reset helper scenario's
- $self->{_scenarioBeforeToken} = [];
- $self->{_scenarioAfterToken} = [];
- # Reset bias value to output insertion point token
- $self->{_doOutputInsertionPointToken} = 1;
-
-} # _processTocInsertionPoints()
-
-
-#--- HTML::Toc::_resetBatchVariables() ----------------------------------------
-# function: Reset batch variables.
-
-sub _resetBatchVariables {
- my ($self) = @_;
- # Call ancestor
- $self->SUPER::_resetBatchVariables();
- # Array containing references to scalars. This array depicts the order
- # in which output must be performed after the first ToC Insertion Point
- # has been passed.
- $self->{_scenario} = [];
- # Helper scenario
- $self->{_scenarioBeforeToken} = [];
- # Helper scenario
- $self->{_scenarioAfterToken} = [];
- # Arrays containing start, end, comment, text & declaration tokens which
- # must trigger the ToC insertion. Each array element may contain a
- # reference to an array containing the following elements:
- $self->{_tokensTip} = [
- [], # TT_TOKENTYPE_START
- [], # TT_TOKENTYPE_END
- [], # TT_TOKENTYPE_COMMENT
- [], # TT_TOKENTYPE_TEXT
- [] # TT_TOKENTYPE_DECLARATION
- ];
- # 1 if ToC insertion point has been passed, 0 if not
- $self->{_isTocInsertionPointPassed} = 0;
- # Tokens after ToC
- $self->{outputBuffer} = "";
- # Trailing text after parsed token
- $self->{_outputSuffix} = "";
- # Preceding text before parsed token
- $self->{_outputPrefix} = "";
-} # _resetBatchVariables()
-
-
-#--- HTML::TocInsertor::_writeBufferedOutput() --------------------------------
-# function: Write buffered output to output device(s).
-
-sub _writeBufferedOutput {
- # Get arguments
- my ($self) = @_;
- # Local variables
- my ($scene);
- # Must ToC be parsed?
- if ($self->{options}{'parseToc'}) {
- # Yes, ToC must be parsed;
- # Parse ToC
- #$self->parse($self->{toc});
- # Output tokens after ToC
- #$self->_writeOrBufferOutput($self->{outputBuffer});
- }
- else {
- # No, ToC needn't be parsed;
- # Output scenario
- foreach $scene (@{$self->{_scenario}}) {
- # Is scene a reference to a scalar?
- if (ref($scene) eq "SCALAR") {
- # Yes, scene is a reference to a scalar;
- # Output scene
- $self->_writeOutput($$scene);
- }
- else {
- # No, scene must be reference to HTML::Toc;
- # Output toc
- $self->_writeOutput($scene->format());
- }
- }
- }
-} # _writeBufferedOutput()
-
-
-#--- HTML::TocInsertor::_writeOrBufferOutput() --------------------------------
-# function: Write processed HTML to output device(s).
-# args: - aOutput: scalar to write
-# note: If '_isTocInsertionPointPassed' text is buffered before being
-# output because the ToC has to be generated before it can be output.
-# Only after the entire data has been parsed, the ToC and the
-# following text will be output.
-
-sub _writeOrBufferOutput {
- # Get arguments
- my ($self, $aOutput) = @_;
-
- # Add possible output prefix and suffix
- $aOutput = $self->{_outputPrefix} . $aOutput . $self->{_outputSuffix};
- # Clear output prefix and suffix
- $self->{_outputPrefix} = "";
- $self->{_outputSuffix} = "";
-
- # Has ToC insertion point been passed?
- if ($self->{_isTocInsertionPointPassed}) {
- # Yes, ToC insertion point has been passed;
- # Buffer output; add output to last '_scenario' item
- my $index = scalar(@{$self->{_scenario}}) - 1;
- ${$self->{_scenario}[$index]} .= $aOutput;
- }
- else {
- # No, ToC insertion point hasn't been passed;
- # Write output
- $self->_writeOutput($aOutput);
- }
-} # _writeOrBufferOutput()
-
-
-#--- HTML::TocInsertor::_writeOutput() ----------------------------------------
-# function: Write processed HTML to output device(s).
-# args: - aOutput: scalar to write
-
-sub _writeOutput {
- # Get arguments
- my ($self, $aOutput) = @_;
- # Write output to scalar;
- ${$self->{_output}} .= $aOutput if (defined($self->{_output}));
- # Write output to output file
- print $aOutput if ($self->{_doOutputToFile})
-} # _writeOutput()
-
-
-#--- HTML::TocGenerator::anchorId() -------------------------------------------
-# function: Anchor id processing method.
-# args: - $aAnchorId
-
-sub anchorId {
- # Get arguments
- my ($self, $aAnchorId) = @_;
- # Indicate id must be added to start tag
- $self->{_doAddAnchorIdToStartTag} = 1;
- $self->{_anchorId} = $aAnchorId;
-} # anchorId()
-
-
-#--- HTML::TocInsertor::anchorNameBegin() -------------------------------------
-# function: Process anchor name begin, generated by HTML::TocGenerator.
-# args: - $aAnchorNameBegin: Anchor name begin tag to output.
-# - $aToc: Reference to ToC to which anchorname belongs.
-
-sub anchorNameBegin {
- # Get arguments
- my ($self, $aAnchorNameBegin, $aToc) = @_;
- # Is another anchorName active?
- if (defined($self->{_activeAnchorName})) {
- # Yes, another anchorName is active;
- # Show warning
- print "Warn\n";
- $self->_showWarning(
- HTML::TocGenerator::WARNING_NESTED_ANCHOR_PS_WITHIN_PS,
- [$aAnchorNameBegin, $self->{_activeAnchorName}]
- );
- }
- # Store anchor name as output prefix
- $self->{_outputPrefix} = $aAnchorNameBegin;
- # Indicate active anchor name
- $self->{_activeAnchorName} = $aAnchorNameBegin;
- # Indicate anchor name end must be output
- $self->{_doOutputAnchorNameEnd} = 1;
-} # anchorNameBegin()
-
-
-#--- HTML::TocInsertor::anchorNameEnd() ---------------------------------------
-# function: Process anchor name end, generated by HTML::TocGenerator.
-# args: - $aAnchorNameEnd: Anchor name end tag to output.
-# - $aToc: Reference to ToC to which anchorname belongs.
-
-sub anchorNameEnd {
- # Get arguments
- my ($self, $aAnchorNameEnd) = @_;
- # Store anchor name as output prefix
- $self->{_outputSuffix} .= $aAnchorNameEnd;
- # Indicate deactive anchor name
- $self->{_activeAnchorName} = undef;
-} # anchorNameEnd()
-
-
-#--- HTML::TocInsertor::comment() ---------------------------------------------
-# function: Process comment.
-# args: - $aComment: comment text with '<!--' and '-->' tags stripped off.
-
-sub comment {
- # Get arguments
- my ($self, $aComment) = @_;
- # Local variables
- my ($tocInsertionPointToken, $doOutput, $origText);
- # Allow ancestor to process the comment tag
- $self->SUPER::comment($aComment);
- # Assemble original comment
- $origText = "<!--$aComment-->";
- # Must ToCs be inserted?
- if ($self->{hti__Mode} & MODE_DO_INSERT) {
- # Yes, ToCs must be inserted;
- # Processing comment as ToC insertion point is successful?
- if (! $self->_processTokenAsInsertionPoint(
- HTML::TocGenerator::TT_TOKENTYPE_COMMENT, $aComment, undef, $origText
- )) {
- # No, comment isn't a ToC insertion point;
- # Output comment normally
- $self->_writeOrBufferOutput($origText);
- }
- }
-} # comment()
-
-
-#--- HTML::TocInsertor::declaration() -----------------------------------------
-# function: This function is called every time a declaration is encountered
-# by HTML::Parser.
-
-sub declaration {
- # Get arguments
- my ($self, $aDeclaration) = @_;
- # Allow ancestor to process the declaration tag
- $self->SUPER::declaration($aDeclaration);
- # Must ToCs be inserted?
- if ($self->{hti__Mode} & MODE_DO_INSERT) {
- # Yes, ToCs must be inserted;
- # Processing declaration as ToC insertion point is successful?
- if (! $self->_processTokenAsInsertionPoint(
- HTML::TocGenerator::TT_TOKENTYPE_DECLARATION, $aDeclaration, undef,
- "<!$aDeclaration>"
- )) {
- # No, declaration isn't a ToC insertion point;
- # Output declaration normally
- $self->_writeOrBufferOutput("<!$aDeclaration>");
- }
- }
-} # declaration()
-
-
-#--- HTML::TocInsertor::end() -------------------------------------------------
-# function: This function is called every time a closing tag is encountered
-# by HTML::Parser.
-# args: - $aTag: tag name (in lower case).
-
-sub end {
- # Get arguments
- my ($self, $aTag, $aOrigText) = @_;
- # Allow ancestor to process the end tag
- $self->SUPER::end($aTag, $aOrigText);
- # Must ToCs be inserted?
- if ($self->{hti__Mode} & MODE_DO_INSERT) {
- # Yes, ToCs must be inserted;
- # Processing end tag as ToC insertion point is successful?
- if (! $self->_processTokenAsInsertionPoint(
- HTML::TocGenerator::TT_TOKENTYPE_END, $aTag, undef, $aOrigText
- )) {
- # No, end tag isn't a ToC insertion point;
- # Output end tag normally
- $self->_writeOrBufferOutput($aOrigText);
- }
- }
-} # end()
-
-
-#--- HTML::TocInsertor::insert() ----------------------------------------------
-# function: Insert ToC in string.
-# args: - $aToc: (reference to array of) ToC object to insert
-# - $aString: string to insert ToC in
-# - $aOptions: hash reference with optional insertor options
-
-sub insert {
- # Get arguments
- my ($self, $aToc, $aString, $aOptions) = @_;
- # Initialize TocInsertor batch
- $self->_initializeInsertorBatch($aToc, $aOptions);
- # Do insert Toc
- $self->_insert($aString);
- # Deinitialize TocInsertor batch
- $self->_deinitializeInsertorBatch();
-} # insert()
-
-
-#--- HTML::TocInsertor::insertIntoFile() --------------------------------------
-# function: Insert ToCs in file.
-# args: - $aToc: (reference to array of) ToC object(s) to insert.
-# - $aFile: (reference to array of) file(s) to parse for insertion
-# points.
-# - $aOptions: optional insertor options
-
-sub insertIntoFile {
- # Get arguments
- my ($self, $aToc, $aFile, $aOptions) = @_;
- # Initialize TocInsertor batch
- $self->_initializeInsertorBatch($aToc, $aOptions);
- # Do insert ToCs into file
- $self->_insertIntoFile($aFile);
- # Deinitialize TocInsertor batch
- $self->_deinitializeInsertorBatch();
-} # insertIntoFile()
-
-
-#--- HTML::TocInsertor::number() ----------------------------------------------
-# function: Process heading number generated by HTML::Toc.
-# args: - $aNumber
-
-sub number {
- # Get arguments
- my ($self, $aNumber) = @_;
- # Store heading number as output suffix
- $self->{_outputSuffix} .= $aNumber;
-} # number()
-
-
-#--- HTML::TocInsertor::propagateFile() ---------------------------------------
-# function: Propagate ToC; generate & insert ToC, using file as input.
-# args: - $aToc: (reference to array of) ToC object to insert
-# - $aFile: (reference to array of) file to parse for insertion
-# points.
-# - $aOptions: optional insertor options
-
-sub propagateFile {
- # Get arguments
- my ($self, $aToc, $aFile, $aOptions) = @_;
- # Local variables;
- my ($file, @files);
- # Initialize TocInsertor batch
- $self->_initializeInsertorBatch($aToc, $aOptions);
- # Dereference array reference or make array of file specification
- @files = (ref($aFile) =~ m/ARRAY/) ? @$aFile : ($aFile);
- # Loop through files
- foreach $file (@files) {
- # Generate and insert ToC
- $self->_generateFromFile($file);
- }
- # Deinitialize TocInsertor batch
- $self->_deinitializeInsertorBatch();
-} # propagateFile()
-
-
-#--- HTML::TocInsertor::start() -----------------------------------------------
-# function: This function is called every time an opening tag is encountered.
-# args: - $aTag: tag name (in lower case).
-# - $aAttr: reference to hash containing all tag attributes (in lower
-# case).
-# - $aAttrSeq: reference to array containing all tag attributes (in
-# lower case) in the original order
-# - $aOrigText: the original HTML text
-
-sub start {
- # Get arguments
- my ($self, $aTag, $aAttr, $aAttrSeq, $aOrigText) = @_;
- # Local variables
- my ($doOutput, $i, $tocToken, $tag, $anchorId);
- # Let ancestor process the start tag
- $self->SUPER::start($aTag, $aAttr, $aAttrSeq, $aOrigText);
- # Must ToC be inserted?
- if ($self->{hti__Mode} & MODE_DO_INSERT) {
- # Yes, ToC must be inserted;
- # Processing start tag as ToC insertion point is successful?
- if (! $self->_processTokenAsInsertionPoint(
- HTML::TocGenerator::TT_TOKENTYPE_START, $aTag, $aAttr, $aOrigText
- )) {
- # No, start tag isn't a ToC insertion point;
- # Add anchor id?
- if ($self->{_doAddAnchorIdToStartTag}) {
- # Yes, anchor id must be added;
- # Reset indicator;
- $self->{_doAddAnchorIdToStartTag} = 0;
- # Alias anchor id
- $anchorId = $self->{_anchorId};
- # Attribute 'id' already exists?
- if (defined($aAttr->{id})) {
- # Yes, attribute 'id' already exists;
- # Show warning
- print STDERR "WARNING: Overwriting existing id attribute '" .
- $aAttr->{id} . "' of tag $aOrigText\n";
-
- # Add anchor id to start tag
- $aOrigText =~ s/(id)=\S*([\s>])/$1=$anchorId$2/i;
- }
- else {
- # No, attribute 'id' doesn't exist;
- # Add anchor id to start tag
- $aOrigText =~ s/>/ id=$anchorId>/;
- }
- }
- # Output start tag normally
- $self->_writeOrBufferOutput($aOrigText);
- }
- }
-} # start()
-
-
-#--- HTML::TocInsertor::text() ------------------------------------------------
-# function: This function is called every time plain text is encountered.
-# args: - @_: array containing data.
-
-sub text {
- # Get arguments
- my ($self, $aText) = @_;
- # Let ancestor process the text
- $self->SUPER::text($aText);
- # Must ToC be inserted?
- if ($self->{hti__Mode} & MODE_DO_INSERT) {
- # Yes, ToC must be inserted;
- # Processing text as ToC insertion point is successful?
- if (! $self->_processTokenAsInsertionPoint(
- HTML::TocGenerator::TT_TOKENTYPE_TEXT, $aText, undef, $aText
- )) {
- # No, text isn't a ToC insertion point;
- # Output text normally
- $self->_writeOrBufferOutput($aText);
- }
- }
-} # text()
-
-
-
-
-#=== HTML::_TokenTipParser ====================================================
-# function: Parse 'TIP tokens'. 'TIP tokens' mark HTML code which is to be
-# used as the ToC Insertion Point.
-# note: Used internally.
-
-package HTML::_TokenTipParser;
-
-
-BEGIN {
- use vars qw(@ISA);
-
- @ISA = qw(HTML::_TokenTocParser);
-}
-
-
-END {}
-
-
-#--- HTML::_TokenTipParser::new() ---------------------------------------------
-# function: Constructor
-
-sub new {
- # Get arguments
- my ($aType, $aTokenArray) = @_;
- # Create instance
- my $self = $aType->SUPER::new;
- # Reference token array
- $self->{tokens} = $aTokenArray;
- # Reference to last added token
- $self->{_lastAddedToken} = undef;
- $self->{_lastAddedTokenType} = undef;
- # Return instance
- return $self;
-} # new()
-
-
-#--- HTML::_TokenTipParser::_processAttributes() ------------------------------
-# function: Process attributes.
-# args: - $aAttributes: Attributes to parse.
-
-sub _processAttributes {
- # Get arguments
- my ($self, $aAttributes) = @_;
- # Local variables
- my (%includeAttributes, %excludeAttributes);
-
- # Parse attributes
- $self->_parseAttributes(
- $aAttributes, \%includeAttributes, \%excludeAttributes
- );
- # Include attributes are specified?
- if (keys(%includeAttributes) > 0) {
- # Yes, include attributes are specified;
- # Store include attributes
- @${$self->{_lastAddedToken}}[
- HTML::TocInsertor::TIP_INCLUDE_ATTRIBUTES
- ] = \%includeAttributes;
- }
- # Exclude attributes are specified?
- if (keys(%excludeAttributes) > 0) {
- # Yes, exclude attributes are specified;
- # Store exclude attributes
- @${$self->{_lastAddedToken}}[
- HTML::TocInsertor::TIP_EXCLUDE_ATTRIBUTES
- ] = \%excludeAttributes;
- }
-} # _processAttributes()
-
-
-#--- HTML::_TokenTipParser::_processToken() -----------------------------------
-# function: Process token.
-# args: - $aTokenType: Type of token to process.
-# - $aTag: Tag of token.
-
-sub _processToken {
- # Get arguments
- my ($self, $aTokenType, $aTag) = @_;
- # Local variables
- my ($tokenArray, $index);
- # Push element on array of update tokens
- $index = push(@{$self->{tokens}[$aTokenType]}, []) - 1;
- # Alias token array to add element to
- $tokenArray = $self->{tokens}[$aTokenType];
- # Indicate last updated token array element
- $self->{_lastAddedTokenType} = $aTokenType;
- $self->{_lastAddedToken} = \$$tokenArray[$index];
- # Add fields
- $$tokenArray[$index][HTML::TocInsertor::TIP_TOC] = $self->{_toc};
- $$tokenArray[$index][HTML::TocInsertor::TIP_TOKEN_ID] = $aTag;
- $$tokenArray[$index][HTML::TocInsertor::TIP_PREPOSITION] =
- $self->{_preposition};
-} # _processToken()
-
-
-#--- HTML::_TokenTipParser::comment() -----------------------------------------
-# function: Process comment.
-# args: - $aComment: comment text with '<!--' and '-->' tags stripped off.
-
-sub comment {
- # Get arguments
- my ($self, $aComment) = @_;
- # Process token
- $self->_processToken(HTML::TocGenerator::TT_TOKENTYPE_COMMENT, $aComment);
-} # comment()
-
-
-#--- HTML::_TokenTipParser::declaration() --------------------------------
-# function: This function is called every time a markup declaration is
-# encountered by HTML::Parser.
-# args: - $aDeclaration: Markup declaration.
-
-sub declaration {
- # Get arguments
- my ($self, $aDeclaration) = @_;
- # Process token
- $self->_processToken(
- HTML::TocGenerator::TT_TOKENTYPE_DECLARATION, $aDeclaration
- );
-} # declaration()
-
-
-#--- HTML::_TokenTipParser::end() ----------------------------------------
-# function: This function is called every time a closing tag is encountered
-# by HTML::Parser.
-# args: - $aTag: tag name (in lower case).
-
-sub end {
- # Get arguments
- my ($self, $aTag, $aOrigText) = @_;
- # Process token
- $self->_processToken(HTML::TocGenerator::TT_TOKENTYPE_END, $aTag);
-} # end()
-
-
-#--- HTML::_TokenTipParser->setPreposition() ----------------------------------
-# function: Set current preposition.
-
-sub setPreposition {
- # Get arguments
- my ($self, $aPreposition) = @_;
- # Set current ToC
- $self->{_preposition} = $aPreposition;
-} # setPreposition()
-
-
-#--- HTML::_TokenTipParser->setToc() ------------------------------------------
-# function: Set current ToC.
-
-sub setToc {
- # Get arguments
- my ($self, $aToc) = @_;
- # Set current ToC
- $self->{_toc} = $aToc;
-} # setToc()
-
-
-#--- HTML::_TokenTipParser::start() --------------------------------------
-# function: This function is called every time an opening tag is encountered.
-# args: - $aTag: tag name (in lower case).
-# - $aAttr: reference to hash containing all tag attributes (in lower
-# case).
-# - $aAttrSeq: reference to array containing all attribute keys (in
-# lower case) in the original order
-# - $aOrigText: the original HTML text
-
-sub start {
- # Get arguments
- my ($self, $aTag, $aAttr, $aAttrSeq, $aOrigText) = @_;
- # Process token
- $self->_processToken(HTML::TocGenerator::TT_TOKENTYPE_START, $aTag);
- # Process attributes
- $self->_processAttributes($aAttr);
-} # start()
-
-
-#--- HTML::_TokenTipParser::text() ---------------------------------------
-# function: This function is called every time plain text is encountered.
-# args: - @_: array containing data.
-
-sub text {
- # Get arguments
- my ($self, $aText) = @_;
- # Was token already created and is last added token of type 'text'?
- if (
- defined($self->{_lastAddedToken}) &&
- $self->{_lastAddedTokenType} == HTML::TocGenerator::TT_TOKENTYPE_TEXT
- ) {
- # Yes, token is already created;
- # Add tag to existing token
- @${$self->{_lastAddedToken}}[HTML::TocGenerator::TT_TAG_BEGIN] .= $aText;
- }
- else {
- # No, token isn't created;
- # Process token
- $self->_processToken(HTML::TocGenerator::TT_TOKENTYPE_TEXT, $aText);
- }
-} # text()
-
-
-1;

Powered by Google App Engine
This is Rietveld 408576698