matts       2003/01/27 03:53:28

  Modified:    lib/Apache/AxKit/Language XSP.pm
  Log:
  Implement XSP inheritance a-la 
http://axkit.org/wiki/view/AxKit/XSPInheritance#
  
  Revision  Changes    Path
  1.29      +12 -4     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.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- XSP.pm    26 Jan 2003 17:22:50 -0000      1.28
  +++ XSP.pm    27 Jan 2003 11:53:27 -0000      1.29
  @@ -155,7 +155,8 @@
       }
   
       no strict 'refs';
  -    my $cv = \&{"$package\::handler"};
  +    # make sure we use inheritance to get this
  +    my $cv = $package->can('handler');
   
       my $cgi = Apache::Request->instance($r);
   
  @@ -171,7 +172,7 @@
       }
   
       my $dom = XML::LibXML::Document->createDocument("1.0", "UTF-8");
  -    my $rc = eval { $cv->($r, $cgi, $dom); };
  +    my $rc = eval { $package->$cv($r, $cgi, $dom); };
       if ($@) {
           die $@ if (ref($@));
           if ($to_eval) {
  @@ -333,7 +334,7 @@
       my $e = shift;
       
       $e->{XSP_Script} = join("\n", 
  -                "package $e->{XSP_Package}; [EMAIL 
PROTECTED]>{XSP_Package}::ISA = ('Apache::AxKit::Language::XSP::Page');",
  +                "package $e->{XSP_Package};",
                   # "#line 2 ".$e->{XSP_Line}."\n", # This is wrong. 
Currently, line numbers are unrelated to the source file's lines.
                                                     # Better leave it out, it 
makes debug output confusing.
                   "use Apache;",
  @@ -666,6 +667,9 @@
           if ($attribs{'indent-result'} eq 'yes') {
               $e->{XSP_Indent} = 1;
           }
  +        if (exists $attribs{'base-class'}) {
  +            $e->{XSP_Base_Class} = $attribs{'base-class'};
  +        }
       }
       elsif ($tag eq 'structure') {
       }
  @@ -821,8 +825,12 @@
   
       my $code;
       if (!$e->{XSP_User_Root}) {
  +        my $base_class = $e->{XSP_Base_Class} ||
  +          'Apache::AxKit::Language::XSP::Page';
           $e->{XSP_Script} .= join("\n",
  +                "[EMAIL PROTECTED]>{XSP_Package}::ISA = ('$base_class');",
                   'sub handler {',
  +                'my $class = shift;',
                   'my ($r, $cgi, $document) = @_;',
                   'my ($parent);',
                   "\n",
  
  
  

Reply via email to