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",