package Apache2::TomKit::Processor::XPathScript; use strict; use warnings; use Carp; use base qw( Apache2::TomKit::Processor::AbstractProcessor XML::XPathScript ); use Apache2::TomKit::Processor::DefinitionProvider::FileSystemProvider; use XML::LibXML; our $VERSION = '1.53'; sub new { my $class = shift; my $logger = shift; my $config = shift; my $processordef = shift; my $getMappingType = shift; my $this = $class->SUPER::new($logger,$config); $this->{processordef} = new Apache2::TomKit::Processor::DefinitionProvider::FileSystemProvider( $logger, $config, $processordef ); $this->{stylesheet} = undef; $this->{getMappingType} = $getMappingType; return $this; } sub init { } sub setUp { my $this = shift; return if( $this->{stylesheet} ); if( $this->{processordef}->isFile() ) { open my $STYLESHEET, $this->{processordef}->getInstructions(); local $/ = undef; $this->set_stylesheet( <$STYLESHEET> ); } else { $this->set_stylesheet( $this->{processordef}->getInstructions() ); } $this->{logger}->debug( 9, "XPathScript: stylesheet is $this->{stylesheet}" ); } sub process { my $this = shift; my $input = shift; $this->{logger}->debug( 9, "XPathScript: Is processing the source with stylesheet: " . $this->{processordef} ); $this->set_xml( $input ); $this->{logger}->debug( 9, "XPathScript: source is $input" ); my $output; $this->{printer} = \$output; { local *ORIGINAL_STDOUT; *ORIGINAL_STDOUT = *STDOUT; local *STDOUT; # Perl 5.6.1 dislikes closed but tied descriptors (causes SEGVage) *STDOUT = *ORIGINAL_STDOUT if $^V lt v5.7.0; tie *STDOUT, 'XML::XPathScript::StdoutSnatcher'; my $retval = $this->compile()->( $this ); untie *STDOUT; } $this->{logger}->debug( 9, "XPathScript: output is $output" ); my $parser = XML::LibXML->new(); return $parser->parse_string( $output ); } sub getMTime { my $this = shift; return $this->{processordef}->getMTime(); } sub createsXML { 0; } #sub getKey { # return $_[0]->{processordef}->getMD5Key(); #} sub createsDom { 1; } sub getContentType { return "text/html"; } sub getMappingType { return $_[0]->{getMappingType} } sub getProcessorDefinition { return $_[0]->{processordef}->getKey(); } 1; __END__ =head1 NAME Apache2::TomKit::Processor::XPathScript - XPathScript Processor for TomKit =head1 SYNOPSIS # in the relevant .htaccess PerlSetVar AxAddProcessorMap "text/xps=>Apache2::TomKit::Processor::XPathScript" PerlFixupHandler Apache2::TomKit PerlSetVar AxAddProcessorDef "text/xps=>stylesheet.xps" =head1 BUGS Please send bug reports to , or via the web interface at http://rt.cpan.org/Public/Dist/Display.html?Name=XML-XPathScript . =head1 AUTHOR Yanick Champoux Original Axkit::Apache::AxKit::Language module by Matt Sergeant