#!/usr/bin/perl -w

# Copyright 2001-2006 The Apache Software Foundation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

=head1 NAME

doc_viewer - A pod viewer for the local AxKit2 docs

=head1 SYNOPSIS

  <Location /docs>
  Plugin doc_viewer
  </Location>

=head1 DESCRIPTION

This plugin uses Pod::SAX to turn the local POD docs into XML for rendering in
the browser.

=cut

use Pod::SAX;
use XML::LibXML::SAX::Builder;

sub hook_xmlresponse {
    my ($self, $input) = @_;
    
    my $uri = $self->client->headers_in->request_uri();
    
    $self->log(LOGDEBUG, "request for $uri");
    
    $uri =~ s/\/docs//;
    
    # map URI to path
    if ($uri eq '/') {
        $uri = 'lib/AxKit2.pm';
    }
    elsif ($uri =~ /::/) {
        $uri =~ s/^\///;
        my $module = $uri;
        $uri = "lib/$uri" unless $uri =~ /plugins::/;
        $uri =~ s/::/\//g;
        $uri .= '.pm' if -e "${uri}.pm";
        $uri .= '.pod' if -e "${uri}.pod";
        # TODO: fix this huge security hole?
        $uri = `perldoc -l '$module'`;
    }
    else {
        # Ignore?
        die "Unsupported URL: $uri";
    }
    
    my $builder = XML::LibXML::SAX::Builder->new();
    my $p = Pod::SAX->new( Handler => $builder );
    
    $p->parse_file($uri);
    
    my $doc = $builder->result();
    
    $input->dom($doc);
    
    my $out = $input->transform(XSLT('demo/xslt/main.xsl'));

    return OK, $out;
}
