1Pod::Simple::SubclassingP(e3rplm)Programmers ReferencePGoudi:d:eSimple::Subclassing(3pm)
2
3
4

NAME

6       Pod::Simple::Subclassing -- write a formatter as a Pod::Simple subclass
7

SYNOPSIS

9         package Pod::SomeFormatter;
10         use Pod::Simple;
11         @ISA = qw(Pod::Simple);
12         $VERSION = '1.01';
13         use strict;
14
15         sub _handle_element_start {
16           my($parser, $element_name, $attr_hash_r) = @_;
17           ...
18         }
19
20         sub _handle_element_end {
21           my($parser, $element_name) = @_;
22           ...
23         }
24
25         sub _handle_text {
26           my($parser, $text) = @_;
27           ...
28         }
29         1;
30

DESCRIPTION

32       This document is about using Pod::Simple to write a Pod processor,
33       generally a Pod formatter. If you just want to know about using an
34       existing Pod formatter, instead see its documentation and see also the
35       docs in Pod::Simple.
36
37       The zeroeth step in writing a Pod formatter is to make sure that there
38       isn't already a decent one in CPAN. See <http://search.cpan.org/>, and
39       run a search on the name of the format you want to render to. Also
40       consider joining the Pod People list
41       <http://lists.perl.org/showlist.cgi?name=pod-people> and asking whether
42       anyone has a formatter for that format -- maybe someone cobbled one
43       together but just hasn't released it.
44
45       The first step in writing a Pod processor is to read perlpodspec, which
46       contains notes information on writing a Pod parser (which has been
47       largely taken care of by Pod::Simple), but also a lot of requirements
48       and recommendations for writing a formatter.
49
50       The second step is to actually learn the format you're planning to
51       format to -- or at least as much as you need to know to represent Pod,
52       which probably isn't much.
53
54       The third step is to pick which of Pod::Simple's interfaces you want to
55       use -- the basic interface via Pod::Simple or Pod::Simple::Methody is
56       event-based, sort of like HTML::Parser's interface, or sort of like
57       XML::Parser's "Handlers" interface), but Pod::Simple::PullParser
58       provides a token-stream interface, sort of like HTML::TokeParser's
59       interface; Pod::Simple::SimpleTree provides a simple tree interface,
60       rather like XML::Parser's "Tree" interface. Users familiar with XML-
61       handling will find one of these styles relatively familiar; but if you
62       would be even more at home with XML, there are classes that produce an
63       XML representation of the Pod stream, notably
64       Pod::Simple::XMLOutStream; you can feed the output of such a class to
65       whatever XML parsing system you are most at home with.
66
67       The last step is to write your code based on how the events (or tokens,
68       or tree-nodes, or the XML, or however you're parsing) will map to
69       constructs in the output format. Also sure to consider how to escape
70       text nodes containing arbitrary text, and also what to do with text
71       nodes that represent preformatted text (from verbatim sections).
72

Events

74       TODO intro... mention that events are supplied for implicits, like for
75       missing >'s
76
77       In the following section, we use XML to represent the event structure
78       associated with a particular construct.  That is, TODO
79
80       "$parser->_handle_element_start( I<element_name>, I<attr_hashref> )"
81       "$parser->_handle_element_end( I<element_name>  )"
82       "$parser->_handle_text(  I<text_string>  )"
83
84       TODO describe
85
86       events with an element_name of Document
87           Parsing a document produces this event structure:
88
89             <Document start_line="543">
90               ...all events...
91             </Document>
92
93           The value of the start_line attribute will be the line number of
94           the first Pod directive in the document.
95
96           If there is no Pod in the given document, then the event structure
97           will be this:
98
99             <Document contentless="1" start_line="543">
100             </Document>
101
102           In that case, the value of the start_line attribute will not be
103           meaningful; under current implementations, it will probably be the
104           line number of the last line in the file.
105
106       events with an element_name of Para
107           Parsing a plain (non-verbatim, non-directive, non-data) paragraph
108           in a Pod document produces this event structure:
109
110               <Para start_line="543">
111                 ...all events in this paragraph...
112               </Para>
113
114           The value of the start_line attribute will be the line number of
115           the start of the paragraph.
116
117           For example, parsing this paragraph of Pod:
118
119             The value of the I<start_line> attribute will be the
120             line number of the start of the paragraph.
121
122           produces this event structure:
123
124               <Para start_line="129">
125                 The value of the
126                 <I>
127                   start_line
128                 </I>
129                  attribute will be the line number of the first Pod directive
130                 in the document.
131               </Para>
132
133       events with an element_name of B, C, F, or I.
134           Parsing a B<...> formatting code (or of course any of its
135           semantically identical syntactic variants B<< ... >>, or
136           B<<<< ... >>>>, etc.)  produces this event structure:
137
138                 <B>
139                   ...stuff...
140                 </B>
141
142           Currently, there are no attributes conveyed.
143
144           Parsing C, F, or I codes produce the same structure, with only a
145           different element name.
146
147           If your parser object has been set to accept other formatting
148           codes, then they will be presented like these B/C/F/I codes --
149           i.e., without any attributes.
150
151       events with an element_name of S
152           Normally, parsing an S<...> sequence produces this event structure,
153           just as if it were a B/C/F/I code:
154
155                 <S>
156                   ...stuff...
157                 </S>
158
159           However, Pod::Simple (and presumably all derived parsers) offers
160           the "nbsp_for_S" option which, if enabled, will suppress all S
161           events, and instead change all spaces in the content to non-
162           breaking spaces. This is intended for formatters that output to a
163           format that has no code that means the same as S<...>, but which
164           has a code/character that means non-breaking space.
165
166       events with an element_name of X
167           Normally, parsing an X<...> sequence produces this event structure,
168           just as if it were a B/C/F/I code:
169
170                 <X>
171                   ...stuff...
172                 </X>
173
174           However, Pod::Simple (and presumably all derived parsers) offers
175           the "nix_X_codes" option which, if enabled, will suppress all X
176           events and ignore their content.  For formatters/processors that
177           don't use X events, this is presumably quite useful.
178
179       events with an element_name of L
180           Because the L<...> is the most complex construct in the language,
181           it should not surprise you that the events it generates are the
182           most complex in the language. Most of complexity is hidden away in
183           the attribute values, so for those of you writing a Pod formatter
184           that produces a non-hypertextual format, you can just ignore the
185           attributes and treat an L event structure like a formatting element
186           that (presumably) doesn't actually produce a change in formatting.
187           That is, the content of the L event structure (as opposed to its
188           attributes) is always what text should be displayed.
189
190           There are, at first glance, three kinds of L links: URL, man, and
191           pod.
192
193           When a L<some_url> code is parsed, it produces this event
194           structure:
195
196             <L content-implicit="yes" to="that_url" type="url">
197               that_url
198             </L>
199
200           The "type="url"" attribute is always specified for this type of L
201           code.
202
203           For example, this Pod source:
204
205             L<http://www.perl.com/CPAN/authors/>
206
207           produces this event structure:
208
209             <L content-implicit="yes" to="http://www.perl.com/CPAN/authors/" type="url">
210               http://www.perl.com/CPAN/authors/
211             </L>
212
213           When a L<manpage(section)> code is parsed (and these are fairly
214           rare and not terribly useful), it produces this event structure:
215
216             <L content-implicit="yes" to="manpage(section)" type="man">
217               manpage(section)
218             </L>
219
220           The "type="man"" attribute is always specified for this type of L
221           code.
222
223           For example, this Pod source:
224
225             L<crontab(5)>
226
227           produces this event structure:
228
229             <L content-implicit="yes" to="crontab(5)" type="man">
230               crontab(5)
231             </L>
232
233           In the rare cases where a man page link has a specified, that text
234           appears in a section attribute. For example, this Pod source:
235
236             L<crontab(5)/"ENVIRONMENT">
237
238           will produce this event structure:
239
240             <L content-implicit="yes" section="ENVIRONMENT" to="crontab(5)" type="man">
241               "ENVIRONMENT" in crontab(5)
242             </L>
243
244           In the rare case where the Pod document has code like
245           L<sometext|manpage(section)>, then the sometext will appear as the
246           content of the element, the manpage(section) text will appear only
247           as the value of the to attribute, and there will be no
248           "content-implicit="yes"" attribute (whose presence means that the
249           Pod parser had to infer what text should appear as the link text --
250           as opposed to cases where that attribute is absent, which means
251           that the Pod parser did not have to infer the link text, because
252           that L code explicitly specified some link text.)
253
254           For example, this Pod source:
255
256             L<hell itself!|crontab(5)>
257
258           will produce this event structure:
259
260             <L to="crontab(5)" type="man">
261               hell itself!
262             </L>
263
264           The last type of L structure is for links to/within Pod documents.
265           It is the most complex because it can have a to attribute, or a
266           section attribute, or both. The "type="pod"" attribute is always
267           specified for this type of L code.
268
269           In the most common case, the simple case of a L<podpage> code
270           produces this event structure:
271
272             <L content-implicit="yes" to="Net::Ping" type="pod">
273               podpage
274             </L>
275
276           For example, this Pod source:
277
278             L<Net::Ping>
279
280           produces this event structure:
281
282             <L content-implicit="yes" to="Net::Ping" type="pod">
283               Net::Ping
284             </L>
285
286           In cases where there is link-text explicitly specified, it is to be
287           found in the content of the element (and not the attributes), just
288           as with the L<sometext|manpage(section)> case discussed above.  For
289           example, this Pod source:
290
291             L<Perl Error Messages|perldiag>
292
293           produces this event structure:
294
295             <L to="perldiag" type="pod">
296               Perl Error Messages
297             </L>
298
299           In cases of links to a section in the current Pod document, there
300           is a section attribute instead of a to attribute.  For example,
301           this Pod source:
302
303             L</"Member Data">
304
305           produces this event structure:
306
307             <L content-implicit="yes" section="Member Data" type="pod">
308               "Member Data"
309             </L>
310
311           As another example, this Pod source:
312
313             L<the various attributes|/"Member Data">
314
315           produces this event structure:
316
317             <L section="Member Data" type="pod">
318               the various attributes
319             </L>
320
321           In cases of links to a section in a different Pod document, there
322           are both a section attribute and a to attribute.  For example, this
323           Pod source:
324
325             L<perlsyn/"Basic BLOCKs and Switch Statements">
326
327           produces this event structure:
328
329             <L content-implicit="yes" section="Basic BLOCKs and Switch Statements" to="perlsyn" type="pod">
330               "Basic BLOCKs and Switch Statements" in perlsyn
331             </L>
332
333           As another example, this Pod source:
334
335             L<SWITCH statements|perlsyn/"Basic BLOCKs and Switch Statements">
336
337           produces this event structure:
338
339             <L section="Basic BLOCKs and Switch Statements" to="perlsyn" type="pod">
340               SWITCH statements
341             </L>
342
343           Incidentally, note that we do not distinguish between these
344           syntaxes:
345
346             L</"Member Data">
347             L<"Member Data">
348             L</Member Data>
349             L<Member Data>    [deprecated syntax]
350
351           That is, they all produce the same event structure, namely:
352
353             <L content-implicit="yes" section="Member Data" type="pod">
354               &#34;Member Data&#34;
355             </L>
356
357       events with an element_name of E or Z
358           While there are Pod codes E<...> and Z<>, these do not produce any
359           E or Z events -- that is, there are no such events as E or Z.
360
361       events with an element_name of Verbatim
362           When a Pod verbatim paragraph (AKA "codeblock") is parsed, it
363           produces this event structure:
364
365             <Verbatim start_line="543" xml:space="preserve">
366               ...text...
367             </Verbatim>
368
369           The value of the start_line attribute will be the line number of
370           the first line of this verbatim block.  The xml:space attribute is
371           always present, and always has the value "preserve".
372
373           The text content will have tabs already expanded.
374
375       events with an element_name of head1 .. head4
376           When a "=head1 ..." directive is parsed, it produces this event
377           structure:
378
379             <head1>
380               ...stuff...
381             </head1>
382
383           For example, a directive consisting of this:
384
385             =head1 Options to C<new> et al.
386
387           will produce this event structure:
388
389             <head1 start_line="543">
390               Options to
391               <C>
392                 new
393               </C>
394                et al.
395             </head1>
396
397           "=head2" thru "=head4" directives are the same, except for the
398           element names in the event structure.
399
400       events with an element_name of over-bullet
401           When an "=over ... =back" block is parsed where the items are a
402           bulletted list, it will produce this event structure:
403
404             <over-bullet indent="4" start_line="543">
405               <item-bullet start_line="545">
406                 ...Stuff...
407               </item-bullet>
408               ...more item-bullets...
409             </over-bullet>
410
411           The value of the indent attribute is whatever value is after the
412           "=over" directive, as in "=over 8".  If no such value is specified
413           in the directive, then the indent attribute has the value "4".
414
415           For example, this Pod source:
416
417             =over
418
419             =item *
420
421             Stuff
422
423             =item *
424
425             Bar I<baz>!
426
427             =back
428
429           produces this event structure:
430
431             <over-bullet indent="4" start_line="10">
432               <item-bullet start_line="12">
433                 Stuff
434               </item-bullet>
435               <item-bullet start_line="14">
436                 Bar <I>baz</I>!
437               </item-bullet>
438             </over-bullet>
439
440       events with an element_name of over-number
441           When an "=over ... =back" block is parsed where the items are a
442           numbered list, it will produce this event structure:
443
444             <over-number indent="4" start_line="543">
445               <item-number number="1" start_line="545">
446                 ...Stuff...
447               </item-number>
448               ...more item-number...
449             </over-bullet>
450
451           This is like the "over-bullet" event structure; but note that the
452           contents are "item-number" instead of "item-bullet", and note that
453           they will have a "number" attribute, which some
454           formatters/processors may ignore (since, for example, there's no
455           need for it in HTML when producing an "<UL><LI>...</LI>...</UL>"
456           structure), but which any processor may use.
457
458           Note that the values for the number attributes of "item-number"
459           elements in a given "over-number" area will start at 1 and go up by
460           one each time.  If the Pod source doesn't follow that order (even
461           though it really should should!), whatever numbers it has will be
462           ignored (with the correct values being put in the number
463           attributes), and an error message might be issued to the user.
464
465       events with an element_name of over-text
466           These events are are somewhat unlike the other over-* structures,
467           as far as what their contents are.  When an "=over ... =back" block
468           is parsed where the items are a list of text "subheadings", it will
469           produce this event structure:
470
471             <over-text indent="4" start_line="543">
472               <item-text>
473                 ...stuff...
474               </item-text>
475               ...stuff (generally Para or Verbatim elements)...
476               <item-text>
477               ...more item-text and/or stuff...
478             </over-text>
479
480           The indent attribute is as with the other over-* events.
481
482           For example, this Pod source:
483
484             =over
485
486             =item Foo
487
488             Stuff
489
490             =item Bar I<baz>!
491
492             Quux
493
494             =back
495
496           produces this event structure:
497
498             <over-text indent="4" start_line="20">
499               <item-text start_line="22">
500                 Foo
501               </item-text>
502               <Para start_line="24">
503                 Stuff
504               </Para>
505               <item-text start_line="26">
506                 Bar
507                   <I>
508                     baz
509                   </I>
510                 !
511               </item-text>
512               <Para start_line="28">
513                 Quux
514               </Para>
515             </over-text>
516
517       events with an element_name of over-block
518           These events are are somewhat unlike the other over-* structures,
519           as far as what their contents are.  When an "=over ... =back" block
520           is parsed where there are no items, it will produce this event
521           structure:
522
523             <over-block indent="4" start_line="543">
524               ...stuff (generally Para or Verbatim elements)...
525             </over-block>
526
527           The indent attribute is as with the other over-* events.
528
529           For example, this Pod source:
530
531             =over
532
533             For cutting off our trade with all parts of the world
534
535             For transporting us beyond seas to be tried for pretended offenses
536
537             He is at this time transporting large armies of foreign mercenaries to
538             complete the works of death, desolation and tyranny, already begun with
539             circumstances of cruelty and perfidy scarcely paralleled in the most
540             barbarous ages, and totally unworthy the head of a civilized nation.
541
542             =cut
543
544           will produce this event structure:
545
546             <over-block indent="4" start_line="2">
547               <Para start_line="4">
548                 For cutting off our trade with all parts of the world
549               </Para>
550               <Para start_line="6">
551                 For transporting us beyond seas to be tried for pretended offenses
552               </Para>
553               <Para start_line="8">
554                 He is at this time transporting large armies of [...more text...]
555               </Para>
556             </over-block>
557
558       events with an element_name of item-bullet
559           See "events with an element_name of over-bullet", above.
560
561       events with an element_name of item-number
562           See "events with an element_name of over-number", above.
563
564       events with an element_name of item-text
565           See "events with an element_name of over-text", above.
566
567       events with an element_name of for
568           TODO...
569
570       events with an element_name of Data
571           TODO...
572

More Pod::Simple Methods

574       Pod::Simple provides a lot of methods that aren't generally interesting
575       to the end user of an existing Pod formatter, but some of which you
576       might find useful in writing a Pod formatter. They are listed below.
577       The first several methods (the accept_* methods) are for declaring the
578       capabilites of your parser, notably what "=for targetname" sections
579       it's interested in, what extra N<...> codes it accepts beyond the ones
580       described in the perlpod.
581
582       "$parser->accept_targets( I<SOMEVALUE> )"
583           As the parser sees sections like:
584
585               =for html  <img src="fig1.jpg">
586
587           or
588
589               =begin html
590
591                 <img src="fig1.jpg">
592
593               =end html
594
595           ...the parser will ignore these sections unless your subclass has
596           specified that it wants to see sections targetted to "html" (or
597           whatever the formatter name is).
598
599           If you want to process all sections, even if they're not targetted
600           for you, call this before you start parsing:
601
602             $parser->accept_targets('*');
603
604       "$parser->accept_targets_as_text(  I<SOMEVALUE>  )"
605           This is like accept_targets, except that it specifies also that the
606           content of sections for this target should be treated as Pod text
607           even if the target name in "=for targetname" doesn't start with a
608           ":".
609
610           At time of writing, I don't think you'll need to use this.
611
612       "$parser->accept_codes( I<Codename>, I<Codename>...  )"
613           This tells the parser that you accept additional formatting codes,
614           beyond just the standard ones (I B C L F S X, plus the two weird
615           ones you don't actually see in the parse tree, Z and E). For
616           example, to also accept codes "N", "R", and "W":
617
618               $parser->accept_codes( qw( N R W ) );
619
620           TODO: document how this interacts with =extend, and long element
621           names
622
623       "$parser->accept_directive_as_data( I<directive_name> )"
624       "$parser->accept_directive_as_verbatim( I<directive_name> )"
625       "$parser->accept_directive_as_processed( I<directive_name> )"
626           In the unlikely situation that you need to tell the parser that you
627           will accept additional directives ("=foo" things), you need to
628           first set the parset to treat its content as data (i.e., not really
629           processed at all), or as verbatim (mostly just expanding tabs), or
630           as processed text (parsing formatting codes like B<...>).
631
632           For example, to accept a new directive "=method", you'd presumably
633           use:
634
635               $parser->accept_directive_as_processed("method");
636
637           so that you could have Pod lines like:
638
639               =method I<$whatever> thing B<um>
640
641           Making up your own directives breaks compatibility with other Pod
642           formatters, in a way that using "=for target ..." lines doesn't;
643           however, you may find this useful if you're making a Pod superset
644           format where you don't need to worry about compatibility.
645
646       "$parser->nbsp_for_S( I<BOOLEAN> );"
647           Setting this attribute to a true value (and by default it is false)
648           will turn "S<...>" sequences into sequences of words separated by
649           "\xA0" (non-breaking space) characters. For example, it will take
650           this:
651
652               I like S<Dutch apple pie>, don't you?
653
654           and treat it as if it were:
655
656               I like DutchE<nbsp>appleE<nbsp>pie, don't you?
657
658           This is handy for output formats that don't have anything quite
659           like an "S<...>" code, but which do have a code for non-breaking
660           space.
661
662           There is currently no method for going the other way; but I can
663           probably provide one upon request.
664
665       "$parser->version_report()"
666           This returns a string reporting the $VERSION value from your module
667           (and its classname) as well as the $VERSION value of Pod::Simple.
668           Note that perlpodspec requires output formats (wherever possible)
669           to note this detail in a comment in the output format.  For
670           example, for some kind of SGML output format:
671
672               print OUT "<!-- \n", $parser->version_report, "\n -->";
673
674       "$parser->pod_para_count()"
675           This returns the count of Pod paragraphs seen so far.
676
677       "$parser->line_count()"
678           This is the current line number being parsed. But you might find
679           the "line_number" event attribute more accurate, when it is
680           present.
681
682       "$parser->nix_X_codes(  I<SOMEVALUE>  )"
683           This attribute, when set to a true value (and it is false by
684           default) ignores any "X<...>" sequences in the document being
685           parsed.  Many formats don't actually use the content of these
686           codes, so have no reason to process them.
687
688       "$parser->merge_text(  I<SOMEVALUE>  )"
689           This attribute, when set to a true value (and it is false by
690           default) makes sure that only one event (or token, or node) will be
691           created for any single contiguous sequence of text.  For example,
692           consider this somewhat contrived example:
693
694               I just LOVE Z<>hotE<32>apple pie!
695
696           When that is parsed and events are about to be called on it, it may
697           actually seem to be four different text events, one right after
698           another: one event for "I just LOVE ", one for "hot", one for " ",
699           and one for "apple pie!". But if you have merge_text on, then
700           you're guaranteed that it will be fired as one text event:  "I just
701           LOVE hot apple pie!".
702
703       "$parser->code_handler(  I<CODE_REF>  )"
704           This specifies code that should be called when a code line is seen
705           (i.e., a line outside of the Pod).  Normally this is undef, meaning
706           that no code should be called.  If you provide a routine, it should
707           start out like this:
708
709               sub get_code_line {  # or whatever you'll call it
710                 my($line, $line_number, $parser) = @_;
711                 ...
712               }
713
714           Note, however, that sometimes the Pod events aren't processed in
715           exactly the same order as the code lines are -- i.e., if you have a
716           file with Pod, then code, then more Pod, sometimes the code will be
717           processed (via whatever you have code_handler call) before the all
718           of the preceding Pod has been processed.
719
720       "$parser->cut_handler(  I<CODE_REF>  )"
721           This is just like the code_handler attribute, except that it's for
722           "=cut" lines, not code lines. The same caveats apply. "=cut" lines
723           are unlikely to be interesting, but this is included for
724           completeness.
725
726       "$parser->whine( I<linenumber>, I<complaint string> )"
727           This notes a problem in the Pod, which will be reported to in the
728           "Pod Errors" section of the document and/or send to STDERR,
729           depending on the values of the attributes "no_whining",
730           "no_errata_section", and "complain_stderr".
731
732       "$parser->scream( I<linenumber>, I<complaint string> )"
733           This notes an error like "whine" does, except that it is not
734           suppressable with "no_whining". This should be used only for very
735           serious errors.
736
737       "$parser->source_dead(1)"
738           This aborts parsing of the current document, by switching on the
739           flag that indicates that EOF has been seen.  In particularly
740           drastic cases, you might want to do this.  It's rather nicer than
741           just calling "die"!
742
743       "$parser->hide_line_numbers( I<SOMEVALUE> )"
744           Some subclasses that indescriminately dump event attributes (well,
745           except for ones beginning with "~") can use this object attribute
746           for refraining to dump the "start_line" attribute.
747
748       "$parser->no_whining( I<SOMEVALUE> )"
749           This attribute, if set to true, will suppress reports of non-fatal
750           error messages.  The default value is false, meaning that
751           complaints are reported.  How they get reported depends on the
752           values of the attributes "no_errata_section" and "complain_stderr".
753
754       "$parser->no_errata_section( I<SOMEVALUE> )"
755           This attribute, if set to true, will suppress generation of an
756           errata section.  The default value is false -- i.e., an errata
757           section will be generated.
758
759       "$parser->complain_stderr( I<SOMEVALUE> )"
760           This attribute, if set to true will send complaints to STDERR.  The
761           default value is false -- i.e., complaints do not go to STDERR.
762
763       "$parser->bare_output( I<SOMEVALUE> )"
764           Some formatter subclasses use this as a flag for whether output
765           should have prologue and epilogue code omitted. For example,
766           setting this to true for an HTML formatter class should omit the
767           "<html><head><title>...</title><body>..." prologue and the
768           "</body></html>" epilogue.
769
770           If you want to set this to true, you should probably also set
771           "no_whining" or at least "no_errata_section" to true.
772
773       "$parser->preserve_whitespace( I<SOMEVALUE> )"
774           If you set this attribute to a true value, the parser will try to
775           preserve whitespace in the output.  This means that such formatting
776           conventions as two spaces after periods will be preserved by the
777           parser.  This is primarily useful for output formats that treat
778           whitespace as significant (such as text or *roff, but not HTML).
779

SEE ALSO

781       Pod::Simple -- event-based Pod-parsing framework
782
783       Pod::Simple::Methody -- like Pod::Simple, but each sort of event calls
784       its own method (like "start_head3")
785
786       Pod::Simple::PullParser -- a Pod-parsing framework like Pod::Simple,
787       but with a token-stream interface
788
789       Pod::Simple::SimpleTree -- a Pod-parsing framework like Pod::Simple,
790       but with a tree interface
791
792       Pod::Simple::Checker -- a simple Pod::Simple subclass that reads
793       documents, and then makes a plaintext report of any errors found in the
794       document
795
796       Pod::Simple::DumpAsXML -- for dumping Pod documents as tidily indented
797       XML, showing each event on its own line
798
799       Pod::Simple::XMLOutStream -- dumps a Pod document as XML (without
800       introducing extra whitespace as Pod::Simple::DumpAsXML does).
801
802       Pod::Simple::DumpAsText -- for dumping Pod documents as tidily indented
803       text, showing each event on its own line
804
805       Pod::Simple::LinkSection -- class for objects representing the values
806       of the TODO and TODO attributes of L<...> elements
807
808       Pod::Escapes -- the module the Pod::Simple uses for evaluating E<...>
809       content
810
811       Pod::Simple::Text -- a simple plaintext formatter for Pod
812
813       Pod::Simple::TextContent -- like Pod::Simple::Text, but makes no effort
814       for indent or wrap the text being formatted
815
816       perlpod
817
818       perlpodspec
819
820       perldoc
821

SUPPORT

823       Questions or discussion about POD and Pod::Simple should be sent to the
824       pod-people@perl.org mail list. Send an empty email to
825       pod-people-subscribe@perl.org to subscribe.
826
827       This module is managed in an open GitHub repository,
828       <http://github.com/theory/pod-simple/>. Feel free to fork and
829       contribute, or to clone <git://github.com/theory/pod-simple.git> and
830       send patches!
831
832       Patches against Pod::Simple are welcome. Please send bug reports to
833       <bug-pod-simple@rt.cpan.org>.
834
836       Copyright (c) 2002 Sean M. Burke.
837
838       This library is free software; you can redistribute it and/or modify it
839       under the same terms as Perl itself.
840
841       This program is distributed in the hope that it will be useful, but
842       without any warranty; without even the implied warranty of
843       merchantability or fitness for a particular purpose.
844

AUTHOR

846       Pod::Simple was created by Sean M. Burke <sburke@cpan.org>.  But don't
847       bother him, he's retired.
848
849       Pod::Simple is maintained by:
850
851       ·   Allison Randal "allison@perl.org"
852
853       ·   Hans Dieter Pearcey "hdp@cpan.org"
854
855       ·   David E. Wheeler "dwheeler@cpan.org"
856
857
858
859perl v5.10.1                      2017-03-22     Pod::Simple::Subclassing(3pm)
Impressum