jwalt       2003/01/28 17:35:50

  Modified:    demo/xsp .htaccess index.xml
               lib      AxKit.pm
               lib/Apache/AxKit ConfigReader.pm Exception.pm
               lib/Apache/AxKit/Language LibXSLT.pm XPathScript.pm XSP.pm
               lib/Apache/AxKit/Language/XSP SimpleTaglib.pm
  Added:       demo/xsp simple-input-attributes.xsp
  Log:
  - added demo files from Ken Neighbors
  - fixed Session demo (needs 0.93)
  - modified AxTraceIntermediate for the upcoming request tracker
  - fixed AxTraceIntermediate for perl 5.8.0
  - ConfigReader now interprets relative cache and trace dirs relative to 
document_root
  - ConfigReader better supports configuration through PerlSetVar now, for the 
upcoming Apache::Fake based Axkit-via-plain-CGI support
  - added xmldb: URIs similar to axkit: URIs
  - updated PerlTidy usage for latest PerlTidy release
  - completely removed old namespace prefix hack: the new, correct solution 
works fine, updated docs accordingly
  - fix "Unknown node type 19/20" by ignoring them
  - fix for SimpleTaglib: :expr tags inside other taglib tags didn't work
  
  Revision  Changes    Path
  1.8       +10 -2     xml-axkit/demo/xsp/.htaccess
  
  Index: .htaccess
  ===================================================================
  RCS file: /home/cvs/xml-axkit/demo/xsp/.htaccess,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- .htaccess 26 Jan 2003 17:25:21 -0000      1.7
  +++ .htaccess 29 Jan 2003 01:35:49 -0000      1.8
  @@ -19,6 +19,14 @@
   AxAddXSPTaglib AxKit::XSP::Param
   </Files>
   
  +<Files simple-input-attributes.xsp>
  +AxAddXSPTaglib AxKit::XSP::Demo::SimpleInputAttributes
  +</Files>
  +
  +<Files simpletaglib-object.xsp>
  +AxAddXSPTaglib AxKit::XSP::Demo::Object
  +</Files>
  +
   <Files simpletaglib-simple.xsp>
   AxAddXSPTaglib AxKit::XSP::Demo::Simple
   </Files>
  @@ -26,8 +34,8 @@
   # Note: these require additional setup. Not sure how/if that
   # can be handled automagically
   <Files session.xsp>
  -#    AxAddPlugin Apache::AxKit::Plugin::Session
  -     AxAddXSPTaglib +AxKit::XSP::Session
  +     AxAddPlugin Apache::AxKit::Plugin::Session
  +     AxAddXSPTaglib AxKit::XSP::Session
   </Files>
   
   <Files globals.xsp>
  
  
  
  1.7       +1 -0      xml-axkit/demo/xsp/index.xml
  
  Index: index.xml
  ===================================================================
  RCS file: /home/cvs/xml-axkit/demo/xsp/index.xml,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- index.xml 26 Jan 2003 17:26:39 -0000      1.6
  +++ index.xml 29 Jan 2003 01:35:49 -0000      1.7
  @@ -187,6 +187,7 @@
               if (!$@) {
                   <li><a href="simpletaglib-simple.xsp">SimpleTaglib Simple 
Taglib Example</a></li>
                   <li><a href="simpletaglib-object.xsp">SimpleTaglib OO Taglib 
Example</a></li>
  +                <li><a href="simple-input-attributes.xsp">SimpleTaglib Input 
Attributes Example</a></li>
               }
               else {
                   AxKit::Debug(1, "SimpleTaglib failed to load: $@");
  
  
  
  1.1                  xml-axkit/demo/xsp/simple-input-attributes.xsp
  
  Index: simple-input-attributes.xsp
  ===================================================================
  <?xml version="1.0"?>
  <?xml-stylesheet href="NULL" type="application/x-xsp"?>
  <xsp:page xmlns:xsp="http://www.apache.org/1999/XSP/Core";
            xmlns:demo="http://www.nsds.com/NS/xsp/demo/simple-input-attributes";
            indent-result="yes"
  >
    <html>
      <head><title>SimpleTaglib Input Attributes Demonstration</title></head>
      <body>
        <h1>SimpleTaglib Input Attributes Demonstration</h1>
  
        <h2>attrib</h2>
        <ol>
          <li><demo:attrib/></li>
          <li><demo:attrib parameter="value"/></li>
        </ol>
  
        <h2>child</h2>
        <ol>
          <li><demo:child/></li>
          <li>
            <demo:child>
              <demo:parameter>value</demo:parameter>
            </demo:child>
          </li>
        </ol>
  
        <h2>attribOrChild</h2>
        <ol>
          <li><demo:attribOrChild/></li>
          <li><demo:attribOrChild parameter="value"/></li>
          <li>
            <demo:attribOrChild>
              <demo:parameter>value</demo:parameter>
            </demo:attribOrChild>
          </li>
          <li>
            <demo:attribOrChild parameter="value1">
              <demo:parameter>value2</demo:parameter>
            </demo:attribOrChild>
          </li>
        </ol>
  
        <h2>childStruct</h2>
        <ol>
          <li><demo:childStruct/></li>
          <li>
            <demo:childStruct>
              <demo:parameter>value</demo:parameter>
            </demo:childStruct>
          </li>
          <li>
            <demo:childStruct>
              <demo:parameter>value1</demo:parameter>
              <demo:parameter>value2</demo:parameter>
            </demo:childStruct>
          </li>
        </ol>
  
        <h2>attrib-or-childStruct</h2>
        <ol>
          <li><demo:attrib-or-childStruct/></li>
          <li><demo:attrib-or-childStruct parameter="value"/></li>
          <li>
            <demo:attrib-or-childStruct>
              <demo:parameter>value</demo:parameter>
            </demo:attrib-or-childStruct>
          </li>
          <li>
            <demo:attrib-or-childStruct parameter="value1">
              <demo:parameter>value2</demo:parameter>
            </demo:attrib-or-childStruct>
          </li>
          <li>
            <demo:attrib-or-childStruct>
              <demo:parameter>value1</demo:parameter>
              <demo:parameter>value2</demo:parameter>
            </demo:attrib-or-childStruct>
          </li>
        </ol>
  
        <h2>captureContent</h2>
        <ol>
          <li><demo:captureContent/></li>
          <li><demo:captureContent>text content</demo:captureContent></li>
          <li>
            <demo:captureContent>
              text content
            </demo:captureContent>
          </li>
        </ol>
  
        <h2>captureContent-and-keepWhitespace</h2>
        <ol>
          <li><demo:captureContent-and-keepWhitespace/></li>
          <li><demo:captureContent-and-keepWhitespace>text 
content</demo:captureContent-and-keepWhitespace></li>
          <li>
            <demo:captureContent-and-keepWhitespace>
              text content
            </demo:captureContent-and-keepWhitespace>
          </li>
        </ol>
  
        <h2>complex-childStruct</h2>
        <pre>
          <complex-childStruct
            xmlns="http://www.nsds.com/NS/xsp/demo/simple-input-attributes";>
              <add>
                  <permission type="user">
                      foo
                  </permission>
                  <permission>
                      <type>group</type>
                      bar
                  </permission>
                  <target>/test.html</target>
                  <comment lang="en" day="Sun">Test entry</comment>
                  <comment lang="en" day="Wed">Test entry 2</comment>
                  <comment lang="de">Testeintrag</comment>
              </add>
              <remove target="/test2.html">
                  <permission type="user">
                      baz
                  </permission>
              </remove>
          </complex-childStruct>
        </pre>
      </body>
    </html>
  </xsp:page>
  
  
  
  1.37      +30 -8     xml-axkit/lib/AxKit.pm
  
  Index: AxKit.pm
  ===================================================================
  RCS file: /home/cvs/xml-axkit/lib/AxKit.pm,v
  retrieving revision 1.36
  retrieving revision 1.37
  diff -u -r1.36 -r1.37
  --- AxKit.pm  26 Jan 2003 17:37:42 -0000      1.36
  +++ AxKit.pm  29 Jan 2003 01:35:49 -0000      1.37
  @@ -674,10 +674,32 @@
       my $interm_prefix;
       my $interm_count = 0;
       if ($AxKit::Cfg->TraceIntermediate) {
  -        $interm_prefix = $r->uri;
  -        $interm_prefix =~ s{/}{|}g;
  -        $interm_prefix =~ s/[^0-9a-zA-Z.,_|-]/_/g;
  -        $interm_prefix = $AxKit::Cfg->TraceIntermediate.'/'.$interm_prefix;
  +        my $id = $r->notes('AxRequestID');
  +        $interm_prefix = ($id?$id:$r->uri);
  +        $interm_prefix =~ s{%}{%25}g;
  +        $interm_prefix =~ s{/}{%2f}g;
  +        my $ti = $AxKit::Cfg->TraceIntermediate;
  +        if (defined $id) {
  +                $interm_prefix = 
substr($interm_prefix,-1).'/'.substr($interm_prefix,-3,2).'/'.substr($interm_prefix,0,-3).'/';
  +                mkdir($ti.'/'.substr($interm_prefix,0,1));
  +                mkdir($ti.'/'.substr($interm_prefix,0,4));
  +                mkdir($ti.'/'.$interm_prefix);
  +        } else {
  +                $interm_prefix =~ s/[^0-9a-zA-Z.,_|-]/_/g;
  +                $interm_prefix .= '.';
  +        }
  +        $interm_prefix = $ti.'/'.$interm_prefix;
  +    
  +        if ($interm_prefix) {
  +            my $fh = Apache->gensym();
  +            if (sysopen($fh, $interm_prefix.$interm_count, 
O_WRONLY|O_CREAT|O_TRUNC)) {
  +                syswrite($fh,${$provider->get_strref});
  +                close($fh);
  +                $interm_count++;
  +            } else {
  +                AxKit::Debug(1,"could not open $interm_prefix$interm_count 
for writing: $!");
  +            }
  +        }
       }
   
       while (@$styles) {
  @@ -731,7 +753,7 @@
   
           if ($interm_prefix) {
               my $fh = Apache->gensym();
  -            if (sysopen($fh, $interm_prefix.'.'.$interm_count, 
O_WRONLY|O_CREAT|O_TRUNC)) {
  +            if (open($fh, '>'.$interm_prefix.$interm_count)) {
                   my $xmlstr;
                   if ($AxKit::Cfg->DebugTidy) {
                       eval {
  @@ -759,11 +781,11 @@
                           $xmlstr = "<?xml version='1.0'?>\n<empty reason='no 
data found'/>\n";
                       }
                   }
  -                syswrite($fh,$xmlstr);
  +                print($fh $xmlstr);
                   close($fh);
                   $interm_count++;
               } else {
  -                AxKit::Debug(1,"could not open $interm_prefix.$interm_count 
for writing: $!");
  +                AxKit::Debug(1,"could not open $interm_prefix$interm_count 
for writing: $!");
               }
           }
   
  
  
  
  1.11      +24 -11    xml-axkit/lib/Apache/AxKit/ConfigReader.pm
  
  Index: ConfigReader.pm
  ===================================================================
  RCS file: /home/cvs/xml-axkit/lib/Apache/AxKit/ConfigReader.pm,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- ConfigReader.pm   28 Jun 2002 01:26:01 -0000      1.10
  +++ ConfigReader.pm   29 Jan 2003 01:35:49 -0000      1.11
  @@ -40,7 +40,7 @@
   # you may want to override this in your subclass if you write your own 
ConfigReader
   sub get_config {
       my $self = shift;
  -    $self->{cfg} = _get_config($self->{apache});
  +        $self->{cfg} = _get_config($self->{apache});
   }
   
   # sub DESTROY {
  @@ -65,6 +65,9 @@
               $self->{cfg}->{CacheDir}
               ||
               $self->{apache}->dir_config('AxCacheDir')) {
  +        if (substr($cachedir,0,1) ne '/') {
  +                $self->{cfg}->{CacheDir} = $cachedir = 
Apache->request()->document_root.'/'.$cachedir;
  +        }
           return $cachedir;
       }
       
  @@ -160,6 +163,9 @@
       if (my $dir = $self->{cfg}{TraceIntermediate} ||
               $self->{apache}->dir_config('AxTraceIntermediate')) {
           return undef if $dir =~ m/^\s*(?:off|none|disabled?)\s*$/i;
  +        if (substr($dir,0,1) ne '/') {
  +                $self->{cfg}{TraceIntermediate} = $dir = 
Apache->request()->document_root.'/'.$dir;
  +        }
           return $dir;
       }
   
  @@ -346,12 +352,19 @@
       my $processors = $self->{apache}->dir_config('AxProcessors');
       if( $processors ) {
         foreach my $processor (split(/\s*,\s*/, $processors) ) {
  -     my ($pmedia, $pstyle, @processor) = split(/\s+/, $processor);
  -     next unless ($pmedia eq $media and $pstyle eq $style);
  -     push (@$list, [ 'NORMAL', @processor ] );
  +        my ($pmedia, $pstyle, @processor) = split(/\s+/, $processor);
  +        next unless ($pmedia eq $media and $pstyle eq $style);
  +        push (@$list, [ 'NORMAL', @processor ] );
         }
       }
       
  +    my @processors = $self->{apache}->dir_config->get('AxProcessor');
  +    foreach my $processor (@processors) {
  +        my ($pmedia, $pstyle, @processor) = split(/\s+/, $processor);
  +        next unless ($pmedia eq $media and $pstyle eq $style);
  +        push (@$list, [ @processor ] );
  +    }
  +    
       my @results;
       
       for my $directive (@$list) {
  @@ -361,25 +374,25 @@
                       href => $directive->[2],
                       title => $style,
                   };
  -        if ($type eq 'NORMAL') {
  +        if (lc($type) eq 'normal') {
               push @results, $style_hash;
           }
  -        elsif ($type eq 'DocType') {
  +        elsif (lc($type) eq 'doctype') {
               if ($doctype eq $directive->[3]) {
                   push @results, $style_hash;
               }
           }
  -        elsif ($type eq 'DTD') {
  +        elsif (lc($type) eq 'dtd') {
               if ($dtd eq $directive->[3]) {
                   push @results, $style_hash;
               }
           }
  -        elsif ($type eq 'Root') {
  +        elsif (lc($type) eq 'root') {
               if ($root eq $directive->[3]) {
                   push @results, $style_hash;
               }
           }
  -        elsif ($type eq 'URI') {
  +        elsif (lc($type) eq 'uri') {
               my $uri = $provider->apache_request->uri;
               if ($uri =~ /$directive->[3]/) {
                   push @results, $style_hash;
  @@ -391,7 +404,7 @@
       }
       
       # list any dynamically chosen stylesheets here
  -    $list = $self->{cfg}{DynamicProcessors};
  +    $list = $self->{cfg}{DynamicProcessors} || [ 
$self->{apache}->dir_config->get('AxDynamicProcessors') ];
       foreach my $package (@$list) {
           AxKit::load_module($package);
           no strict 'refs';
  
  
  
  1.4       +2 -2      xml-axkit/lib/Apache/AxKit/Exception.pm
  
  Index: Exception.pm
  ===================================================================
  RCS file: /home/cvs/xml-axkit/lib/Apache/AxKit/Exception.pm,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Exception.pm      29 Jun 2002 22:10:05 -0000      1.3
  +++ Exception.pm      29 Jan 2003 01:35:49 -0000      1.4
  @@ -8,7 +8,7 @@
       my $class = shift;
       my $self = $class->SUPER::new(@_);
       
  -    if ($AxKit::Cfg->StackTrace) {
  +    if ($AxKit::Cfg && $AxKit::Cfg->StackTrace) {
           my $i = $Error::Depth + 1;
           my ($pkg, $file, $line) = caller($i++);
           my @stacktrace;
  
  
  
  1.16      +6 -2      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.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- LibXSLT.pm        8 Jan 2003 17:11:04 -0000       1.15
  +++ LibXSLT.pm        29 Jan 2003 01:35:50 -0000      1.16
  @@ -153,7 +153,7 @@
   sub match_uri {
       my $uri = shift;
       AxKit::Debug(8, "LibXSLT match_uri: $uri");
  -    return 1 if $uri =~ /^axkit:/;
  +    return 1 if $uri =~ /^(axkit|xmldb):/;
       return $uri !~ /^\w+:/; # only handle URI's without a scheme
   }
   
  @@ -163,6 +163,8 @@
       
       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
  @@ -188,6 +190,8 @@
       
       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
  
  
  
  1.10      +3 -1      xml-axkit/lib/Apache/AxKit/Language/XPathScript.pm
  
  Index: XPathScript.pm
  ===================================================================
  RCS file: /home/cvs/xml-axkit/lib/Apache/AxKit/Language/XPathScript.pm,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- XPathScript.pm    26 Jan 2003 17:15:55 -0000      1.9
  +++ XPathScript.pm    29 Jan 2003 01:35:50 -0000      1.10
  @@ -326,6 +326,8 @@
       my $newdoc;
       if ($uri =~ /^axkit:/) {
           $newdoc = $parser->parse( AxKit::get_axkit_uri($uri) );
  +    } elsif ($uri =~ /^xmldb:/) {
  +        $newdoc = $parser->parse( 
Apache::AxKit::Provider::XMLDB::get_xmldb_uri($uri) );
       }
       elsif ($uri =~ /^\w\w+:/) { # assume it's scheme://foo uri
           eval {
  
  
  
  1.32      +14 -44    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.31
  retrieving revision 1.32
  diff -u -r1.31 -r1.32
  --- XSP.pm    28 Jan 2003 09:41:22 -0000      1.31
  +++ XSP.pm    29 Jan 2003 01:35:50 -0000      1.32
  @@ -106,16 +106,13 @@
       if ($to_eval) {
           eval {
               require Perl::Tidy;
  -            require IO::Scalar;
               AxKit::Debug(5,'Running PerlTidy...');
   
  -            my $temp_cache = Apache::AxKit::Cache->new($r, __PACKAGE__, 
'PerlTidy');
  -            $temp_cache->{no_cache} = 0;
  -            $temp_cache->write( $to_eval );
               my $errors;
  +         my $res;
               Perl::Tidy::perltidy(
  -                source => $temp_cache->{file},
  -                destination => new 
Apache::AxKit::Language::XSP::StringWriter($to_eval),
  +                source => \$to_eval,
  +                destination => \$res,
                   stderr => \$errors,
                   argv => '-se -npro -f -nsyn -pt=2 -sbt=2 -csc -csce=2 -vt=1 
-lp -cab=3 -iob');
               if ($errors) {
  @@ -123,6 +120,7 @@
               } else {
                   AxKit::Debug(5,"PerlTidy successful");
               }
  +         $to_eval = $res;
           } if $AxKit::Cfg->DebugTidy;
           AxKit::Debug(1,"AxDebugTidy unavailable for Perl code: $@") if $@;
   
  @@ -132,8 +130,8 @@
               $interm_prefix =~ s/[^0-9a-zA-Z.,_|-]/_/g;
               $interm_prefix = 
$AxKit::Cfg->TraceIntermediate.'/'.$interm_prefix;
               my $fh = Apache->gensym();
  -            if (sysopen($fh, $interm_prefix.'.XSP', 
O_WRONLY|O_CREAT|O_TRUNC)) {
  -                syswrite($fh,$to_eval);
  +            if (open($fh, '>'.$interm_prefix.'.XSP')) {
  +                print($fh $to_eval);
               } else {
                   AxKit::Debug(1,"could not open $interm_prefix.XSP for 
writing: $!");
               }
  @@ -557,28 +555,6 @@
       }
   }
   
  -# FIXME: can be removed when nsprefix stuff works okay
  -#sub generate_nsprefix {
  -#    my ($e, $nsuri) = @_;
  -#
  -#    unless ($e->{XSP_Random_Prefix}){
  -#        $e->{XSP_Random_Prefix} = join("",map { 
('a'..'z','A'..'Z','0'..'9','-','_')[rand(64)] } 1..5 );
  -#        $e->{XSP_Random_Sequence} = "aaaa";
  -#        $e->{XSP_Random_Map} = {};
  -#    }
  -#
  -#    my $nsprefix;
  -#    if (exists $e->{XSP_Random_Map}{$nsuri}) {
  -#        $nsprefix = $e->{XSP_Random_Map}{$nsuri}.$e->{XSP_Random_Prefix};
  -#    }
  -#    else {
  -#        $nsprefix = $e->{XSP_Random_Sequence}.$e->{XSP_Random_Prefix};
  -#        $e->{XSP_Random_Map}{$nsuri} = $e->{XSP_Random_Sequence};
  -#        $e->{XSP_Random_Sequence}++;
  -#    }
  -#    $nsprefix;
  -#}
  -
   ############################################################
   # Functions implementing xsp:* processing
   ############################################################
  @@ -835,14 +811,8 @@
                   "\n",
                   );
           $e->{XSP_User_Root} = 1;
  -#        $code = '{ my $elem = $document->createElement(q(' . $node->{Name} 
. '));' .
  -#        $code = '{ my $elem = $document->createElementNS(q(' . 
($node->{NamespaceURI} || "") . '), q(' . $node->{Name} . '));' .
   
           if ($node->{NamespaceURI}) {
  -# FIXME: This seems to be okay now, needs more testing.
  -#            if ($node->{Name} !~ m/:/) {
  -#                $node->{Name} = 
$e->generate_nsprefix($node->{NamespaceURI}).':'.$node->{Name};
  -#            }
               $code = '$parent = __mk_ns_element_node($document, $parent, '.
                 makeSingleQuoted($node->{NamespaceURI}).','.
                 makeSingleQuoted($node->{Name}).");\n";
  @@ -943,6 +913,7 @@
   package AxKit::XSP::SAXParser;
   
   use XML::LibXML 1.30;
  +use XML::LibXML::Common qw(:libxml :encoding);
   
   sub new {
       my ($type, %self) = @_; 
  @@ -985,7 +956,7 @@
   sub match_uri {
       my $uri = shift;
       AxKit::Debug(8, "XSP match_uri: $uri");
  -    return 1 if $uri =~ /^axkit:/;
  +    return 1 if $uri =~ /^(axkit|xmldb):/;
       return $uri !~ /^\w+:/; # only handle URI's without a scheme
   }
   
  @@ -995,6 +966,8 @@
   
       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
  @@ -1053,6 +1026,9 @@
               }
           }
       }
  +    elsif ($node_type == XML_XINCLUDE_START || $node_type == 
XML_XINCLUDE_END) {
  +     # ignore
  +    }
       else {
           warn("unknown node type: $node_type");
       }
  @@ -1212,12 +1188,6 @@
   way of providing an environment for dynamic pages. XSP is originally part
   of the Apache Cocoon project, and so you will see some Apache namespaces
   used in XSP.
  -
  -A warning to namespace users: Do not expect your namespace _prefixes_ to
  -come out of an XSP transformation as they were fed in. But since you are 
using
  -namespaces, this doesn't really matter. You just have to make sure that
  -each and every step in your transformation process is namespaces aware
  -and uses the correct namespace declarations.
   
   Also, use only one XSP processor in a pipeline.  XSP is powerful enough
   that you should only need one stage, and this implementation allows only
  
  
  
  1.7       +12 -4     xml-axkit/lib/Apache/AxKit/Language/XSP/SimpleTaglib.pm
  
  Index: SimpleTaglib.pm
  ===================================================================
  RCS file: /home/cvs/xml-axkit/lib/Apache/AxKit/Language/XSP/SimpleTaglib.pm,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- SimpleTaglib.pm   13 Sep 2002 13:01:05 -0000      1.6
  +++ SimpleTaglib.pm   29 Jan 2003 01:35:50 -0000      1.7
  @@ -228,6 +228,14 @@
   
   # companions to start_expr
   
  +sub start_expr {
  +    my $e = shift;
  +    my $cur = $e->{Current_Element};
  +    my $rc = $e->start_expr(@_);
  +    $e->{Current_Element} = $cur;
  +    return $rc;
  +}
  +
   sub start_elem {
       my ($e, $nodename, $attribs, $default_prefix, $default_ns) = @_;
       my($ns, $prefix, $name) = parse_namespace($nodename);
  @@ -629,10 +637,10 @@
           $e->append_to_script('.') if ($globalframe[0]{'capture'});
           $e->append_to_script('do { ');
           
start_elem($e,$$handlerAttributes{'nodename'},$$handlerAttributes{'resultattr'},$element->{'Prefix'},$ns);
  -        $e->start_expr($tag);
  +        start_expr($e,$tag);
       } else {
           $e->append_to_script('.') if ($globalframe[0]{'capture'} && 
$element->{Parent}->{Name} =~ /^(.*:)?(logic|expr)$/);
  -        $e->start_expr($tag);
  +        start_expr($e,$tag);
       }
   
       foreach my $attrib (keys %{$$handlerAttributes{'attribs'}}) {
  @@ -715,7 +723,7 @@
   
           $e->append_to_script('}; foreach my $_res (@_res) {');
           
start_elem($e,$$handlerAttributes{'nodename'},$$handlerAttributes{'resultattr'},$element->{'Prefix'},$ns);
  -        $e->start_expr($$handlerAttributes{'nodename'});
  +        start_expr($e,$$handlerAttributes{'nodename'});
           $e->append_to_script('$_res');
           $e->end_expr();
           end_elem($e);
  
  
  

Reply via email to