NAME
XML::Grammar::Fiction::FromProto::Parser::LineIterator - line iterator base class for the parser.
For internal use only.
VERSION
Version 0.1.4
SYNOPSIS
TODO: write one.
DESCRIPTION
This is a line iterator that is useful to handle text (e.g: out of a file) and process it incrementally.
METHODS
$self->setup_text($multi_line_text)
Use $multi_line_text as the text to process, populate the lines array with it and reset the other variables.
$line_ref = $self->curr_line_ref()
Returns a reference to the current line (a string).
For example:
my $l_ref = $self->curr_line_ref();
if ($$l_ref !~ m{\G<tag>}g)
{
die "Could not match tag.";
}
my $pos = $self->curr_pos()
Returns the current position (using pos($$l)) of the current line.
my ($line_ref, $pos) = $self->curr_line_and_pos();
Convenience method to return the line reference and the position.
For example:
# Check for a tag.
my ($l_ref, $p) = $self->curr_line_and_pos();
my $is_tag_cond = ($$l_ref =~ m{\G<}cg);
my $is_close = $is_tag_cond && ($$l_ref =~ m{\G/}cg);
pos($$l) = $p;
return ($is_tag_cond, $is_close);
my $line_copy_ref = $self->curr_line_copy()
Returns a reference to a copy of the current line that is allowed to be tempered with (by assigning to pos() or in a different way.). The line is returned as a reference so to avoid destroying its pos() value.
For example:
sub _look_ahead_for_tag
{
my $self = shift;
my $l = $self->curr_line_copy();
my $is_tag_cond = ($$l =~ m{\G<}cg);
my $is_close = $is_tag_cond && ($$l =~ m{\G/}cg);
return ($is_tag_cond, $is_close);
}
my $line_ref = $self->next_line_ref()
Advance the line pointer and return the next line.
$self->skip_space()
Skip whitespace (spaces and tabs) from the current position onwards.
$self->skip_multiline_space()
Skip multiline space.
$self->curr_line_continues_with($regex)
Matches the current line with $regex starting from the current position and returns the result. The position remains at the original position if the regular expression does not match (using qr//cg
).
my $line_number = $self->line_idx()
Returns the line index as an integer. It starts from 0 for the first line (like in Perl lines.)
my $line_number = $self->line_num()
Returns the line number as an integer. It starts from 1 for the first line (like in file lines.)
$self->consume($regex)
Consume as much text as $regex matches.
$self->consume_up_to($regex)
Consume up to the point where $regex matches.
$self->throw_text_error($exception_class, $text)
Throws the Error class $exception_class with the text $text (and the current line number.
$self->meta()
Leftover from Moose.
AUTHOR
Shlomi Fish, http://www.shlomifish.org/.
BUGS
Please report any bugs or feature requests to bug-xml-grammar-fiction at rt.cpan.org
, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=XML-Grammar-Fiction. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
ACKNOWLEDGEMENTS
COPYRIGHT & LICENSE
Copyright 2007 Shlomi Fish, all rights reserved.
This program is released under the following license: MIT X11.