190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#==== HTML::TocUpdator ======================================================== 290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Update 'HTML::Toc' table of contents. 390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# note: - 'TUT' is an abbreviation of 'Toc Update Token'. 490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberpackage HTML::TocUpdator; 790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberuse strict; 1090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberuse HTML::TocInsertor; 1190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberBEGIN { 1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber use vars qw(@ISA $VERSION); 1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $VERSION = '0.91'; 1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber @ISA = qw(HTML::TocInsertor); 1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} 2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberuse constant TUT_TOKENTYPE_START => 0; 2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberuse constant TUT_TOKENTYPE_END => 1; 2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberuse constant TUT_TOKENTYPE_TEXT => 2; 2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberuse constant TUT_TOKENTYPE_COMMENT => 3; 2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberuse constant MODE_DO_NOTHING => 0; # 0b00 2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberuse constant MODE_DO_INSERT => 1; # 0b01 2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberuse constant MODE_DO_UPDATE => 3; # 0b11 3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEND {} 3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocUpdator::new() -------------------------------------------------- 3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Constructor. 3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub new { 3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($aType) = @_; 4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my $self = $aType->SUPER::new; 4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Bias to not update ToC 4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{htu__Mode} = MODE_DO_NOTHING; 4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Bias to not delete tokens 4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_doDeleteTokens} = 0; 4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Reset batch variables 4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber #$self->_resetBatchVariables; 4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{options} = {}; 5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # TODO: Initialize output 5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber return $self; 5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # new() 5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocUpdator::_deinitializeUpdatorBatch() -------------------------- 5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Deinitialize updator batch. 5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aTocs: Reference to array of tocs. 6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _deinitializeUpdatorBatch { 6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aTocs) = @_; 6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Indicate end of ToC updating 6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{htu__Mode} = MODE_DO_NOTHING; 6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Deinitialize insertor batch 6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_deinitializeInsertorBatch(); 6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # _deinitializeUpdatorBatch() 6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TokenUpdator::_doesHashEqualHash() --------------------------------- 7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Determines whether hash1 equals hash2. 7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aHash1 7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aHash2 7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# returns: True (1) if hash1 equals hash2, 0 if not. For example, with the 7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# following hashes: 7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# 7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# %hash1 = { %hash2 = { 7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# 'class' => 'header', 'class' => 'header', 8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# 'id' => 'intro1' 'id' => 'intro2' 8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# } } 8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# 8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# the routine will return 0, cause the hash fields 'id' differ. 8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# note: Class function. 8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _doesHashEqualHash { 8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($aHash1, $aHash2) = @_; 8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Local variables 9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($key1, $value1, $key2, $value2, $result); 9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Bias to success 9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $result = 1; 9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Loop through hash1 while values available 9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber HASH1: while (($key1, $value1) = each %$aHash1) { 9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, values are available; 9690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Value1 differs from value2? 9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($value1 ne $aHash2->{$key1}) { 9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, hashes differ; 9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Indicate condition fails 10090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $result = 0; 10190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Reset 'each' iterator which we're going to break 10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber keys %$aHash2; 10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Break loop 10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber last HASH1; 10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 10690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Return value 10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber return $result; 10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # _doesHashEqualHash() 11090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 11190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TokenUpdator::_doesTagExistInArray() ------------------------------- 11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Check whether tag & attributes matches any of the tags & attributes 11490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# in the specified array. The array must consist of elements with 11590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# format: 11690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# 11790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# [$tag, \%attributes] 11890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# 11990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aTag: tag to search for 12090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aAttributes: tag attributes to search for 12190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aArray: Array to search in. 12290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# returns: 1 if tag does exist in array, 0 if not. 12390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# note: Class function. 12490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 12590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _doesTagExistInArray { 12690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 12790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($aTag, $aAttributes, $aArray) = @_; 12890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Local variables 12990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($tag, $result); 13090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Bias to non-existing tag 13190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $result = 0; 13290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Loop through existing tags 13390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber TAG: foreach $tag (@{$aArray}) { 13490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (defined(@{$tag}[0])) { 13590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Does tag equals any existing tag? 13690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($aTag eq @{$tag}[0]) { 13790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, tag equals existing tag; 13890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Do hashes equal? 13990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (HTML::TocUpdator::_doesHashEqualHash( 14090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $aAttributes, @{$tag}[1] 14190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber )) { 14290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, hashes are the same; 14390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Indicate tag exists in array 14490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $result = 1; 14590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Break loop 14690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber last TAG; 14790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 14890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 14990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 15090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 15190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Return value 15290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber return $result; 15390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # _doesTagExistInArray() 15490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 15590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 15690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocUpdator::_initializeUpdatorBatch() ---------------------------- 15790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Initialize insertor batch. 15890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aMode: Mode. Can be either MODE_DO_INSERT or MODE_DO_UPDATE 15990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aTocs: Reference to array of tocs. 16090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aOptions: optional options 16190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# note: Updating actually means: deleting the old ToC and inserting a new 16290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# ToC. That's why we're calling 'insertor' methods here. 16390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 16490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _initializeUpdatorBatch { 16590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 16690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aMode, $aTocs, $aOptions) = @_; 16790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Initialize insertor batch 16890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_initializeInsertorBatch($aTocs, $aOptions); 16990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Parse ToC update templates 17090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_parseTocUpdateTokens(); 17190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Indicate start of ToC updating 17290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{htu__Mode} = $aMode; 17390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # _initializeUpdatorBatch() 17490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 17590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 17690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocUpdator::_parseTocUpdateTokens() -------------------------------- 17790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Parse ToC insertion point specifier. 17890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 17990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _parseTocUpdateTokens { 18090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 18190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self) = @_; 18290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Local variables 18390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($toc, $tokenType, $tokenPreposition, $token); 18490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($tocInsertionPoint, $tocInsertionPointTokenAttributes); 18590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Create parser for update begin tokens 18690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my $tokenUpdateBeginParser = HTML::_TokenUpdateParser->new( 18790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_tokensUpdateBegin} 18890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ); 18990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Create parser for update end tokens 19090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my $tokenUpdateEndParser = HTML::_TokenUpdateParser->new( 19190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_tokensUpdateEnd} 19290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ); 19390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 19490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Loop through ToCs 19590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber foreach $toc (@{$self->{_tocs}}) { 19690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Parse update tokens 19790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $tokenUpdateBeginParser->parse( 19890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $toc->{_tokenUpdateBeginOfAnchorNameBegin} 19990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ); 20090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $tokenUpdateBeginParser->parse($toc->{_tokenUpdateBeginOfAnchorNameEnd}); 20190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $tokenUpdateBeginParser->parse($toc->{_tokenUpdateBeginNumber}); 20290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $tokenUpdateBeginParser->parse($toc->{_tokenUpdateBeginToc}); 20390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 20490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $tokenUpdateEndParser->parse($toc->{_tokenUpdateEndOfAnchorNameBegin}); 20590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $tokenUpdateEndParser->parse($toc->{_tokenUpdateEndOfAnchorNameEnd}); 20690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $tokenUpdateEndParser->parse($toc->{_tokenUpdateEndNumber}); 20790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $tokenUpdateEndParser->parse($toc->{_tokenUpdateEndToc}); 20890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 20990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # _parseTocUpdateTokens() 21090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 21190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 21290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocUpdator::_resetBatchVariables() --------------------------------- 21390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Reset batch variables 21490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 21590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _resetBatchVariables { 21690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 21790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self) = @_; 21890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Call ancestor 21990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->SUPER::_resetBatchVariables(); 22090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Arrays containing start, end, comment & text tokens which indicate 22190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # the begin of ToC tokens. The tokens are stored in keys of hashes to 22290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # avoid storing duplicates as an array would. 22390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_tokensUpdateBegin} = [ 22490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber [], # ['<start tag>', <attributes>] 22590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber {}, # {'<end tag>' => ''} 22690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber {}, # {'<text>' => ''} 22790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber {} # {'<comment>' => ''} 22890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ]; 22990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Arrays containing start, end, comment & text tokens which indicate 23090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # the end of ToC tokens. The tokens are stored in keys of hashes to 23190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # avoid storing duplicates as an array would. 23290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_tokensUpdateEnd} = [ 23390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber [], # ['<start tag>', <attributes>] 23490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber {}, # {'<end tag>' => ''} 23590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber {}, # {'<text>' => ''} 23690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber {} # {'<comment>' => ''} 23790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ]; 23890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # _resetBatchVariables() 23990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 24090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 24190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocUpdator::_setActiveAnchorName() --------------------------------- 24290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Set active anchor name. 24390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - aAnchorName: Name of anchor name to set active. 24490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 24590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _setActiveAnchorName { 24690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 24790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aAnchorName) = @_; 24890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Are tokens being deleted? 24990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (! $self->{_doDeleteTokens}) { 25090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # No, tokens aren't being deleted; 25190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Call ancestor to set anchor name 25290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->SUPER::_setActiveAnchorName($aAnchorName); 25390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 25490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # _setActiveAnchorName() 25590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 25690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 25790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocUpdator::_update() ---------------------------------------------- 25890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Update ToC in string. 25990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aMode: Mode. Can be either MODE_DO_UPDATE or MODE_DO_INSERT. 26090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aToc: (reference to array of) ToC object to update 26190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aString: string to update ToC of 26290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aOptions: optional updator options 26390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# note: Used internally. 26490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 26590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _update { 26690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 26790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aMode, $aToc, $aString, $aOptions) = @_; 26890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Initialize TocUpdator batch 26990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_initializeUpdatorBatch($aMode, $aToc, $aOptions); 27090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Start updating ToC by starting ToC insertion 27190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_insert($aString); 27290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Deinitialize TocUpdator batch 27390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_deinitializeUpdatorBatch(); 27490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # update() 27590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 27690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 27790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocUpdator::_updateFile() ------------------------------------------ 27890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Update ToCs in file. 27990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aMode: Mode. Can be either MODE_DO_UPDATE or MODE_DO_INSERT. 28090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aToc: (reference to array of) ToC object to update 28190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aFile: (reference to array of) file to parse for updating. 28290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aOptions: optional updator options 28390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# note: Used internally. 28490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 28590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _updateFile { 28690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 28790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aMode, $aToc, $aFile, $aOptions) = @_; 28890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Initialize TocUpdator batch 28990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_initializeUpdatorBatch($aMode, $aToc, $aOptions); 29090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Start updating ToC by starting ToC insertion 29190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_insertIntoFile($aFile); 29290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Deinitialize TocUpdator batch 29390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_deinitializeUpdatorBatch(); 29490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # _updateFile() 29590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 29690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 29790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocUpdator::_writeOrBufferOutput() --------------------------------- 29890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Write processed HTML to output device(s). 29990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - aOutput: scalar to write 30090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 30190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _writeOrBufferOutput { 30290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 30390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aOutput) = @_; 30490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Delete output? 30590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (! $self->{_doDeleteTokens}) { 30690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # No, don't delete output; 30790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Call ancestor 30890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->SUPER::_writeOrBufferOutput($aOutput); 30990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 31090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # _writeOrBufferOutput() 31190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 31290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 31390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocUpdator::anchorNameBegin() -------------------------------------- 31490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Process 'anchor name begin' generated by HTML::Toc. 31590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aAnchorName: Anchor name begin tag to output. 31690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aToc: Reference to ToC to which anchorname belongs. 31790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 31890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub anchorNameBegin { 31990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 32090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aAnchorNameBegin, $aToc) = @_; 32190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Call ancestor 32290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->SUPER::anchorNameBegin($aAnchorNameBegin); 32390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Must ToC be inserted or updated? 32490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($self->{htu__Mode} != MODE_DO_NOTHING) { 32590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, ToC must be inserted or updated; 32690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Surround anchor name with update tags 32790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_outputPrefix} = 32890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $aToc->{_tokenUpdateBeginOfAnchorNameBegin} . 32990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_outputPrefix} . 33090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $aToc->{_tokenUpdateEndOfAnchorNameBegin}; 33190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 33290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # anchorNameBegin() 33390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 33490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 33590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocUpdator::anchorNameEnd() ---------------------------------------- 33690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Process 'anchor name end' generated by HTML::Toc. 33790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aAnchorNameEnd: Anchor name end tag to output. 33890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aToc: Reference to ToC to which anchorname belongs. 33990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 34090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub anchorNameEnd { 34190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 34290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aAnchorNameEnd, $aToc) = @_; 34390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Call ancestor 34490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->SUPER::anchorNameEnd($aAnchorNameEnd); 34590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Must ToC be inserted or updated? 34690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($self->{htu__Mode} != MODE_DO_NOTHING) { 34790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, ToC must be inserted or updated; 34890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Surround anchor name with update tags 34990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_outputSuffix} = 35090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $aToc->{_tokenUpdateBeginOfAnchorNameEnd} . 35190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_outputSuffix} . 35290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $aToc->{_tokenUpdateEndOfAnchorNameEnd}; 35390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 35490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # anchorNameEnd() 35590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 35690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 35790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocUpdator::comment() ---------------------------------------------- 35890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Process comment. 35990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aComment: comment text with '<!--' and '-->' tags stripped off. 36090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 36190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub comment { 36290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 36390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aComment) = @_; 36490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Must ToC be updated? 36590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($self->{htu__Mode} == MODE_DO_UPDATE) { 36690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, ToC must be updated; 36790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Updator is currently deleting tokens? 36890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($self->{_doDeleteTokens}) { 36990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, tokens must be deleted; 37090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Call ancestor 37190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->SUPER::comment($aComment); 37290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 37390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Look for update end token 37490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 37590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Does comment matches update end token? 37690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (defined( 37790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_tokensUpdateEnd}[TUT_TOKENTYPE_COMMENT]{$aComment} 37890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber )) { 37990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, comment matches update end token; 38090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Indicate to stop deleting tokens 38190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_doDeleteTokens} = 0; 38290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 38390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 38490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber else { 38590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # No, tokens mustn't be deleted; 38690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 38790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Look for update begin token 38890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 38990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Does comment matches update begin token? 39090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (defined( 39190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_tokensUpdateBegin}[TUT_TOKENTYPE_COMMENT]{$aComment} 39290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber )) { 39390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, comment matches update begin token; 39490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Indicate to start deleting tokens 39590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_doDeleteTokens} = 1; 39690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 39790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Call ancestor 39890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->SUPER::comment($aComment); 39990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 40090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 40190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber else { 40290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # No, ToC mustn't be updated; 40390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Call ancestor 40490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->SUPER::comment($aComment); 40590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 40690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # comment() 40790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 40890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 40990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocUpdator::end() -------------------------------------------------- 41090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: This function is called every time a closing tag is encountered. 41190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aTag: tag name (in lower case). 41290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aOrigText: tag name including brackets. 41390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 41490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub end { 41590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 41690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aTag, $aOrigText) = @_; 41790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Call ancestor 41890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->SUPER::end($aTag, $aOrigText); 41990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Must ToC be updated? 42090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($self->{htu__Mode} == MODE_DO_UPDATE) { 42190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, ToC must be updated; 42290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Updator is currently deleting tokens? 42390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($self->{_doDeleteTokens}) { 42490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, tokens must be deleted; 42590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Does end tag matches update end token? 42690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (defined( 42790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_tokensUpdateEnd}[TUT_TOKENTYPE_END]{$aTag} 42890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber )) { 42990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, end tag matches update end token; 43090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Indicate to stop deleting tokens 43190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_doDeleteTokens} = 0; 43290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 43390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 43490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 43590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # end() 43690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 43790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 43890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocUpdator::insert() ----------------------------------------------- 43990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Insert ToC in string. 44090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aToc: (reference to array of) ToC object to update 44190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aString: string to insert ToC in. 44290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aOptions: optional updator options 44390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 44490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub insert { 44590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 44690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aToc, $aString, $aOptions) = @_; 44790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Do start insert 44890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_update(MODE_DO_INSERT, $aToc, $aString, $aOptions); 44990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # insert() 45090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 45190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 45290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocUpdator::insertIntoFile() -------------------------------------- 45390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Insert ToC in file. 45490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aToc: (reference to array of) ToC object to update 45590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aFile: File to insert ToC in. 45690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aOptions: optional updator options 45790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 45890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub insertIntoFile { 45990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 46090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aToc, $aFile, $aOptions) = @_; 46190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Do start insert 46290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_updateFile(MODE_DO_INSERT, $aToc, $aFile, $aOptions); 46390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # insertIntoFile() 46490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 46590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 46690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocUpdator::number() ----------------------------------------------- 46790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Process heading number generated by HTML::Toc. 46890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aNumber 46990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aToc: Reference to ToC to which anchorname belongs. 47090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 47190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub number { 47290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 47390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aNumber, $aToc) = @_; 47490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Call ancestor 47590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->SUPER::number($aNumber); 47690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Must ToC be inserted or updated? 47790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($self->{htu__Mode} != MODE_DO_NOTHING) { 47890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, ToC must be inserted or updated; 47990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Surround number with update tags 48090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_outputSuffix} = 48190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $aToc->{_tokenUpdateBeginNumber} . 48290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_outputSuffix} . 48390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $aToc->{_tokenUpdateEndNumber}; 48490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 48590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # number() 48690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 48790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 48890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocUpdator::start() ------------------------------------------------ 48990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: This function is called every time an opening tag is encountered. 49090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aTag: tag name (in lower case). 49190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aAttr: reference to hash containing all tag attributes (in lower 49290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# case). 49390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aAttrSeq: reference to array containing all tag attributes (in 49490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# lower case) in the original order 49590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aOrigText: the original HTML text 49690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 49790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub start { 49890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 49990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aTag, $aAttr, $aAttrSeq, $aOrigText) = @_; 50090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Must ToC be updated? 50190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if ($self->{htu__Mode} == MODE_DO_UPDATE) { 50290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, ToC must be updated; 50390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Does start tag matches token update begin tag? 50490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (HTML::TocUpdator::_doesTagExistInArray( 50590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $aTag, $aAttr, $self->{_tokensUpdateBegin}[TUT_TOKENTYPE_START] 50690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber )) { 50790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Yes, start tag matches token update tag; 50890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Indicate to delete tokens 50990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{_doDeleteTokens} = 1; 51090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 51190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 51290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Let ancestor process the start tag 51390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->SUPER::start($aTag, $aAttr, $aAttrSeq, $aOrigText); 51490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # start() 51590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 51690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 51790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocUpdator::toc() -------------------------------------------------- 51890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Toc processing method. Add toc reference to scenario. 51990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aScenario: Scenario to add ToC reference to. 52090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aToc: Reference to ToC to insert. 52190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# note: The ToC hasn't been build yet; only a reference to the ToC to be 52290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# build is inserted. 52390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 52490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub toc { 52590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 52690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aScenario, $aToc) = @_; 52790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 52890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Surround toc with update tokens 52990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 53090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Add update begin token 53190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber push(@$aScenario, \$aToc->{_tokenUpdateBeginToc}); 53290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Call ancestor 53390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->SUPER::toc($aScenario, $aToc); 53490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Add update end token 53590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber push(@$aScenario, \$aToc->{_tokenUpdateEndToc}); 53690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # toc() 53790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 53890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 53990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocUpdator::_processTocText() -------------------------------------- 54090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Toc text processing function. 54190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aText: Text to add to ToC. 54290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aToc: ToC to add text to. 54390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 54490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub _processTocText { 54590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 54690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aText, $aToc) = @_; 54790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Delete output? 54890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (! $self->{_doDeleteTokens}) { 54990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # No, don't delete output; 55090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Call ancestor 55190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->SUPER::_processTocText($aText, $aToc); 55290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 55390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # _processTocText() 55490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 55590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 55690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocUpdator::update() ----------------------------------------------- 55790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Update ToC in string. 55890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aToc: (reference to array of) ToC object to update 55990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aString: string to update ToC of 56090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aOptions: optional updator options 56190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 56290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub update { 56390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 56490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aToc, $aString, $aOptions) = @_; 56590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Do start update 56690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_update(MODE_DO_UPDATE, $aToc, $aString, $aOptions); 56790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # update() 56890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 56990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 57090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::TocUpdator::updateFile() ------------------------------------------- 57190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Update ToC of file. 57290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aToc: (reference to array of) ToC object to update 57390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aFile: (reference to array of) file to parse for updating. 57490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aOptions: optional updator options 57590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 57690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub updateFile { 57790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 57890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aToc, $aFile, $aOptions) = @_; 57990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Do start update 58090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->_updateFile(MODE_DO_UPDATE, $aToc, $aFile, $aOptions); 58190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # update() 58290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 58390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 58490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 58590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 58690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#=== HTML::_TokenUpdateParser ================================================= 58790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Parse 'update tokens'. 'Update tokens' mark HTML code which is 58890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# inserted by 'HTML::TocInsertor'. 58990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# note: Used internally. 59090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 59190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberpackage HTML::_TokenUpdateParser; 59290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 59390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 59490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberBEGIN { 59590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber use vars qw(@ISA); 59690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 59790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber @ISA = qw(HTML::Parser); 59890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} 59990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 60090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEND {} 60190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 60290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 60390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::_TokenUpdateParser::new() ------------------------------------------ 60490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Constructor 60590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 60690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub new { 60790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 60890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($aType, $aTokenArray) = @_; 60990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Create instance 61090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my $self = $aType->SUPER::new; 61190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Reference token array 61290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{tokens} = $aTokenArray; 61390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Return instance 61490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber return $self; 61590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # new() 61690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 61790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 61890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::_TokenUpdateParser::comment() -------------------------------------- 61990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Process comment. 62090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aComment: comment text with '<!--' and '-->' tags stripped off. 62190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 62290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub comment { 62390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 62490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aComment) = @_; 62590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Add token to array of update tokens 62690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{tokens}[HTML::TocUpdator::TUT_TOKENTYPE_COMMENT]{$aComment} = ''; 62790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # comment() 62890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 62990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 63090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::_TokenUpdateParser::end() ------------------------------------------ 63190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: This function is called every time a closing tag is encountered 63290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# by HTML::Parser. 63390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aTag: tag name (in lower case). 63490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 63590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub end { 63690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 63790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aTag, $aOrigText) = @_; 63890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Add token to array of update tokens 63990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{tokens}[HTML::TocUpdator::TUT_TOKENTYPE_END]{$aTag} = ''; 64090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # end() 64190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 64290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 64390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::_TokenUpdateParser::parse() ---------------------------------------- 64490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: Parse token. 64590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aToken: 'update token' to parse 64690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 64790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub parse { 64890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 64990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aString) = @_; 65090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Call ancestor 65190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->SUPER::parse($aString); 65290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # parse() 65390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 65490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 65590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::_TokenUpdateParser::start() ---------------------------------------- 65690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: This function is called every time an opening tag is encountered. 65790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - $aTag: tag name (in lower case). 65890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aAttr: reference to hash containing all tag attributes (in lower 65990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# case). 66090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aAttrSeq: reference to array containing all tag attributes (in 66190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# lower case) in the original order 66290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# - $aOrigText: the original HTML text 66390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 66490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub start { 66590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 66690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aTag, $aAttr, $aAttrSeq, $aOrigText) = @_; 66790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Does token exist in array? 66890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (! HTML::TocUpdator::_doesTagExistInArray( 66990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $aTag, $aAttr, $self->{tokens}[HTML::TocUpdator::TUT_TOKENTYPE_START] 67090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber )) { 67190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # No, token doesn't exist in array; 67290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Add token to array of update tokens 67390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber push( 67490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber @{$self->{tokens}[HTML::TocUpdator::TUT_TOKENTYPE_START]}, 67590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber [$aTag, $aAttr] 67690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ); 67790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 67890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # start() 67990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 68090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 68190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#--- HTML::_TokenUpdateParser::text() ----------------------------------------- 68290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# function: This function is called every time plain text is encountered. 68390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# args: - @_: array containing data. 68490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 68590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub text { 68690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Get arguments 68790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber my ($self, $aText) = @_; 68890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber # Add token to array of update tokens 68990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber $self->{tokens}[HTML::TocUpdator::TUT_TOKENTYPE_TEXT]{$aText} = ''; 69090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} # text() 69190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 69290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 69390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber1; 694