You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axkit-dev@xml.apache.org by ma...@apache.org on 2006/08/02 00:15:26 UTC

svn commit: r427768 - /xml/axkit/trunk/lib/Apache/AxKit/Language/XSP.pm

Author: matts
Date: Tue Aug  1 15:15:25 2006
New Revision: 427768

URL: http://svn.apache.org/viewvc?rev=427768&view=rev
Log:
Structured expr's (from AxKit2)

Modified:
    xml/axkit/trunk/lib/Apache/AxKit/Language/XSP.pm

Modified: xml/axkit/trunk/lib/Apache/AxKit/Language/XSP.pm
URL: http://svn.apache.org/viewvc/xml/axkit/trunk/lib/Apache/AxKit/Language/XSP.pm?rev=427768&r1=427767&r2=427768&view=diff
==============================================================================
--- xml/axkit/trunk/lib/Apache/AxKit/Language/XSP.pm (original)
+++ xml/axkit/trunk/lib/Apache/AxKit/Language/XSP.pm Tue Aug  1 15:15:25 2006
@@ -818,7 +818,7 @@
 
         if (Apache::AxKit::Language::XSP::is_xsp_namespace($node->{Parent}->{NamespaceURI})) {
             if (!$e->manage_text() || $node->{Parent}->{Name} =~ /^(?:.*:)?(?:content|element)$/) {
-                return '__mk_text_node($document, $parent, "" . do {';
+                return '__mk_expr_node($document, $parent, do {';
             }
             elsif ($node->{Parent}->{Name} =~ /^(.*:)?(logic|expr)$/) {
                 return 'do {';
@@ -826,7 +826,7 @@
             return ' . do {';
         }
         else {
-            return '__mk_text_node($document, $parent, "" . do {';
+            return '__mk_expr_node($document, $parent, do {';
         }
         warn("EEEK - Should never get here!!!");
 #        warn "start Expr: CurrentEl: ", $e->current_element, "\n";
@@ -1252,6 +1252,53 @@
     my ($document, $parent, $text) = @_;
     my $node = $document->createTextNode($text);
     $parent->appendChild($node);
+}
+
+sub __mk_expr_node {
+    my ($document, $parent, $as_xml, @data) = @_;
+    for my $data (@data) {
+        if ($as_xml) {
+            $parent->appendWellBalancedChunk($data);
+            return;
+        }
+        
+        if (my $ref = ref($data)) {
+            if ($ref eq 'ARRAY') {
+                my $i = 0;
+                for my $item (@$data) {
+                    my $node = $document->createElement('item');
+                    $node->setAttribute('idx' => $i++);
+                    __mk_expr_node($document, $node, $as_xml, $item);
+                    $parent->appendChild($node);
+                }
+            }
+            elsif ($ref eq 'HASH') {
+                for my $k (keys %$data) {
+                    my $item = $data->{$k};
+                    my $node;
+                    if ($k =~ s/^(.*?)://) {
+                        my $prefix = $1;
+                        my $uri = $parent->lookupNamespaceURI($prefix)
+                            || die "No namespace URI for prefix '$prefix'";
+                        $node = $document->createElementNS($uri, $k);
+                    }
+                    else {
+                        $node = $document->createElement($k);
+                    }
+                    __mk_expr_node($document, $node, $as_xml, $item);
+                    $parent->appendChild($node);
+                }
+            }
+            else {
+                die "expr can't yet handle ref type: $ref";
+            }
+        }
+        else {
+            # we stringify here to make sure we don't pass undef in.
+            my $node = $document->createTextNode("$data");
+            $parent->appendChild($node);
+        }
+    }
 }
 
 sub __mk_element_node {