dummy_foundation/lib/XML/DOM/NamedNodeMap.pm
changeset 4 60053dab7e2a
parent 3 8b87ea768cb8
child 5 c34a018f3291
--- a/dummy_foundation/lib/XML/DOM/NamedNodeMap.pm	Wed Jun 03 18:33:51 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,271 +0,0 @@
-######################################################################
-package XML::DOM::NamedNodeMap;
-######################################################################
-
-use strict;
-
-use Carp;
-use XML::DOM::DOMException;
-use XML::DOM::NodeList;
-
-use vars qw( $Special );
-
-# Constant definition:
-# Note: a real Name should have at least 1 char, so nobody else should use this
-$Special = "";
-
-sub new 
-{
-    my ($class, %args) = @_;
-
-    $args{Values} = new XML::DOM::NodeList;
-
-    # Store all NamedNodeMap properties in element $Special
-    bless { $Special => \%args}, $class;
-}
-
-sub getNamedItem 
-{
-    # Don't return the $Special item!
-    ($_[1] eq $Special) ? undef : $_[0]->{$_[1]};
-}
-
-sub setNamedItem 
-{
-    my ($self, $node) = @_;
-    my $prop = $self->{$Special};
-
-    my $name = $node->getNodeName;
-
-    if ($XML::DOM::SafeMode)
-    {
-	croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR)
-	    if $self->isReadOnly;
-
-	croak new XML::DOM::DOMException (WRONG_DOCUMENT_ERR)
-	    if $node->[XML::DOM::Node::_Doc] != $prop->{Doc};
-
-	croak new XML::DOM::DOMException (INUSE_ATTRIBUTE_ERR)
-	    if defined ($node->[XML::DOM::Node::_UsedIn]);
-
-	croak new XML::DOM::DOMException (INVALID_CHARACTER_ERR,
-		      "can't add name with NodeName [$name] to NamedNodeMap")
-	    if $name eq $Special;
-    }
-
-    my $values = $prop->{Values};
-    my $index = -1;
-
-    my $prev = $self->{$name};
-    if (defined $prev)
-    {
-	# decouple previous node
-	$prev->decoupleUsedIn;
-
-	# find index of $prev
-	$index = 0;
-	for my $val (@{$values})
-	{
-	    last if ($val == $prev);
-	    $index++;
-	}
-    }
-
-    $self->{$name} = $node;    
-    $node->[XML::DOM::Node::_UsedIn] = $self;
-
-    if ($index == -1)
-    {
-	push (@{$values}, $node);
-    }
-    else	# replace previous node with new node
-    {
-	splice (@{$values}, $index, 1, $node);
-    }
-    
-    $prev;
-}
-
-sub removeNamedItem 
-{
-    my ($self, $name) = @_;
-
-    # Be careful that user doesn't delete $Special node!
-    croak new XML::DOM::DOMException (NOT_FOUND_ERR)
-        if $name eq $Special;
-
-    my $node = $self->{$name};
-
-    croak new XML::DOM::DOMException (NOT_FOUND_ERR)
-        unless defined $node;
-
-    # The DOM Spec doesn't mention this Exception - I think it's an oversight
-    croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR)
-	if $self->isReadOnly;
-
-    $node->decoupleUsedIn;
-    delete $self->{$name};
-
-    # remove node from Values list
-    my $values = $self->getValues;
-    my $index = 0;
-    for my $val (@{$values})
-    {
-	if ($val == $node)
-	{
-	    splice (@{$values}, $index, 1, ());
-	    last;
-	}
-	$index++;
-    }
-    $node;
-}
-
-# The following 2 are really bogus. DOM should use an iterator instead (Clark)
-
-sub item 
-{
-    my ($self, $item) = @_;
-    $self->{$Special}->{Values}->[$item];
-}
-
-sub getLength 
-{
-    my ($self) = @_;
-    my $vals = $self->{$Special}->{Values};
-    int (@$vals);
-}
-
-#------------------------------------------------------------
-# Extra method implementations
-
-sub isReadOnly
-{
-    return 0 if $XML::DOM::IgnoreReadOnly;
-
-    my $used = $_[0]->{$Special}->{UsedIn};
-    defined $used ? $used->isReadOnly : 0;
-}
-
-sub cloneNode
-{
-    my ($self, $deep) = @_;
-    my $prop = $self->{$Special};
-
-    my $map = new XML::DOM::NamedNodeMap (Doc => $prop->{Doc});
-    # Not copying Parent property on purpose! 
-
-    local $XML::DOM::IgnoreReadOnly = 1;	# temporarily...
-
-    for my $val (@{$prop->{Values}})
-    {
-	my $key = $val->getNodeName;
-
-	my $newNode = $val->cloneNode ($deep);
-	$newNode->[XML::DOM::Node::_UsedIn] = $map;
-	$map->{$key} = $newNode;
-	push (@{$map->{$Special}->{Values}}, $newNode);
-    }
-
-    $map;
-}
-
-sub setOwnerDocument
-{
-    my ($self, $doc) = @_;
-    my $special = $self->{$Special};
-
-    $special->{Doc} = $doc;
-    for my $kid (@{$special->{Values}})
-    {
-	$kid->setOwnerDocument ($doc);
-    }
-}
-
-sub getChildIndex
-{
-    my ($self, $attr) = @_;
-    my $i = 0;
-    for my $kid (@{$self->{$Special}->{Values}})
-    {
-	return $i if $kid == $attr;
-	$i++;
-    }
-    -1;	# not found
-}
-
-sub getValues
-{
-    wantarray ? @{ $_[0]->{$Special}->{Values} } : $_[0]->{$Special}->{Values};
-}
-
-# Remove circular dependencies. The NamedNodeMap and its values should
-# not be used afterwards.
-sub dispose
-{
-    my $self = shift;
-
-    for my $kid (@{$self->getValues})
-    {
-	undef $kid->[XML::DOM::Node::_UsedIn]; # was delete
-	$kid->dispose;
-    }
-
-    delete $self->{$Special}->{Doc};
-    delete $self->{$Special}->{Parent};
-    delete $self->{$Special}->{Values};
-
-    for my $key (keys %$self)
-    {
-	delete $self->{$key};
-    }
-}
-
-sub setParentNode
-{
-    $_[0]->{$Special}->{Parent} = $_[1];
-}
-
-sub getProperty
-{
-    $_[0]->{$Special}->{$_[1]};
-}
-
-#?? remove after debugging
-sub toString
-{
-    my ($self) = @_;
-    my $str = "NamedNodeMap[";
-    while (my ($key, $val) = each %$self)
-    {
-	if ($key eq $Special)
-	{
-	    $str .= "##Special (";
-	    while (my ($k, $v) = each %$val)
-	    {
-		if ($k eq "Values")
-		{
-		    $str .= $k . " => [";
-		    for my $a (@$v)
-		    {
-#			$str .= $a->getNodeName . "=" . $a . ",";
-			$str .= $a->toString . ",";
-		    }
-		    $str .= "], ";
-		}
-		else
-		{
-		    $str .= $k . " => " . $v . ", ";
-		}
-	    }
-	    $str .= "), ";
-	}
-	else
-	{
-	    $str .= $key . " => " . $val . ", ";
-	}
-    }
-    $str . "]";
-}
-
-1; # package return code