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 {