Perl6::Pod::To::Mem - create elements tree in memory


Perl6-Pod documentation Contained in the Perl6-Pod distribution.

Index


Code Index:

NAME

Top

Perl6::Pod::To::Mem - create elements tree in memory

SYNOPSIS

Top

    my $out = [];
    my $to_mem  = new Perl6::Pod::To::Mem:: out_put=>$out;
    my ( $p, $f ) = $test->make_parser(@filters,$to_mem);
    $p->parse( \$text );




DESCRIPTION

Top

Perl6::Pod::To::Mem - create elements tree in memory

SEE ALSO

Top

http://perlcabal.org/syn/S26.html

AUTHOR

Top

Zahatski Aliaksandr, <zag@cpan.org>

COPYRIGHT AND LICENSE

Top


Perl6-Pod documentation Contained in the Perl6-Pod distribution.
package Perl6::Pod::To::Mem;

#$Id$

use warnings;
use strict;
use Perl6::Pod::To;
use base 'Perl6::Pod::To';

use Test::More;
use Data::Dumper;

sub new {
    my $class = shift;
    my $self  = $class->SUPER::new(@_);
    $self->{out_put} = [] unless exists $self->{out_put};
    return $self;
}

sub out_parser { $_[0]->{out_put} }

sub _make_xml_element {
    my $self     = shift;
    my $elem     = shift;
    my $e_type   = $elem->isa('Perl6::Pod::FormattingCode') ? 'code' : 'block';
    my $out_elem = {
        name => $elem->local_name,
        attr => $elem->get_attr
    };

    return $out_elem;
}

sub process_element {
    my $self = shift;
    my $elem = shift;
    my $res;
    if ( $elem->can('to_mem') ) {
        $res = $elem->to_mem( $self, @_ );
        unless ( ref($res) ) {
            $res = $res;
        }
    }
    else {

        #make characters from unhandled texts
        my @out_content = ();
        for (@_) {
            push @out_content, ref($_) ? $_ : $_;    #characters
        }
        $res = $self->_make_xml_element($elem);
        push @{ $res->{childs} }, @out_content;
    }
    return $res;
}

sub export_block {
    my $self = shift;
    return $self->process_element(@_);
}

sub export_code {
    my $self = shift;
    return $self->process_element(@_);
}

sub print_export {
    my $self = shift;
    push @{ $self->{out_put} }, @_

}

sub on_para {
    my $self = shift;
    my ( $element, $text ) = @_;
    chomp $text;
    push @{ $element->{_CONTENT_} }, $text;
    return;
}

sub on_end_block {
    my $self = shift;
    my $el   = shift;
    return $el unless $el->isa('Perl6::Pod::Block');
    my $content = exists $el->{_CONTENT_} ? $el->{_CONTENT_} : undef;
    my $data = $self->__handle_export( $el, @$content );
    my $cel = $self->current_root_element;
    if ($cel) {
        push @{ $cel->{_CONTENT_} }, ref($data) eq 'ARRAY' ? @$data : $data;
        return;
    }
    else {

        $self->print_export($data);
    }
    return $el;
}

1;
__END__