Hello Pod People,

A simple (yet lengthy) question on verbatim paragraphs that immediately
follow an =item command, and how Pod::Simple treats them:

Given the following POD,

=over

=item *

    verbatim code snippet

=back

Should the =item be considered empty, followed by a verbatim paragraph, or
should the =item's contents include the verbatim paragraph?

I think the general understanding is that the content of an =item extends
until the next =item command. (I found nothing in perlpodspec stating this,
but I have always known it to be this way.) This supports the latter
interpretation.

What brought this technicality to my attention is that Pod::Simple
interprets it as the former (emphasis added):

$ perl -MPod::Simple::DumpAsText -E'exit
> Pod::Simple::DumpAsText->filter(shift)->any_errata_seen' test_verb.pod
> ++Document
>    \ "start_line" => "1"
>   ++over-bullet
>      \ "indent" => "4"
>      \ "start_line" => "1"
> *    ++item-bullet
>        \ "start_line" => "3"
>     --item-bullet
>     ++VerbatimFormatted
>        \ "xml:space" => "preserve"
>        \ "start_line" => "5"
>       * "    verbatim code snippet"
>     --VerbatimFormatted*
>   --over-bullet
> --Document
>

It can be seen that the item-bullet was empty, followed by a verbatim
paragraph. Contrast that with a *non-verbatim* paragraph immediately
following an =item command (emphasis added):

$ perl -MPod::Simple::DumpAsText -E'exit
> Pod::Simple::DumpAsText->filter(shift)->any_errata_seen' test_verb.pod
> ++Document
>    \ "start_line" => "1"
>   ++over-bullet
>      \ "indent" => "4"
>      \ "start_line" => "1"
> *    ++item-bullet
>        \ "start_line" => "3"
>       * "a non-verbatim paragraph"
>     --item-bullet*
>   --over-bullet
> --Document
>

Note that the "a non-verbatim paragraph" text is present within the
item-bullet, unlike the previous example.

The Pod::Simple::Subclassing documentation states:

> When an "=over ... =back" block is parsed where the items are a bulleted
> list, it will produce this event structure:
>
>   <over-bullet indent="4" start_line="543">
>     <item-bullet start_line="545">
>       ...Stuff...
>     </item-bullet>
>     ...more item-bullets...
>   </over-bullet fake-closer="1">
>
> Note that it states there should only be item-bullet events, and nothing
else in between, before, or after.

This is a contradiction, and I am not sure which should be correct: the
code or the docs.

Experimenting more, it looks like Pod::Simple only considers the *first*
normal paragraph as the item's contents, with following paragraphs
remaining outside the item-bullet event (emphasis added):

$ perl -MPod::Simple::DumpAsText -E'exit
> Pod::Simple::DumpAsText->filter(shift)->any_errata_seen' test_verb.pod
> ++Document
>    \ "start_line" => "1"
>   ++over-bullet
>      \ "indent" => "4"
>      \ "start_line" => "1"
> *    ++item-bullet
>        \ "start_line" => "3"
>       * "first paragraph"
>     --item-bullet
>     ++Para
>        \ "start_line" => "7"
>       * "second paragraph"
>     --Para*
>   --over-bullet
> --Document
>


Thoughts on this behavior? I feel that the content's of an =item should be
contained within that =item's item-bullet event, instead of partially in,
partially out.

Thank you,
Marc

Reply via email to