matts       2003/02/18 14:37:22

  Modified:    .        MANIFEST Makefile.PL
               lib/Apache/AxKit Provider.pm
               lib/Apache/AxKit/Language HtmlDoc.pm LibXSLT.pm XSP.pm
  Added:       lib/Apache/AxKit LibXMLSupport.pm
  Log:
  Added get_dom() which results in a lot of code deletion.
  Added LibXMLSupport.pm which helps in code deletion.
  Fixed bug in making comments in XSP (Nachoman)
  
  Revision  Changes    Path
  1.13      +1 -0      xml-axkit/MANIFEST
  
  Index: MANIFEST
  ===================================================================
  RCS file: /home/cvs/xml-axkit/MANIFEST,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- MANIFEST  13 Sep 2002 13:04:31 -0000      1.12
  +++ MANIFEST  18 Feb 2003 22:37:22 -0000      1.13
  @@ -145,6 +145,7 @@
   lib/Apache/AxKit/Language/XSP.pm
   lib/Apache/AxKit/Language/XSP/SimpleTaglib.pm
   lib/Apache/AxKit/Language/XSP/TaglibHelper.pm
  +lib/Apache/AxKit/LibXMLSupport.pm
   lib/Apache/AxKit/Makefile.PL
   lib/Apache/AxKit/MediaChooser/WAPCheck.pm
   lib/Apache/AxKit/Plugin/Fragment.pm
  
  
  
  1.16      +5 -6      xml-axkit/Makefile.PL
  
  Index: Makefile.PL
  ===================================================================
  RCS file: /home/cvs/xml-axkit/Makefile.PL,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- Makefile.PL       8 Feb 2003 13:48:39 -0000       1.15
  +++ Makefile.PL       18 Feb 2003 22:37:22 -0000      1.16
  @@ -70,10 +70,6 @@
           'XML::Parser'     => '2.27',
           'XML::XPath'      => '1.00',
       ],
  -    "Recommended module for speeding up URI requests" => [
  -        -default => 0,
  -        'HTTP::GHTTP'     => '1.00',
  -    ],
       "Optional module for using Sablotron XSLT engine" => [
           -default => 0,
           'XML::Sablotron'  => '0.40',
  @@ -86,7 +82,10 @@
           -default => 0,
           'XML::LibXSLT'    => '1.49',
       ],
  -    
  +    "Optional for tidying output of AxTraceIntermediate XSP pages" => [
  +        -default => 0,
  +        'Perl::Tidy'      => '',
  +    ],
     );
   
   require Apache::src;
  
  
  
  1.13      +39 -13    xml-axkit/lib/Apache/AxKit/Provider.pm
  
  Index: Provider.pm
  ===================================================================
  RCS file: /home/cvs/xml-axkit/lib/Apache/AxKit/Provider.pm,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- Provider.pm       5 Jul 2002 19:02:36 -0000       1.12
  +++ Provider.pm       18 Feb 2003 22:37:22 -0000      1.13
  @@ -5,7 +5,6 @@
   
   use Apache::AxKit::Exception;
   use Apache::Constants qw(OK DECLINED);
  -#use XML::Parser;
   
   # use vars qw/$COUNT/;
   
  @@ -56,6 +55,41 @@
   #     AxKit::Debug(7, "Provider->DESTROY Count: " . --$COUNT);
   # }
   
  +sub get_strref {
  +    throw Apache::AxKit::Exception::Error (
  +        -text => "Subclass must implement get_strref"
  +        );
  +}
  +
  +sub get_fh {
  +    throw Apache::AxKit::Exception::Error (
  +        -text => "Subclass must implement get_fh"
  +        );
  +}
  +
  +sub get_dom {
  +    my $self = shift;
  +    require Apache::AxKit::LibXMLSupport;
  +    
  +    my $parser = XML::LibXML->new();
  +    $parser->expand_entities(1);
  +    Apache::AxKit::LibXMLSupport->reset;
  +    
  +    my $xml_doc;
  +    eval {
  +        my $fh = $self->get_fh();
  +        $xml_doc = $parser->parse_fh($fh, $self->{apache}->uri());
  +    };
  +    if ($@) {
  +        my $xmlstring = ${$self->get_strref()};
  +        $xml_doc = $parser->parse_string($xmlstring, $self->{apache}->uri()) 
|| 
  +            throw Apache::AxKit::Exception::Error(
  +                -text => "XML::LibXML->parse_string returned nothing!"
  +                );
  +    }
  +    return $xml_doc;
  +}
  +
   sub apache_request {
       my $self = shift;
       return $self->{apache};
  @@ -85,17 +119,9 @@
               if ($pubid) {
                   return ''; # do not bring in public DTD's
               }
  -            eval {
  -                require HTTP::GHTTP;
  -            };
  -            if ($@) {
  -                require LWP::Simple;
  -                import LWP::Simple;
  -                return get($sysid) || die "Cannot get $sysid";
  -            }
  -            my $r = HTTP::GHTTP->new($sysid);
  -            $r->process_request;
  -            return $r->get_body;
  +            require LWP::Simple;
  +            import LWP::Simple;
  +            return get($sysid) || die "Cannot get $sysid";
           }
           elsif ($sysid =~ /^(https|ftp):/) {
               if ($pubid) {
  
  
  
  1.1                  xml-axkit/lib/Apache/AxKit/LibXMLSupport.pm
  
  Index: LibXMLSupport.pm
  ===================================================================
  # $Id: LibXMLSupport.pm,v 1.1 2003/02/18 22:37:22 matts Exp $
  
  package Apache::AxKit::LibXMLSupport;
  use strict;
  use XML::LibXML 1.50;
  
  use vars qw($provider_cb);
  
  $provider_cb = \&get_provider;
  
  sub reset {
      $XML::LibXML::match_cb = \&match_uri;
      $XML::LibXML::read_cb = \&read_uri;
      $XML::LibXML::close_cb = \&close_uri;
      $XML::LibXML::open_cb = \&open_uri;
  }
  
  # Default provider callback
  sub get_provider {
      my $r = shift;
      my $provider = Apache::AxKit::Provider->new_content_provider($r);
      return $provider;
  }
  
  sub match_uri {
      my $uri = shift;
      AxKit::Debug(8, "LibXSLT match_uri: $uri");
      return 1 if $uri =~ /^(axkit|xmldb):/;
      return $uri !~ /^\w+:/; # only handle URI's without a scheme
  }
  
  sub open_uri {
      my $uri = shift || './';
      AxKit::Debug(8, "LibXSLT open_content_uri: $uri");
      
      if ($uri =~ /^axkit:/) {
          return AxKit::get_axkit_uri($uri);
      } elsif ($uri =~ /^xmldb:/) {
          return Apache::AxKit::Provider::XMLDB::get_xmldb_uri($uri);
      }
      
      # create a subrequest, so we get the right AxKit::Cfg for the URI
      my $apache = AxKit::Apache->request;
      my $sub = $apache->lookup_uri(AxKit::FromUTF8($uri));
      local $AxKit::Cfg = Apache::AxKit::ConfigReader->new($sub);
      
      my $provider = $provider_cb->($sub);
      my $str = $provider->get_strref;
      
      undef $provider;
      undef $apache;
      undef $sub;
      
      return $$str;
  }
  
  sub close_uri {
      # do nothing
  }
  
  sub read_uri {
      return substr($_[0], 0, $_[1], "");
  }
  
  1;
  __END__
  
  =head1 NAME
  
  Apache::AxKit::LibXMLSupport - XML::LibXML support routines
  
  =head1 SYNOPSIS
  
    require Apache::AxKit::LibXMLSupport;
    Apache::AxKit::LibXMLSupport->setup_libxml();
  
  =head1 DESCRIPTION
  
  This module sets up some things for using XML::LibXML in AxKit. Specifically 
this
  is to do with callbacks. All callbacks look pretty much the same in AxKit, so
  this module makes them editable in one place.
  
  =head1 API
  
  There is just one method: C<< Apache::AxKit::LibXMLSupport->setup_libxml() >>.
  
  You can pass a parameter, in which case it is a callback to create a provider
  given a C<$r> (an Apache request object). This is so that you can create the
  provider in different ways and register the fact that it was created. If you
  don't provide a callback though a default one will be provided.
  
  =cut
  
  
  1.4       +4 -6      xml-axkit/lib/Apache/AxKit/Language/HtmlDoc.pm
  
  Index: HtmlDoc.pm
  ===================================================================
  RCS file: /home/cvs/xml-axkit/lib/Apache/AxKit/Language/HtmlDoc.pm,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- HtmlDoc.pm        17 Jun 2002 23:15:47 -0000      1.3
  +++ HtmlDoc.pm        18 Feb 2003 22:37:22 -0000      1.4
  @@ -10,8 +10,9 @@
   use Apache::Constants qw(:common);
   use Apache::Request;
   use Apache::AxKit::Language;
  -use Apache::AxKit::Language::LibXSLT;
  +use Apache::AxKit::LibXMLSupport;
   use Apache::AxKit::Provider;
  +use XML::LibXSLT;
   use IPC::Run qw(run);
   use Cwd;
   
  @@ -25,10 +26,7 @@
       my ($r, $xml_provider, undef, $last_in_chain) = @_;
   
       my $parser = XML::LibXML->new();
  -    local $XML::LibXML::match_cb = 
\&Apache::AxKit::Language::LibXSLT::match_uri;
  -    local $XML::LibXML::open_cb = 
\&Apache::AxKit::Language::LibXSLT::open_content_uri;
  -    local $XML::LibXML::read_cb = 
\&Apache::AxKit::Language::LibXSLT::read_uri;
  -    local $XML::LibXML::close_cb = 
\&Apache::AxKit::Language::LibXSLT::close_uri;
  +    Apache::AxKit::LibXMLSupport->reset;
   
       my $dom;
       my $source_text;
  
  
  
  1.19      +19 -92    xml-axkit/lib/Apache/AxKit/Language/LibXSLT.pm
  
  Index: LibXSLT.pm
  ===================================================================
  RCS file: /home/cvs/xml-axkit/lib/Apache/AxKit/Language/LibXSLT.pm,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- LibXSLT.pm        29 Jan 2003 13:51:29 -0000      1.18
  +++ LibXSLT.pm        18 Feb 2003 22:37:22 -0000      1.19
  @@ -10,6 +10,7 @@
   use Apache::Request;
   use Apache::AxKit::Language;
   use Apache::AxKit::Provider;
  +use Apache::AxKit::LibXMLSupport;
   use File::Basename qw(dirname);
   
   @ISA = 'Apache::AxKit::Language';
  @@ -48,20 +49,16 @@
       
       my $parser = XML::LibXML->new();
       $parser->expand_entities(1);
  -    local $XML::LibXML::match_cb = \&match_uri;
  -    local $XML::LibXML::open_cb = \&open_content_uri;
  -    local $XML::LibXML::read_cb = \&read_uri;
  -    local $XML::LibXML::close_cb = \&close_uri;
  +    Apache::AxKit::LibXMLSupport->reset;
  +    local $Apache::AxKit::LibXMLSupport::provider_cb = 
  +        sub {
  +            my $r = shift;
  +            my $provider = Apache::AxKit::Provider->new_content_provider($r);
  +            add_depends($provider->key());
  +        };
   
       if (!$xml_doc && !$xmlstring) {
  -        eval {
  -            my $fh = $xml->get_fh();
  -            $xml_doc = $parser->parse_fh($fh, $r->uri());
  -        };
  -        if ($@) {
  -            $xmlstring = ${$xml->get_strref()};
  -            $xml_doc = $parser->parse_string($xmlstring, $r->uri());
  -        }
  +        $xml_doc = $xml->get_dom();
       } 
       elsif ($xmlstring) {
           $xml_doc = $parser->parse_string($xmlstring, $r->uri());
  @@ -91,21 +88,19 @@
       }
       
       if (!$stylesheet || ref($stylesheet) ne 'XML::LibXSLT::Stylesheet') {
  -        my $style_doc;
           reset_depends();
           my $style_uri = $style->apache_request->uri();
           AxKit::Debug(7, "[LibXSLT] parsing stylesheet $style_uri");
  -        eval {
  -            my $fh = $style->get_fh();
  -            $style_doc = $parser->parse_fh($fh, $style_uri);
  -        };
  -        if ($@) {
  -            my $stylestring = $style->get_strref();
  -            $style_doc = $parser->parse_string($$stylestring, $style_uri);
  -        }
  -        
  -        local $XML::LibXML::open_cb = \&open_stylesheet_uri;
  +        my $style_doc = $style->get_dom();
           
  +        Apache::AxKit::LibXMLSupport->reset;
  +        local $Apache::AxKit::LibXMLSupport::provider_cb = 
  +            sub {
  +                my $r = shift;
  +                my $provider = 
Apache::AxKit::Provider->new_style_provider($r);
  +                add_depends($provider->key());
  +            };
  +    
           $stylesheet = XML::LibXSLT->parse_stylesheet($style_doc);
           
           unless ($r->dir_config('AxDisableXSLTStylesheetCache')) {
  @@ -150,74 +145,6 @@
                   );
       }
       return @results;
  -}
  -
  -sub match_uri {
  -    my $uri = shift;
  -    AxKit::Debug(8, "LibXSLT match_uri: $uri");
  -    return 1 if $uri =~ /^(axkit|xmldb):/;
  -    return $uri !~ /^\w+:/; # only handle URI's without a scheme
  -}
  -
  -sub open_content_uri {
  -    my $uri = shift || './';
  -    AxKit::Debug(8, "LibXSLT open_content_uri: $uri");
  -    
  -    if ($uri =~ /^axkit:/) {
  -        return AxKit::get_axkit_uri($uri);
  -    } elsif ($uri =~ /^xmldb:/) {
  -        return Apache::AxKit::Provider::XMLDB::get_xmldb_uri($uri);
  -    }
  -    
  -    # create a subrequest, so we get the right AxKit::Cfg for the URI
  -    my $apache = AxKit::Apache->request;
  -    my $sub = $apache->lookup_uri(AxKit::FromUTF8($uri));
  -    local $AxKit::Cfg = Apache::AxKit::ConfigReader->new($sub);
  -    
  -    my $provider = Apache::AxKit::Provider->new_content_provider($sub);
  -    
  -    add_depends($provider->key());
  -    my $str = $provider->get_strref;
  -    
  -    undef $provider;
  -    undef $apache;
  -    undef $sub;
  -    
  -    return $$str;
  -}
  -
  -sub open_stylesheet_uri {
  -    my $uri = shift || './';
  -    AxKit::Debug(8, "LibXSLT open_stylesheet_uri: $uri");
  -    
  -    if ($uri =~ /^axkit:/) {
  -        return AxKit::get_axkit_uri($uri);
  -    } elsif ($uri =~ /^xmldb:/) {
  -        return Apache::AxKit::Provider::XMLDB::get_xmldb_uri($uri);
  -    }
  -    
  -    # create a subrequest, so we get the right AxKit::Cfg for the URI
  -    my $apache = AxKit::Apache->request;
  -    my $sub = $apache->lookup_uri(AxKit::FromUTF8($uri));
  -    local $AxKit::Cfg = Apache::AxKit::ConfigReader->new($sub);
  -    
  -    my $provider = Apache::AxKit::Provider->new_style_provider($sub);
  -    
  -    add_depends($provider->key());
  -    my $str = $provider->get_strref;
  -    
  -    undef $provider;
  -    undef $apache;
  -    undef $sub;
  -    
  -    return $$str;
  -}
  -
  -sub close_uri {
  -}
  -
  -sub read_uri {
  -    return substr($_[0], 0, $_[1], "");
   }
   
   1;
  
  
  
  1.37      +4 -47     xml-axkit/lib/Apache/AxKit/Language/XSP.pm
  
  Index: XSP.pm
  ===================================================================
  RCS file: /home/cvs/xml-axkit/lib/Apache/AxKit/Language/XSP.pm,v
  retrieving revision 1.36
  retrieving revision 1.37
  diff -u -r1.36 -r1.37
  --- XSP.pm    7 Feb 2003 12:20:47 -0000       1.36
  +++ XSP.pm    18 Feb 2003 22:37:22 -0000      1.37
  @@ -919,6 +919,7 @@
   package AxKit::XSP::SAXParser;
   
   use XML::LibXML 1.30;
  +use Apache::AxKit::LibXMLSupport;
   
   sub new {
       my ($type, %self) = @_; 
  @@ -931,10 +932,7 @@
       my $doc;
   
       my $parser = XML::LibXML->new();
  -    local $XML::LibXML::match_cb = \&match_uri;
  -    local $XML::LibXML::open_cb = \&open_content_uri;
  -    local $XML::LibXML::read_cb = \&read_uri;
  -    local $XML::LibXML::close_cb = \&close_uri;
  +    Apache::AxKit::LibXMLSupport->reset();
       $parser->expand_entities(1);
       
       if (ref($thing)) {
  @@ -958,47 +956,6 @@
       $self->{Handler}->end_document($document);
   }
   
  -sub match_uri {
  -    my $uri = shift;
  -    AxKit::Debug(8, "XSP match_uri: $uri");
  -    return 1 if $uri =~ /^(axkit|xmldb):/;
  -    return $uri !~ /^\w+:/; # only handle URI's without a scheme
  -}
  -
  -sub open_content_uri {
  -    my $uri = shift || './';
  -    AxKit::Debug(8, "XSP open_content_uri: $uri");
  -
  -    if ($uri =~ /^axkit:/) {
  -        return AxKit::get_axkit_uri($uri);
  -    } elsif ($uri =~ /^xmldb:/) {
  -        return Apache::AxKit::Provider::XMLDB::get_xmldb_uri($uri);
  -    }
  -
  -    # create a subrequest, so we get the right AxKit::Cfg for the URI
  -    my $apache = AxKit::Apache->request;
  -    my $sub = $apache->lookup_uri(AxKit::FromUTF8($uri));
  -    local $AxKit::Cfg = Apache::AxKit::ConfigReader->new($sub);
  -
  -    my $provider = Apache::AxKit::Provider->new_content_provider($sub);
  -
  -    AxKit::add_depends($provider->key());
  -    my $str = $provider->get_strref;
  -
  -    undef $provider;
  -    undef $apache;
  -    undef $sub;
  -    
  -    return $$str;
  -}
  -
  -sub close_uri {
  -}
  -
  -sub read_uri {
  -    return substr($_[0], 0, $_[1], "");
  -}
  -
   sub process_node {
       my ($handler, $node, $encoding) = @_;
   
  @@ -1130,7 +1087,7 @@
   
   sub __mk_comment_node {
       my ($document, $parent, $text) = @_;
  -    my $node = $document->createCommentNode($text);
  +    my $node = $document->createComment($text);
       $parent->appendChild($node);
   }
   
  
  
  

Reply via email to