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.