Add save/restore xmm registers in x86 assembly code
[libvpx.git] / examples / includes / HTML-Toc-0.91 / Toc.pod
blob634850345923bb8d2060c65cf624680ad7d7a4de
1 =head1 NAME
3 HTML::Toc - Generate, insert and update HTML Table of Contents.
5 =head1 DESCRIPTION
7 Generate, insert and update HTML Table of Contents.
9 =head1 Introduction
11 The HTML::Toc consists out of the following packages:
13     HTML::Toc
14     HTML::TocGenerator
15     HTML::TocInsertor
16     HTML::TocUpdator
18 HTML::Toc is the object which will eventually hold the Table of Contents.  HTML::TocGenerator does the actual generation of the ToC.  HTML::TocInsertor handles the insertion of the ToC in the source.  HTML::TocUpdator takes care of updating previously inserted ToCs.
20 HTML::Parser is the base object of HTML::TocGenerator, HTML::TocInsertor and HTML::TocUpdator.  Each of these objects uses its predecessor as its ancestor, as shown in the UML diagram underneath:
21     
22     +---------------------+
23     |    HTML::Parser     |
24     +---------------------+
25     +---------------------+
26     |    +parse()         |
27     |    +parse_file()    |
28     +----------+----------+
29               /_\
30                |
31     +----------+----------+  <<uses>>  +-----------+
32     | HTML::TocGenerator  + - - - - - -+ HTML::Toc |
33     +---------------------+            +-----------+
34     +---------------------+            +-----------+
35     | +extend()           |            | +clear()  |
36     | +extendFromFile()   |            | +format() |
37     | +generate()         |            +-----+-----+
38     | +generateFromFile() |                  :
39     +----------+----------+                  :
40               /_\                            :
41                |                             :
42     +----------+----------+     <<uses>>     :
43     |  HTML::TocInsertor  + - - - - - - - - -+
44     +---------------------+                  :
45     +---------------------+                  :
46     |  +insert()          |                  :
47     |  +insertIntoFile()  |                  :
48     +----------+----------+                  :
49               /_\                            :
50                |                             :
51     +----------+----------+     <<uses>>     :
52     |  HTML::TocUpdator   + - - - - - - - - -+
53     +---------------------+
54     +---------------------+
55     |  +insert()          |
56     |  +insertIntoFile()  |
57     |  +update()          |
58     |  +updateFile()      |
59     +---------------------+
61 When generating a ToC you'll have to decide which object you want to use:
63     TocGenerator:
64         for generating a ToC without inserting the ToC into the source
65     TocInsertor:
66         for generating a ToC and inserting the ToC into the source
67     TocUpdator:
68         for generating and inserting a ToC, removing any previously
69         inserted ToC elements
71 Thus in tabular view, each object is capable of:
73                    generating   inserting   updating
74                    ---------------------------------
75     TocGenerator        X
76     TocInsertor         X           X
77     TocUpdator          X           X           X
79 =head2 Generating
81 The code underneath will generate a ToC of the HTML headings C<<h1>>..C<<h6>> from a file C<index.htm>:
83     use HTML::Toc;
84     use HTML::TocGenerator;
86     my $toc          = HTML::Toc->new();
87     my $tocGenerator = HTML::TocGenerator->new();
89     $tocGenerator->generateFromFile($toc, 'index.htm');
90     print $toc->format();
92 For example, with C<index.htm> containing:
94     <html>
95     <body>
96        <h1>Chapter</h1>
97     </body>
98     </html>
100 the output will be:
102     
103     <!-- Table of Contents generated by Perl - HTML::Toc -->
104     <ul>
105        <li><a href=#h-1>Chapter</a>
106     </ul>
107     <!-- End of generated Table of Contents -->
109 =head2 Inserting
111 This code will generate a ToC of HTML headings C<<h1>>..C<<h6>> of file C<index.htm>, and insert the ToC after the C<<body>> tag at the same time:
113     use HTML::Toc;
114     use HTML::TocInsertor;
116     my $toc         = HTML::Toc->new();
117     my $tocInsertor = HTML::TocInsertor->new();
119     $tocInsertor->insertIntoFile($toc, 'index.htm');
121 For example, with C<index.htm> containing:
123     <html>
124     <body>
125        <h1>Chapter</h1>
126     </body>
127     </html>
129 the output will be:
131     <html>
132     <body>
133     <!-- Table of Contents generated by Perl - HTML::Toc -->
134     <ul>
135        <li><a href=#h-1>Chapter</a>
136     </ul>
137     <!-- End of generated Table of Contents -->
139        <a name=h-1><h1>Chapter</h1></a>
140     </body>
141     </html>
143 If you're planning to update the inserted ToC, you'd better use C<TocUpdator> to insert the ToC.  C<TocUpdator> marks the inserted ToC elements with update tokens.  These update tokens allow C<TocUpdator> to identify and remove the ToC elements during a future update session.  This code uses C<TocUpdator> instead of C<TocInsertor>:
145     use HTML::Toc;
146     use HTML::TocUpdator;
148     my $toc        = HTML::Toc->new();
149     my $tocUpdator = HTML::TocUpdator->new();
151     $tocUpdator->insertIntoFile($toc, 'index.htm');
153 When applying the code above on 'index.htm':
155     <html>
156     <body>
157        <h1>
158        Chapter
159        </h1>
160     </body>
161     </html>
163 the output will contain additional update tokens:
165     <!-- #BeginToc -->
166     <!-- #EndToc -->
167     <!-- #BeginTocAnchorNameBegin -->
168     <!-- #EndTocAnchorNameBegin -->
169     <!-- #BeginTocAnchorNameEnd -->
170     <!-- #EndTocAnchorNameEnd -->
172 around the inserted ToC elements:
174     <html>
175     <body><!-- #BeginToc-->
176     <!-- Table of Contents generated by Perl - HTML::Toc -->
177     <ul>
178        <li><a href=#h-1> Chapter </a>
179     </ul>
180     <!-- End of generated Table of Contents -->
181     <!-- #EndToc -->
182        <!-- #BeginTocAnchorNameBegin --><a name=h-1><!-- #EndTocAnchorNameBegin --><h1>
183        Chapter
184        </h1><!-- #BeginTocAnchorNameEnd --></a><!-- #EndTocAnchorNameEnd -->
185     </body>
186     </html>
188 Instead of C<HTML::TocUpdator::insertIntoFile> you can also use C<HTML::TocUpdator::updateFile()>.  C<HTML::TocUpdator::updateFile()> will also insert the ToC, whether there is a ToC already inserted or not.
190 =head2 Updating
192 This code will generate a ToC of HTML headings C<<h1>>..C<<h6>> of file C<indexToc.htm>, and insert or update the ToC after the C<<body>> tag at the same time:
194     use HTML::Toc;
195     use HTML::TocUpdator;
197     my $toc        = HTML::Toc->new();
198     my $tocUpdator = HTML::TocUpdator->new();
200     $tocUpdator->updateFile($toc, 'indexToc.htm');
202 For example, with C<indexToc.htm> containing:
204     <html>
205     <body><!-- #BeginToc -->
206     foo
207     <!-- #EndToc -->
208        <!-- #BeginTocAnchorNameBegin -->bar<!-- #EndTocAnchorNameBegin --><h1>
209        Chapter
210        </h1><!-- #BeginTocAnchorNameEnd -->foo<!-- #EndTocAnchorNameEnd -->
211     </body>h
212     </html>
214 the output will be:
216     <html>
217     <body><!-- #BeginToc -->
218     <!-- Table of Contents generated by Perl - HTML::Toc -->
219     <ul>
220        <li><a href=#h-1> Chapter </a>
221     </ul>
222     <!-- End of generated Table of Contents -->
223     <!-- #EndToc -->
224        <!-- #BeginTocAnchorNameBegin --><a name=h-1><!-- #EndTocAnchorNameBegin --><h1>
225        Chapter
226        </h1><!-- #BeginTocAnchorNameEnd --></a><!-- #EndTocAnchorNameEnd -->
227     </body>
228     </html>
230 All text between the update tokens will be replaced.  So be warned: all manual changes made to text between update tokens will be removed unrecoverable after calling C<HTML::TocUpdator::update()> or C<HTML::TocUpdator::updateFile()>.
232 =head2 Formatting
234 The ToC isn't generated all at once.  There are two stages involved: generating and formatting.  Generating the ToC actually means storing a preliminary ToC in C<HTML::Toc-E<gt>{_toc}>.  This preliminary, tokenized ToC has to be turned into something useful by calling C<HTML::Toc-E<gt>format()>.  For an example, see paragraph 'L<Generating|"generating">'.
236 =head1 Advanced
238 The ToC generation can be modified in a variety of ways.  The following paragraphs each explain a single modification.  An example of most of the modifications can be found in the C<manualTest.t> test file.  Within this test, a manual containing:
240     preface
241     introduction
242     table of contents
243     table of figures
244     table of tables
245     parts
246     chapters
247     appendixes
248     bibliography
250 is formatted.
252 =head2 Using attribute value as ToC text
254 Normally, the ToC will be made of text between specified ToC tokens.  It's also possible to use the attribute value of a token as a ToC text.  This can be done by specifying the attribute marked with an L<attributeToTocToken|"attributeToTocToken"> within the L<tokenBegin|"tokenBegin"> token.  For example, suppose you want to generate a ToC of the C<alt> attributes of the following image tokens:
256     <body>
257        <img src=test1.gif alt="First picture">
258        <img src=test2.gif alt="Second picture">
259     </body>
261 This would be the code:
263     use HTML::Toc;
264     use HTML::TocInsertor;
266     my $toc         = HTML::Toc->new();
267     my $tocInsertor = HTML::TocInsertor->new();
269     $toc->setOptions({
270        'tokenToToc'   => [{
271           'groupId'    => 'image',
272           'tokenBegin' => '<img alt=@>'
273        }],
274     });
275     $tocInsertor->insertIntoFile($toc, $filename);
277 and the output will be:
279     <body>
280     <!-- Table of Contents generated by Perl - HTML::Toc -->
281     <ul>
282        <li><a href=#image-1>First picture</a>
283        <li><a href=#image-2>Second picture</a>
284     </ul>
285     <!-- End of generated Table of Contents -->
287        <a name=image-1><img src=test1.gif alt="First picture"></a>
288        <a name=image-2><img src=test2.gif alt="Second picture"></a>
289     </body>
291 =head2 Generate single ToC of multiple files
293 Besides generating a ToC of a single file, it's also possible to generate a single ToC of multiple files.  This can be done by specifying either an array of files as the file argument and/or by extending an existing ToC.
295 =head3 Specify an array of files
297 For example, suppose you want to generate a ToC of both C<doc1.htm>:
299     <body>
300        <h1>Chapter of document 1</h1>
301     </body>
303 and C<doc2.htm>:
305     <body>
306        <h1>Chapter of document 2</h1>
307     </body>
309 Here's the code to do so by specifying an array of files:
311     use HTML::Toc;
312     use HTML::TocGenerator;
314     my $toc          = HTML::Toc->new();
315     my $tocGenerator = HTML::TocGenerator->new();
317     $toc->setOptions({'doLinkToFile' => 1});
318     $tocGenerator->generateFromFile($toc, ['doc1.htm', 'doc2.htm']);
319     print $toc->format();
321 And the output will be:
324     <!-- Table of Contents generated by Perl - HTML::Toc -->
325     <ul>
326        <li><a href=doc1.htm#h-1>Chapter of document 1</a>
327        <li><a href=doc2.htm#h-2>Chapter of document 2</a>
328     </ul>
329     <!-- End of generated Table of Contents -->
331 =head3 Extend an existing ToC
333 It's also possible to extend an existing ToC.  For example, suppose we want the generate a ToC of file C<doc1.htm>:
335     <body>
336        <h1>Chapter of document 1</h1>
337     </body>
339 and extend this ToC with text from C<doc2.htm>:
341     <body>
342        <h1>Chapter of document 2</h1>
343     </body>
345 Here's the code to do so:
347     use HTML::Toc;
348     use HTML::TocGenerator;
350     my $toc          = HTML::Toc->new();
351     my $tocGenerator = HTML::TocGenerator->new();
353     $toc->setOptions({'doLinkToFile' => 1});
354     $tocGenerator->generateFromFile($toc, 'doc1.htm');
355     $tocGenerator->extendFromFile($toc, 'doc2.htm');
356     print $toc->format();
358 And the output will be:
361     <!-- Table of Contents generated by Perl - HTML::Toc -->
362     <ul>
363        <li><a href=doc1.htm#h-1>Chapter of document 1</a>
364        <li><a href=doc2.htm#h-2>Chapter of document 2</a>
365     </ul>
366     <!-- End of generated Table of Contents -->
368 =head2 Generate multiple ToCs
370 It's possible to generate multiple ToCs at once by specifying a C<HTML::Toc> object array as the ToC argument.  For example, suppose you want to generate a default ToC of HTML headings <h1>..<h6> as well as a ToC of the C<alt> image attributes of the following text:
372     <body>
373        <h1>Header One</h1>
374        <img src=test1.gif alt="First picture" id=image_001>
375        <h2>Paragraph One</h2>
376        <img src=test2.gif alt="Second picture" id=image_002>
377     </body>
379 Here's how you would do so:
381     use HTML::Toc;
382     use HTML::TocInsertor;
384     my $toc1        = HTML::Toc->new();
385     my $toc2        = HTML::Toc->new();
386     my $tocInsertor = HTML::TocInsertor->new();
388     $toc2->setOptions({
389        'tokenToToc'   => [{
390           'groupId'    => 'image',
391           'tokenBegin' => '<img alt=@>'
392        }],
393     });
394     $tocInsertor->insertIntoFile([$toc1, $toc2], $filename);
396 And the output will be:
398     <body>
399     <!-- Table of Contents generated by Perl - HTML::Toc -->
400     <ul>
401        <li><a href=#h-1>Header One</a>
402        <ul>
403           <li><a href=#h-1.1>Paragraph One</a>
404        </ul>
405     </ul>
406     <!-- End of generated Table of Contents -->
408     <!-- Table of Contents generated by Perl - HTML::Toc -->
409     <ul>
410        <li><a href=#image-1>First picture</a>
411        <li><a href=#image-2>Second picture</a>
412     </ul>
413     <!-- End of generated Table of Contents -->
415        <a name=h-1><h1>Header One</h1></a>
416        <a name=image-1><img src=test1.gif alt="First picture"></a>
417        <a name=h-1.1><h2>Paragraph One</h2></a>
418        <a name=image-2><img src=test2.gif alt="Second picture"></a>
419     </body>
421 =head2 Generate multiple groups in one ToC
423 You may want to generate a ToC consisting of multiple ToC groups.
425 =head3 Specify an additional 'Appendix' group
427 Suppose you want to generate a ToC with one group for the normal headings, and one group for the appendix headings, using this source file:
429     <body>
430        <h1>Chapter</h1>
431        <h2>Paragraph</h2>
432        <h3>Subparagraph</h3>
433        <h1>Chapter</h1>
434        <h1 class=appendix>Appendix Chapter</h1>
435        <h2 class=appendix>Appendix Paragraph</h2>
436     </body>
438 With the code underneath:
440     use HTML::Toc;
441     use HTML::TocInsertor;
443     my $toc         = HTML::Toc->new();
444     my $tocInsertor = HTML::TocInsertor->new();
446     $toc->setOptions({
447        'tokenToToc' => [{
448              'tokenBegin' => '<h1 class=-appendix>'
449           }, {
450              'tokenBegin' => '<h2 class=-appendix>',
451              'level'      => 2
452           }, {
453              'groupId'    => 'appendix',
454              'tokenBegin' => '<h1 class=appendix>',
455           }, {
456              'groupId'    => 'appendix',
457              'tokenBegin' => '<h2 class=appendix>',
458              'level'      => 2
459           }]
460     });
461     $tocInsertor->insertIntoFile($toc, $filename);
463 the output will be:
465     <body>
466     <!-- Table of Contents generated by Perl - HTML::Toc -->
467     <ul>
468        <li><a href=#h-1>Chapter</a>
469        <ul>
470           <li><a href=#h-1.1>Paragraph</a>
471        </ul>
472        <li><a href=#h-2>Chapter</a>
473     </ul>
474     <ul>
475        <li><a href=#appendix-1>Appendix Chapter</a>
476        <ul>
477           <li><a href=#appendix-1.1>Appendix Paragraph</a>
478        </ul>
479     </ul>
480     <!-- End of generated Table of Contents -->
482        <a name=h-1><h1>Chapter</h1></a>
483        <a name=h-1.1><h2>Paragraph</h2></a>
484        <h3>Subparagraph</h3>
485        <a name=h-2><h1>Chapter</h1></a>
486        <a name=appendix-1><h1 class=appendix>Appendix Chapter</h1></a>
487        <a name=appendix-1.1><h2 class=appendix>Appendix Paragraph</h2></a>
488     </body>
490 =head3 Specify an additional 'Part' group
492 Suppose you want to generate a ToC of a document which is divided in multiple parts like this file underneath:
494     <body>
495        <h1 class=part>First Part</h1>
496        <h1>Chapter</h1>
497        <h2>Paragraph</h2>
498        <h1 class=part>Second Part</h1>
499        <h1>Chapter</h1>
500        <h2>Paragraph</h2>
501     </body>
503 With the code underneath:
505     use HTML::Toc;
506     use HTML::TocInsertor;
508     my $toc         = HTML::Toc->new();
509     my $tocInsertor = HTML::TocInsertor->new();
511     $toc->setOptions({
512        'doNumberToken'    => 1,
513        'tokenToToc' => [{
514              'tokenBegin' => '<h1 class=-part>'
515           }, {
516              'tokenBegin' => '<h2 class=-part>',
517              'level'      => 2,
518           }, {
519              'groupId'        => 'part',
520              'tokenBegin'     => '<h1 class=part>',
521              'level'          => 1,
522              'numberingStyle' => 'upper-alpha'
523           }]
524     });
525     $tocInsertor->insertIntoFile($toc, $filename);
527 the output will be:
529     <body>
530     <!-- Table of Contents generated by Perl - HTML::Toc -->
531     <ul>
532        <li><a href=#part-A>First Part</a>
533     </ul>
534     <ul>
535        <li><a href=#h-1>Chapter</a>
536        <ul>
537           <li><a href=#h-1.1>Paragraph</a>
538        </ul>
539     </ul>
540     <ul>
541        <li><a href=#part-B>Second Part</a>
542     </ul>
543     <ul>
544        <li><a href=#h-2>Chapter</a>
545        <ul>
546           <li><a href=#h-2.1>Paragraph</a>
547        </ul>
548     </ul>
549     <!-- End of generated Table of Contents -->
551        <a name=part-A><h1 class=part>A &nbsp;First Part</h1></a>
552        <a name=h-1><h1>1 &nbsp;Chapter</h1></a>
553        <a name=h-1.1><h2>1.1 &nbsp;Paragraph</h2></a>
554        <a name=part-B><h1 class=part>B &nbsp;Second Part</h1></a>
555        <a name=h-2><h1>2 &nbsp;Chapter</h1></a>
556        <a name=h-2.1><h2>2.1 &nbsp;Paragraph</h2></a>
557     </body>
559 =head2 Number ToC entries
561 By default, the generated ToC will list its entries unnumbered.  If you want to number the ToC entries, two options are available.  Either you can specify a numbered list by modifying L<templateLevelBegin|"templateLevelBegin"> and L<templateLevelEnd|"templateLevelEnd">.  Or when the ToC isn't a simple numbered list, you can use the numbers generated by HTML::TocGenerator.
563 =head3 Specify numbered list
565 By modifying L<templateLevelBegin|"templateLevelBegin"> and L<templateLevelEnd|"templateLevelEnd"> you can specify a numbered ToC:
567     use HTML::Toc;
568     use HTML::TocGenerator;
570     my $toc          = HTML::Toc->new();
571     my $tocGenerator = HTML::TocGenerator->new();
573     $toc->setOptions({
574         'templateLevelBegin' => '"<ol>\n"',
575         'templateLevelEnd'   => '"</ol>\n"',
576     });
577     $tocGenerator->generateFromFile($toc, 'index.htm');
578     print $toc->format();
580 For instance with the original file containing:
582     <body>
583         <h1>Chapter</h1>
584         <h2>Paragraph</h2>
585     </body>
587 The formatted ToC now will contain C<ol> instead of C<ul> tags:
589     <!-- Table of Contents generated by Perl - HTML::Toc -->
590     <ol>
591        <li><a href=#h-1>Chapter</a>
592        <ol>
593           <li><a href=#h-1.1>Paragraph</a>
594        </ol>
595     </ol>
596     <!-- End of generated Table of Contents -->
598 See also: L<Using CSS for ToC formatting|"Using CSS for ToC formatting">.
600 =head3 Use generated numbers
602 Instead of using the HTML ordered list (OL), it's also possible to use the generated numbers to number to ToC nodes.  This can be done by modifying L<templateLevel|"templateLevel">:
604     use HTML::Toc;
605     use HTML::TocGenerator;
607     my $toc          = HTML::Toc->new();
608     my $tocGenerator = HTML::TocGenerator->new();
610     $toc->setOptions({
611                 'templateLevel' => '"<li>$node &nbsp;$text\n"',
612     });
613     $tocGenerator->generateFromFile($toc, 'index.htm');
614     print $toc->format();
616 For instance with the original file containing:
618     <body>
619         <h1>Chapter</h1>
620         <h2>Paragraph</h2>
621     </body>
623 The formatted ToC now will have the node numbers hard-coded:
625     <!-- Table of Contents generated by Perl - HTML::Toc -->
626     <ul>
627        <li>1 &nbsp;<a href=#h-1>Chapter</a>
628        <ul>
629           <li>1.1 &nbsp;<a href=#h-1.1>Paragraph</a>
630        </ul>
631     </ul>
632     <!-- End of generated Table of Contents -->
634 See also: L<Using CSS for ToC formatting|"Using CSS for ToC formatting">.
636 =head2 Using CSS for ToC formatting
638 Suppose you want to display a ToC with upper-alpha numbered appendix headings.  To accomplish this, you can specify a CSS style within the source document:
640     <html>
641     <head>
642        <style type="text/css">
643           ol.toc_appendix1 { list-style-type: upper-alpha }
644        </style>
645     </head>
646     <body>
647        <h1 class=appendix>Appendix</h1>
648        <h2 class=appendix>Appendix Paragraph</h2>
649        <h1 class=appendix>Appendix</h1>
650        <h2 class=appendix>Appendix Paragraph</h2>
651     </body>
652     </html>
654 Here's the code:
656     my $toc          = new HTML::Toc;
657     my $tocInsertor  = new HTML::TocInsertor;
659     $toc->setOptions({
660        'templateLevelBegin'   => '"<ol class=toc_$groupId$level>\n"',
661        'templateLevelEnd'     => '"</ol>\n"',
662        'doNumberToken'        => 1,
663        'tokenToToc' => [{
664              'groupId'        => 'appendix',
665              'tokenBegin'     => '<h1>',
666              'numberingStyle' => 'upper-alpha'
667           }, {
668              'groupId'        => 'appendix',
669              'tokenBegin'     => '<h2>',
670              'level'          => 2,
671          }]
672     });
673     $tocInsertor->insertIntoFile($toc, $filename);
675 Which whill result in the following output:
677     <html>
678     <head>
679        <style type="text/css">
680           ol.toc_appendix1 { list-style-type: upper-alpha }
681        </style>
682     </head>
683     <body>
684     <!-- Table of Contents generated by Perl - HTML::Toc -->
685     <ol class=toc_appendix1>
686        <li><a href=#appendix-A>Appendix</a>
687        <ol class=toc_appendix2>
688           <li><a href=#appendix-A.1>Appendix Paragraph</a>
689        </ol>
690        <li><a href=#appendix-B>Appendix</a>
691        <ol class=toc_appendix2>
692           <li><a href=#appendix-B.1>Appendix Paragraph</a>
693        </ol>
694     </ol>
695     <!-- End of generated Table of Contents -->
697        <a name=appendix-A><h1>A &nbsp;Appendix</h1></a>
698        <a name=appendix-A.1><h2>A.1 &nbsp;Appendix Paragraph</h2></a>
699        <a name=appendix-B><h1>B &nbsp;Appendix</h1></a>
700        <a name=appendix-B.1><h2>B.1 &nbsp;Appendix Paragraph</h2></a>
701     </body>
702     </html>
704 =head2 Creating site map
706 Suppose you want to generate a table of contents of the E<lt>titleE<gt> tags of the files in the following directory structure:
708     path               file
710     .                  index.htm, <title>Main</title>
711     |- SubDir1         index.htm, <title>Sub1</title>
712     |  |- SubSubDir1   index.htm, <title>SubSub1</title>
713     |
714     |- SubDir2         index.htm, <title>Sub2</title>
715     |  |- SubSubDir1   index.htm, <title>SubSub1</title>
716     |  |- SubSubDir2   index.htm, <title>SubSub2</title>
717     |
718     |- SubDir3         index.htm, <title>Sub3</title>
720 By specifying 'fileSpec' which determine how many slashes (/) each file may contain for a specific level:
722     use HTML::Toc;
723     use HTML::TocGenerator;
724     use File::Find;
726     my $toc          = HTML::Toc->new;
727     my $tocGenerator = HTML::TocGenerator->new;
728     my @fileList;
730     sub wanted {
731           # Add file to 'fileList' if extension matches '.htm'
732        push (@fileList, $File::Find::name) if (m/\.htm$/);
733     }
735     $toc->setOptions({
736        'doLinkToFile'       => 1,
737        'templateAnchorName' => '""',
738        'templateAnchorHref' => '"<a href=$file"."#".$groupId.$level.">"',
739        'doLinkTocToToken'   => 1,
740        'tokenToToc'         => [{
741           'groupId'         => 'dir',
742           'level'           => 1,
743           'tokenBegin'      => '<title>',
744           'tokenEnd'        => '</title>',
745           'fileSpec'        => '\./[^/]+$'
746        }, {
747           'groupId'         => 'dir',
748           'level'           => 2,
749           'tokenBegin'      => '<title>',
750           'tokenEnd'        => '</title>',
751           'fileSpec'        => '\./[^/]+?/[^/]+$'
752        }, {
753           'groupId'         => 'dir',
754           'level'           => 3,
755           'tokenBegin'      => '<title>',
756           'tokenEnd'        => '</title>',
757           'fileSpec'        => '\./[^/]+?/[^/]+?/[^/]+$'
758        }]
759     });
761        # Traverse directory structure
762     find({wanted => \&wanted, no_chdir => 1}, '.');
763        # Generate ToC of case-insensitively sorted file list
764     $tocGenerator->extendFromFile(
765        $toc, [sort {uc($a) cmp uc($b)} @fileList]
766     );
767     print $toc->format();
769 the following ToC will be generated:
771     <!-- Table of Contents generated by Perl - HTML::Toc -->
772     <ul>
773        <li><a href=./index.htm#>Main</a>
774        <ul>
775           <li><a href=./SubDir1/index.htm#>Sub1</a>
776           <ul>
777              <li><a href=./SubDir1/SubSubDir1/index.htm#>SubSub1</a>
778           </ul>
779           <li><a href=./SubDir2/index.htm#>Sub2</a>
780           <ul>
781              <li><a href=./SubDir2/SubSubDir1/index.htm#>SubSub1</a>
782              <li><a href=./SubDir2/SubSubDir2/index.htm#>SubSub2</a>
783           </ul>
784           <li><a href=./SubDir3/index.htm#>Sub3</a>
785        </ul>
786     </ul>
787     <!-- End of generated Table of Contents -->
789 =head1 Methods
791 =head2 HTML::Toc::clear()
793     syntax:  $toc->clear()
794     returns: --
796 Clear the ToC.
798 =head2 HTML::Toc::format()
800     syntax:  $scalar = $toc->format()
801     returns: Formatted ToC.
803 Format tokenized ToC.
805 =head2 HTML::TocGenerator::extend()
807     syntax:  $tocGenerator->extend($toc, $string [, $options])
808     args:    - $toc:     (reference to array of) HTML::Toc object(s) to extend
809              - $string:  string to retrieve ToC from
810              - $options: hash reference containing generator options.
812 Extend ToC from specified string.  For generator options, see L<HTML::TocGenerator Options|"HTML::TocGenerator Options">
814 =head2 HTML::TocGenerator::extendFromFile()
816     syntax:  $tocGenerator->extendFromFile($toc, $filename [, $options])
817     args:    - $toc:      (reference to array of) HTML::Toc object(s) to extend
818              - $filename: (reference to array of) file(s) to extend ToC from
819              - $options:  hash reference containing generator options.
821 Extend ToC from specified file.  For generator options, see L<HTML::TocGenerator Options|"HTML::TocGenerator Options">.  For an example, see L<Extend an existing ToC>.
823 =head2 HTML::TocGenerator::generate()
825     syntax:  $tocGenerator->generate($toc, $string [, $options])
826     args:    - $toc:     (reference to array of) HTML::Toc object(s) to generate
827              - $string:  string to retrieve ToC from
828              - $options: hash reference containing generator options.
830 Generate ToC from specified string.  Before generating, the ToC will be cleared.  For extending an existing ToC, use the L<HTML::TocGenerator::extend()|"HTML::TocGenerator::extend()"> method.  For generator options, see L<HTML::TocGenerator Options|"HTML::TocGenerator Options">.
832 =head2 HTML::TocGenerator::generateFromFile()
834     syntax:  $tocGenerator->generateFromFile($toc, $filename [, $options])
835     args:    - $toc:      (reference to array of) HTML::Toc object(s) to 
836                           generate
837              - $filename: (reference to array of) file(s) to generate ToC from
838              - $options:  hash reference containing generator options.
840 Generate ToC from specified file.  Before generating, the ToC will be cleared.  For extending an extisting ToC, use the L<HTML::TocGenerator::extendFromFile()|"HTML::TocGenerator::extendFromFile()"> method.  For generator options, see L<HTML::TocGenerator Options|"HTML::TocGenerator Options">.
842 =head2 HTML::TocInsertor::insert()
844     syntax:  $tocInsertor->insert($toc, $string [, $options])
845     args:    - $toc:     (reference to array of) HTML::Toc object(s) to insert
846              - $string:  string to insert ToC in
847              - $options: hash reference containing insertor options.
849 Insert ToC into specified string.  For insertor options, see L<HTML::TocInsertor Options|"HTML::TocInsertor Options">.
851 =head2 HTML::TocInsertor::insertIntoFile()
853     syntax:  $tocInsertor->insertIntoFile($toc, $filename [, $options])
854     args:    - $toc:      (reference to array of) HTML::Toc object(s) to insert
855              - $filename: (reference to array of) file(s) to insert ToC in
856              - $options:  hash reference containing insertor options.
858 Insert ToC into specified file.  For insertor options, see L<HTML::TocInsertor Options|"HTML::TocInsertor Options">.
860 =head2 HTML::TocUpdator::insert()
862     syntax:  $tocUpdator->insert($toc, $string [, $options])
863     args:    - $toc:     (reference to array of) HTML::Toc object(s) to insert
864              - $string:  string to insert ToC in
865              - $options: hash reference containing updator options.
867 Insert ToC into specified string.  Differs from L<HTML::TocInsertor::insert()|"HTML::TocInsertor::insert()"> in that inserted text will be surrounded with update tokens in order for C<HTML::TocUpdator> to be able to update this text the next time an update is issued.  For updator options, see L<HTML::TocUpdator Options|"HTML::TocUpdator Options">.
869 =head2 HTML::TocUpdator::insertIntoFile()
871     syntax:  $tocUpdator->insertIntoFile($toc, $filename [, $options])
872     args:    - $toc:      (reference to array of) HTML::Toc object(s) to insert
873              - $filename: (reference to array of) file(s) to insert ToC in
874              - $options:  hash reference containing updator options.
876 Insert ToC into specified file.  Differs from L<HTML::TocInsertor::insert()|"HTML::TocInsertor::insert()"> in that inserted text will be surrounded with update tokens in order for C<HTML::TocUpdator> to be able to update this text the next time an update is issued.  For updator options, see L<HTML::TocUpdator Options|"HTML::TocUpdator Options">.
878 =head2 HTML::TocUpdator::update()
880     syntax:  $tocUpdator->update($toc, $string [, $options])
881     args:    - $toc:     (reference to array of) HTML::Toc object(s) to insert
882              - $string:  string to update ToC in
883              - $options: hash reference containing updator options.
885 Update ToC within specified string.  For updator options, see L<HTML::TocUpdator Options|"HTML::TocUpdator Options">.
887 =head2 HTML::TocUpdator::updateFile()
889     syntax:  $tocUpdator->updateFile($toc, $filename [, $options])
890     args:    - $toc:      (reference to array of) HTML::Toc object(s) to insert
891              - $filename: (reference to array of) file(s) to update ToC in
892              - $options:  hash reference containing updator options.
894 Update ToC of specified file.  For updator options, see L<HTML::TocUpdator Options|"HTML::TocUpdator Options">.
896 =head1 Parser Options
898 When generating a ToC, additional options may be specified which influence the way the ToCs are generated using either C<TocGenerator>, C<TocInsertor> or C<TocUpdator>.  The options must be specified as a hash reference.  For example:
900     $tocGenerator->generateFromFile($toc, $filename, {doUseGroupsGlobal => 1});
902 Available options are:
904 =over 4
906 =item L<doGenerateToc|"doGenerateToc">
908 =item L<doUseGroupsGlobal|"doUseGroupsGlobal">
910 =item L<output|"output">
912 =item L<outputFile|"outputFile">
914 =back
916 =head2 doGenerateToc
918     syntax:         [0|1]
919     default:        1
920     applicable to:  TocInsertor, TocUpdator
922 True (1) if ToC must be generated.  False (0) if ToC must be inserted only.
924 =head2 doUseGroupsGlobal
926     syntax:         [0|1]
927     default:        0
928     applicable to:  TocGenerator, TocInsertor, TocUpdator
930 True (1) if group levels must be used globally accross ToCs.  False (0) if not.  This option only makes sense when an array of ToCs is specified.  For example, suppose you want to generate two ToCs, one ToC for '<h1>' tokens and one ToC for '<h2>' tokens, of the file 'index.htm':
932     <h1>Chapter</h1>
933     <h2>Paragraph</h2>
935 Using the default setting of 'doUseGroupsGlobal' => 0:
937     use HTML::Toc;
938     use HTML::TocGenerator;
940     my $toc1         = HTML::Toc->new();
941     my $toc2         = HTML::Toc->new();
942     my $tocGenerator = HTML::TocGenerator->new();
944     $toc1->setOptions({
945        'header'     => '',
946        'footer'     => '',
947        'tokenToToc' => [{'tokenBegin' => '<h1>'}]
948     });
949     $toc2->setOptions({
950        'header'     => '',
951        'footer'     => '',
952        'tokenToToc' => [{'tokenBegin' => '<h2>'}]
953     });
954     $tocGenerator->generateFromFile([$toc1, $toc2], 'index.htm');
955     print $toc1->format() . "\n\n" . $toc2->format();
957 the output will be:
959     <ul>
960        <li><a href=#h-1>Chapter</a>
961     </ul>
963     <ul>
964        <li><a href=#h-1>Paragraph</a>
965     </ul>
967 Each ToC will use its own numbering scheme.  Now if 'C<doUseGroupsGlobal = 1>' is specified:
969     $tocGenerator->generateFromFile(
970         [$toc1, $toc2], 'index.htm', {'doUseGroupsGlobal' => 1}
971     );
973 the output will be:
975     <ul>
976        <li><a href=#h-1>Chapter</a>
977     </ul>
979     <ul>
980        <li><a href=#h-2>Paragraph</a>
981     </ul>
983 using a global numbering scheme for all ToCs.
985 =head2 output
987     syntax:         reference to scalar
988     default:        none
989     applicable to:  TocInsertor, TocUpdator
991 Reference to scalar where the output must be stored in.
993 =head2 outputFile
995     syntax:         scalar
996     default:        none
997     applicable to:  TocInsertor, TocUpdator
999 Filename to write output to.  If no filename is specified, output will be written to standard output.
1001 =head1 HTML::Toc Options
1003 The C<HTML::Toc> options can be grouped in the following categories:
1005 =over 4
1007 =item L<Generate options|"Generate options">
1009 =item L<Insert options|"Insert options">
1011 =item L<Update options|"Update options">
1013 =item L<Format options|"Format options">
1015 =back
1017 The ToC options must be specified using the 'setOptions' method.  For example:
1019     my $toc = new HTML::Toc;
1021     $toc->setOptions({
1022        'doNumberToken' => 1,
1023        'footer'        => '<!-- End Of ToC -->'
1024        'tokenToToc'    => [{
1025           'level'          => 1,
1026           'tokenBegin'     => '<h1>',
1027           'numberingStyle' => 'lower-alpha'
1028        }]
1029     });
1031 =head2 Generate options
1033 =over 4
1035 =item Token groups
1037 =over 4
1039 =item L<tokenToToc|"tokenToToc">
1041 =over 4
1043 =item L<doNumberToken|"doNumberToken">
1045 =item L<fileSpec|"fileSpec">
1047 =item L<groupId|"groupId">
1049 =item L<level|"level">
1051 =item L<tokenBegin|"tokenBegin">
1053 =item L<tokenEnd|"tokenEnd">
1055 =item L<numberingStyle|"numberingStyle">
1057 =back
1059 =item L<groupToToc|"groupToToc">
1061 =item L<levelToToc|"levelToToc">
1063 =back
1065 =item Numbering tokens
1067 =over 4
1069 =item L<doNumberToken|"doNumberToken">
1071 =item L<numberingStyle|"numberingStyle">
1073 =item L<templateTokenNumber|"templateTokenNumber">
1075 =back
1077 =item Miscellaneous
1079 =over 4
1081 =item L<attributeToExcludeToken|"attributeToExcludeToken">
1083 =item L<attributeToTocToken|"attributeToTocToken">
1085 =item L<groupToToc|"groupToToc">
1087 =item L<levelToToc|"levelToToc">
1089 =back
1091 =item Linking ToC to tokens
1093 =over 4
1095 =item L<doLinkToToken|"doLinkToToken">
1097 =item L<doLinkToFile|"doLinkToFile">
1099 =item L<doLinkToId|"doLinkToId">
1101 =item L<templateAnchorName|"templateAnchorName">
1103 =item L<templateAnchorHrefBegin|"templateAnchorHrefBegin">
1105 =item L<templateAnchorHrefEnd|"templateAnchorHrefEnd">
1107 =item L<templateAnchorNameBegin|"templateAnchorNameBegin">
1109 =item L<templateAnchorNameEnd|"templateAnchorNameEnd">
1111 =back
1113 =back
1115 =head2 Insert options
1117 =over 4
1119 =item L<insertionPoint|"insertionPoint">
1121 =back
1123 =head2 Update options
1125 =over 4
1127 =item L<tokenUpdateBeginAnchorName|"tokenUpdateBeginAnchorName">
1129 =item L<tokenUpdateEndAnchorName|"tokenUpdateEndAnchorName">
1131 =item L<tokenUpdateBeginToc|"tokenUpdateBeginToc">
1133 =item L<tokenUpdateEndToc|"tokenUpdateEndToc">
1135 =item L<tokenUpdateBeginNumber|"tokenUpdateBeginNumber">
1137 =item L<tokenUpdateEndNumber|"tokenUpdateEndNumber">
1139 =back
1141 =head2 Format options
1143 =over 4
1145 =item L<doSingleStepLevel|"doSingleStepLevel">
1147 =item L<doNestGroup|"doNestGroup">
1149 =item L<footer|"footer">
1151 =item L<groupToToc|"groupToToc">
1153 =item L<header|"header">
1155 =item L<levelIndent|"levelIndent">
1157 =item L<levelToToc|"levelToToc">
1159 =item L<templateLevelBegin|"templateLevelBegin">
1161 =item L<templateLevelEnd|"templateLevelEnd">
1163 =back
1165 =head1 HTML::Toc Options Reference
1167 =head2 attributeToExcludeToken
1169     syntax:  $scalar
1170     default: '-'
1172 Token which marks an attribute value in a L<tokenBegin|"tokenBegin"> or L<insertionPoint|"insertionPoint"> token as an attribute value a token should not have to be marked as a ToC token.  See also: L<Using attribute value as ToC entry|"Using attribute value as ToC text">.
1174 =head2 attributeToTocToken
1176     syntax:  $scalar
1177     default: '@'
1179 Token which marks an attribute in a L<tokenBegin|"tokenBegin"> token as an attribute which must be used as ToC text.  See also: L<Using attribute value as ToC entry|"Using attribute value as ToC text">.
1181 =head2 doLinkToToken
1183     syntax:  [0|1]
1184     default: 1
1186 True (1) if ToC must be linked to tokens, False (0) if not.  Note that 'HTML::TocInsertor' must be used to do the actual insertion of the anchor name within the source data.
1188 =head2 doLinkToFile
1190     syntax:  [0|1]
1191     default: 0
1193 True (1) if ToC must be linked to file, False (0) if not.  In effect only when L<doLinkToToken|"doLinkToToken"> equals True (1) and L<templateAnchorHrefBegin|"templateAnchorHrefBegin"> isn't specified.
1195 =head2 doLinkToId
1197     syntax:  [0|1]
1198     default: 0
1200 True (1) if ToC must be linked to tokens by using token ids.  False (0) if ToC must be linked to tokens by using anchor names.
1202 =head2 doNestGroup
1204     syntax:  [0|1]
1205     default: 0
1207 True (1) if groups must be nested in the formatted ToC, False (0) if not.  In effect only when multiple groups are specified within the L<tokenToToc|"tokenToToc"> setting.  For an example, see L<Generate multiple groups in one ToC|"Generate multiple groups in one ToC">.
1209 =head2 doNumberToken
1211     syntax:  [0|1]
1212     default: 0
1214 True (1) if tokens which are used for the ToC generation must be numbered.  This option may be specified both as a global ToC option or within a L<tokenToToc|"tokenToToc"> group.  When specified within a C<tokenToToc> option, the C<doNumberToken> applies to that group only.  For an example, see L<Specify an additional 'Part' group|"Specify an additional 'Part' group">.
1216 =head2 doSingleStepLevel
1218     syntax:  [0|1]
1219     default: 1
1221 True (1) if levels of a formatted ToC must advance one level at a time.  For example, when generating a ToC of a file with a missing '<h2>':
1223     <h1>Chapter</h1>
1224     <h3>Paragraph</h3>
1226 By default, an empty indentation level will be inserted in the ToC:
1228     <!-- Table of Contents generated by Perl - HTML::Toc -->
1229     <ul>
1230        <li><a href=#h-1>Header 1</a>
1231        <ul>
1232           <ul>
1233              <li><a href=#h-1.0.1>Header 3</a>
1234           </ul>
1235        </ul>
1236     </ul>
1237     <!-- End of generated Table of Contents -->
1239 After specifying:
1241     $toc->setOptions({'doSingleStepLevel' => 0});
1243 the ToC will not have an indentation level inserted for level 2:
1245     <!-- Table of Contents generated by Perl - HTML::Toc -->
1246     <ul>
1247        <li><a href=#h-1>Header 1</a>
1248        <ul>
1249              <li><a href=#h-1.0.1>Header 3</a>
1250        </ul>
1251     </ul>
1252     <!-- End of generated Table of Contents -->
1254 =head2 fileSpec
1256     syntax:  <regexp>
1257     default: undef
1259 Specifies which files should match the current level.  Valid only if L<doLinkToFile|"doLinkToFile"> equals 1.  For an example, see L<Site map|"Site map">.
1261 =head2 footer
1263     syntax:  $scalar
1264     default: "\n<!-- End of generated Table of Contents -->\n"
1266 String to output at end of ToC.
1268 =head2 groupId
1270     syntax:  $scalar
1271     default: 'h'
1273 Sets the group id attribute of a tokenGroup.  With this attribute it's possible to divide the ToC into multiple groups.  Each group has its own numbering scheme.  For example, to generate a ToC of both normal headings and 'appendix' headings, specify the following ToC settings:
1275     $toc->setOptions({
1276        'tokenToToc' => [{
1277               'tokenBegin' => '<h1 class=-appendix>'
1278            }, {
1279               'groupId' => 'appendix',
1280               'tokenBegin' => '<h1 class=appendix>'
1281        }]
1282     });
1284 =head2 groupToToc
1286     syntax:  <regexp>
1287     default: '.*'
1289 Determines which groups to use for generating the ToC.  For example, to create a ToC for groups [a-b] only, specify:
1291     'groupToToc => '[a-b]'
1293 This option is evaluated during both ToC generation and ToC formatting.  This enables you to generate a ToC of all groups, but - after generating - format only specified groups:
1295     $toc->setOptions({'groupToToc' => '.*'});
1296     $tocGenerator->generateToc($toc, ...);
1297         # Get ToC of all groups
1298     $fullToc = $toc->format();
1299         # Get ToC of 'appendix' group only
1300     $toc->setOptions({'groupToToc' => 'appendix'});
1301     $appendixToc = $toc->format();
1303 =head2 header
1305     syntax:  $scalar
1306     default: "\n<!-- Table of Contents generated by Perl - HTML::Toc -->\n"
1308 String to output at begin of ToC.
1311 =head2 insertionPoint
1313     syntax:  [<before|after|replace>] <token>
1314     default: 'after <body>'
1315     token:   <[/]tag{ attribute=[-|@]<regexp>}> |
1316              <text regexp> |
1317              <declaration regexp> |
1318              <comment regexp>
1320 Determines the point within the source, where the ToC should be inserted.  When specifying a start tag as the insertion point token, attributes to be included may be specified as well.  Note that the attribute value must be specified as a regular expression.  For example, to specify the C<<h1 class=header>> tag as insertion point:
1322     '<h1 class=^header$>'
1324 Examples of valid 'insertionPoint' tokens are:
1326     '<h1>'
1327     '</h1>'
1328     '<!-- ToC -->'
1329     '<!ToC>'
1330     'ToC will be placed here'
1332 It is also possible to specify attributes to exclude, by prefixing the value with an L<attributeToExcludeToken|"attributeToExcludeToken">, default a minus sign (-).  For example, to specify the C<<h1>> tag as insertion point, excluding all C<<h1 class=header>> tags:
1334     '<h1 class=-^header$>'
1336 See also L<tokenBegin|"tokenBegin">.
1338 =head2 level
1340     syntax:  number
1341     default: 1
1343 Number which identifies at which level the tokengroup should be incorporated into the ToC.  See also: L<tokenToToc|"tokenToToc">.
1345 =head2 levelIndent
1347     syntax:  number
1348     default: 3
1350 Sets the number of spaces each level will be indented, when formatting the ToC.
1352 =head2 levelToToc
1354     syntax:  <regexp>
1355     default: '.*'
1357 Determines which group levels to use for generating the ToC.  For example, to create a ToC for levels 1-2 only, specify:
1359     'levelToToc => '[1-2]'
1361 This option is evaluated during both ToC generation and ToC formatting.  This enables you to generate a ToC of all levels, but - after generating - retrieve only specified levels:
1363     $toc->setOptions({'levelToToc' => '.*'});
1364     $tocGenerator->generateToc($toc, ...);
1365         # Get ToC of all levels
1366     $fullToc = $toc->getToc();
1367         # Get ToC of level 1 only
1368     $toc->setOptions({'levelToToc' => '1'});
1369     $level1Toc = $toc->getToc();
1371 =head2 numberingStyle
1373     syntax:  [decimal|lower-alpha|upper-alpha|lower-roman|upper-roman]}
1374     default: decimal
1376 Determines which numbering style to use for a token group when L<doLinkToToken|"doLinkToToken"> is set to True (1).  When specified as a main ToC option, the setting will be the default for all groups.  When specified within a tokengroup, this setting will override any default for that particular tokengroup, e.g.:
1378     $toc->setOptions({
1379        'doNumberToken' => 1,
1380        'tokenToToc' => [{
1381           'level'          => 1,
1382           'tokenBegin'     => '<h1>',
1383           'numberingStyle' => 'lower-alpha'
1384        }]
1385     });
1387 If C<roman> style is specified, be sure to have the Roman module installed, available from L<http://www.perl.com/CPAN/modules/by-module/Roman>.
1389 =head2 templateAnchorName
1391     syntax:  <expression|function reference>
1392     default: '$groupId."-".$node'
1394 Anchor name to use when L<doLinkToToken|"doLinkToToken"> is set to True (1).  The anchor name is passed to both L<templateAnchorHrefBegin|"templateAnchorHrefBegin"> and L<templateAnchorNameBegin|"templateAnchorNameBegin">.  The template may be specified as either an expression or a function reference.  The expression may contain the following variables:
1396     $file
1397     $groupId
1398     $level
1399     $node
1401 If C<templateAnchorHrefBegin> is a function reference to a function returning the anchor, like in:
1403     $toc->setOptions({'templateAnchorName' => \&assembleAnchorName});
1405 the function will be called with the following arguments:
1407     $anchorName = assembleAnchorName($file, $groupId, $level, $node);
1409 =head2 templateAnchorHrefBegin
1411     syntax:  <expression|function reference>
1412     default: '"<a href=#$anchorName>"' or
1413              '"<a href=$file#$anchorName>"',
1414              depending on 'doLinkToFile' being 0 or 1 respectively.
1416 Anchor reference begin token to use when L<doLinkToToken|"doLinkToToken"> is set to True (1).  The template may be specified as either an expression or a function reference.  The expression may contain the following variables:
1418     $file
1419     $groupId
1420     $level
1421     $node
1422     $anchorName
1424 If C<templateAnchorHrefBegin> is a function reference to a function returning the anchor, like in:
1426     $toc->setOptions({'templateAnchorHrefBegin' => \&assembleAnchorHrefBegin});
1428 the function will be called with the following arguments:
1430     $anchorHrefBegin = &assembleAnchorHrefBegin(
1431        $file, $groupId, $level, $node, $anchorName
1432     );
1434 See also: L<templateAnchorName|"templateAnchorName">, L<templateAnchorHrefEnd|"templateAnchorHrefEnd">.
1436 =head2 templateAnchorHrefEnd
1438     syntax:  <expression|function reference>
1439     default: '"</a>"'
1441 Anchor reference end token to use when L<doLinkToToken|"doLinkToToken"> is set to True (1).  The template may be specified as either an expression or a function reference.  If L<templateAnchorHrefEnd|"templateAnchorHrefEnd"> is a function reference to a function returning the anchor end, like in:
1443     $toc->setOptions({'templateAnchorHrefEnd' => \&assembleAnchorHrefEnd});
1445 the function will be called without arguments:
1447     $anchorHrefEnd = &assembleAnchorHrefEnd;
1449 See also: L<templateAnchorHrefBegin|"templateAnchorHrefBegin">.
1451 =head2 templateAnchorNameBegin
1453     syntax:  <expression|function reference>
1454     default: '"<a name=$anchorName>"'
1456 Anchor name begin token to use when L<doLinkToToken|"doLinkToToken"> is set to True (1).  The template may be specified as either an expression or a function reference.  The expression may contain the following variables:
1458     $file
1459     $groupId
1460     $level
1461     $node
1462     $anchorName
1464 If C<templateAnchorNameBegin> is a function reference to a function returning the anchor name, like in:
1466     $toc->setOptions({'templateAnchorNameBegin' => \&assembleAnchorNameBegin});
1468 the function will be called with the following arguments:
1470     $anchorNameBegin = assembleAnchorNameBegin(
1471         $file, $groupId, $level, $node, $anchorName
1472     );
1474 See also: L<templateAnchorName|"templateAnchorName">, L<templateAnchorNameEnd|"templateAnchorNameEnd">.
1476 =head2 templateAnchorNameEnd
1478     syntax:  <expression|function reference>
1479     default: '"</a>"'
1481 Anchor name end token to use when L<doLinkToToken|"doLinkToToken"> is set to True (1).  The template may be specified as either an expression or a function reference.  If L<templateAnchorNameEnd|"templateAnchorNameEnd"> is a function reference to a function returning the anchor end, like in:
1483     $toc->setOptions({'templateAnchorNameEnd' => \&assembleAnchorNameEnd});
1485 the function will be called without arguments:
1487     $anchorNameEnd = &assembleAnchorNameEnd;
1489 See also: L<templateAnchorNameBegin|"templateAnchorNameBegin">.
1491 =head2 templateLevel
1493     syntax:  <expression|function reference>
1494     default: '"<li>$text\n"'
1496 Expression to use when formatting a ToC node.  The template may be specified as either an expression or a function reference.  The expression may contain the following variables:
1498     $level
1499     $groupId
1500     $node
1501     $sequenceNr
1502     $text
1504 If C<templateLevel> is a function reference to a function returning the ToC node, like in:
1506     $toc->setOptions({'templateLevel' => \&AssembleTocNode});
1508 the function will be called with the following arguments:
1510     $tocNode = &AssembleTocNode(
1511         $level, $groupId, $node, $sequenceNr, $text
1512     );
1514 =head2 templateLevelBegin
1516     syntax:  <expression>
1517     default: '"<ul>\n"'
1519 Expression to use when formatting begin of ToC level.  See L<templateLevel|"templateLevel"> for list of available variables to use within the expression.  For example, to give each ToC level a class name to use with Cascading Style Sheets (CSS), use the expression:
1521     '"<ul class=toc_$groupId$level>\n"'
1523 which will result in each ToC group being given a class name:
1525     <ul class=toc_h1>
1526        <li>Header
1527     </ul>
1529 For an example, see L<Using CSS for ToC formatting|"Using CSS for ToC formatting">.
1531 =head2 templateLevelEnd
1533     syntax:  <expression>
1534     default: '"<ul>\n"'
1536 Expression to use when formatting end of ToC level.  See L<templateLevel|"templateLevel"> for a list of available variables to use within the expression.  The default expression is:
1538     '"</ul>\n"'
1540 For an example, see L<Using CSS for ToC formatting|"Using CSS for ToC formatting">.
1542 =head2 templateTokenNumber
1544     syntax:  <expression|function reference>
1545     default: '"$node &nbsp;"'
1547 Token number to use when L<doNumberToken|"doNumberToken"> equals True (1).  The template may be specified as either an expression or a function reference.  The expression has access to the following variables:
1549     $file
1550     $groupId
1551     $groupLevel
1552     $level
1553     $node
1554     $toc
1556 If C<templateTokenNumber> is a function reference to a function returning the token number, like in:
1558     $toc->setOptions({'templateTokenNumber' => \&assembleTokenNumber});
1560 the function will be called with the following arguments:
1562     $number = &assembleTokenNumber(
1563         $node, $groupId, $file, $groupLevel, $level, $toc
1564     );
1566 =head2 tokenBegin
1568     syntax:  <token>
1569     default: '<h1>'
1570     token:   <[/]tag{ attribute=[-|@]<regexp>}> |
1571              <text regexp> |
1572              <declaration regexp> |
1573              <comment regexp>
1575 This scalar defines the token that will trigger text to be put into the ToC.  Any start tag, end tag, comment, declaration or text string can be specified.  Examples of valid 'tokenBegin' tokens are:
1577     '<h1>'
1578     '</end>'
1579     '<!-- Start ToC entry -->'
1580     '<!Start ToC entry>'
1581     'ToC entry'
1583 When specifying a start tag, attributes to be included may be specified as well.  Note that the attribute value is used as a regular expression.  For example, to specify the C<<h1 class=header>> tag as tokenBegin:
1585     '<h1 class=^header$>'
1587 It is also possible to specify attributes to exclude, by prefixing the value with an L<attributeToExcludeToken|"attributeToExcludeToken">, default a minus sign (-).  For example, to specify the C<<h1>> tag as tokenBegin, excluding all C<<h1 class=header>> tags:
1589     '<h1 class=-^header$>'
1591 Also, you can specify here an attribute value which has to be used as ToC text, by prefixing the value with an L<attributeToTocToken|"">, default an at sign (@).  For example, to use the class value as ToC text:
1593     '<h1 class=@>'
1595 See L<Generate multiple ToCs|"Generate multiple ToCs"> for an elaborated example using the C<attributeToTocToken> to generate a ToC of image C<alt> attribute values.
1597 See also: L<tokenEnd|"tokenEnd">, L<tokenToToc|"tokenToToc">.
1599 =head2 tokenEnd
1601     syntax:  $scalar
1602     default: empty string ('') or end tag counterpart of 'tokenBegin' if 
1603              'tokenBegin' is a start tag
1605 The 'tokenEnd' definition applies to the same rules as L<tokenBegin|"tokenBegin">.
1607 See also: L<tokenBegin|"tokenBegin">, L<tokenToToc|"tokenToToc">.
1609 =head2 tokenToToc
1611     syntax:  [{array of hashrefs}]
1612     default: [{
1613                 'level'      => 1,
1614                 'tokenBegin' => '<h1>'
1615              }, {
1616                 'level'      => 2,
1617                 'tokenBegin' => '<h2>'
1618              }, {
1619                 'level'      => 3,
1620                 'tokenBegin' => '<h3>'
1621              }, {
1622                 'level'      => 4,
1623                 'tokenBegin' => '<h4>'
1624              }, {
1625                 'level'      => 5,
1626                 'tokenBegin' => '<h5>'
1627              }, {
1628                 'level'      => 6,
1629                 'tokenBegin' => '<h6>'
1630              }]
1632 This hash define the tokens that must act as ToC entries.  Each tokengroup may contain a L<groupId|"groupId">, L<level|"level">, L<numberingStyle|"numberingStyle">, L<tokenBegin|"tokenBegin"> and L<tokenEnd|"tokenEnd"> identifier.
1634 =head2 tokenUpdateBeginAnchorName
1636     syntax:  <string>
1637     default: '<!-- #BeginTocAnchorNameBegin -->';
1639 This token marks the begin of an anchor name, inserted by C<HTML::TocInsertor>.  This option is used by C<HTML::TocUpdator>.
1641 =head2 tokenUpdateEndAnchorName
1643     syntax:  <string>
1644     default: '<!-- #EndTocAnchorName -->';
1646 This option is used by C<HTML::TocUpdator>, to mark the end of an inserted anchor name.
1648 =head2 tokenUpdateBeginNumber
1650     syntax:  <string>
1651     default: '<!-- #BeginTocNumber -->';
1653 This option is used by C<HTML::TocUpdator>, to mark the begin of an inserted number.
1655 =head2 tokenUpdateEndNumber
1657     syntax:  <string>
1658     default: '<!-- #EndTocAnchorName -->';
1660 This option is used by C<HTML::TocUpdator>, to mark the end of an inserted number.
1662 =head2 tokenUpdateBeginToc
1664     syntax:  <string>
1665     default: '<!-- #BeginToc -->';
1667 This option is used by C<HTML::TocUpdator>, to mark the begin of an inserted ToC.
1669 =head2 tokenUpdateEndToc
1671     syntax:  <string>
1672     default: '<!-- #EndToc -->';
1674 This option is used by C<HTML::TocUpdator>, to mark the end of an inserted ToC.
1676 =head1 Known issues
1678 =head2 Cygwin
1680 In order for the test files to run on Cygwin without errors, the 'UNIX' default text file type has to be selected during the Cygwin setup.
1681 When extracting the tar.gz file with WinZip the 'TAR file smart CR/LF conversion' has to be turned off via {Options|Configuration...|Miscellaneous} in order for the files 'toc.pod' and './manualTest/manualTest1.htm' to be left in UNIX format.
1683 =head2 Nested anchors
1685 HTML::Toc can only link to existing anchors if these anchors are placed outside of the ToC tokens.  Otherwise a warning will be given.  For example, generating a L<linked|"doLinkToToken"> ToC of C<E<lt>h1E<gt>> tokens of the following text:
1687     <a name=foo><h1>Header</h1></a>
1689 will go all right, whereas:
1691     <h1><a name=foo>Header</a></h1>
1693 will yield the warning:
1695     warning (1): Nested anchor '<a name=foo>' within anchor '<a name=h-1>'.
1697 since anchor names aren't allowed to be nested according to the HTML 4.01 specification.
1699 =head1 AUTHOR
1701 Freddy Vulto E<lt>L<"fvu@fvu.myweb.nl">E<gt>
1703 =head1 COPYRIGHT
1705 Copyright (c) 2001 Freddy Vulto.  All rights reserved.
1707 This library is free software; you can redistribute it and/or
1708 modify it under the same terms as Perl itself.
1710 =cut