The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Pod::Manual::PodXML2Docbook;

use strict;
use warnings;

use XML::XPathScript::Template;
use XML::XPathScript::Processor;

our $VERSION = '0.08_04';

our $processor;

our $stylesheet = <<'END_STYLESHEET';
<?xml version="1.0" encoding="iso-8859-1"?>
<%
    $XML::XPathScript::current->interpolating( 0 );
    $Pod::Manual::PodXML2Docbook::processor = $processor;
    $template->import_template( $Pod::Manual::PodXML2Docbook::template );
%>
<%~ / %>
END_STYLESHEET

our $template = XML::XPathScript::Template->new;

$template->set( pod => { content => <<'END_CONTENT' } );
<chapter>
<%~ head %>
<%~ sect1[title/text()="DESCRIPTION"] %>
<%~ sect1[title/text()!="DESCRIPTION"] %>
</chapter>
END_CONTENT

$template->set( head => { 
    showtag => 0,
} );
$template->set( sect1 => { testcode => \&action_sect1 } );
$template->set( "sect$_" => { rename => 'section' } ) for 1..5;

$template->set( 'list' => { testcode => \&tc_list } );

$template->set( code => { 
    pre => '<literal role="code">',
    post => '</literal>' } );

$template->set( strong => { 
    pre => '<emphasis role="bold">',
    post => '</emphasis>' } );

$template->set( emphasis => { 
    pre => '<emphasis role="italic">',
    post => '</emphasis>' } );

$template->set( verbatim => { rename => 'screen' } );

$template->set( title => { 
    showtag => 1,
    testcode => \&tc_title } );

sub tc_title {
    my ( $n, $t ) = @_;

    my $abbrev;
    if ( $n->parentNode->getName eq "sect1" ) {
         ( $abbrev ) = eval { split '-', $n->childNodes->[0]->toString, 2 };
    }

    $t->set({ post => "<titleabbrev>$abbrev</titleabbrev>" }) if $abbrev;

    return   $n->findvalue( 'text()' ) eq 'DESCRIPTION'
           ? $DO_NOT_PROCESS
           : $DO_SELF_AND_KIDS
           ;
}

sub action_sect1 {
    my( $n, $t ) = @_;

    my $title = $n->findvalue( 'title/text()' );

    if ( $title eq 'DESCRIPTION' ) {
        $t->set({ pre => '', showtag => 0 });
    }

    return $title eq 'NAME' ? $DO_NOT_PROCESS : $DO_SELF_AND_KIDS ;
}

$template->set( 'item' => { showtag => 0 } );
$template->set( 'itemtext' => { showtag => 0 } );

sub tc_list {
    my ( $n, $t ) = @_;
    my $output;

    #if ( $n->findnodes( 'item/itemtext' ) ) { # we are a variable list
    #        $output = '<variablelist>';
    #        for my $c ( $n->findnodes('item') ) {
    #            my $item = '<varlistentry>';
    #            $item .= '<term>' . $c->findvalue( 'term/text()' ) . '</term>';
    #            $item .= '<listitem>';
    #            $item .= $processor->apply_templates( $c );
    #            $item .= '</listitem>';
    #            $item .= '</varlistentry>';
    #            $output .= $item;
    #        }
    #        $output .= '</variablelist>';
    #}
    #else {  # we are a itemized list 
    $output = '<itemizedlist>';

    for ( $n->findnodes( 'item' ) ) {
        $output .=  '<listitem>' 
                .   $processor->apply_templates( $_ )
                .   '</listitem>'
                ;
    }

    $output .= '</itemizedlist>';

    #}

    $t->{pre} = $output;

    return $DO_SELF_ONLY;
}

'end of Pod::Manual::PodXML2Docbook';