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 {