Shlomi Fish > XML-Grammar-Fiction > XML::Grammar::FictionBase::FromProto::Parser::LineIterator



Annotate this POD


Open  1
View/Report Bugs
Module Version: v0.14.8   Source  


XML::Grammar::FictionBase::FromProto::Parser::LineIterator - line iterator base class for the parser.

For internal use only.


version 0.14.8


TODO: write one.


This is a line iterator that is useful to handle text (e.g: out of a file) and process it incrementally.


Version 0.14.8



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.


Returns if at start of line (curr_pos == 0).

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.


Skip whitespace (spaces and tabs) from the current position onwards.


Skip multiline space.


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.)


Consume as much text as $regex matches.


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.


Returns if the parser reached the end of the file.


Leftover from Moo.


Shlomi Fish <>


This software is Copyright (c) 2007 by Shlomi Fish.

This is free software, licensed under:

  The MIT (X11) License






You can find documentation for this module with the perldoc command.

  perldoc XML::Grammar::Fiction



Bugs / Feature Requests


Source Code


  hg clone ssh://
syntax highlighting: