Pod-ToDocBook
view release on metacpan or search on metacpan
lib/Pod/ToDocBook/DoSequences.pm view on Meta::CPAN
if ( $code eq 'I' ) {
$attr->{para} = $el->{TITLE};
#diag Dumper $el;
}
$el;
}
#process conten of code
sub on_cdata {
my ( $self, $el, $text ) = @_;
return $text unless $el->local_name eq 'code';
#clean
$text =~ s/^\w<(.*)>$/$1/;
$el->{TITLE} = $text;
#return $text;
return undef;
}
lib/Pod/ToDocBook/DoSequences.pm view on Meta::CPAN
return $self->mk_from_xml(
qq!<indexterm><primary>$el->{TITLE}</primary></indexterm>!)
}
elsif ( $code eq 'Z' ) {
return $self->mk_characters( $el->{TITLE} );
}
elsif ( $code eq 'C' ) {
( my $literal = $el->mk_element('literal') )->attrs_by_name->{role} =
'code';
$literal->add_content( $self->mk_cdata( $el->{TITLE} ) );
return $literal;
}
elsif ( $code eq 'S' ) {
my $str = $el->{TITLE};
$str =~ s/\s(?![^<]*>)/ /gx;
return $self->mk_characters($str);
}
elsif ( $code eq 'E' ) {
my $str = $el->{TITLE};
if ( $str !~ /\A\w+\z/xms ) {
lib/Pod/ToDocBook/FormatList.pm view on Meta::CPAN
my ( $self, $el ) = @_;
my $lname = $el->local_name;
my $attr = $el->attrs_by_name;
if ( $lname eq 'begin' and $attr->{name} eq 'list' ) {
$self->{PROCESS}++;
$el->delete_element;
}
$el;
}
=head2 process_format $cdata name=>table param=><string>
Must retrun array ref to elements
=cut
sub process_format {
my ( $self, $cdata, %att ) = @_;
# my ( $title, $align, $row_titles, @strs ) = split( /\n/, $cdata );
my $pod_parser = new Pod::ToDocBook::Pod2xml::;
my $over = $self->mk_element('over');
my @lines = split( /\n/, $cdata );
foreach my $line (@lines) {
# replace - to *
$line =~ s/^[-+](\s+)/\*$1/;
#make item element and add to over
my $item =
$self->mk_element('item')
->add_content( $self->mk_element('title')
->add_content( $pod_parser->get_elements_from_text($line, 'list format')) ); #$self->mk_characters($line)
$over->add_content( $item)
}
lib/Pod/ToDocBook/Pod2xml.pm view on Meta::CPAN
#handle L
if ( $node->cmd_name() eq 'L' ) {
my $lattr = $parser->parse_link( $node->raw_text );
%{$attr} = %{$lattr};
}
$attr->{name} = $node->cmd_name();
#set content
$elem->{TITLE} = $node->raw_text;
$elem->{LINE_NUM} = $line_num;
$elem->add_content( $parser->mk_cdata( $node->raw_text ) );
push @childs, $elem;
}
}
}
return @childs;
}
sub stack {
my $self = shift;
$self->{STACK} = [] unless exists $self->{STACK};
lib/Pod/ToDocBook/Pod2xml.pm view on Meta::CPAN
my $open_name = $current->local_name;
my $close_name = $elem->local_name;
die
"Stack error: got unexpected: $elem->{COMMAND} at line: $elem->{LINE_NUM}"
. ". In stack: $current->{COMMAND} ( from line: $current->{LINE_NUM} )"
unless $open_name eq $close_name;
}
#special handle format tag
if ( $current->local_name eq 'begin' ) {
if ( my $cdata = delete $current->{TEXT_BLOCK} ) {
$current->add_content( $self->mk_cdata($cdata) );
}
}
$self->_process($current);
}
}
sub command {
my ( $parser, $command, $paragraph, $line_num ) = @_;
my $self = $parser;
lib/Pod/ToDocBook/Pod2xml.pm view on Meta::CPAN
# =end
if ( $command =~ /^begin|for$/ ) {
$elem = $parser->mk_element('begin');
my $attr = $elem->attrs_by_name;
my ( $format_name, $format_params ) =
$paragraph =~ m/\s*(\w+)(?:\s+?(.*))?$/gis;
$attr->{name} = $format_name;
if ( $command eq 'for' ) {
my $content = $format_params;
$format_params = '';
$elem->add_content( $parser->mk_cdata($content) );
}
$attr->{params} = $format_params;
$self->_start_elem($elem);
if ( $command eq 'for' ) {
$self->command( 'end', $format_name, $line_num );
}
}
elsif ( $command eq 'end' ) {
$elem->local_name('begin');
$self->_stop_elem($elem);
lib/Pod/ToDocBook/Pod2xml.pm view on Meta::CPAN
}
sub verbatim {
my ( $parser, $paragraph, $line_num ) = @_;
if ( $parser->_current && $parser->_current->local_name eq 'begin' ) {
$parser->_current->{TEXT_BLOCK} .= $paragraph;
return undef;
}
my $elem =
$parser->mk_element('verbatim')
->add_content( $parser->mk_cdata($paragraph) );
$parser->_process($elem);
}
sub textblock {
my ( $parser, $paragraph, $line_num ) = @_;
unless ( $parser->_current && $parser->_current->local_name eq 'begin' ) {
$paragraph =~ s/\s+$//ms;
}
else {
$parser->_current->{TEXT_BLOCK} .= $paragraph;
lib/Pod/ToDocBook/TableDefault.pm view on Meta::CPAN
my ( $self, $el ) = @_;
my $lname = $el->local_name;
my $attr = $el->attrs_by_name;
if ( $lname eq 'begin' and $attr->{name} eq 'table' and !$attr->{params} ) {
$self->{PROCESS}++;
$el->delete_element;
}
$el;
}
=head2 process_format $cdata name=>table param=><string>
Must retrun array ref to elements
=cut
sub process_format {
my ( $self, $cdata, %att ) = @_;
my ( $title, $align, $row_titles, @strs ) = split( /\n/, $cdata );
#create POD2XML instance for parce pod sequences
my $pod_parser = new Pod::ToDocBook::Pod2xml::;
my $table =
$self->mk_element('table')
->add_content(
$self->mk_element('title')->add_content( $pod_parser->get_elements_from_text($title, 'table format') )
);
my @alignspec = split( /\s*,\s*/, $align );
( my $tgroup = $self->mk_element('tgroup') )->attrs_by_name->{cols} =
scalar(@alignspec);
lib/Pod/ToDocBook/TableDefault.pm view on Meta::CPAN
$table->add_content( $tgroup->add_content( $row, $tbody ) );
return $table;
}
sub on_end_element {
my ( $self, $el ) = @_;
my $lname = $el->local_name;
if ( $lname eq 'begin' and exists $self->{PROCESS} ) {
delete $self->{PROCESS};
my $attr = $el->attrs_by_name;
my $cdata = $el->{CDATA};
delete $el->{CDATA};
return $self->process_format( $cdata, %$attr );
}
$el;
}
sub on_cdata {
my ( $self, $elem, $cdata ) = @_;
if ( exists $self->{PROCESS} ) {
$elem->{CDATA} .= $cdata;
return undef;
}
return $cdata;
}
1;
__END__
=head1 SEE ALSO
XML::ExtOn, Pod::2::DocBook
=head1 AUTHOR
( run in 0.686 second using v1.01-cache-2.11-cpan-454fe037f31 )