On 01/08/2015 11:17 AM, Randy Stauner wrote:
> IIRC the first "liberal" rx is to detect start of POD just like the Perl
(language) parser does, i.e. it pauses parsing for instructions until the next =cut
Oh. Can someone dig into the Perl parser and confirm this?
> I think POD parsers should do the same.
My suspicion is that, even if that’s true, the Parser ignores
everything in a __DATA__ or __END__ block.
Here is an example I worked up when writing test for metacpan:
Everything after __DATA__ is data, but the pod parser will also find pod
if it's there
https://gist.github.com/rwstauner/98f97e6cd64c972d9b71
I don't understand the parser very well, but if someone wants a crack at
it, here is the only portion of it that sets to being in pod. The
context is that the first character on the line is an "=", and tmp holds
the character that follows that "=". I think 's' points to the input
starting at tmp, so that tmp == *s:
if (PL_expect == XSTATE && isALPHA(tmp) &&
(s == PL_linestart+1 || s[-2] == '\n') )
{
if ((PL_in_eval && !PL_rsfp && !PL_parser->filtered)
|| PL_lex_state != LEX_NORMAL) {
d = PL_bufend;
while (s < d) {
if (*s++ == '\n') {
incline(s);
if (strnEQ(s,"=cut",4)) {
s = strchr(s,'\n');
if (s)
s++;
else
s = d;
incline(s);
goto retry;
}
}
}
goto retry;
}
s = PL_bufend;
PL_parser->in_pod = 1;
goto retry;
}