190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- TocInsertor.pm ----------------------------------------------------------- 290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Insert Table of Contents HTML::Toc, generated by 390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# HTML::TocGenerator. 490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# note: - The term 'propagate' is used as a shortcut for the process of 590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# both generating and inserting a ToC at the same time. 690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - 'TIP' is an abbreviation of 'Toc Insertion Point'. 790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberpackage HTML::TocInsertor; 1090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberuse strict; 1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberuse FileHandle; 1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberuse HTML::TocGenerator; 1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberBEGIN { 1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber use vars qw(@ISA $VERSION); 1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $VERSION = '0.91'; 2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber @ISA = qw(HTML::TocGenerator); 2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} 2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # TocInsertionPoint (TIP) constants 2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberuse constant TIP_PREPOSITION_REPLACE => 'replace'; 2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberuse constant TIP_PREPOSITION_BEFORE => 'before'; 2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberuse constant TIP_PREPOSITION_AFTER => 'after'; 3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberuse constant TIP_TOKEN_ID => 0; 3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberuse constant TIP_PREPOSITION => 1; 3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberuse constant TIP_INCLUDE_ATTRIBUTES => 2; 3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberuse constant TIP_EXCLUDE_ATTRIBUTES => 3; 3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberuse constant TIP_TOC => 4; 3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberuse constant MODE_DO_NOTHING => 0; # 0b00 3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberuse constant MODE_DO_INSERT => 1; # 0b01 3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberuse constant MODE_DO_PROPAGATE => 3; # 0b11 4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEND {} 4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocInsertor::new() ------------------------------------------------- 4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Constructor. 4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub new { 4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($aType) = @_; 5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my $self = $aType->SUPER::new; 5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # TRUE if insertion point token must be output, FALSE if not 5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_doOutputInsertionPointToken} = 1; 5390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Reset batch variables 5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_resetBatchVariables; 5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Bias to not insert ToC 5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{hti__Mode} = MODE_DO_NOTHING; 5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # TODO: Initialize output 5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber return $self; 6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # new() 6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocInsertor::_deinitializeOutput() --------------------------------- 6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Deinitialize output. 6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _deinitializeOutput { 6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self) = @_; 7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Filehandle is defined? 7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (defined($self->{_outputFileHandle})) { 7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, filehandle is defined; 7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Restore selected filehandle 7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber select($self->{_oldFileHandle}); 7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Undefine filehandle, closing it automatically 7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber undef $self->{_outputFileHandle}; 7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # _deinitializeOutput() 7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocInsertor::_initializeOutput() ----------------------------------- 8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Initialize output. 8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _initializeOutput { 8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self) = @_; 8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Bias to write to outputfile 8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my $doOutputToFile = 1; 8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Is output specified? 9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (defined($self->{options}{'output'})) { 9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, output is specified; 9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Indicate to not output to outputfile 9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $doOutputToFile = 0; 9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Alias output reference 9690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_output} = $self->{options}{'output'}; 9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Clear output 9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ${$self->{_output}} = ""; 9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 10090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 10190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Is output file specified? 10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (defined($self->{options}{'outputFile'})) { 10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, output file is specified; 10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Indicate to output to outputfile 10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $doOutputToFile = 1; 10690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Open file 10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_outputFileHandle} = 10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber new FileHandle ">" . $self->{options}{'outputFile'}; 10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 11090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Backup currently selected filehandle 11190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_oldFileHandle} = select; 11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Set new default filehandle 11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber select($self->{_outputFileHandle}); 11490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 11590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 11690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Alias output-to-file indicator 11790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_doOutputToFile} = $doOutputToFile; 11890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # _initializeOutput() 11990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 12090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 12190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocInsertor::_deinitializeInsertorBatch() -------------------------- 12290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Deinitialize insertor batch. 12390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 12490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _deinitializeInsertorBatch { 12590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 12690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self) = @_; 12790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Indicate ToC insertion has finished 12890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_isTocInsertionPointPassed} = 0; 12990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Write buffered output 13090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_writeBufferedOutput(); 13190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Propagate? 13290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($self->{hti__Mode} == MODE_DO_PROPAGATE) { 13390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, propagate; 13490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Deinitialize generator batch 13590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_deinitializeGeneratorBatch(); 13690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 13790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber else { 13890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # No, insert only; 13990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Do general batch deinitialization 14090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_deinitializeBatch(); 14190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 14290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Deinitialize output 14390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_deinitializeOutput(); 14490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Indicate end of batch 14590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{hti__Mode} = MODE_DO_NOTHING; 14690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Reset batch variables 14790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_resetBatchVariables(); 14890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # _deinitializeInsertorBatch() 14990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 15090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 15190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocInsertor::_initializeInsertorBatch() ---------------------------- 15290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Initialize insertor batch. 15390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aTocs: Reference to array of tocs. 15490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aOptions: optional options 15590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 15690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _initializeInsertorBatch { 15790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 15890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aTocs, $aOptions) = @_; 15990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Add invocation options 16090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->setOptions($aOptions); 16190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Option 'doGenerateToc' specified? 16290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (!defined($self->{options}{'doGenerateToc'})) { 16390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # No, options 'doGenerateToc' not specified; 16490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Default to 'doGenerateToc' 16590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{options}{'doGenerateToc'} = 1; 16690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 16790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Propagate? 16890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($self->{options}{'doGenerateToc'}) { 16990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, propagate; 17090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Indicate mode 17190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{hti__Mode} = MODE_DO_PROPAGATE; 17290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Initialize generator batch 17390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # NOTE: This method takes care of calling '_initializeBatch()' 17490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_initializeGeneratorBatch($aTocs); 17590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 17690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber else { 17790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # No, insert; 17890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Indicate mode 17990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{hti__Mode} = MODE_DO_INSERT; 18090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Do general batch initialization 18190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_initializeBatch($aTocs); 18290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 18390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Initialize output 18490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_initializeOutput(); 18590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Parse ToC insertion points 18690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_parseTocInsertionPoints(); 18790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # _initializeInsertorBatch() 18890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 18990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 19090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocInsertor::_insert() --------------------------------------------- 19190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Insert ToC in string. 19290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aString: Reference to string to parse. 19390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# note: Used internally. 19490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 19590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _insert { 19690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 19790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aString) = @_; 19890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Propagate? 19990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($self->{options}{'doGenerateToc'}) { 20090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, propagate; 20190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Generate & insert ToC 20290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_generate($aString); 20390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 20490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber else { 20590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # No, just insert ToC 20690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Insert by parsing file 20790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->parse($aString); 20890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Flush remaining buffered text 20990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->eof(); 21090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 21190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # _insert() 21290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 21390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 21490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocInsertor::_insertIntoFile() ------------------------------------- 21590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Do insert generated ToCs in file. 21690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aToc: (reference to array of) ToC object(s) to insert. 21790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aFile: (reference to array of) file(s) to parse for insertion 21890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# points. 21990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aOptions: optional insertor options 22090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# note: Used internally. 22190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 22290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _insertIntoFile { 22390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 22490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aFile) = @_; 22590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Local variables; 22690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($file, @files); 22790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Dereference array reference or make array of file specification 22890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber @files = (ref($aFile) =~ m/ARRAY/) ? @$aFile : ($aFile); 22990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Loop through files 23090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber foreach $file (@files) { 23190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Propagate? 23290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($self->{options}{'doGenerateToc'}) { 23390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, propagate; 23490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Generate and insert ToC 23590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_generateFromFile($file); 23690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 23790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber else { 23890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # No, just insert ToC 23990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Insert by parsing file 24090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->parse_file($file); 24190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 24290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 24390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # _insertIntoFile() 24490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 24590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 24690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocInsertor::_parseTocInsertionPoints() ---------------------------- 24790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Parse ToC insertion point specifier. 24890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 24990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _parseTocInsertionPoints { 25090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 25190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self) = @_; 25290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Local variables 25390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($tipPreposition, $tipToken, $toc, $tokenTipParser); 25490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Create parser for TIP tokens 25590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $tokenTipParser = HTML::_TokenTipParser->new( 25690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_tokensTip} 25790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ); 25890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Loop through ToCs 25990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber foreach $toc (@{$self->{_tocs}}) { 26090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Split TIP in preposition and token 26190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ($tipPreposition, $tipToken) = split( 26290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber '\s+', $toc->{options}{'insertionPoint'}, 2 26390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ); 26490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Known preposition? 26590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ( 26690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ($tipPreposition ne TIP_PREPOSITION_REPLACE) && 26790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ($tipPreposition ne TIP_PREPOSITION_BEFORE) && 26890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ($tipPreposition ne TIP_PREPOSITION_AFTER) 26990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ) { 27090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # No, unknown preposition; 27190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Use default preposition 27290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $tipPreposition = TIP_PREPOSITION_AFTER; 27390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Use entire 'insertionPoint' as token 27490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $tipToken = $toc->{options}{'insertionPoint'}; 27590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 27690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Indicate current ToC to parser 27790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $tokenTipParser->setToc($toc); 27890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Indicate current preposition to parser 27990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $tokenTipParser->setPreposition($tipPreposition); 28090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Parse ToC Insertion Point 28190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $tokenTipParser->parse($tipToken); 28290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Flush remaining buffered text 28390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $tokenTipParser->eof(); 28490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 28590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # _parseTocInsertionPoints() 28690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 28790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 28890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocInsertor::_processTokenAsInsertionPoint() ----------------------- 28990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Check for token being a ToC insertion point (Tip) token and 29090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# process it accordingly. 29190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aTokenType: type of token: start, end, comment or text. 29290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aTokenId: token id of currently parsed token 29390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aTokenAttributes: attributes of currently parsed token 29490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aOrigText: complete token 29590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# returns: 1 if successful -- token is processed as insertion point, 0 29690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# if not. 29790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 29890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _processTokenAsInsertionPoint { 29990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 30090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aTokenType, $aTokenId, $aTokenAttributes, $aOrigText) = @_; 30190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Local variables 30290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($i, $result, $tipToken, $tipTokenId, $tipTokens); 30390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Bias to token not functioning as a ToC insertion point (Tip) token 30490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $result = 0; 30590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Alias ToC insertion point (Tip) array of right type 30690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $tipTokens = $self->{_tokensTip}[$aTokenType]; 30790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Loop through tipTokens 30890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $i = 0; 30990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber while ($i < scalar @{$tipTokens}) { 31090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Aliases 31190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $tipToken = $tipTokens->[$i]; 31290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $tipTokenId = $tipToken->[TIP_TOKEN_ID]; 31390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Id & attributes match? 31490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ( 31590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ($aTokenId =~ m/$tipTokenId/) && ( 31690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber HTML::TocGenerator::_doesHashContainHash( 31790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $aTokenAttributes, $tipToken->[TIP_INCLUDE_ATTRIBUTES], 0 31890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ) && 31990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber HTML::TocGenerator::_doesHashContainHash( 32090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $aTokenAttributes, $tipToken->[TIP_EXCLUDE_ATTRIBUTES], 1 32190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ) 32290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ) 32390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ) { 32490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, id and attributes match; 32590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Process ToC insertion point 32690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_processTocInsertionPoint($tipToken); 32790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Indicate token functions as ToC insertion point 32890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $result = 1; 32990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Remove Tip token, automatically advancing to next token 33090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber splice(@$tipTokens, $i, 1); 33190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 33290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber else { 33390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # No, tag doesn't match ToC insertion point 33490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Advance to next start token 33590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $i++; 33690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 33790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 33890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Token functions as ToC insertion point? 33990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($result) { 34090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, token functions as ToC insertion point; 34190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Process insertion point(s) 34290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_processTocInsertionPoints($aOrigText); 34390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 34490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Return value 34590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber return $result; 34690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # _processTokenAsInsertionPoint() 34790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 34890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 34990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocInsertor::toc() ------------------------------------------------- 35090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Toc processing method. Add toc reference to scenario. 35190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aScenario: Scenario to add ToC reference to. 35290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aToc: Reference to ToC to insert. 35390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# note: The ToC hasn't been build yet; only a reference to the ToC to be 35490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# build is inserted. 35590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 35690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub toc { 35790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 35890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aScenario, $aToc) = @_; 35990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Add toc to scenario 36090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber push(@$aScenario, $aToc); 36190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # toc() 36290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 36390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 36490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocInsertor::_processTocInsertionPoint() ---------------------------- 36590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Process ToC insertion point. 36690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aTipToken: Reference to token array item which matches the ToC 36790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# insertion point. 36890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 36990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _processTocInsertionPoint { 37090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 37190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aTipToken) = @_; 37290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Local variables 37390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($tipToc, $tipPreposition); 37490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 37590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Aliases 37690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $tipToc = $aTipToken->[TIP_TOC]; 37790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $tipPreposition = $aTipToken->[TIP_PREPOSITION]; 37890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 37990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber SWITCH: { 38090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Replace token with ToC? 38190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($tipPreposition eq TIP_PREPOSITION_REPLACE) { 38290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, replace token; 38390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Indicate ToC insertion point has been passed 38490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_isTocInsertionPointPassed} = 1; 38590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Add ToC reference to scenario reference by calling 'toc' method 38690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->toc($self->{_scenarioAfterToken}, $tipToc); 38790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber #push(@{$self->{_scenarioAfterToken}}, $tipTokenToc); 38890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Indicate token itself must not be output 38990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_doOutputInsertionPointToken} = 0; 39090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber last SWITCH; 39190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 39290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Output ToC before token? 39390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($tipPreposition eq TIP_PREPOSITION_BEFORE) { 39490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, output ToC before token; 39590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Indicate ToC insertion point has been passed 39690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_isTocInsertionPointPassed} = 1; 39790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Add ToC reference to scenario reference by calling 'toc' method 39890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->toc($self->{_scenarioBeforeToken}, $tipToc); 39990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber #push(@{$self->{_scenarioBeforeToken}}, $tipTokenToc); 40090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber last SWITCH; 40190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 40290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Output ToC after token? 40390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($tipPreposition eq TIP_PREPOSITION_AFTER) { 40490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, output ToC after token; 40590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Indicate ToC insertion point has been passed 40690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_isTocInsertionPointPassed} = 1; 40790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Add ToC reference to scenario reference by calling 'toc' method 40890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->toc($self->{_scenarioAfterToken}, $tipToc); 40990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber #push(@{$self->{_scenarioAfterToken}}, $tipTokenToc); 41090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber last SWITCH; 41190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 41290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 41390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # _processTocInsertionPoint() 41490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 41590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 41690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocInsertor::_processTocInsertionPoints() -------------------------- 41790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Process ToC insertion points 41890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aTokenText: Text of token which acts as insertion point for one 41990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# or multiple ToCs. 42090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 42190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _processTocInsertionPoints { 42290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 42390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aTokenText) = @_; 42490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Local variables 42590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($outputPrefix, $outputSuffix); 42690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Extend scenario 42790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber push(@{$self->{_scenario}}, @{$self->{_scenarioBeforeToken}}); 42890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 42990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($outputPrefix = $self->{_outputPrefix}) { 43090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber push(@{$self->{_scenario}}, \$outputPrefix); 43190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_outputPrefix} = ""; 43290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 43390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 43490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Must insertion point token be output? 43590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($self->{_doOutputInsertionPointToken}) { 43690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, output insertion point token; 43790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber push(@{$self->{_scenario}}, \$aTokenText); 43890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 43990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 44090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($outputSuffix = $self->{_outputSuffix}) { 44190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber push(@{$self->{_scenario}}, \$outputSuffix); 44290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_outputSuffix} = ""; 44390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 44490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 44590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber push(@{$self->{_scenario}}, @{$self->{_scenarioAfterToken}}); 44690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Add new act to scenario for output to come 44790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my $output = ""; 44890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber push(@{$self->{_scenario}}, \$output); 44990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Write output, processing possible '_outputSuffix' 45090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber #$self->_writeOrBufferOutput(""); 45190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Reset helper scenario's 45290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_scenarioBeforeToken} = []; 45390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_scenarioAfterToken} = []; 45490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Reset bias value to output insertion point token 45590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_doOutputInsertionPointToken} = 1; 45690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 45790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # _processTocInsertionPoints() 45890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 45990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 46090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::Toc::_resetBatchVariables() ---------------------------------------- 46190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Reset batch variables. 46290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 46390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _resetBatchVariables { 46490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self) = @_; 46590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Call ancestor 46690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->SUPER::_resetBatchVariables(); 46790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Array containing references to scalars. This array depicts the order 46890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # in which output must be performed after the first ToC Insertion Point 46990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # has been passed. 47090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_scenario} = []; 47190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Helper scenario 47290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_scenarioBeforeToken} = []; 47390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Helper scenario 47490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_scenarioAfterToken} = []; 47590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Arrays containing start, end, comment, text & declaration tokens which 47690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # must trigger the ToC insertion. Each array element may contain a 47790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # reference to an array containing the following elements: 47890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_tokensTip} = [ 47990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber [], # TT_TOKENTYPE_START 48090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber [], # TT_TOKENTYPE_END 48190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber [], # TT_TOKENTYPE_COMMENT 48290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber [], # TT_TOKENTYPE_TEXT 48390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber [] # TT_TOKENTYPE_DECLARATION 48490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ]; 48590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # 1 if ToC insertion point has been passed, 0 if not 48690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_isTocInsertionPointPassed} = 0; 48790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Tokens after ToC 48890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{outputBuffer} = ""; 48990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Trailing text after parsed token 49090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_outputSuffix} = ""; 49190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Preceding text before parsed token 49290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_outputPrefix} = ""; 49390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # _resetBatchVariables() 49490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 49590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 49690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocInsertor::_writeBufferedOutput() -------------------------------- 49790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Write buffered output to output device(s). 49890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 49990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _writeBufferedOutput { 50090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 50190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self) = @_; 50290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Local variables 50390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($scene); 50490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Must ToC be parsed? 50590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($self->{options}{'parseToc'}) { 50690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, ToC must be parsed; 50790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Parse ToC 50890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber #$self->parse($self->{toc}); 50990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Output tokens after ToC 51090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber #$self->_writeOrBufferOutput($self->{outputBuffer}); 51190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 51290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber else { 51390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # No, ToC needn't be parsed; 51490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Output scenario 51590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber foreach $scene (@{$self->{_scenario}}) { 51690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Is scene a reference to a scalar? 51790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (ref($scene) eq "SCALAR") { 51890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, scene is a reference to a scalar; 51990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Output scene 52090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_writeOutput($$scene); 52190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 52290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber else { 52390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # No, scene must be reference to HTML::Toc; 52490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Output toc 52590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_writeOutput($scene->format()); 52690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 52790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 52890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 52990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # _writeBufferedOutput() 53090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 53190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 53290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocInsertor::_writeOrBufferOutput() -------------------------------- 53390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Write processed HTML to output device(s). 53490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - aOutput: scalar to write 53590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# note: If '_isTocInsertionPointPassed' text is buffered before being 53690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# output because the ToC has to be generated before it can be output. 53790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# Only after the entire data has been parsed, the ToC and the 53890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# following text will be output. 53990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 54090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _writeOrBufferOutput { 54190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 54290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aOutput) = @_; 54390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 54490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Add possible output prefix and suffix 54590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $aOutput = $self->{_outputPrefix} . $aOutput . $self->{_outputSuffix}; 54690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Clear output prefix and suffix 54790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_outputPrefix} = ""; 54890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_outputSuffix} = ""; 54990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 55090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Has ToC insertion point been passed? 55190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($self->{_isTocInsertionPointPassed}) { 55290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, ToC insertion point has been passed; 55390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Buffer output; add output to last '_scenario' item 55490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my $index = scalar(@{$self->{_scenario}}) - 1; 55590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ${$self->{_scenario}[$index]} .= $aOutput; 55690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 55790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber else { 55890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # No, ToC insertion point hasn't been passed; 55990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Write output 56090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_writeOutput($aOutput); 56190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 56290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # _writeOrBufferOutput() 56390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 56490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 56590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocInsertor::_writeOutput() ---------------------------------------- 56690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Write processed HTML to output device(s). 56790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - aOutput: scalar to write 56890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 56990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _writeOutput { 57090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 57190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aOutput) = @_; 57290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Write output to scalar; 57390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ${$self->{_output}} .= $aOutput if (defined($self->{_output})); 57490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Write output to output file 57590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber print $aOutput if ($self->{_doOutputToFile}) 57690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # _writeOutput() 57790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 57890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 57990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocGenerator::anchorId() ------------------------------------------- 58090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Anchor id processing method. 58190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aAnchorId 58290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 58390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub anchorId { 58490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 58590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aAnchorId) = @_; 58690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Indicate id must be added to start tag 58790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_doAddAnchorIdToStartTag} = 1; 58890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_anchorId} = $aAnchorId; 58990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # anchorId() 59090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 59190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 59290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocInsertor::anchorNameBegin() ------------------------------------- 59390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Process anchor name begin, generated by HTML::TocGenerator. 59490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aAnchorNameBegin: Anchor name begin tag to output. 59590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aToc: Reference to ToC to which anchorname belongs. 59690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 59790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub anchorNameBegin { 59890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 59990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aAnchorNameBegin, $aToc) = @_; 60090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Is another anchorName active? 60190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (defined($self->{_activeAnchorName})) { 60290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, another anchorName is active; 60390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Show warning 60490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber print "Warn\n"; 60590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_showWarning( 60690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber HTML::TocGenerator::WARNING_NESTED_ANCHOR_PS_WITHIN_PS, 60790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber [$aAnchorNameBegin, $self->{_activeAnchorName}] 60890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ); 60990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 61090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Store anchor name as output prefix 61190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_outputPrefix} = $aAnchorNameBegin; 61290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Indicate active anchor name 61390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_activeAnchorName} = $aAnchorNameBegin; 61490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Indicate anchor name end must be output 61590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_doOutputAnchorNameEnd} = 1; 61690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # anchorNameBegin() 61790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 61890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 61990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocInsertor::anchorNameEnd() --------------------------------------- 62090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Process anchor name end, generated by HTML::TocGenerator. 62190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aAnchorNameEnd: Anchor name end tag to output. 62290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aToc: Reference to ToC to which anchorname belongs. 62390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 62490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub anchorNameEnd { 62590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 62690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aAnchorNameEnd) = @_; 62790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Store anchor name as output prefix 62890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_outputSuffix} .= $aAnchorNameEnd; 62990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Indicate deactive anchor name 63090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_activeAnchorName} = undef; 63190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # anchorNameEnd() 63290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 63390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 63490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocInsertor::comment() --------------------------------------------- 63590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Process comment. 63690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aComment: comment text with '<!--' and '-->' tags stripped off. 63790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 63890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub comment { 63990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 64090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aComment) = @_; 64190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Local variables 64290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($tocInsertionPointToken, $doOutput, $origText); 64390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Allow ancestor to process the comment tag 64490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->SUPER::comment($aComment); 64590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Assemble original comment 64690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $origText = "<!--$aComment-->"; 64790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Must ToCs be inserted? 64890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($self->{hti__Mode} & MODE_DO_INSERT) { 64990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, ToCs must be inserted; 65090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Processing comment as ToC insertion point is successful? 65190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (! $self->_processTokenAsInsertionPoint( 65290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber HTML::TocGenerator::TT_TOKENTYPE_COMMENT, $aComment, undef, $origText 65390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber )) { 65490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # No, comment isn't a ToC insertion point; 65590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Output comment normally 65690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_writeOrBufferOutput($origText); 65790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 65890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 65990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # comment() 66090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 66190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 66290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocInsertor::declaration() ----------------------------------------- 66390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: This function is called every time a declaration is encountered 66490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# by HTML::Parser. 66590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 66690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub declaration { 66790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 66890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aDeclaration) = @_; 66990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Allow ancestor to process the declaration tag 67090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->SUPER::declaration($aDeclaration); 67190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Must ToCs be inserted? 67290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($self->{hti__Mode} & MODE_DO_INSERT) { 67390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, ToCs must be inserted; 67490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Processing declaration as ToC insertion point is successful? 67590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (! $self->_processTokenAsInsertionPoint( 67690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber HTML::TocGenerator::TT_TOKENTYPE_DECLARATION, $aDeclaration, undef, 67790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber "<!$aDeclaration>" 67890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber )) { 67990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # No, declaration isn't a ToC insertion point; 68090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Output declaration normally 68190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_writeOrBufferOutput("<!$aDeclaration>"); 68290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 68390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 68490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # declaration() 68590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 68690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 68790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocInsertor::end() ------------------------------------------------- 68890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: This function is called every time a closing tag is encountered 68990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# by HTML::Parser. 69090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aTag: tag name (in lower case). 69190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 69290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub end { 69390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 69490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aTag, $aOrigText) = @_; 69590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Allow ancestor to process the end tag 69690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->SUPER::end($aTag, $aOrigText); 69790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Must ToCs be inserted? 69890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($self->{hti__Mode} & MODE_DO_INSERT) { 69990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, ToCs must be inserted; 70090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Processing end tag as ToC insertion point is successful? 70190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (! $self->_processTokenAsInsertionPoint( 70290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber HTML::TocGenerator::TT_TOKENTYPE_END, $aTag, undef, $aOrigText 70390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber )) { 70490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # No, end tag isn't a ToC insertion point; 70590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Output end tag normally 70690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_writeOrBufferOutput($aOrigText); 70790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 70890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 70990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # end() 71090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 71190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 71290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocInsertor::insert() ---------------------------------------------- 71390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Insert ToC in string. 71490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aToc: (reference to array of) ToC object to insert 71590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aString: string to insert ToC in 71690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aOptions: hash reference with optional insertor options 71790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 71890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub insert { 71990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 72090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aToc, $aString, $aOptions) = @_; 72190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Initialize TocInsertor batch 72290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_initializeInsertorBatch($aToc, $aOptions); 72390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Do insert Toc 72490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_insert($aString); 72590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Deinitialize TocInsertor batch 72690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_deinitializeInsertorBatch(); 72790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # insert() 72890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 72990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 73090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocInsertor::insertIntoFile() -------------------------------------- 73190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Insert ToCs in file. 73290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aToc: (reference to array of) ToC object(s) to insert. 73390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aFile: (reference to array of) file(s) to parse for insertion 73490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# points. 73590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aOptions: optional insertor options 73690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 73790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub insertIntoFile { 73890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 73990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aToc, $aFile, $aOptions) = @_; 74090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Initialize TocInsertor batch 74190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_initializeInsertorBatch($aToc, $aOptions); 74290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Do insert ToCs into file 74390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_insertIntoFile($aFile); 74490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Deinitialize TocInsertor batch 74590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_deinitializeInsertorBatch(); 74690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # insertIntoFile() 74790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 74890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 74990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocInsertor::number() ---------------------------------------------- 75090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Process heading number generated by HTML::Toc. 75190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aNumber 75290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 75390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub number { 75490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 75590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aNumber) = @_; 75690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Store heading number as output suffix 75790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_outputSuffix} .= $aNumber; 75890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # number() 75990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 76090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 76190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocInsertor::propagateFile() --------------------------------------- 76290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Propagate ToC; generate & insert ToC, using file as input. 76390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aToc: (reference to array of) ToC object to insert 76490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aFile: (reference to array of) file to parse for insertion 76590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# points. 76690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aOptions: optional insertor options 76790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 76890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub propagateFile { 76990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 77090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aToc, $aFile, $aOptions) = @_; 77190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Local variables; 77290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($file, @files); 77390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Initialize TocInsertor batch 77490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_initializeInsertorBatch($aToc, $aOptions); 77590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Dereference array reference or make array of file specification 77690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber @files = (ref($aFile) =~ m/ARRAY/) ? @$aFile : ($aFile); 77790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Loop through files 77890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber foreach $file (@files) { 77990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Generate and insert ToC 78090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_generateFromFile($file); 78190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 78290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Deinitialize TocInsertor batch 78390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_deinitializeInsertorBatch(); 78490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # propagateFile() 78590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 78690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 78790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocInsertor::start() ----------------------------------------------- 78890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: This function is called every time an opening tag is encountered. 78990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aTag: tag name (in lower case). 79090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aAttr: reference to hash containing all tag attributes (in lower 79190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# case). 79290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aAttrSeq: reference to array containing all tag attributes (in 79390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# lower case) in the original order 79490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aOrigText: the original HTML text 79590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 79690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub start { 79790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 79890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aTag, $aAttr, $aAttrSeq, $aOrigText) = @_; 79990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Local variables 80090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($doOutput, $i, $tocToken, $tag, $anchorId); 80190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Let ancestor process the start tag 80290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->SUPER::start($aTag, $aAttr, $aAttrSeq, $aOrigText); 80390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Must ToC be inserted? 80490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($self->{hti__Mode} & MODE_DO_INSERT) { 80590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, ToC must be inserted; 80690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Processing start tag as ToC insertion point is successful? 80790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (! $self->_processTokenAsInsertionPoint( 80890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber HTML::TocGenerator::TT_TOKENTYPE_START, $aTag, $aAttr, $aOrigText 80990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber )) { 81090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # No, start tag isn't a ToC insertion point; 81190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Add anchor id? 81290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($self->{_doAddAnchorIdToStartTag}) { 81390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, anchor id must be added; 81490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Reset indicator; 81590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_doAddAnchorIdToStartTag} = 0; 81690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Alias anchor id 81790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $anchorId = $self->{_anchorId}; 81890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Attribute 'id' already exists? 81990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (defined($aAttr->{id})) { 82090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, attribute 'id' already exists; 82190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Show warning 82290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber print STDERR "WARNING: Overwriting existing id attribute '" . 82390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $aAttr->{id} . "' of tag $aOrigText\n"; 82490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 82590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Add anchor id to start tag 82690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $aOrigText =~ s/(id)=\S*([\s>])/$1=$anchorId$2/i; 82790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 82890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber else { 82990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # No, attribute 'id' doesn't exist; 83090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Add anchor id to start tag 83190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $aOrigText =~ s/>/ id=$anchorId>/; 83290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 83390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 83490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Output start tag normally 83590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_writeOrBufferOutput($aOrigText); 83690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 83790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 83890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # start() 83990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 84090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 84190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocInsertor::text() ------------------------------------------------ 84290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: This function is called every time plain text is encountered. 84390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - @_: array containing data. 84490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 84590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub text { 84690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 84790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aText) = @_; 84890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Let ancestor process the text 84990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->SUPER::text($aText); 85090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Must ToC be inserted? 85190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($self->{hti__Mode} & MODE_DO_INSERT) { 85290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, ToC must be inserted; 85390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Processing text as ToC insertion point is successful? 85490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (! $self->_processTokenAsInsertionPoint( 85590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber HTML::TocGenerator::TT_TOKENTYPE_TEXT, $aText, undef, $aText 85690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber )) { 85790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # No, text isn't a ToC insertion point; 85890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Output text normally 85990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_writeOrBufferOutput($aText); 86090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 86190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 86290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # text() 86390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 86490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 86590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 86690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 86790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#=== HTML::_TokenTipParser ==================================================== 86890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Parse 'TIP tokens'. 'TIP tokens' mark HTML code which is to be 86990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# used as the ToC Insertion Point. 87090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# note: Used internally. 87190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 87290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberpackage HTML::_TokenTipParser; 87390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 87490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 87590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberBEGIN { 87690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber use vars qw(@ISA); 87790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 87890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber @ISA = qw(HTML::_TokenTocParser); 87990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} 88090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 88190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 88290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEND {} 88390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 88490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 88590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::_TokenTipParser::new() --------------------------------------------- 88690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Constructor 88790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 88890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub new { 88990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 89090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($aType, $aTokenArray) = @_; 89190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Create instance 89290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my $self = $aType->SUPER::new; 89390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Reference token array 89490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{tokens} = $aTokenArray; 89590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Reference to last added token 89690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_lastAddedToken} = undef; 89790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_lastAddedTokenType} = undef; 89890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Return instance 89990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber return $self; 90090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # new() 90190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 90290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 90390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::_TokenTipParser::_processAttributes() ------------------------------ 90490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Process attributes. 90590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aAttributes: Attributes to parse. 90690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 90790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _processAttributes { 90890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 90990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aAttributes) = @_; 91090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Local variables 91190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my (%includeAttributes, %excludeAttributes); 91290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 91390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Parse attributes 91490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_parseAttributes( 91590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $aAttributes, \%includeAttributes, \%excludeAttributes 91690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ); 91790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Include attributes are specified? 91890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (keys(%includeAttributes) > 0) { 91990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, include attributes are specified; 92090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Store include attributes 92190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber @${$self->{_lastAddedToken}}[ 92290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber HTML::TocInsertor::TIP_INCLUDE_ATTRIBUTES 92390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ] = \%includeAttributes; 92490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 92590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Exclude attributes are specified? 92690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (keys(%excludeAttributes) > 0) { 92790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, exclude attributes are specified; 92890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Store exclude attributes 92990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber @${$self->{_lastAddedToken}}[ 93090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber HTML::TocInsertor::TIP_EXCLUDE_ATTRIBUTES 93190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ] = \%excludeAttributes; 93290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 93390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # _processAttributes() 93490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 93590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 93690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::_TokenTipParser::_processToken() ----------------------------------- 93790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Process token. 93890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aTokenType: Type of token to process. 93990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aTag: Tag of token. 94090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 94190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _processToken { 94290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 94390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aTokenType, $aTag) = @_; 94490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Local variables 94590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($tokenArray, $index); 94690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Push element on array of update tokens 94790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $index = push(@{$self->{tokens}[$aTokenType]}, []) - 1; 94890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Alias token array to add element to 94990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $tokenArray = $self->{tokens}[$aTokenType]; 95090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Indicate last updated token array element 95190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_lastAddedTokenType} = $aTokenType; 95290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_lastAddedToken} = \$$tokenArray[$index]; 95390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Add fields 95490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $$tokenArray[$index][HTML::TocInsertor::TIP_TOC] = $self->{_toc}; 95590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $$tokenArray[$index][HTML::TocInsertor::TIP_TOKEN_ID] = $aTag; 95690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $$tokenArray[$index][HTML::TocInsertor::TIP_PREPOSITION] = 95790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_preposition}; 95890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # _processToken() 95990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 96090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 96190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::_TokenTipParser::comment() ----------------------------------------- 96290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Process comment. 96390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aComment: comment text with '<!--' and '-->' tags stripped off. 96490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 96590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub comment { 96690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 96790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aComment) = @_; 96890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Process token 96990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_processToken(HTML::TocGenerator::TT_TOKENTYPE_COMMENT, $aComment); 97090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # comment() 97190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 97290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 97390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::_TokenTipParser::declaration() -------------------------------- 97490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: This function is called every time a markup declaration is 97590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# encountered by HTML::Parser. 97690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aDeclaration: Markup declaration. 97790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 97890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub declaration { 97990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 98090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aDeclaration) = @_; 98190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Process token 98290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_processToken( 98390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber HTML::TocGenerator::TT_TOKENTYPE_DECLARATION, $aDeclaration 98490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ); 98590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # declaration() 98690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 98790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 98890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::_TokenTipParser::end() ---------------------------------------- 98990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: This function is called every time a closing tag is encountered 99090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# by HTML::Parser. 99190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aTag: tag name (in lower case). 99290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 99390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub end { 99490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 99590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aTag, $aOrigText) = @_; 99690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Process token 99790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_processToken(HTML::TocGenerator::TT_TOKENTYPE_END, $aTag); 99890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # end() 99990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 100090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 100190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::_TokenTipParser->setPreposition() ---------------------------------- 100290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Set current preposition. 100390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 100490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub setPreposition { 100590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 100690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aPreposition) = @_; 100790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Set current ToC 100890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_preposition} = $aPreposition; 100990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # setPreposition() 101090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 101190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 101290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::_TokenTipParser->setToc() ------------------------------------------ 101390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Set current ToC. 101490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 101590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub setToc { 101690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 101790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aToc) = @_; 101890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Set current ToC 101990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_toc} = $aToc; 102090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # setToc() 102190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 102290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 102390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::_TokenTipParser::start() -------------------------------------- 102490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: This function is called every time an opening tag is encountered. 102590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aTag: tag name (in lower case). 102690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aAttr: reference to hash containing all tag attributes (in lower 102790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# case). 102890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aAttrSeq: reference to array containing all attribute keys (in 102990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# lower case) in the original order 103090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aOrigText: the original HTML text 103190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 103290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub start { 103390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 103490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aTag, $aAttr, $aAttrSeq, $aOrigText) = @_; 103590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Process token 103690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_processToken(HTML::TocGenerator::TT_TOKENTYPE_START, $aTag); 103790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Process attributes 103890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_processAttributes($aAttr); 103990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # start() 104090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 104190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 104290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::_TokenTipParser::text() --------------------------------------- 104390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: This function is called every time plain text is encountered. 104490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - @_: array containing data. 104590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 104690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub text { 104790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 104890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aText) = @_; 104990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Was token already created and is last added token of type 'text'? 105090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ( 105190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber defined($self->{_lastAddedToken}) && 105290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_lastAddedTokenType} == HTML::TocGenerator::TT_TOKENTYPE_TEXT 105390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ) { 105490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, token is already created; 105590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Add tag to existing token 105690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber @${$self->{_lastAddedToken}}[HTML::TocGenerator::TT_TAG_BEGIN] .= $aText; 105790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 105890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber else { 105990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # No, token isn't created; 106090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Process token 106190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_processToken(HTML::TocGenerator::TT_TOKENTYPE_TEXT, $aText); 106290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 106390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # text() 106490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 106590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 106690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber1; 1067