/[suikacvs]/messaging/manakai/lib/Message/DOM/Document.pm
Suika

Diff of /messaging/manakai/lib/Message/DOM/Document.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.14 by wakaba, Sat Dec 30 04:42:51 2006 UTC revision 1.22 by wakaba, Mon Sep 24 10:16:14 2007 UTC
# Line 1  Line 1 
1  #!/usr/bin/perl  ## NOTE: This module will be renamed as Document.pm.
 ## This file is automatically generated  
 ##      at 2006-12-30T04:24:35+00:00,  
 ##      from file "Document.dis",  
 ##      module <http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom#ManakaiDOM.Document>,  
 ##      for <http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom#ManakaiDOMLatest>.  
 ## Don't edit by hand!  
 use strict;  
 require Message::DOM::DOMCore;  
 require Message::DOM::TreeCore;  
 require Message::Util::Error::DOMException;  
 package Message::DOM::Document;  
 our $VERSION = 20061230.0424;  
 package Message::DOM::Document::ManakaiDOMImplementationDocument;  
 our $VERSION = 20061230.0424;  
 push @Message::DOM::DOMCore::ManakaiDOMImplementation::ISA, q<Message::DOM::Document::ManakaiDOMImplementationDocument> unless Message::DOM::DOMCore::ManakaiDOMImplementation->isa (q<Message::DOM::Document::ManakaiDOMImplementationDocument>);  
 sub create_document ($;$$$) {  
 my ($self, $namespaceURI, $qualifiedName, $doctype) = @_;  
   
 {  
   
 if  
 (CORE::defined $namespaceURI and CORE::length $namespaceURI == 0) {  
   require Message::DOM::DOMMain;  
     
 report Message::DOM::DOMCore::ManakaiDOMError -object => $self, '-type' => 'http://suika.fam.cx/~wakaba/archive/2004/dom/main#empty-namespace-uri', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:tag:suika.fam.cx,2005-09:1167450139:7187:cCkYT15288+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';  
   
 ;  
   
     
   
 {  
   
   
 $namespaceURI = undef;  
     
   
   
 }  
   
 ;  
 }  
   
   
 }  
 my $r;  
   
 {  
   
 require  
 Scalar::Util;  
 $r = bless \{  
     
 'child'  
  => [],  
     
 'impl'  
  => $self,  
     
 'http://www.w3.org/2001/04/infoset#version'  
  => '1.0',  
     
 'chk'  
  => 1,  
 },  
 'Message::DOM::Document::ManakaiDOMDocument'  
 ;  
   
 if (defined $doctype) {  
     
   
 {  
   
 local $Error::Depth = $Error::Depth + 1;  
   
 {  
   
   
   
     $r->  
 append_child  
  ($doctype);  
     
   
   
 }  
   
   
 ;}  
   
 ;  
 }  
   
 if (defined $qualifiedName) {  
     
   
 {  
   
 local $Error::Depth = $Error::Depth + 1;  
   
 {  
   
   
     my  
 $el = $r->  
 create_element_ns  
   
                    ($namespaceURI, $qualifiedName);  
     $r->  
 append_child  
  ($el);  
     $r = $el->  
 owner_document  
 ;  
            ## Choose the class based on document element type  
     
   
   
 }  
   
   
 ;}  
2    
3  ;  package Message::DOM::Document;
4  } elsif (defined $namespaceURI) {  use strict;
5      our $VERSION=do{my @r=(q$Revision$=~/\d+/g);sprintf "%d."."%02d" x $#r,@r};
6  report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NAMESPACE_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'create_document', 'http://www.w3.org/2001/04/infoset#namespaceURI' => $namespaceURI, 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#MDOM_NS_NULL_QNAME_WITH_NON_NULL_URI', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMImplementationDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'namespaceURI';  push our @ISA, 'Message::DOM::Node', 'Message::IF::Document',
7        'Message::IF::DocumentTraversal', 'Message::IF::DocumentXDoctype',
8  ;      'Message::IF::DocumentSelector', # MUST in Selectors API spec
9  }      'Message::IF::HTMLDocument';
10    require Message::DOM::Node;
11    use Char::Class::XML
12  }      qw/
13  $r}        InXML_NameStartChar10 InXMLNameStartChar11
14  $Message::DOM::DOMFeature::ClassInfo->{q<Message::DOM::Document::ManakaiDOMImplementationDocument>}->{has_feature} = {};        InXMLNameChar10 InXMLNameChar11
15  $Message::DOM::ClassPoint{q<Message::DOM::Document::ManakaiDOMImplementationDocument>} = 0;        InXML_NCNameStartChar10 InXMLNCNameStartChar11
16  package Message::DOM::IFLatest::Document;        InXMLNCNameChar10 InXMLNCNameChar11
17  our $VERSION = 20061230.0424;      /;
18  package Message::DOM::Document::ManakaiDOMDocument;  
19  our $VERSION = 20061230.0424;  sub ____new ($$) {
20  push our @ISA, 'Message::DOM::TreeCore::ManakaiDOMNode',    my $self = shift->SUPER::____new (undef);
21  'Message::DOM::IFLatest::Document',    $$self->{implementation} = $_[0];
22  'Message::DOM::IFLatest::Node';    $$self->{strict_error_checking} = 1;
23  sub node_type ($;$) {    $$self->{child_nodes} = [];
24  if (@_ == 1) {my ($self) = @_;    $$self->{'http://suika.fam.cx/www/2006/dom-config/strict-document-children'} = 1;
25  my $r;    $$self->{'http://suika.fam.cx/www/2006/dom-config/dtd-default-attribute'} = 1;
26  $r = 9;    $$self->{'http://suika.fam.cx/www/2006/dom-config/clone-entity-reference-subtree'} = 1;
27  $r;    $$self->{'error-handler'} = sub ($) {
28  } else {my ($self) = @_;      ## NOTE: Same as one set by |setParameter| with |undef| value.
29  report Message::Util::Error::DOMException::CoreException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#on' => 'get', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/DOMException#READ_ONLY_ATTRIBUTE_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#attr' => 'node_type';      warn $_[0];
30  }      return $_[0]->severity != 3; # SEVERITY_FATAL_ERROR
31  }    };
32  sub append_child ($$) {    return $self;
33  my ($self, $newChild) = @_;  } # ____new
34  my $r;              
35    sub AUTOLOAD {
36  {    my $method_name = our $AUTOLOAD;
37      $method_name =~ s/.*:://;
38  my    return if $method_name eq 'DESTROY';
 $strictc = $self->  
 dom_config  
   
                    ->  
 get_parameter  
   
                        (  
 'http://suika.fam.cx/www/2006/dom-config/strict-document-children'  
 );  
 my $child_od = $newChild->  
 owner_document  
  || $self;  
 my $child_nt = $newChild->  
 node_type  
 ;  
 if ($strictc and $self->  
 strict_error_checking  
 ) {  
     
   
 {  
   
 local $Error::Depth = $Error::Depth + 1;  
   
 {  
   
   
     my  
 $has_el;  
     my $has_dt;  
     if ($child_nt ==  
 1  
 ) {  
       $has_el =  
 1  
 ;  
     } elsif ($child_nt ==  
 10  
 ) {  
       $has_dt =  
 1  
 ;  
     } elsif ($child_nt ==  
 11  
 ) {  
       for my $cn (@{$newChild->  
 child_nodes  
 }) {  
         my $cnt = $cn->  
 node_type  
 ;  
         if ($cnt ==  
 1  
 ) {  
           if ($has_el) {  
               
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'append_child', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#MDOM_SECOND_DOC_ELEMENT', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
   
 ;}  
39    
40  ;    if ({
41        ## Read-only attributes (trivial accessors)
42        implementation => 1,
43      }->{$method_name}) {
44        no strict 'refs';
45        eval qq{
46          sub $method_name (\$) {
47            return \${\$_[0]}->{$method_name};
48          }
49        };
50        goto &{ $AUTOLOAD };
51      } elsif ({
52        ## Read-write attributes (DOMString, trivial accessors)
53        document_uri => 1,
54        input_encoding => 1,
55      }->{$method_name}) {
56        no strict 'refs';
57        eval qq{
58          sub $method_name (\$;\$) {
59            if (\@_ > 1) {
60              if (\${\$_[0]}->{strict_error_checking} and
61                  \${\$_[0]}->{manakai_read_only}) {
62                report Message::DOM::DOMException
63                    -object => \$_[0],
64                    -type => 'NO_MODIFICATION_ALLOWED_ERR',
65                    -subtype => 'READ_ONLY_NODE_ERR';
66              }
67              if (defined \$_[1]) {
68                \${\$_[0]}->{$method_name} = ''.\$_[1];
69              } else {
70                delete \${\$_[0]}->{$method_name};
71            }            }
           $has_el =  
 1  
 ;  
72          }          }
73          # DocumentType node cannot be contained in DocumentFragments          return \${\$_[0]}->{$method_name};
74        }        }
75      }      };
76        goto &{ $AUTOLOAD };
77      if ($has_el) {    } elsif ({
78        my $anode = $self->      ## Read-write attributes (boolean, trivial accessors)
79  last_child      all_declarations_processed => 1,
80  ;    }->{$method_name}) {
81        while (defined $anode) {      no strict 'refs';
82          if ($anode->      eval qq{
83  node_type        sub $method_name (\$;\$) {
84   ==          if (\@_ > 1) {
85  1            if (\${\$_[0]}->{manakai_strict_error_checking} and
86  ) {                \${\$_[0]}->{manakai_read_only}) {
87                          report Message::DOM::DOMException
88                    -object => \$_[0],
89  {                  -type => 'NO_MODIFICATION_ALLOWED_ERR',
90                    -subtype => 'READ_ONLY_NODE_ERR';
91  local $Error::Depth = $Error::Depth - 1;            }
92              if (\$_[1]) {
93  {              \${\$_[0]}->{$method_name} = 1;
94              } else {
95  report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'append_child', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#MDOM_SECOND_DOC_ELEMENT', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;              delete \${\$_[0]}->{$method_name};
96              }
   
 }  
   
   
 ;}  
   
 ;  
97          }          }
98          $anode = $anode->          return \${\$_[0]}->{$method_name};
 previous_sibling  
 ;  
99        }        }
100      } # has_el      };
101      if ($has_dt) {      goto &{ $AUTOLOAD };
102        my $anode = $self->    } elsif (my $module_name = {
103  last_child      create_attribute => 'Message::DOM::Attr',
104  ;      create_attribute_ns => 'Message::DOM::Attr',
105        while (defined $anode) {      create_attribute_definition => 'Message::DOM::AttributeDefinition',
106          my $ant = $anode->      create_cdata_section => 'Message::DOM::Text',
107  node_type      create_comment => 'Message::DOM::CharacterData',
108  ;      create_document_fragment => 'Message::DOM::DocumentFragment',
109          if ($ant ==      create_document_type_definition => 'Message::DOM::DocumentType',
110  1      create_element => 'Message::DOM::Element',
111  ) {      create_element_ns => 'Message::DOM::Element',
112                  create_element_type_definition => 'Message::DOM::ElementTypeDefinition',
113        create_entity_reference => 'Message::DOM::EntityReference',
114  {      create_general_entity => 'Message::DOM::Entity',
115        create_notation => 'Message::DOM::Notation',
116  local $Error::Depth = $Error::Depth - 1;      create_processing_instruction => 'Message::DOM::ProcessingInstruction',
117        manakai_create_serial_walker => 'Message::DOM::SerialWalker',
118        create_text_node => 'Message::DOM::Text',
119        create_tree_walker => 'Message::DOM::TreeWalker',
120        query_selector => 'Message::DOM::SelectorsAPI',
121        query_selector_all => 'Message::DOM::SelectorsAPI',
122      }->{$method_name}) {
123        eval qq{ require $module_name } or die $@;
124        goto &{ $AUTOLOAD };
125      } else {
126        require Carp;
127        Carp::croak (qq<Can't locate method "$AUTOLOAD">);
128      }
129    } # AUTOLOAD
130    sub implementation ($);
131    sub create_attribute ($$);
132    sub create_attribute_ns ($$$);
133    sub create_attribute_definition ($$);
134    sub create_cdata_section ($$);
135    sub create_comment ($$);
136    sub create_document_fragment ($);
137    sub create_document_type_definition ($$);
138    sub create_element ($$);
139    sub create_element_ns ($$$);
140    sub create_element_type_definition ($$);
141    sub create_entity_reference ($$);
142    sub create_general_entity ($$);
143    sub create_notation ($$);
144    sub create_processing_instruction ($$$);
145    sub create_text_node ($$);
146    
147    ## |Node| attributes
148    
149    sub base_uri ($) {
150      my $v = ${$_[0]}->{manakai_entity_base_uri};
151      if (defined $v) {
152        return $v;
153      } else {
154        return ${$_[0]}->{document_uri};
155      }
156      ## TODO: HTML5 <base>
157    } # base_uri
158    
159  {  sub node_name () { '#document' }
160    
161  report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'append_child', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#HIERARCHY_WRONG_DOCTYPE_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  sub node_type () { 9 } # DOCUMENT_NODE
162    
163    sub text_content ($;$) {
164      my $self = shift;
165      if ($$self->{'http://suika.fam.cx/www/2006/dom-config/strict-document-children'}) {
166        return undef;
167      } else {
168        local $Error::Depth = $Error::Depth + 1;
169        return $self->SUPER::text_content (@_);
170      }
171    } # text_content
172    
173  }  ## |Node| methods
174    
175    sub adopt_node ($$) {
176      my ($self, $source) = @_;
177      ## TODO: Should we apply |copy-asis| configuration parameter to this method?
178    
179  ;}    return undef unless UNIVERSAL::isa ($source, 'Message::DOM::Node');
180    
181  ;    my $strict = $self->strict_error_checking;
182          } elsif ($ant ==    if ($strict and $$self->{manakai_read_only}) {
183  10      report Message::DOM::DOMException
184  ) {          -object => $self,
185                      -type => 'NO_MODIFICATION_ALLOWED_ERR',
186            -subtype => 'READ_ONLY_NODE_ERR';
187      }
188    
189  {    my $parent = $source->parent_node;
190      if ($strict and defined $parent and $$parent->{manakai_read_only}) {
191        report Message::DOM::DOMException
192            -object => $self,
193            -type => 'NO_MODIFICATION_ALLOWED_ERR',
194            -subtype => 'READ_ONLY_NODE_ERR';
195      }
196    
197  local $Error::Depth = $Error::Depth - 1;    my $nt = $source->node_type;
198      my $oe;
199      if ($nt == 2) { # ATTRIBUTE_NODE
200        $oe = $source->owner_element;
201        if ($strict and defined $oe and $$oe->{manakai_read_only}) {
202          report Message::DOM::DOMException
203              -object => $self,
204              -type => 'NO_MODIFICATION_ALLOWED_ERR',
205              -subtype => 'READ_ONLY_NODE_ERR';
206        }
207      } elsif ($nt == 9 or $nt == 10 or $nt == 6 or $nt == 12 or
208               $nt == 81001 or $nt == 81002) {
209        # DOCUMENT_NODE, DOCUMENT_TYPE_NODE, ENTITY_NODE, NOTATION_NODE,
210        # ELEMENT_TYPE_DEFINITION_NODE, ATTRIBUTE_DEFINITION_NODE
211        report Message::DOM::DOMException
212            -object => $self,
213            -type => 'NOT_SUPPORTED_ERR',
214            -subtype => 'ADOPT_NODE_TYPE_NOT_SUPPORTED_ERR';
215        ## ISSUE: Define ELEMENT_TYPE_DEFINITION_NODE and ATTRIBUTE_DEFINITION_NODE
216      }
217    
218  {    my @change_od;
219      my @nodes = ($source);
220      while (@nodes) {
221        my $node = shift @nodes;
222        my $nt = $node->node_type;
223        if ($strict and $$node->{manakai_read_only}) {
224          report Message::DOM::DOMException
225              -object => $self,
226              -type => 'NO_MODIFICATION_ALLOWED_ERR',
227              -subtype => 'READ_ONLY_NODE_ERR';
228        }
229    
230  report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'append_child', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#MDOM_SECOND_DOCTYPE', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;      push @change_od, $node;
231        push @nodes, @{$node->child_nodes}, @{$node->attributes or []};
232      } # @nodes
233    
234      local $Error::Depth = $Error::Depth + 1;
235    
236  }    if (defined $parent) {
237        $parent->remove_child ($source);
238      } elsif (defined $oe) {
239        $oe->remove_attribute_node ($source);
240      }
241    
242      return $source if $self eq $change_od[0]->owner_document;
243                             ## NOTE: The array must have more than zero
244                             ##       nodes by definition.  In addition,
245                             ##       it cannot contain document or document
246                             ##       type nodes in current implementation.
247    
248  ;}    my @ud_node;
249      for my $n (@change_od) {
250        $$n->{owner_document} = $self;
251        Scalar::Util::weaken ($$n->{owner_document});
252        if ($$n->{user_data}) {
253          push @ud_node, $n;
254        }
255      }
256    
257  ;    for my $src (@ud_node) {
258          }      my $src_ud = $$src->{user_data};
259          $anode = $anode->      for my $key (keys %{$src_ud}) {
260  previous_sibling        my $dh = $src_ud->{$key}->[1];
261  ;        if ($dh) {
262            $dh->(5, $key, $src_ud->{$key}->[0], $src, undef); # NODE_ADOPTED
263        }        }
264      } # has_dt      }
265        }
   
   
 }  
   
   
 ;}  
   
 ;  
 }  
   
   
 {  
   
   
 {  
   
 local $Error::Depth = $Error::Depth + 1;  
   
 {  
266    
267      return $source;
268    } # adopt_node
269    
270    my  sub append_child ($$) {
271  $strict = $self->    ## NOTE: Overrides |Node|'s implementation.
272  strict_error_checking    my $self = $_[0];
273  ;    
274      ## NOTE: |$self_od| code here in some $self->node_type.
275    
276    ## -- Node Type check    ## -- Node Type check
277    my @new_child;    my @new_child;
278    if ({    my $new_child_parent;
279      3 => (not $strictc),    if ($_[1]->node_type == 11) { # DOCUMENT_FRAGMENT_NODE
280      5 => (not $strictc),      push @new_child, @{$_[1]->child_nodes};
281      1 => 1,      $new_child_parent = $_[1];
     4 => (not $strictc),  
     7 => 1,  
     8 => 1,  
     10 => 1,  
   }->{$child_nt}) {  
     push @new_child, $newChild;  
   } elsif ($child_nt ==  
 11  
 ) {  
     for my $cn (@{$newChild->  
 child_nodes  
 }) {  
       unless ({  
     3 => (not $strictc),  
     5 => (not $strictc),  
     1 => 1,  
     4 => (not $strictc),  
     7 => 1,  
     8 => 1,  
     10 => 1,  
   }->{$cn->  
 node_type  
 }) {  
           
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#HIERARCHY_BAD_TYPE', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/appendChildImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
       }  
       push @new_child, $cn;  
     }  
282    } else {    } else {
283            @new_child = ($_[1]);
284        $new_child_parent = $_[1]->parent_node;
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#HIERARCHY_BAD_TYPE', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/appendChildImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
285    }    }
286    
287    my $nc_parent = @new_child ? $new_child[0]->    ## NOTE: Depends on $self->node_type:
288  parent_node    if ($$self->{strict_error_checking}) {
289                               :      my $child_od = $_[1]->owner_document || $_[1]; # might be DocumentType
290        if ($self ne $child_od and $child_od->node_type != 10) {
291  undef        report Message::DOM::DOMException # DOCUMENT_TYPE_NODE
292  ;            -object => $self,
293    if ($strict) {            -type => 'WRONG_DOCUMENT_ERR',
294      ## -- Wrong-document check            -subtype => 'EXTERNAL_OBJECT_ERR';
295      unless ($self eq $child_od) {      }
296          
297        if ($$self->{manakai_read_only} or
298  {          (@new_child and defined $new_child_parent and
299             $$new_child_parent->{manakai_read_only})) {
300  local $Error::Depth = $Error::Depth - 1;        report Message::DOM::DOMException
301              -object => $self,
302  {            -type => 'NO_MODIFICATION_ALLOWED_ERR',
303              -subtype => 'READ_ONLY_NODE_ERR';
304  report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'WRONG_DOCUMENT_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#DIFFERENT_DOCUMENT_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/appendChildImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;      }
305    
306        ## NOTE: Only in |Document|:
307  }      my $strict_children = $self->dom_config->get_parameter
308            (q<http://suika.fam.cx/www/2006/dom-config/strict-document-children>);
309        if ($strict_children) {
310  ;}        my $has_el;
311          my $has_dt;
312  ;        my $child_nt = $_[1]->node_type;
313      }        if ($child_nt == 1) { # ELEMENT_NODE
314            $has_el = 1;
315      ## -- Read-onlyness check        } elsif ($child_nt == 10) { # DOCUMENT_TYPE_NODE
316      if ($self->          $has_dt = 1;
317  manakai_read_only        } elsif ($child_nt == 11) { # DOCUMENT_FRAGMENT_NODE
318  ) {          for my $cn (@{$_[1]->child_nodes}) {
319                    my $cnt = $cn->node_type;
320              if ($cnt == 1) { # ELEMENT_NODE
321  {              if ($has_el) {
322                  report Message::DOM::DOMException
323  local $Error::Depth = $Error::Depth - 1;                    -object => $self,
324                      -type => 'HIERARCHY_REQUEST_ERR',
325  {                    -subtype => 'CHILD_NODE_TYPE_ERR';
326                }
327  report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#NOMOD_THIS', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/appendChildImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';              $has_el = 1;
328              } elsif ($cnt == 10) { # DOCUMENT_TYPE_NODE
329                ## NOTE: |DocumentType| node cannot be contained in
330  }              ## |DocumentFragment| in strict mode.
331                if ($has_dt) {
332                  report Message::DOM::DOMException
333  ;}                    -object => $self,
334                      -type => 'HIERARCHY_REQUEST_ERR',
335  ;                    -subtype => 'CHILD_NODE_TYPE_ERR';
336                }
337                $has_dt = 1;
338              }
339            }
340          }
341      
342          if ($has_el) {
343            my $anode = $self->last_child;
344            while (defined $anode) {
345              if ($anode->node_type == 1) { # ELEMENT_NODE
346                report Message::DOM::DOMException
347                    -object => $self,
348                    -type => 'HIERARCHY_REQUEST_ERR',
349                    -subtype => 'CHILD_NODE_TYPE_ERR';
350              }
351              $anode = $anode->previous_sibling;
352            }
353          } # has_el
354          if ($has_dt) {
355            my $anode = $self->last_child;
356            while (defined $anode) {
357              my $ant = $anode->node_type;
358              if ($ant == 1 or $ant == 10) { # ELEMENT_NODE or DOCUMENT_TYPE_NODE
359                report Message::DOM::DOMException
360                    -object => $self,
361                    -type => 'HIERARCHY_REQUEST_ERR',
362                    -subtype => 'CHILD_NODE_TYPE_ERR';
363              }
364              $anode = $anode->previous_sibling;
365            }
366          } # has_dt
367      }      }
     if (@new_child) {  
       if ($nc_parent and  
           $nc_parent->  
 manakai_read_only  
 ) {  
           
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
368    
369  report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#NOMOD_SRC_PARENT', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/appendChildImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';      for my $cn (@new_child) {
370          unless ({
371                   3, (not $strict_children), # TEXT_NODE
372  }                 5, (not $strict_children), # ENTITY_REFERENCE_NODE
373                   1, 1, # ELEMENT_NODE
374                   4, (not $strict_children), # CDATA_SECTION_NODE
375  ;}                 7, 1, # PROCESSING_INSTRUCTION_NODE
376                   8, 1, # COMMENT_NODE
377  ;                 10, 1, # DOCUMENT_TYPE_NODE
378                  }->{$cn->node_type}) {
379            report Message::DOM::DOMException
380                -object => $self,
381                -type => 'HIERARCHY_REQUEST_ERR',
382                -subtype => 'CHILD_NODE_TYPE_ERR';
383        }        }
384      }      }
   }  
385    
386    ## -- Insert at...      ## NOTE: Ancestor check here in |Node|.
387    my $index = -1; # last    }
     
388    
389  ; # FOR !tc:ForAppendChild    ## NOTE: "Insert at" code only in insert_before and replace_child
390    
391    ## -- Removes from parent    ## -- Removes from parent
392    if ($nc_parent) {    if ($new_child_parent) {
393      if ($child_nt ==      if (@new_child == 1) {
394  11        my $v = $$new_child_parent->{child_nodes};
 ) {  
       $$newChild->{  
 'child'  
 } = [];  
     } else {  
       my $v = $$nc_parent->{  
 'child'  
 };  
395        RP: for my $i (0..$#$v) {        RP: for my $i (0..$#$v) {
396          if ($v->[$i] eq $new_child[0]) {          if ($v->[$i] eq $new_child[0]) {
397            splice @$v, $i, 1, ();            splice @$v, $i, 1, ();
398            last RP;            last RP;
399          }          }
400        } # RP        } # RP
401        } else {
402          @{$$new_child_parent->{child_nodes}} = ();
403      }      }
404    }    }
405    
406    ## -- Rewrite the |parentNode| properties    ## -- Rewrite the |parentNode| properties
407    for my $nc (@new_child) {    for my $nc (@new_child) {
408      $$nc->{      $$nc->{parent_node} = $self;
409  'parent'      Scalar::Util::weaken ($$nc->{parent_node});
 } = $self;  
     Scalar::Util::weaken ($$nc->{  
 'parent'  
 });  
410    }    }
411    
412    my $children = $$self->{    ## NOTE: Depends on method:
413  'child'    push @{$$self->{child_nodes}}, @new_child;
 };  
   
     
   
 {  
   
   
 ## -- Adds to children list  
     push @$children, @new_child;  
     $r = $newChild;  
     
   
   
 }  
   
 ;  
   
     
   
 ;  
   
     
   
 ;  
   
   
   
 }  
   
   
 ;}  
   
 ;  
   
   
 }  
   
 ;  
 if ($child_nt ==  
 10 and  
       
 not defined $newChild->  
 owner_document  
 ) {  
   CORE::delete $$newChild->{  
 'impl'  
 };  
   $$newChild->{  
 'od'  
 } = $self;  
   Scalar::Util::weaken ($$newChild->{  
 'od'  
 });  
 }  
   
   
 }  
 $r}  
 sub insert_before ($$;$) {  
 my ($self, $newChild, $refChild) = @_;  
 my $r;  
   
 {  
   
 my  
 $strictc = $self->  
 dom_config  
   
                    ->  
 get_parameter  
   
                        (  
 'http://suika.fam.cx/www/2006/dom-config/strict-document-children'  
 );  
 my $child_od = $newChild->  
 owner_document  
  || $self;  
 my $child_nt = $newChild->  
 node_type  
 ;  
 if ($strictc and $self->  
 strict_error_checking  
 ) {  
     
   
 {  
   
 local $Error::Depth = $Error::Depth + 1;  
   
 {  
414    
415      ## NOTE: Only in |Document|.
416      for (@new_child) {
417        delete $$_->{implementation};
418        $$_->{owner_document} = $self;
419        Scalar::Util::weaken ($$_->{owner_document});
420      }
421    
422      my    return $_[1];
423  $has_el;  } # apepnd_child
     my $has_dt;  
     if ($child_nt ==  
 1  
 ) {  
       $has_el =  
 1  
 ;  
     } elsif ($child_nt ==  
 10  
 ) {  
       $has_dt =  
 1  
 ;  
     } elsif ($child_nt ==  
 11  
 ) {  
       for my $cn (@{$newChild->  
 child_nodes  
 }) {  
         my $cnt = $cn->  
 node_type  
 ;  
         if ($cnt ==  
 1  
 ) {  
           if ($has_el) {  
               
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'insert_before', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#MDOM_SECOND_DOC_ELEMENT', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
424    
425    sub manakai_append_text ($$) {
426      my $self = shift;
427      if ($$self->{'http://suika.fam.cx/www/2006/dom-config/strict-document-children'}) {
428        #
429      } else {
430        local $Error::Depth = $Error::Depth + 1;
431        return $self->SUPER::manakai_append_text (@_);
432      }
433    } # manakai_append_text
434    
435  }  sub insert_before ($$) {
436      ## NOTE: Overrides |Node|'s implementation.
437      my $self = $_[0];
438    
439      ## NOTE: |$self_od| code here depending on $self->node_type.
440    
441  ;}    ## -- Node Type check
442      my @new_child;
443      my $new_child_parent;
444      if ($_[1]->node_type == 11) { # DOCUMENT_FRAGMENT_NODE
445        push @new_child, @{$_[1]->child_nodes};
446        $new_child_parent = $_[1];
447      } else {
448        @new_child = ($_[1]);
449        $new_child_parent = $_[1]->parent_node;
450      }
451    
452  ;    ## NOTE: Depends on $self->node_type:
453      if ($$self->{strict_error_checking}) {
454        my $child_od = $_[1]->owner_document || $_[1]; # might be DocumentType
455        if ($self ne $child_od and $child_od->node_type != 10) {
456          report Message::DOM::DOMException # DOCUMENT_TYPE_NODE
457              -object => $self,
458              -type => 'WRONG_DOCUMENT_ERR',
459              -subtype => 'EXTERNAL_OBJECT_ERR';
460        }
461    
462        if ($$self->{manakai_read_only} or
463            (@new_child and defined $new_child_parent and
464             $$new_child_parent->{manakai_read_only})) {
465          report Message::DOM::DOMException
466              -object => $self,
467              -type => 'NO_MODIFICATION_ALLOWED_ERR',
468              -subtype => 'READ_ONLY_NODE_ERR';
469        }
470    
471        ## NOTE: Only in |Document|:
472        my $strict_children = $self->dom_config->get_parameter
473            (q<http://suika.fam.cx/www/2006/dom-config/strict-document-children>);
474        if ($strict_children) {
475          my $has_el;
476          my $has_dt;
477          my $child_nt = $_[1]->node_type;
478          if ($child_nt == 1) { # ELEMENT_NODE
479            $has_el = 1;
480          } elsif ($child_nt == 10) { # DOCUMENT_TYPE_NODE
481            $has_dt = 1;
482          } elsif ($child_nt == 11) { # DOCUMENT_FRAGMENT_NODE
483            for my $cn (@{$_[1]->child_nodes}) {
484              my $cnt = $cn->node_type;
485              if ($cnt == 1) { # ELEMENT_NODE
486                if ($has_el) {
487                  report Message::DOM::DOMException
488                      -object => $self,
489                      -type => 'HIERARCHY_REQUEST_ERR',
490                      -subtype => 'CHILD_NODE_TYPE_ERR';
491                }
492                $has_el = 1;
493              } elsif ($cnt == 10) { # DOCUMENT_TYPE_NODE
494                ## NOTE: |DocumentType| node cannot be contained in
495                ## |DocumentFragment| in strict mode.
496                if ($has_dt) {
497                  report Message::DOM::DOMException
498                      -object => $self,
499                      -type => 'HIERARCHY_REQUEST_ERR',
500                      -subtype => 'CHILD_NODE_TYPE_ERR';
501                }
502                $has_dt = 1;
503            }            }
           $has_el =  
 1  
 ;  
504          }          }
         # DocumentType node cannot be contained in DocumentFragments  
505        }        }
     }  
   
     if ($has_el) {  
       my $anode = $refChild ? $refChild->  
 previous_sibling  
                             :  
 $self->  
 last_child  
 ;  
       while (defined $anode) {  
         if ($anode->  
 node_type  
  ==  
 1  
 ) {  
             
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'insert_before', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#MDOM_SECOND_DOC_ELEMENT', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
         }  
         $anode = $anode->  
 previous_sibling  
 ;  
       }  
       $anode = $refChild;  
       while (defined $anode) {  
         my $ant = $anode->  
 node_type  
 ;  
         if ($ant ==  
 1  
 ) {  
             
   
 {  
506    
507  local $Error::Depth = $Error::Depth - 1;        ## ISSUE: This code is wrong.  Old manakai's implementation
508          ## is better, but it is also wrong in some edge cases.
509  {        ## Maybe we should remove these code entirely.  DOM3Core
510          ## conformance is not important for this bit.  It only makes
511  report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'insert_before', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#MDOM_SECOND_DOC_ELEMENT', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;        ## things too complex.  Same for replace_child's code.
512          if ($has_el) {
513            my $anode = $self->last_child;
514  }          while (defined $anode) {
515              if ($anode->node_type == 1) { # ELEMENT_NODE
516                report Message::DOM::DOMException
517  ;}                  -object => $self,
518                    -type => 'HIERARCHY_REQUEST_ERR',
519  ;                  -subtype => 'CHILD_NODE_TYPE_ERR';
520          } elsif ($ant ==            }
521  10            $anode = $anode->previous_sibling;
 ) {  
             
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'insert_before', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#HIERARCHY_WRONG_DOCTYPE_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
         }  
         $anode = $anode->  
 next_sibling  
 ;  
       }  
     } # has_el  
     if ($has_dt) {  
       my $anode = $refChild ? $refChild->  
 previous_sibling  
                             :  
 $self->  
 last_child  
 ;  
       while (defined $anode) {  
         my $ant = $anode->  
 node_type  
 ;  
         if ($ant ==  
 1  
 ) {  
             
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'insert_before', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#HIERARCHY_WRONG_DOCTYPE_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
         } elsif ($ant ==  
 10  
 ) {  
             
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'insert_before', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#MDOM_SECOND_DOCTYPE', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
522          }          }
523          $anode = $anode->        } # has_el
524  previous_sibling        if ($has_dt) {
525  ;          my $anode = $self->last_child;
526        }          while (defined $anode) {
527        $anode = $refChild;            my $ant = $anode->node_type;
528        while (defined $anode) {            if ($ant == 1 or $ant == 10) { # ELEMENT_NODE or DOCUMENT_TYPE_NODE
529          if ($anode->              report Message::DOM::DOMException
530  node_type                  -object => $self,
531                    -type => 'HIERARCHY_REQUEST_ERR',
532                  ==                  -subtype => 'CHILD_NODE_TYPE_ERR';
533  10            }
534  ) {            $anode = $anode->previous_sibling;
             
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'insert_before', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#MDOM_SECOND_DOCTYPE', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
535          }          }
536          $anode = $anode->        } # has_dt
537  next_sibling      }
 ;  
       }  
     } # has_dt  
     
   
   
 }  
   
   
 ;}  
   
 ;  
 }  
   
   
 {  
   
   
 {  
   
 local $Error::Depth = $Error::Depth + 1;  
   
 {  
   
   
   my  
 $strict = $self->  
 strict_error_checking  
 ;  
538    
539    ## -- Node Type check      for my $cn (@new_child) {
   my @new_child;  
   if ({  
     3 => (not $strictc),  
     5 => (not $strictc),  
     1 => 1,  
     4 => (not $strictc),  
     7 => 1,  
     8 => 1,  
     10 => 1,  
   }->{$child_nt}) {  
     push @new_child, $newChild;  
   } elsif ($child_nt ==  
 11  
 ) {  
     for my $cn (@{$newChild->  
 child_nodes  
 }) {  
540        unless ({        unless ({
541      3 => (not $strictc),                 3, (not $strict_children), # TEXT_NODE
542      5 => (not $strictc),                 5, (not $strict_children), # ENTITY_REFERENCE_NODE
543      1 => 1,                 1, 1, # ELEMENT_NODE
544      4 => (not $strictc),                 4, (not $strict_children), # CDATA_SECTION_NODE
545      7 => 1,                 7, 1, # PROCESSING_INSTRUCTION_NODE
546      8 => 1,                 8, 1, # COMMENT_NODE
547      10 => 1,                 10, 1, # DOCUMENT_TYPE_NODE
548    }->{$cn->                }->{$cn->node_type}) {
549  node_type          report Message::DOM::DOMException
550  }) {              -object => $self,
551                        -type => 'HIERARCHY_REQUEST_ERR',
552                -subtype => 'CHILD_NODE_TYPE_ERR';
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#HIERARCHY_BAD_TYPE', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/insertBeforeImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
553        }        }
       push @new_child, $cn;  
554      }      }
   } else {  
       
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#HIERARCHY_BAD_TYPE', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/insertBeforeImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
555    
556        ## NOTE: Ancestor check here in |Node|.
 }  
   
   
 ;}  
   
 ;  
557    }    }
   
   my $nc_parent = @new_child ? $new_child[0]->  
 parent_node  
                              :  
   
 undef  
 ;  
   if ($strict) {  
     ## -- Wrong-document check  
     unless ($self eq $child_od) {  
         
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'WRONG_DOCUMENT_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#DIFFERENT_DOCUMENT_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/insertBeforeImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
     }  
   
     ## -- Read-onlyness check  
     if ($self->  
 manakai_read_only  
 ) {  
         
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#NOMOD_THIS', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/insertBeforeImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';  
   
   
 }  
   
   
 ;}  
   
 ;  
     }  
     if (@new_child) {  
       if ($nc_parent and  
           $nc_parent->  
 manakai_read_only  
 ) {  
           
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#NOMOD_SRC_PARENT', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/insertBeforeImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';  
   
   
 }  
   
   
 ;}  
   
 ;  
       }  
     }  
   }  
   
   ## -- Insert at...  
   my $index = -1; # last  
558        
559      ## -- Insert at... ## NOTE: Only in insert_before and replace_child
560  {    my $index = -1; # last
561      if (defined $_[2]) {
562        ## error if $_[1] eq $_[2];
563  # tc:ForAppendChild & tc:ForReplaceChild      
564      if (defined $refChild) {      my $cns = $self->child_nodes;
565        if ($refChild eq $newChild) {      my $cnsl = @$cns;
566                C: {
567          $index = 0;
568  {        for my $i (0..($cnsl-1)) {
569            my $cn = $cns->[$i];
570            if ($cn eq $_[2]) {
571  {            $index += $i;
572              last C;
573  local $Error::Depth = $Error::Depth - 1;          } elsif ($cn eq $_[1]) {
574              $index = -1; # offset
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMError -object => $self, '-type' => 'http://suika.fam.cx/~wakaba/archive/2004/dom/tree#insert-before-itself', 'rdata' => $refChild, 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/insertBeforeImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';  
   
   
 }  
   
   
 ;}  
   
 ;  
           
   
   
 }  
   
 ;  
           
   
 ;  
       }  
   
       my $cns = $self->  
 child_nodes  
 ;  
       my $cnsl = @$cns;  
       C: {  
         $index = 0;  
         for my $i (0..($cnsl-1)) {  
           my $cn = $cns->[$i];  
           if ($cn eq $refChild) {  
             $index += $i;  
             last C;  
           } elsif ($cn eq $newChild) {  
             $index = -1; # offset  
           }  
575          }          }
576                  }
   
 {  
   
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NOT_FOUND_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#NOT_CHILD_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/insertBeforeImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'refChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $refChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
           
   
   
 }  
   
 ;  
           
   
 ;  
       } # C  
     } else { # |oldChild| is not defined  
577                
578          report Message::DOM::DOMException
579  ;            -object => $self,
580      }            -type => 'NOT_FOUND_ERR',
581                -subtype => 'NOT_CHILD_ERR';
582        } # C
583      }
584  }    ## NOTE: "else" only in replace_child
   
 ; # FOR !tc:ForAppendChild  
585    
586    ## -- Removes from parent    ## -- Removes from parent
587    if ($nc_parent) {    if ($new_child_parent) {
588      if ($child_nt ==      if (@new_child == 1) {
589  11        my $v = $$new_child_parent->{child_nodes};
 ) {  
       $$newChild->{  
 'child'  
 } = [];  
     } else {  
       my $v = $$nc_parent->{  
 'child'  
 };  
590        RP: for my $i (0..$#$v) {        RP: for my $i (0..$#$v) {
591          if ($v->[$i] eq $new_child[0]) {          if ($v->[$i] eq $new_child[0]) {
592            splice @$v, $i, 1, ();            splice @$v, $i, 1, ();
593            last RP;            last RP;
594          }          }
595        } # RP        } # RP
596        } else {
597          @{$$new_child_parent->{child_nodes}} = ();
598      }      }
599    }    }
600    
601    ## -- Rewrite the |parentNode| properties    ## -- Rewrite the |parentNode| properties
602    for my $nc (@new_child) {    for my $nc (@new_child) {
603      $$nc->{      $$nc->{parent_node} = $self;
604  'parent'      Scalar::Util::weaken ($$nc->{parent_node});
 } = $self;  
     Scalar::Util::weaken ($$nc->{  
 'parent'  
 });  
605    }    }
606    
607    my $children = $$self->{    ## NOTE: Depends on method:
608  'child'    if ($index == -1) {
609  };      push @{$$self->{child_nodes}}, @new_child;
610      } else {
611          splice @{$$self->{child_nodes}}, $index, 0, @new_child;
612      }
 ;  
   
     
   
 {  
   
   
 ## -- Adds to children list  
     if ($index == -1) {  
       push @$children, @new_child;  
     } else {  
       splice @$children, $index, 0, @new_child;  
     }  
     $r = $newChild;  
     
   
   
 }  
   
 ;  
   
     
   
 ;  
   
   
   
 }  
   
   
 ;}  
   
 ;  
   
   
 }  
   
 ;  
 if ($child_nt ==  
 10 and  
       
 not defined $newChild->  
 owner_document  
 ) {  
   CORE::delete $$newChild->{  
 'impl'  
 };  
   $$newChild->{  
 'od'  
 } = $self;  
   Scalar::Util::weaken ($$newChild->{  
 'od'  
 });  
 }  
   
   
 }  
 $r}  
 sub replace_child ($$$) {  
 my ($self, $newChild, $oldChild) = @_;  
 my $r;  
   
 {  
   
 my  
 $strictc = $self->  
 dom_config  
   
                    ->  
 get_parameter  
   
                        (  
 'http://suika.fam.cx/www/2006/dom-config/strict-document-children'  
 );  
 my $child_od = $newChild->  
 owner_document  
  || $self;  
 my $child_nt = $newChild->  
 node_type  
 ;  
 if ($strictc and $self->  
 strict_error_checking  
 ) {  
     
   
 {  
   
 local $Error::Depth = $Error::Depth + 1;  
   
 {  
   
613    
614      my    ## NOTE: Only in |Document|.
615  $has_el;    for (@new_child) {
616      my $has_dt;      delete $$_->{implementation};
617      if ($child_nt ==      $$_->{owner_document} = $self;
618  1      Scalar::Util::weaken ($$_->{owner_document});
619  ) {    }
       $has_el =  
 1  
 ;  
     } elsif ($child_nt ==  
 10  
 ) {  
       $has_dt =  
 1  
 ;  
     } elsif ($child_nt ==  
 11  
 ) {  
       for my $cn (@{$newChild->  
 child_nodes  
 }) {  
         my $cnt = $cn->  
 node_type  
 ;  
         if ($cnt ==  
 1  
 ) {  
           if ($has_el) {  
               
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'replace_child', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#MDOM_SECOND_DOC_ELEMENT', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
620    
621      return $_[1];
622    } # insert_before
623    
624  }  sub replace_child ($$) {
625      ## NOTE: Overrides |Node|'s implementation.
626      my $self = $_[0];
627    
628      ## NOTE: |$self_od| code here depending on $self->node_type.
629    
630  ;}    ## -- Node Type check
631      my @new_child;
632      my $new_child_parent;
633      if ($_[1]->node_type == 11) { # DOCUMENT_FRAGMENT_NODE
634        push @new_child, @{$_[1]->child_nodes};
635        $new_child_parent = $_[1];
636      } else {
637        @new_child = ($_[1]);
638        $new_child_parent = $_[1]->parent_node;
639      }
640    
641  ;    ## NOTE: Depends on $self->node_type:
642      if ($$self->{strict_error_checking}) {
643        my $child_od = $_[1]->owner_document || $_[1]; # might be DocumentType
644        if ($self ne $child_od and $child_od->node_type != 10) {
645          report Message::DOM::DOMException # DOCUMENT_TYPE_NODE
646              -object => $self,
647              -type => 'WRONG_DOCUMENT_ERR',
648              -subtype => 'EXTERNAL_OBJECT_ERR';
649        }
650    
651        if ($$self->{manakai_read_only} or
652            (@new_child and defined $new_child_parent and
653             $$new_child_parent->{manakai_read_only})) {
654          report Message::DOM::DOMException
655              -object => $self,
656              -type => 'NO_MODIFICATION_ALLOWED_ERR',
657              -subtype => 'READ_ONLY_NODE_ERR';
658        }
659    
660        ## NOTE: Only in |Document|:
661        my $strict_children = $self->dom_config->get_parameter
662            (q<http://suika.fam.cx/www/2006/dom-config/strict-document-children>);
663        if ($strict_children) {
664          my $has_el;
665          my $has_dt;
666          my $child_nt = $_[1]->node_type;
667          if ($child_nt == 1) { # ELEMENT_NODE
668            $has_el = 1;
669          } elsif ($child_nt == 10) { # DOCUMENT_TYPE_NODE
670            $has_dt = 1;
671          } elsif ($child_nt == 11) { # DOCUMENT_FRAGMENT_NODE
672            for my $cn (@{$_[1]->child_nodes}) {
673              my $cnt = $cn->node_type;
674              if ($cnt == 1) { # ELEMENT_NODE
675                if ($has_el) {
676                  report Message::DOM::DOMException
677                      -object => $self,
678                      -type => 'HIERARCHY_REQUEST_ERR',
679                      -subtype => 'CHILD_NODE_TYPE_ERR';
680                }
681                $has_el = 1;
682              } elsif ($cnt == 10) { # DOCUMENT_TYPE_NODE
683                ## NOTE: |DocumentType| node cannot be contained in
684                ## |DocumentFragment| in strict mode.
685                if ($has_dt) {
686                  report Message::DOM::DOMException
687                      -object => $self,
688                      -type => 'HIERARCHY_REQUEST_ERR',
689                      -subtype => 'CHILD_NODE_TYPE_ERR';
690                }
691                $has_dt = 1;
692            }            }
           $has_el =  
 1  
 ;  
         }  
         # DocumentType node cannot be contained in DocumentFragments  
       }  
     }  
   
     if ($has_el) {  
       my $anode = $oldChild->  
 previous_sibling  
 ;  
       while (defined $anode) {  
         if ($anode->  
 node_type  
  ==  
 1  
 ) {  
             
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'replace_child', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#MDOM_SECOND_DOC_ELEMENT', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
         }  
         $anode = $anode->  
 previous_sibling  
 ;  
       }  
       $anode = $oldChild->  
 next_sibling  
 ;  
       while (defined $anode) {  
         my $ant = $anode->  
 node_type  
 ;  
         if ($ant ==  
 1  
 ) {  
             
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'replace_child', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#MDOM_SECOND_DOC_ELEMENT', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
         } elsif ($ant ==  
 10  
 ) {  
             
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'replace_child', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#HIERARCHY_WRONG_DOCTYPE_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
693          }          }
         $anode = $anode->  
 next_sibling  
 ;  
694        }        }
695      } # has_el    
696      if ($has_dt) {        if ($has_el) {
697        my $anode = $oldChild->          my $anode = $self->last_child;
698  previous_sibling          while (defined $anode) {
699  ;            if ($anode->node_type == 1) { # ELEMENT_NODE
700        while (defined $anode) {              report Message::DOM::DOMException
701          my $ant = $anode->                  -object => $self,
702  node_type                  -type => 'HIERARCHY_REQUEST_ERR',
703  ;                  -subtype => 'CHILD_NODE_TYPE_ERR';
704          if ($ant ==            }
705  1            $anode = $anode->previous_sibling;
 ) {  
             
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'replace_child', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#HIERARCHY_WRONG_DOCTYPE_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
         } elsif ($ant ==  
 10  
 ) {  
             
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'replace_child', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#MDOM_SECOND_DOCTYPE', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
706          }          }
707          $anode = $anode->        } # has_el
708  previous_sibling        if ($has_dt) {
709  ;          my $anode = $self->last_child;
710        }          while (defined $anode) {
711        $anode = $oldChild->            my $ant = $anode->node_type;
712  next_sibling            if ($ant == 1 or $ant == 10) { # ELEMENT_NODE or DOCUMENT_TYPE_NODE
713  ;              report Message::DOM::DOMException
714        while (defined $anode) {                  -object => $self,
715          if ($anode->                  -type => 'HIERARCHY_REQUEST_ERR',
716  node_type                  -subtype => 'CHILD_NODE_TYPE_ERR';
717              }
718                  ==            $anode = $anode->previous_sibling;
 10  
 ) {  
             
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'replace_child', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#MDOM_SECOND_DOCTYPE', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
719          }          }
720          $anode = $anode->        } # has_dt
721  next_sibling      }
 ;  
       }  
     } # has_dt  
     
   
   
 }  
   
   
 ;}  
   
 ;  
 }  
   
   
 {  
   
   
 {  
   
 local $Error::Depth = $Error::Depth + 1;  
   
 {  
   
   
   my  
 $strict = $self->  
 strict_error_checking  
 ;  
722    
723    ## -- Node Type check      for my $cn (@new_child) {
   my @new_child;  
   if ({  
     3 => (not $strictc),  
     5 => (not $strictc),  
     1 => 1,  
     4 => (not $strictc),  
     7 => 1,  
     8 => 1,  
     10 => 1,  
   }->{$child_nt}) {  
     push @new_child, $newChild;  
   } elsif ($child_nt ==  
 11  
 ) {  
     for my $cn (@{$newChild->  
 child_nodes  
 }) {  
724        unless ({        unless ({
725      3 => (not $strictc),                 3, (not $strict_children), # TEXT_NODE
726      5 => (not $strictc),                 5, (not $strict_children), # ENTITY_REFERENCE_NODE
727      1 => 1,                 1, 1, # ELEMENT_NODE
728      4 => (not $strictc),                 4, (not $strict_children), # CDATA_SECTION_NODE
729      7 => 1,                 7, 1, # PROCESSING_INSTRUCTION_NODE
730      8 => 1,                 8, 1, # COMMENT_NODE
731      10 => 1,                 10, 1, # DOCUMENT_TYPE_NODE
732    }->{$cn->                }->{$cn->node_type}) {
733  node_type          report Message::DOM::DOMException
734  }) {              -object => $self,
735                        -type => 'HIERARCHY_REQUEST_ERR',
736                -subtype => 'CHILD_NODE_TYPE_ERR';
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#HIERARCHY_BAD_TYPE', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/replaceChildImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
737        }        }
       push @new_child, $cn;  
     }  
   } else {  
       
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#HIERARCHY_BAD_TYPE', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/replaceChildImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
   }  
   
   my $nc_parent = @new_child ? $new_child[0]->  
 parent_node  
                              :  
   
 undef  
 ;  
   if ($strict) {  
     ## -- Wrong-document check  
     unless ($self eq $child_od) {  
         
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'WRONG_DOCUMENT_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#DIFFERENT_DOCUMENT_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/replaceChildImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
738      }      }
739    
740      ## -- Read-onlyness check      ## NOTE: Ancestor check here in |Node|.
     if ($self->  
 manakai_read_only  
 ) {  
         
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#NOMOD_THIS', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/replaceChildImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';  
   
   
 }  
   
   
 ;}  
   
 ;  
     }  
     if (@new_child) {  
       if ($nc_parent and  
           $nc_parent->  
 manakai_read_only  
 ) {  
           
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#NOMOD_SRC_PARENT', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/replaceChildImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';  
   
   
 }  
   
   
 ;}  
   
 ;  
       }  
     }  
741    }    }
   
   ## -- Insert at...  
   my $index = -1; # last  
742        
743      ## -- Insert at... ## NOTE: Only in insertBefore and replaceChild
744  {    my $index = -1; # last
745      if (defined $_[2]) {
746        ## error if $_[1] eq $_[2];
747  # tc:ForAppendChild & tc:ForReplaceChild      
748      if (defined $oldChild) {      my $cns = $self->child_nodes;
749        if ($oldChild eq $newChild) {      my $cnsl = @$cns;
750                C: {
751          $index = 0;
752  ;        for my $i (0..($cnsl-1)) {
753                    my $cn = $cns->[$i];
754            if ($cn eq $_[2]) {
755  {            $index += $i;
756              last C;
757            } elsif ($cn eq $_[1]) {
758  {            $index = -1; # offset
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMError -object => $self, '-type' => 'http://suika.fam.cx/~wakaba/archive/2004/dom/tree#replace-by-itself', 'rdata' => $oldChild, 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/replaceChildImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';  
   
   
 }  
   
   
 ;}  
   
 ;  
           
   
   
 }  
   
 ;  
       }  
   
       my $cns = $self->  
 child_nodes  
 ;  
       my $cnsl = @$cns;  
       C: {  
         $index = 0;  
         for my $i (0..($cnsl-1)) {  
           my $cn = $cns->[$i];  
           if ($cn eq $oldChild) {  
             $index += $i;  
             last C;  
           } elsif ($cn eq $newChild) {  
             $index = -1; # offset  
           }  
759          }          }
760                  }
   
 ;  
           
   
 {  
   
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NOT_FOUND_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#NOT_CHILD_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/replaceChildImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'oldChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $oldChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
           
   
   
 }  
   
 ;  
       } # C  
     } else { # |oldChild| is not defined  
         
   
 {  
   
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NOT_FOUND_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#NOT_CHILD_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/replaceChildImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'oldChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $oldChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
761                
762          report Message::DOM::DOMException
763              -object => $self,
764  }            -type => 'NOT_FOUND_ERR',
765              -subtype => 'NOT_CHILD_ERR';
766  ;      } # C
767      }    } else {
768          ## NOTE: Only in replaceChild
769        report Message::DOM::DOMException
770            -object => $self,
771  }          -type => 'NOT_FOUND_ERR',
772            -subtype => 'NOT_CHILD_ERR';
773  ; # FOR !tc:ForAppendChild    }
774    
775    ## -- Removes from parent    ## -- Removes from parent
776    if ($nc_parent) {    if ($new_child_parent) {
777      if ($child_nt ==      if (@new_child == 1) {
778  11        my $v = $$new_child_parent->{child_nodes};
 ) {  
       $$newChild->{  
 'child'  
 } = [];  
     } else {  
       my $v = $$nc_parent->{  
 'child'  
 };  
779        RP: for my $i (0..$#$v) {        RP: for my $i (0..$#$v) {
780          if ($v->[$i] eq $new_child[0]) {          if ($v->[$i] eq $new_child[0]) {
781            splice @$v, $i, 1, ();            splice @$v, $i, 1, ();
782            last RP;            last RP;
783          }          }
784        } # RP        } # RP
785        } else {
786          @{$$new_child_parent->{child_nodes}} = ();
787      }      }
788    }    }
789    
790    ## -- Rewrite the |parentNode| properties    ## -- Rewrite the |parentNode| properties
791    for my $nc (@new_child) {    for my $nc (@new_child) {
792      $$nc->{      $$nc->{parent_node} = $self;
793  'parent'      Scalar::Util::weaken ($$nc->{parent_node});
 } = $self;  
     Scalar::Util::weaken ($$nc->{  
 'parent'  
 });  
794    }    }
795    
796    my $children = $$self->{    ## NOTE: Depends on method:
797  'child'    splice @{$$self->{child_nodes}}, $index, 1, @new_child;
798  };    delete ${$_[2]}->{parent_node};
   
     
   
 ;  
   
     
   
 ;  
   
     
   
 {  
   
   
 ## -- Replaces the node  
     splice @$children, $index, 1, @new_child;  
     CORE::delete $$oldChild->{  
 'parent'  
 };  
     $r = $oldChild;  
     
   
   
 }  
   
 ;  
   
   
   
 }  
   
   
 ;}  
   
 ;  
   
   
 }  
   
 ;  
 if ($child_nt ==  
 10 and  
       
 not defined $newChild->  
 owner_document  
 ) {  
   CORE::delete $$newChild->{  
 'impl'  
 };  
   $$newChild->{  
 'od'  
 } = $self;  
   Scalar::Util::weaken ($$newChild->{  
 'od'  
 });  
 }  
   
   
 }  
 $r}  
 sub manakai_append_text ($$) {  
 my ($self, $string) = @_;  
 my $r;  
   
 {  
   
   
 {  
   
 local $Error::Depth = $Error::Depth + 1;  
   
 {  
799    
800      ## NOTE: Only in |Document|.
801      for (@new_child) {
802        delete $$_->{implementation};
803        $$_->{owner_document} = $self;
804        Scalar::Util::weaken ($$_->{owner_document});
805      }
806    
807    unless    return $_[2];
808  ($self->  } # replace_child
 dom_config  
809    
810                 ->  ## |Document| attributes
 get_parameter  
811    
812                     (  ## NOTE: A manakai extension.
813  'http://suika.fam.cx/www/2006/dom-config/strict-document-children'  sub all_declarations_processed ($;$);
 )) {  
     my $lc = $self->  
 last_child  
 ;  
     if (defined $lc and  
         $lc->  
 node_type  
  ==  
 3  
 ) {  
       $lc->  
 manakai_append_text  
814    
815               (ref $string eq 'SCALAR' ? $string : \$string);  sub doctype ($) {
816      } else {    my $self = $_[0];
817        my $text = $self->    for (@{$self->child_nodes}) {
818  create_text_node      if ($_->node_type == 10) { # DOCUMENT_TYPE_NODE
819          return $_;
                           (ref $string eq 'SCALAR' ? $$string : $string);  
       $self->  
 append_child  
  ($text);  
820      }      }
821    }    }
822    $r = $self;    return undef;
823    } # doctype
824    
825    sub document_element ($) {
826  }    my $self = shift;
827      for (@{$self->child_nodes}) {
828        if ($_->node_type == 1) { # ELEMENT_NODE
829  ;}        return $_;
   
 ;  
   
   
 }  
 $r}  
 sub remove_child ($$) {  
 my ($self, $oldChild) = @_;  
 my $r;  
   
 {  
   
 if  
 ($self->  
 strict_error_checking and  
       
 $self->  
 manakai_read_only  
 ) {  
     
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'remove_child', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#NOMOD_THIS', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument';  
   
 ;  
 }  
   
   
 {  
   
 F:  
 {  
   my $i = -1;  
   my $v = $$self->{  
 'child'  
 };  
   for my $cld (@$v) {  
     $i++;  
     if ($cld eq $oldChild) {  
       splice @$v, $i, 1, ();  
       CORE::delete $$oldChild->{  
 'parent'  
 };  
       $r = $oldChild;  
       last F;  
830      }      }
831    }    }
832        return undef;
833  report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NOT_FOUND_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#NOT_CHILD_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/removeChildImpl+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'oldChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $oldChild;  } # document_element
   
 ;  
 } # F  
   
   
 }  
   
 ;  
   
   
 }  
 $r}  
 sub node_name ($;$) {  
 if (@_ == 1) {my ($self) = @_;  
 my $r = '';  
 $r = '#document';  
 $r;  
 } else {my ($self) = @_;  
 report Message::Util::Error::DOMException::CoreException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#on' => 'get', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/DOMException#READ_ONLY_ATTRIBUTE_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#attr' => 'node_name';  
 }  
 }  
 sub text_content ($;$) {  
 if (@_ == 1) {my ($self) = @_;  
 my $r = '';  
   
 {  
   
   
 {  
   
 local $Error::Depth = $Error::Depth + 1;  
834    
835  {  sub document_uri ($;$);
836    
837    sub dom_config ($) {
838      require Message::DOM::DOMConfiguration;
839      return bless \\($_[0]), 'Message::DOM::DOMConfiguration';
840    } # dom_config
841    
842    if  sub manakai_entity_base_uri ($;$) {
843  ($self->    my $self = $_[0];
844  dom_config    if (@_ > 1) {
845        if ($$self->{strict_error_checking}) {
846             ->        if ($$self->{manakai_read_only}) {
847  get_parameter          report Message::DOM::DOMException
848                -object => $self,
849                 (              -type => 'NO_MODIFICATION_ALLOWED_ERR',
850  'http://suika.fam.cx/www/2006/dom-config/strict-document-children'              -subtype => 'READ_ONLY_NODE_ERR';
 )) {  
     $r =  
 undef  
 ;  
   } else {  
     $r = '';  
     my @target = @{$self->  
 child_nodes  
 };  
     C: for my $node (@target) {  
       my $nt = $node->  
 node_type  
 ;  
       if ($nt ==  
 3 or  
             
 $nt ==  
 4  
 ) {  
         $r .= $node->  
 data  
           unless  
 $node->  
 is_element_content_whitespace  
 ;  
       } elsif ($nt ==  
 1 or  
                 
 $nt ==  
 5  
 ) {  
         unshift @target, @{$node->  
 child_nodes  
 };  
851        }        }
852      }      }
853        if (defined $_[1]) {
854          $$self->{manakai_entity_base_uri} = ''.$_[1];
855        } else {
856          delete $$self->{manakai_entity_base_uri};
857        }
858    }    }
   
   
   
 }  
   
   
 ;}  
   
 ;  
   
   
 }  
 $r;  
 } else {my ($self, $given) = @_;  
   
 {  
   
 if  
 ($self->  
 dom_config  
   
          ->  
 get_parameter  
   
              (  
 'http://suika.fam.cx/www/2006/dom-config/strict-document-children'  
 )) {  
     
 report Message::DOM::DOMCore::ManakaiDOMError -object => $self, '-type' => 'http://suika.fam.cx/~wakaba/archive/2004/dom/tree#setting-node-value-no-effect', 'rdata' => $self, 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#on' => 'set', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#attr' => 'text_content';  
   
 ;  
 } else {  
     
   
 {  
   
   
 {  
   
 if  
 ($self->  
 manakai_read_only  
 ) {  
859        
860  report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#NOMOD_THIS', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/NodeReadOnlyError+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';    if (defined $$self->{manakai_entity_base_uri}) {
861        return $$self->{manakai_entity_base_uri};
862  ;    } else {
863  }      return $$self->{document_uri};
864      }
865    } # manakai_entity_base_uri
 }  
   
 ;  
   
 for my $__old_child (@{${$self}->{  
 'child'  
 }}) {  
   CORE::delete $$__old_child->{  
 'parent'  
 };  
 }  
   
 my @__new_children;  
 if (defined $given and length $given) {  
   my $__text = $self->  
 create_text_node  
  ($given);  
   push @__new_children, $__text;  
   $$__text->{  
 'parent'  
 } = $self;  
   Scalar::Util::weaken ($$__text->{  
 'parent'  
 });  
 }  
   
 ${$self}->{  
 'child'  
 } = \@__new_children;  
   
   
 }  
   
 ;  
 }  
   
   
 }  
 }  
 }  
 sub get_feature ($$$) {  
 my ($self, $feature, $version) = @_;  
   
 {  
   
   
 $feature = lc $feature;  
   
   
 }  
   
 {  
   
   
 $version = '' unless defined $version;  
   
   
 }  
 my $r;  
   
 {  
   
   
 $feature =~ s/^\+//;  
   
   
 {  
   
 if  
 ($Message::Util::AutoLoad::Registry::Feature->{$feature}->{$version}) {  
   $r = $self;  
 }  
   
   
 }  
   
 ;  
 unless (defined $r) {  
     
   
 {  
   
 local $Error::Depth = $Error::Depth + 1;  
   
 {  
   
   
   
     $r = $self->SUPER::get_feature ($feature, $version);  
     
   
   
 }  
   
   
 ;}  
   
 ;  
 }  
   
   
 }  
 $r}  
 sub base_uri ($;$) {  
 if (@_ == 1) {my ($self) = @_;  
 my $r = '';  
   
 {  
   
   
 $r = $$self->{  
 'buri'  
 };  
 unless (defined $r) {  
   $r = $$self->{  
 'duri'  
 };  
 }  
   
   
 }  
 $r;  
 } else {my ($self) = @_;  
 report Message::Util::Error::DOMException::CoreException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#on' => 'get', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/DOMException#READ_ONLY_ATTRIBUTE_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#attr' => 'base_uri';  
 }  
 }  
 sub create_document_fragment ($) {  
 my ($self) = @_;  
 my $r;  
   
 {  
   
   
 $r = bless \{  
     
 'od'  
  => $self,  
     
 'child'  
  => [],  
 },  
 'Message::DOM::Document::ManakaiDOMDocumentFragment'  
 ;  
 Scalar::Util::weaken ($$r->{  
 'od'  
 });  
866    
867    sub input_encoding ($;$);
868    
 }  
 $r}  
869  sub strict_error_checking ($;$) {  sub strict_error_checking ($;$) {
870  if (@_ == 1) {my ($self) = @_;    ## NOTE: Same as trivial boolean accessor, except no read-only checking.
871  my $r = 0;    if (@_ > 1) {
872        if ($_[1]) {
873  {        ${$_[0]}->{strict_error_checking} = 1;
874        } else {
875          delete ${$_[0]}->{strict_error_checking};
 $r = $$self->{  
 'chk'  
 };  
   
   
 }  
 $r;  
 } else {my ($self, $given) = @_;  
   
 {  
   
   
 $$self->{  
 'chk'  
 } = $given;  
   
   
 }  
 }  
 }  
 sub dom_config ($;$) {  
 if (@_ == 1) {my ($self) = @_;  
 my $r;  
   
 {  
   
   
 {  
   
   
 $r = bless [$self, $$self, 'Message::DOM::IFLatest::Document'],  
                   
 'Message::DOM::DOMCore::ManakaiDOMConfiguration'  
 ;  
   
   
 }  
   
 ;  
   
   
 }  
 $r;  
 } else {my ($self) = @_;  
 report Message::Util::Error::DOMException::CoreException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#on' => 'get', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/DOMException#READ_ONLY_ATTRIBUTE_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#attr' => 'dom_config';  
 }  
 }  
 sub document_element ($;$) {  
 if (@_ == 1) {my ($self) = @_;  
 my $r;  
   
 {  
   
   
 {  
   
 local $Error::Depth = $Error::Depth + 1;  
   
 {  
   
   
   F:  
 for my $child (@{$self->  
 child_nodes  
 }) {  
     if ($child->  
 node_type  
  ==  
 1  
 ) {  
       $r = $child;  
       last F;  
     }  
   } # F  
   
   
   
 }  
   
   
 ;}  
   
 ;  
   
   
 }  
 $r;  
 } else {my ($self) = @_;  
 report Message::Util::Error::DOMException::CoreException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#on' => 'get', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/DOMException#READ_ONLY_ATTRIBUTE_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#attr' => 'document_element';  
 }  
 }  
 sub implementation ($;$) {  
 if (@_ == 1) {my ($self) = @_;  
 my $r;  
   
 {  
   
   
 $r = $$self->{  
 'impl'  
 };  
   
   
 }  
 $r;  
 } else {my ($self) = @_;  
 report Message::Util::Error::DOMException::CoreException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#on' => 'get', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/DOMException#READ_ONLY_ATTRIBUTE_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#attr' => 'implementation';  
 }  
 }  
 sub xml_version ($;$) {  
 if (@_ == 1) {my ($self) = @_;  
 my $r = '';  
   
 {  
   
   
 $r = $$self->{  
 'http://www.w3.org/2001/04/infoset#version'  
 };  
   
   
 }  
 $r;  
 } else {my ($self, $given) = @_;  
   
 {  
   
   
 {  
   
 if  
 ($self->  
 manakai_read_only  
 ) {  
     
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#NOMOD_THIS', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/NodeReadOnlyError+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';  
   
 ;  
 }  
   
   
 }  
   
 ;  
 if (defined $given and  
     ($given eq '1.0' or $given eq '1.1' or  
      not $self->  
 strict_error_checking  
 )) {  
   $$self->{  
 'http://www.w3.org/2001/04/infoset#version'  
 } = $given;  
 } else {  
     
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NOT_SUPPORTED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#on' => 'set', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#MDOM_IMPL_NOSUPPORT_XMLVER', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#attr' => 'xml_version', 'http://www.w3.org/2001/04/infoset#version' => $given;  
   
 ;  
 }  
   
   
 }  
 }  
 }  
 sub doctype ($;$) {  
 if (@_ == 1) {my ($self) = @_;  
 my $r;  
   
 {  
   
   
 {  
   
 local $Error::Depth = $Error::Depth + 1;  
   
 {  
   
   
   F:  
 for my $child (@{$self->  
 child_nodes  
 }) {  
     my $nt = $child->  
 node_type  
 ;  
     if ($nt ==  
 10  
 ) {  
       $r = $child;  
       last F;  
     } elsif ($nt ==  
 1  
 ) { # document element  
       last F;  
876      }      }
877    } # F    }                  
878      return ${$_[0]}->{strict_error_checking};
879    } # strict_error_checking
   
 }  
   
   
 ;}  
   
 ;  
   
   
 }  
 $r;  
 } else {my ($self) = @_;  
 report Message::Util::Error::DOMException::CoreException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#on' => 'get', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/DOMException#READ_ONLY_ATTRIBUTE_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#attr' => 'doctype';  
 }  
 }  
 sub document_uri ($;$) {  
 if (@_ == 1) {my ($self) = @_;  
 my $r = '';  
   
 {  
   
   
 $r = $$self->{  
 'duri'  
 };  
   
   
 }  
 $r;  
 } else {my ($self, $given) = @_;  
   
 {  
   
   
 {  
   
 if  
 ($self->  
 manakai_read_only  
 ) {  
     
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#NOMOD_THIS', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/NodeReadOnlyError+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';  
   
 ;  
 }  
   
   
 }  
   
 ;  
 $$self->{  
 'duri'  
 } = $given;  
   
   
 }  
 }  
 }  
 sub input_encoding ($;$) {  
 if (@_ == 1) {my ($self) = @_;  
 my $r = '';  
   
 {  
880    
881    ## ISSUE: Setting manakai_is_html true shadows
882    ## xml_* properties.  Is this desired?
883    
 $r = $$self->{  
 'ces'  
 };  
   
   
 }  
 $r;  
 } else {my ($self, $given) = @_;  
   
 {  
   
   
 {  
   
 if  
 ($self->  
 manakai_read_only  
 ) {  
     
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#NOMOD_THIS', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/NodeReadOnlyError+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';  
   
 ;  
 }  
   
   
 }  
   
 ;  
 $$self->{  
 'ces'  
 } = $given;  
   
   
 }  
 }  
 }  
884  sub xml_encoding ($;$) {  sub xml_encoding ($;$) {
885  if (@_ == 1) {my ($self) = @_;    my $self = $_[0];
886  my $r = '';    if (@_ > 1) {
887        ## NOTE: A manakai extension.
888  {      if ($$self->{strict_error_checking}) {
889          if ($$self->{manakai_is_html}) {
890            report Message::DOM::DOMException
891  $r = $$self->{              -object => $self,
892  'xcs'              -type => 'NOT_SUPPORTED_ERR',
893  };              -subtype => 'NON_HTML_OPERATION_ERR';
894          }
895          if ($$self->{manakai_read_only}) {
896  }          report Message::DOM::DOMException
897  $r;              -object => $self,
898  } else {my ($self, $given) = @_;              -type => 'NO_MODIFICATION_ALLOWED_ERR',
899                -subtype => 'READ_ONLY_NODE_ERR';
 {  
   
   
 {  
   
 if  
 ($self->  
 manakai_read_only  
 ) {  
     
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#NOMOD_THIS', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/NodeReadOnlyError+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';  
   
 ;  
 }  
   
   
 }  
   
 ;  
 $$self->{  
 'xcs'  
 } = $given;  
   
   
 }  
 }  
 }  
 sub xml_standalone ($;$) {  
 if (@_ == 1) {my ($self) = @_;  
 my $r = 0;  
   
 {  
   
   
 $r = $$self->{  
 'http://www.w3.org/2001/04/infoset#standalone'  
 };  
   
   
 }  
 $r;  
 } else {my ($self, $given) = @_;  
   
 {  
   
   
 {  
   
 if  
 ($self->  
 manakai_read_only  
 ) {  
     
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#NOMOD_THIS', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/NodeReadOnlyError+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';  
   
 ;  
 }  
   
   
 }  
   
 ;  
 $$self->{  
 'http://www.w3.org/2001/04/infoset#standalone'  
 } = $given;  
   
   
 }  
 }  
 }  
 sub adopt_node ($$) {  
 my ($self, $source) = @_;  
 my $r;  
   
 {  
   
 ADOPT:  
 {  
   last ADOPT  
     unless $source->isa (  
 'Message::DOM::TreeCore::ManakaiDOMNode'  
 );  
   
   my $strict = $self->  
 strict_error_checking  
 ;  
   if ($strict and $self->  
 manakai_read_only  
 ) {  
       
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'adopt_node', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#NOMOD_THIS', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'source', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => 'source';  
   
 ;  
   }  
   my $parent = $source->  
 parent_node  
 ;  
   if ($strict and defined $parent and  
       $parent->  
 manakai_read_only  
 ) {  
       
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'adopt_node', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#NOMOD_PARENT', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'source', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => 'parent';  
   
 ;  
   }  
   my $nt = $source->  
 node_type  
 ;  
   my $oe;  
   if ($nt ==  
 2  
 ) {  
     $oe = $source->  
 owner_element  
 ;  
     if ($strict and defined $oe and $oe->  
 manakai_read_only  
 ) {  
         
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'adopt_node', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#NOMOD_PARENT', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'source', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => 'oe';  
   
 ;  
     }  
   } elsif ($nt ==  
 9 or  
             
 $nt ==  
 10 or  
             
 $nt ==  
 6 or  
             
 $nt ==  
 12  
 ) {  
       
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NOT_SUPPORTED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'adopt_node', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#ADOPT_NODE_TYPE_NOT_SUPPORTED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'source', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => 'source';  
   
 ;  
   }  
   
   my @change_od;  
   my @nodes = ($source);  
   while (@nodes) {  
     my $node = shift @nodes;  
     my $nt = $node->  
 node_type  
 ;  
     if ($strict and $node->  
 manakai_read_only  
 ) {  
         
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'adopt_node', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#NOMOD_DESCENDANT_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'source', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $node;  
   
 ;  
     }  
     if ($nt ==  
 1  
 ) {  
       push @change_od, $node;  
       push @nodes, @{$node->  
 child_nodes  
 };  
       my $attrs = $node->  
 attributes  
 ;  
       my $attrsLength = $attrs->  
 length  
 ;  
       for my $i (0..($attrsLength - 1)) {  
         push @nodes, $attrs->  
 item  
  ($i);  
900        }        }
901      } elsif ($nt ==      }
902  2 or      if (defined $_[1]) {
903                      $$self->{xml_encoding} = ''.$_[1];
 $nt ==  
 5 or  
               
 $nt ==  
 11  
 ) {  
       push @change_od, $node;  
       push @nodes, @{$node->  
 child_nodes  
 };  
     } elsif ($nt ==  
 3 or  
               
 $nt ==  
 8 or  
               
 $nt ==  
 7 or  
               
 $nt ==  
 4  
 ) {  
       push @change_od, $node;  
904      } else {      } else {
905        ## TODO: assertion        delete $$self->{xml_encoding};
906      }      }
907    } # nodes    }
     
908        
909      if ($$self->{manakai_is_html}) {
910        return undef;
911      } else {
912        return $$self->{xml_encoding};
913      }
914    } # xml_encoding
915    
916  {  sub xml_standalone ($;$) {
917      my $self = $_[0];
918  local $Error::Depth = $Error::Depth + 1;    if (@_ > 1) {
919        if ($$self->{strict_error_checking}) {
920  {        if ($$self->{manakai_is_html}) {
921            report Message::DOM::DOMException
922                -object => $self,
923      if              -type => 'NOT_SUPPORTED_ERR',
924  (defined $parent) {              -subtype => 'NON_HTML_OPERATION_ERR';
925        $parent->        }
926  remove_child        ## NOTE: Not in DOM3.
927   ($source);        if ($$self->{manakai_read_only}) {
928      } elsif (defined $oe) {          report Message::DOM::DOMException
929        $oe->              -object => $self,
930  remove_attribute_node              -type => 'NO_MODIFICATION_ALLOWED_ERR',
931   ($source);              -subtype => 'READ_ONLY_NODE_ERR';
932          }
933        }
934        if ($_[1]) {
935          $$self->{xml_standalone} = 1;
936        } else {
937          delete $$self->{xml_standalone};
938      }      }
     
   
   
 }  
   
   
 ;}  
   
 ;  
   
   $r = $source;  
   my $old_od = $change_od[0]->  
 owner_document  
 ;  
                  ## NOTE: The array must have more than zero  
                  ##       nodes by definition.  In addition,  
                  ##       it cannot contain document or document  
                  ##       type nodes in current implementation.  
   
   if ($old_od eq $self) {  
     last ADOPT;  
939    }    }
940      
941    for my $n (@change_od) {    if ($$self->{manakai_is_html}) {
942      $$n->{      return 0;
943  'od'    } else {
944  } = $self;      return $$self->{xml_standalone};
     Scalar::Util::weaken ($$n->{  
 'od'  
 });  
945    }    }
946    } # xml_standalone
947    
948    for my $src (@change_od) {  sub xml_version ($;$) {
949      my $src_ud = $$src->{    my $self = $_[0];
950  'ud'    if (@_ > 1) {
951  };      my $v = ''.$_[1];
952      for my $key (keys %{$src_ud or {}}) {      if ($$self->{strict_error_checking}) {
953        my $dh = $src_ud->{$key}->[1];        if ($$self->{manakai_is_html}) {
954        if ($dh) {          report Message::DOM::DOMException
955          $dh->              -object => $self,
956  handle              -type => 'NOT_SUPPORTED_ERR',
957                -subtype => 'NON_HTML_OPERATION_ERR';
958                   (        }
959  5        if ($v ne '1.0' and $v ne '1.1') {
960  ,          report Message::DOM::DOMException
961                    $key, $src_ud->{$key}->[0], $src,              -object => $self,
962  undef              -type => 'NOT_SUPPORTED_ERR',
963  );              -subtype => 'UNKNOWN_XML_VERSION_ERR';
964        }        }
965          if ($$self->{manakai_read_only}) {
966            ## ISSUE: Not in DOM3.
967            report Message::DOM::DOMException
968                -object => $self,
969                -type => 'NO_MODIFICATION_ALLOWED_ERR',
970                -subtype => 'READ_ONLY_NODE_ERR';
971          }
972        }
973        $$self->{xml_version} = $v;
974      }
975      
976      if (defined wantarray) {
977        if ($$self->{manakai_is_html}) {
978          return undef;
979        } elsif (defined $$self->{xml_version}) {
980          return $$self->{xml_version};
981        } else {
982          return '1.0';
983      }      }
984    }    }
985  } # ADOPT  } # xml_version
986    
987    ## |Document| methods
988    
 }  
 $r}  
989  sub get_element_by_id ($$) {  sub get_element_by_id ($$) {
990  my ($self, $elementId) = @_;    local $Error::Depth = $Error::Depth + 1;
991  my $r;    my @nodes = @{$_[0]->child_nodes};
   
 {  
   
   
 {  
   
 local $Error::Depth = $Error::Depth + 1;  
   
 {  
   
   
   my  
 @nodes = @{$self->  
 child_nodes  
 };  
992    N: while (@nodes) {    N: while (@nodes) {
993      my $node = shift @nodes;      my $node = shift @nodes;
994      next N unless $node->      next N unless $node->node_type == 1; # ELEMENT_NODE
995  node_type      for my $attr (@{$node->attributes}) {
996   ==        if ($attr->is_id and $attr->value eq $_[1]) {
997  1          return $node;
 ;  
     for my $attr (@{$node->  
 attributes  
 }) {  
       if ($attr->  
 is_id and  
             
 $attr->  
 value eq  
 $elementId) {  
         $r = $attr;  
         last N;  
998        }        }
999      }      }
1000      unshift @nodes, @{$node->      unshift @nodes, @{$node->child_nodes};
 child_nodes  
 };  
1001    } # N    } # N
1002      return undef;
1003    } # get_element_by_id
1004    
1005    ## TODO: HTML5 case normalization
   
 }  
   
   
 ;}  
   
 ;  
   
   
 }  
 $r}  
1006  sub get_elements_by_tag_name ($$) {  sub get_elements_by_tag_name ($$) {
1007  my ($self, $name) = @_;    my $name = ''.$_[1];
1008  my $r;    my $chk;
1009      if ($name eq '*') {
1010  {      $chk = sub () { 1 };
   
   
 $name = "$name";  
 my $chk;  
 if ($name eq '*') {  
   $chk = sub {  
 1  
  };  
 } else {  
   $chk = sub {  
     my $node = shift;  
     my $nodeName = $node->  
 node_name  
 ;  
     ($nodeName eq $name);  
   };  
 }  
   
   
 {  
   
   
 $r = bless \[$self, $chk],  
 'Message::DOM::TreeCore::ManakaiDOMGetElementsNodeList'  
 ;  
   
   
 }  
   
 ;  
   
   
 }  
 $r}  
 sub get_elements_by_tag_name_ns ($$$) {  
 my ($self, $namespaceURI, $localName) = @_;  
   
 {  
   
 if  
 (CORE::defined $namespaceURI and CORE::length $namespaceURI == 0) {  
   require Message::DOM::DOMMain;  
     
 report Message::DOM::DOMCore::ManakaiDOMError -object => $self, '-type' => 'http://suika.fam.cx/~wakaba/archive/2004/dom/main#empty-namespace-uri', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:tag:suika.fam.cx,2005-09:1167450139:7187:cCkYT15288+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';  
   
 ;  
   
     
   
 {  
   
   
 $namespaceURI = undef;  
     
   
   
 }  
   
 ;  
 }  
   
   
 }  
 my $r;  
   
 {  
   
   
 $namespaceURI = "$namespaceURI" if defined $namespaceURI;  
 $localName = "$localName";  
 my $chk;  
 if (not defined $namespaceURI) {  
   if ($localName eq '*') {  
     $chk = sub {  
       my $node = shift;  
       (not defined $node->  
 namespace_uri  
 );  
     };  
   } else {  
     $chk = sub {  
       my $node = shift;  
       (not defined $node->  
 namespace_uri and  
         
 $node->  
 local_name eq  
 $localName);  
     };  
   }  
 } elsif ($namespaceURI eq '*') {  
   if ($localName eq '*') {  
     $chk = sub {  
 1  
  };  
1011    } else {    } else {
1012      $chk = sub {      $chk = sub ($) {
1013        my $node = shift;        return $_[0]->manakai_tag_name eq $name;
       ($node->  
 local_name eq  
 $localName);  
1014      };      };
1015    }    }
 } else {  
   if ($localName eq '*') {  
     $chk = sub {  
       my $node = shift;  
       my $nsuri = $node->  
 namespace_uri  
 ;  
       (defined $nsuri and $nsuri eq $namespaceURI);  
     };  
   } else {  
     $chk = sub {  
       my $node = shift;  
       my $nsuri = $node->  
 namespace_uri  
 ;  
       (defined $nsuri and $nsuri eq $namespaceURI and  
        $node->  
 local_name eq  
 $localName);  
     };  
   }  
 }  
   
   
 {  
   
   
 $r = bless \[$self, $chk],  
 'Message::DOM::TreeCore::ManakaiDOMGetElementsNodeList'  
 ;  
   
   
 }  
   
 ;  
   
   
 }  
 $r}  
 sub import_node ($$;$) {  
 my ($self, $importedNode, $deep) = @_;  
 my $r;  
 report Message::Util::Error::DOMException::CoreException -object => $self, '-type' => 'NOT_SUPPORTED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'import_node', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#MDOM_IMPL_METHOD_NOT_IMPLEMENTED', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument';  
 $r}  
 sub normalize_document ($) {  
 my ($self) = @_;  
 report Message::Util::Error::DOMException::CoreException -object => $self, '-type' => 'NOT_SUPPORTED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'normalize_document', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#MDOM_IMPL_METHOD_NOT_IMPLEMENTED', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument';  
 }  
 sub rename_node ($$$$) {  
 my ($self, $n, $namespaceURI, $qualifiedName) = @_;  
   
 {  
   
 if  
 (CORE::defined $namespaceURI and CORE::length $namespaceURI == 0) {  
   require Message::DOM::DOMMain;  
     
 report Message::DOM::DOMCore::ManakaiDOMError -object => $self, '-type' => 'http://suika.fam.cx/~wakaba/archive/2004/dom/main#empty-namespace-uri', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:tag:suika.fam.cx,2005-09:1167450139:7187:cCkYT15288+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';  
   
 ;  
   
     
   
 {  
   
   
 $namespaceURI = undef;  
     
   
   
 }  
   
 ;  
 }  
   
   
 }  
 my $r;  
 report Message::Util::Error::DOMException::CoreException -object => $self, '-type' => 'NOT_SUPPORTED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'rename_node', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#MDOM_IMPL_METHOD_NOT_IMPLEMENTED', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocument';  
 $r}  
 sub manakai_entity_base_uri ($;$) {  
 if (@_ == 1) {my ($self) = @_;  
 my $r = '';  
   
 {  
   
   
 $r = $$self->{  
 'buri'  
 };  
 unless (defined $r) {  
   $r = $$self->{  
 'duri'  
 };  
 }  
   
   
 }  
 $r;  
 } else {my ($self, $given) = @_;  
   
 {  
   
   
 {  
   
 if  
 ($self->  
 manakai_read_only  
 ) {  
     
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#NOMOD_THIS', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/NodeReadOnlyError+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';  
   
 ;  
 }  
   
   
 }  
   
 ;  
 $$self->{  
 'buri'  
 } = $given;  
   
   
 }  
 }  
 }  
 sub all_declarations_processed ($;$) {  
 if (@_ == 1) {my ($self) = @_;  
 my $r = 0;  
   
 {  
1016    
1017      require Message::DOM::NodeList;
1018      return bless \[$_[0], $chk], 'Message::DOM::NodeList::GetElementsList';
1019    } # get_elements_by_tag_name
1020    
1021  $r = $$self->{  sub get_elements_by_tag_name_ns ($$$) {
1022  'http://www.w3.org/2001/04/infoset#allDeclarationsProcessed'    my $nsuri = defined $_[1] ? ''.$_[1] : '';
1023  };    my $lname = ''.$_[2];
1024      my $chk;
1025      if ($nsuri eq '*') {
1026  }      if ($lname eq '*') {
1027  $r;        $chk = sub () { 1 };
1028  } else {my ($self, $given) = @_;      } else {
1029          $chk = sub ($) {
1030  {          return $_[0]->manakai_local_name eq $lname;
1031          };
1032        }
1033  {    } elsif ($nsuri eq '') {
1034        if ($lname eq '*') {
1035  if        $chk = sub ($) {
1036  ($self->          return not defined $_[0]->namespace_uri;
1037  manakai_read_only        };
1038  ) {      } else {
1039            $chk = sub ($) {
1040  report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#NOMOD_THIS', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/NodeReadOnlyError+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';          return (not defined $_[0]->namespace_uri and
1041                    $_[0]->manakai_local_name eq $lname);
1042  ;        };
 }  
   
   
 }  
   
 ;  
 $$self->{  
 'http://www.w3.org/2001/04/infoset#allDeclarationsProcessed'  
 } = $given;  
   
   
 }  
 }  
 }  
 $Message::DOM::DOMFeature::ClassInfo->{q<Message::DOM::Document::ManakaiDOMDocument>}->{has_feature} = {'core',  
 {'',  
 '1',  
 '1.0',  
 '1',  
 '2.0',  
 '1',  
 '3.0',  
 '1'},  
 'xml',  
 {'',  
 '1',  
 '1.0',  
 '1',  
 '2.0',  
 '1',  
 '3.0',  
 '1'},  
 'xmlversion',  
 {'',  
 '1',  
 '1.0',  
 '1',  
 '1.1',  
 '1'}};  
 $Message::DOM::ClassPoint{q<Message::DOM::Document::ManakaiDOMDocument>} = 14.1;  
 package Message::DOM::IFLatest::DocumentFragment;  
 our $VERSION = 20061230.0424;  
 package Message::DOM::Document::ManakaiDOMDocumentFragment;  
 our $VERSION = 20061230.0424;  
 push our @ISA, 'Message::DOM::TreeCore::ManakaiDOMNode',  
 'Message::DOM::IFLatest::DocumentFragment',  
 'Message::DOM::IFLatest::Node';  
 sub node_type ($;$) {  
 if (@_ == 1) {my ($self) = @_;  
 my $r;  
 $r = 11;  
 $r;  
 } else {my ($self) = @_;  
 report Message::Util::Error::DOMException::CoreException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#on' => 'get', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/DOMException#READ_ONLY_ATTRIBUTE_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocumentFragment', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#attr' => 'node_type';  
 }  
 }  
 sub append_child ($$) {  
 my ($self, $newChild) = @_;  
 my $r;  
   
 {  
   
 if  
 ($self eq $newChild) {  
     
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'append_child', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/dom/tree#HIERARCHY_DOCUMENT_FRAGMENT_ITSELF_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocumentFragment', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild';  
   
 ;  
 }  
 my $self_od = $self->  
 owner_document  
 ;  
 my $child_od = $newChild->  
 owner_document  
 ;  
 my $child_nt = $newChild->  
 node_type  
 ;  
   
   
 {  
   
   
 {  
   
 local $Error::Depth = $Error::Depth + 1;  
   
 {  
   
   
   my  
 $strict = $self_od->  
 strict_error_checking  
 ;  
   
   ## -- Node Type check  
   my @new_child;  
   if ({  
     3 => 1,  
     5 => 1,  
     1 => 1,  
     7 => 1,  
     4 => 1,  
     8 => 1,  
   }->{$child_nt}) {  
     push @new_child, $newChild;  
   } elsif ($child_nt ==  
 11  
 ) {  
     for my $cn (@{$newChild->  
 child_nodes  
 }) {  
       unless ({  
     3 => 1,  
     5 => 1,  
     1 => 1,  
     7 => 1,  
     4 => 1,  
     8 => 1,  
   }->{$cn->  
 node_type  
 }) {  
           
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#HIERARCHY_BAD_TYPE', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/appendChildImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
       }  
       push @new_child, $cn;  
1043      }      }
1044    } else {    } else {
1045            if ($lname eq '*') {
1046          $chk = sub ($) {
1047  {          my $ns = $_[0]->namespace_uri;
1048            return (defined $ns and $ns eq $nsuri);
1049  local $Error::Depth = $Error::Depth - 1;        };
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#HIERARCHY_BAD_TYPE', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/appendChildImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
   }  
   
   my $nc_parent = @new_child ? $new_child[0]->  
 parent_node  
                              :  
   
 undef  
 ;  
   if ($strict) {  
     ## -- Wrong-document check  
     unless ($self_od eq $child_od) {  
         
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'WRONG_DOCUMENT_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#DIFFERENT_DOCUMENT_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/appendChildImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
     }  
   
     ## -- Read-onlyness check  
     if ($self->  
 manakai_read_only  
 ) {  
         
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#NOMOD_THIS', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/appendChildImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';  
   
   
 }  
   
   
 ;}  
   
 ;  
     }  
     if (@new_child) {  
       if ($nc_parent and  
           $nc_parent->  
 manakai_read_only  
 ) {  
           
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#NOMOD_SRC_PARENT', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/appendChildImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';  
   
   
 }  
   
   
 ;}  
   
 ;  
       }  
     }  
   }  
   
   ## -- Insert at...  
   my $index = -1; # last  
     
   
 ; # FOR !tc:ForAppendChild  
   
   ## -- Removes from parent  
   if ($nc_parent) {  
     if ($child_nt ==  
 11  
 ) {  
       $$newChild->{  
 'child'  
 } = [];  
1050      } else {      } else {
1051        my $v = $$nc_parent->{        $chk = sub ($) {
1052  'child'          my $ns = $_[0]->namespace_uri;
1053  };          return (defined $ns and $ns eq $nsuri and
1054        RP: for my $i (0..$#$v) {                  $_[0]->manakai_local_name eq $lname);
1055          if ($v->[$i] eq $new_child[0]) {        };
           splice @$v, $i, 1, ();  
           last RP;  
         }  
       } # RP  
1056      }      }
1057    }    }
1058    
1059    ## -- Rewrite the |parentNode| properties    require Message::DOM::NodeList;
1060    for my $nc (@new_child) {    return bless \[$_[0], $chk], 'Message::DOM::NodeList::GetElementsList';
1061      $$nc->{  } # get_elements_by_tag_name
 'parent'  
 } = $self;  
     Scalar::Util::weaken ($$nc->{  
 'parent'  
 });  
   }  
   
   my $children = $$self->{  
 'child'  
 };  
   
     
   
 {  
   
   
 ## -- Adds to children list  
     push @$children, @new_child;  
     $r = $newChild;  
     
   
   
 }  
   
 ;  
   
     
   
 ;  
   
     
   
 ;  
1062    
1063    ## TODO: import_node
1064    
1065    ## TODO: normalize_document
1066    
1067  }  ## TODO: rename_node
1068    
1069    ## |DocumentTraversal| methods
1070    
1071  ;}  ## TODO: create_node_iterator
1072    
1073  ;  sub manakai_create_serial_walker ($$;$$$);
1074    
1075    sub create_tree_walker ($$;$$$);
1076    
1077  }  ## |HTMLDocument| attributes
   
 ;  
   
   
 }  
 $r}  
 sub insert_before ($$;$) {  
 my ($self, $newChild, $refChild) = @_;  
 my $r;  
   
 {  
   
 if  
 ($self eq $newChild) {  
     
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'insert_before', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/dom/tree#HIERARCHY_DOCUMENT_FRAGMENT_ITSELF_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocumentFragment', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild';  
1078    
1079  ;  sub compat_mode ($) {
1080  }    if (${$_[0]}->{manakai_is_html}) {
1081  my $self_od = $self->      if (defined ${$_[0]}->{manakai_compat_mode} and
1082  owner_document          ${$_[0]}->{manakai_compat_mode} eq 'quirks') {
1083  ;        return 'BackCompat';
1084  my $child_od = $newChild->      }
1085  owner_document    }
1086  ;    return 'CSS1Compat';
1087  my $child_nt = $newChild->  } # compat_mode
 node_type  
 ;  
   
   
 {  
   
   
 {  
   
 local $Error::Depth = $Error::Depth + 1;  
   
 {  
   
   
   my  
 $strict = $self_od->  
 strict_error_checking  
 ;  
   
   ## -- Node Type check  
   my @new_child;  
   if ({  
     3 => 1,  
     5 => 1,  
     1 => 1,  
     7 => 1,  
     4 => 1,  
     8 => 1,  
   }->{$child_nt}) {  
     push @new_child, $newChild;  
   } elsif ($child_nt ==  
 11  
 ) {  
     for my $cn (@{$newChild->  
 child_nodes  
 }) {  
       unless ({  
     3 => 1,  
     5 => 1,  
     1 => 1,  
     7 => 1,  
     4 => 1,  
     8 => 1,  
   }->{$cn->  
 node_type  
 }) {  
           
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#HIERARCHY_BAD_TYPE', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/insertBeforeImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
   
 ;}  
1088    
1089  ;  sub manakai_compat_mode ($;$) {
1090        }    if (${$_[0]}->{manakai_is_html}) {
1091        push @new_child, $cn;      if (@_ > 1 and defined $_[1] and
1092            {'no quirks' => 1, 'limited quirks' => 1, 'quirks' => 1}->{$_[1]}) {
1093          ${$_[0]}->{manakai_compat_mode} = $_[1];
1094      }      }
1095        return ${$_[0]}->{manakai_compat_mode} || 'no quirks';
1096    } else {    } else {
1097            return 'no quirks';
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#HIERARCHY_BAD_TYPE', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/insertBeforeImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
1098    }    }
1099    } # manakai_compat_mode
1100    
1101    my $nc_parent = @new_child ? $new_child[0]->  sub inner_html ($;$) {
1102  parent_node    my $self = $_[0];
1103                               :    local $Error::Depth = $Error::Depth + 1;
1104    
1105  undef    if ($$self->{manakai_is_html}) {
1106  ;      require Whatpm::HTML;
1107    if ($strict) {      if (@_ > 1) {
1108      ## -- Wrong-document check        ## Step 1
1109      unless ($self_od eq $child_od) {        ## TODO: Stop parsing and ...
1110                
1111          ## Step 2
1112          my @cn = @{$self->child_nodes};
1113          for (@cn) { ## NOTE: Might throw a |NO_MODIFICATION_ALLOWED_ERR|.
1114            $self->remove_child ($_); #
1115          }
1116    
1117  {        ## Step 3, 4, 5
1118          Whatpm::HTML->parse_string ($_[1] => $self);
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'WRONG_DOCUMENT_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#DIFFERENT_DOCUMENT_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/insertBeforeImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
1119    
1120  ;}        ## TODO:
1121          ## <script>var input = function_to_do_xmlhttprequest (location.href);
1122          ## document.innerHTML = input</script>
1123    
1124  ;        return unless defined wantarray;
1125      }      }
1126    
1127      ## -- Read-onlyness check      return ${ Whatpm::HTML->get_inner_html ($self) };
1128      if ($self->    } else {
1129  manakai_read_only      if (@_ > 1) {
1130  ) {        ## Step 1
1131          require Whatpm::XMLParser; # MUST
1132          my $doc = $self->implementation->create_document;
1133                
1134          ## Step 2
1135          #
1136    
1137  {        ## Step 3
1138          $doc = Whatpm::XMLParser->parse_string ($_[1] => $doc); # MUST
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#NOMOD_THIS', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/insertBeforeImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';  
   
   
 }  
   
   
 ;}  
1139    
1140  ;        ## Step 4
1141      }        #
     if (@new_child) {  
       if ($nc_parent and  
           $nc_parent->  
 manakai_read_only  
 ) {  
           
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#NOMOD_SRC_PARENT', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/insertBeforeImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';  
   
   
 }  
1142    
1143          ## Step 5
1144          ## TODO: ill-formed -> SYNTAX_ERR # MUST
1145    
1146  ;}        ## Step 6 # MUST
1147          my @cn = @{$self->child_nodes}; ## TODO: If read-only
1148  ;        for (@cn) {
1149            $self->remove_child ($_);
1150        }        }
     }  
   }  
   
   ## -- Insert at...  
   my $index = -1; # last  
     
   
 {  
   
   
 # tc:ForAppendChild & tc:ForReplaceChild  
     if (defined $refChild) {  
       if ($refChild eq $newChild) {  
           
   
 {  
   
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMError -object => $self, '-type' => 'http://suika.fam.cx/~wakaba/archive/2004/dom/tree#insert-before-itself', 'rdata' => $refChild, 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/insertBeforeImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';  
   
   
 }  
   
1151    
1152  ;}        ## Step 7, 8, 9, 10
1153          for my $node (@{$doc->child_nodes}) {
1154  ;          $self->append_child ($self->adopt_node ($node));
           
   
   
 }  
   
 ;  
           
   
 ;  
1155        }        }
1156    
1157        my $cns = $self->        return unless defined wantarray;
 child_nodes  
 ;  
       my $cnsl = @$cns;  
       C: {  
         $index = 0;  
         for my $i (0..($cnsl-1)) {  
           my $cn = $cns->[$i];  
           if ($cn eq $refChild) {  
             $index += $i;  
             last C;  
           } elsif ($cn eq $newChild) {  
             $index = -1; # offset  
           }  
         }  
           
   
 {  
   
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NOT_FOUND_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#NOT_CHILD_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/insertBeforeImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'refChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $refChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
           
   
   
 }  
   
 ;  
           
   
 ;  
       } # C  
     } else { # |oldChild| is not defined  
         
   
 ;  
1158      }      }
     
   
1159    
1160  }      ## TODO: This serializer is currently not conformant to HTML5 spec.
1161        require Whatpm::XMLSerializer;
1162  ; # FOR !tc:ForAppendChild      my $r = '';
1163        for (@{$self->child_nodes}) {
1164    ## -- Removes from parent        $r .= ${ Whatpm::XMLSerializer->get_outer_xml ($_, sub {
1165    if ($nc_parent) {          ## TODO: INVALID_STATE_ERR
1166      if ($child_nt ==        }) };
 11  
 ) {  
       $$newChild->{  
 'child'  
 } = [];  
     } else {  
       my $v = $$nc_parent->{  
 'child'  
 };  
       RP: for my $i (0..$#$v) {  
         if ($v->[$i] eq $new_child[0]) {  
           splice @$v, $i, 1, ();  
           last RP;  
         }  
       } # RP  
1167      }      }
1168        return $r;
1169    }    }
1170    } # inner_html
1171    
1172    ## -- Rewrite the |parentNode| properties  sub manakai_is_html ($;$) {
1173    for my $nc (@new_child) {    if (@_ > 1) {
1174      $$nc->{      if ($_[1]) {
1175  'parent'        ${$_[0]}->{manakai_is_html} = 1;
 } = $self;  
     Scalar::Util::weaken ($$nc->{  
 'parent'  
 });  
   }  
   
   my $children = $$self->{  
 'child'  
 };  
   
     
   
 ;  
   
     
   
 {  
   
   
 ## -- Adds to children list  
     if ($index == -1) {  
       push @$children, @new_child;  
1176      } else {      } else {
1177        splice @$children, $index, 0, @new_child;        delete ${$_[0]}->{manakai_is_html};
1178          delete ${$_[0]}->{manakai_compat_mode};
1179      }      }
     $r = $newChild;  
     
   
   
 }  
   
 ;  
   
     
   
 ;  
   
   
   
 }  
   
   
 ;}  
   
 ;  
   
   
 }  
   
 ;  
   
   
 }  
 $r}  
 sub replace_child ($$$) {  
 my ($self, $newChild, $oldChild) = @_;  
 my $r;  
   
 {  
   
 if  
 ($self eq $newChild) {  
     
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#method' => 'replace_child', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/dom/tree#HIERARCHY_DOCUMENT_FRAGMENT_ITSELF_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocumentFragment', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild';  
   
 ;  
 }  
 my $self_od = $self->  
 owner_document  
 ;  
 my $child_od = $newChild->  
 owner_document  
 ;  
 my $child_nt = $newChild->  
 node_type  
 ;  
   
   
 {  
   
   
 {  
   
 local $Error::Depth = $Error::Depth + 1;  
   
 {  
   
   
   my  
 $strict = $self_od->  
 strict_error_checking  
 ;  
   
   ## -- Node Type check  
   my @new_child;  
   if ({  
     3 => 1,  
     5 => 1,  
     1 => 1,  
     7 => 1,  
     4 => 1,  
     8 => 1,  
   }->{$child_nt}) {  
     push @new_child, $newChild;  
   } elsif ($child_nt ==  
 11  
 ) {  
     for my $cn (@{$newChild->  
 child_nodes  
 }) {  
       unless ({  
     3 => 1,  
     5 => 1,  
     1 => 1,  
     7 => 1,  
     4 => 1,  
     8 => 1,  
   }->{$cn->  
 node_type  
 }) {  
           
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#HIERARCHY_BAD_TYPE', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/replaceChildImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
       }  
       push @new_child, $cn;  
     }  
   } else {  
       
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'HIERARCHY_REQUEST_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#HIERARCHY_BAD_TYPE', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/replaceChildImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
1180    }    }
1181      return ${$_[0]}->{manakai_is_html};
1182    } # manakai_is_html
1183    
1184    my $nc_parent = @new_child ? $new_child[0]->  package Message::IF::Document;
1185  parent_node  package Message::IF::DocumentTraversal;
1186                               :  package Message::IF::DocumentXDoctype;
1187    package Message::IF::DocumentSelector;
1188  undef  package Message::IF::HTMLDocument;
 ;  
   if ($strict) {  
     ## -- Wrong-document check  
     unless ($self_od eq $child_od) {  
         
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'WRONG_DOCUMENT_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#DIFFERENT_DOCUMENT_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/replaceChildImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'newChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $newChild;  
   
   
 }  
   
1189    
1190  ;}  package Message::DOM::DOMImplementation;
1191    
1192  ;  sub create_document ($;$$$) {
1193      }    my $r = Message::DOM::Document->____new ($_[0]);
   
     ## -- Read-onlyness check  
     if ($self->  
 manakai_read_only  
 ) {  
         
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#NOMOD_THIS', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/replaceChildImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';  
   
   
 }  
   
   
 ;}  
   
 ;  
     }  
     if (@new_child) {  
       if ($nc_parent and  
           $nc_parent->  
 manakai_read_only  
 ) {  
           
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#NOMOD_SRC_PARENT', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/replaceChildImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';  
   
   
 }  
   
   
 ;}  
1194    
1195  ;    if (defined $_[2]) {
1196        }      local $Error::Depth = $Error::Depth + 1;
1197      }      $r->append_child ($r->create_element_ns ($_[1], $_[2])); # NAMESPACE_ERR
1198        ## NOTE: manakai might raise DOMExceptions in cases not defined
1199        ## in DOM3Core spec: XMLNSPREFIX_NONXMLNSNS_ERR,
1200        ## XMLNS_NONXMLNSNS_ERR, and NONXMLNSPREFIX_XMLNSNS_ERR.
1201      } elsif (defined $_[1]) {
1202        report Message::DOM::DOMException
1203            -object => $_[0],
1204            -type => 'NAMESPACE_ERR',
1205            -subtype => 'QNAME_NULLNS_ERR';
1206    }    }
1207    
1208    ## -- Insert at...    if (defined $_[3]) {
1209    my $index = -1; # last      if ($_[3]->parent_node) {
1210            report Message::DOM::DOMException
1211              -object => $_[0],
1212  {            -type => 'WRONG_DOCUMENT_ERR',
1213              -subtype => 'INUSE_DOCTYPE_ERR';
   
 # tc:ForAppendChild & tc:ForReplaceChild  
     if (defined $oldChild) {  
       if ($oldChild eq $newChild) {  
           
   
 ;  
           
   
 {  
   
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMError -object => $self, '-type' => 'http://suika.fam.cx/~wakaba/archive/2004/dom/tree#replace-by-itself', 'rdata' => $oldChild, 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/replaceChildImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';  
   
   
 }  
   
   
 ;}  
   
 ;  
           
   
   
 }  
   
 ;  
       }  
   
       my $cns = $self->  
 child_nodes  
 ;  
       my $cnsl = @$cns;  
       C: {  
         $index = 0;  
         for my $i (0..($cnsl-1)) {  
           my $cn = $cns->[$i];  
           if ($cn eq $oldChild) {  
             $index += $i;  
             last C;  
           } elsif ($cn eq $newChild) {  
             $index = -1; # offset  
           }  
         }  
           
   
 ;  
           
   
 {  
   
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NOT_FOUND_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#NOT_CHILD_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/replaceChildImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'oldChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $oldChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
           
   
   
 }  
   
 ;  
       } # C  
     } else { # |oldChild| is not defined  
         
   
 {  
   
   
 {  
   
 local $Error::Depth = $Error::Depth - 1;  
   
 {  
   
 report Message::DOM::DOMCore::ManakaiDOMException -object => $self, '-type' => 'NOT_FOUND_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#NOT_CHILD_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#resourceURI' => 'tag:suika.fam.cx,2005-09:http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/replaceChildImpl1+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#param-name' => 'oldChild', 'http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#node' => $oldChild;  
   
   
 }  
   
   
 ;}  
   
 ;  
         
   
   
 }  
   
 ;  
1214      }      }
1215          local $Error::Depth = $Error::Depth + 1;
1216        $r->insert_before ($_[3], $r->first_child); # EXTERNAL_OBJECT_ERR
   
 }  
   
 ; # FOR !tc:ForAppendChild  
   
   ## -- Removes from parent  
   if ($nc_parent) {  
     if ($child_nt ==  
 11  
 ) {  
       $$newChild->{  
 'child'  
 } = [];  
     } else {  
       my $v = $$nc_parent->{  
 'child'  
 };  
       RP: for my $i (0..$#$v) {  
         if ($v->[$i] eq $new_child[0]) {  
           splice @$v, $i, 1, ();  
           last RP;  
         }  
       } # RP  
     }  
   }  
   
   ## -- Rewrite the |parentNode| properties  
   for my $nc (@new_child) {  
     $$nc->{  
 'parent'  
 } = $self;  
     Scalar::Util::weaken ($$nc->{  
 'parent'  
 });  
   }  
   
   my $children = $$self->{  
 'child'  
 };  
   
     
   
 ;  
   
     
   
 ;  
   
     
   
 {  
   
   
 ## -- Replaces the node  
     splice @$children, $index, 1, @new_child;  
     CORE::delete $$oldChild->{  
 'parent'  
 };  
     $r = $oldChild;  
     
   
   
 }  
   
 ;  
   
   
   
 }  
   
   
 ;}  
   
 ;  
   
   
 }  
   
 ;  
   
   
 }  
 $r}  
 sub node_name ($;$) {  
 if (@_ == 1) {my ($self) = @_;  
 my $r = '';  
 $r = '#document-fragment';  
 $r;  
 } else {my ($self) = @_;  
 report Message::Util::Error::DOMException::CoreException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#on' => 'get', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/DOMException#READ_ONLY_ATTRIBUTE_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocumentFragment', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#attr' => 'node_name';  
 }  
 }  
 sub manakai_append_text ($$) {  
 my ($self, $string) = @_;  
 my $r;  
   
 {  
   
   
 {  
   
 local $Error::Depth = $Error::Depth + 1;  
   
 {  
   
   
   my  
 $lc = $self->  
 last_child  
 ;  
   if (defined $lc and  
       $lc->  
 node_type  
  ==  
 3  
 ) {  
     $lc->  
 manakai_append_text  
   
            (ref $string eq 'SCALAR' ? $string : \$string);  
   } else {  
     my $text = $self->  
 owner_document  
   
                     ->  
 create_text_node  
   
                         (ref $string eq 'SCALAR' ? $$string : $string);  
     $self->  
 append_child  
  ($text);  
1217    }    }
   $r = $self;  
   
   
   
 }  
   
   
 ;}  
   
 ;  
   
   
 }  
 $r}  
 sub get_feature ($$$) {  
 my ($self, $feature, $version) = @_;  
   
 {  
   
   
 $feature = lc $feature;  
   
   
 }  
   
 {  
   
   
 $version = '' unless defined $version;  
   
   
 }  
 my $r;  
   
 {  
   
   
 $feature =~ s/^\+//;  
   
   
 {  
   
 if  
 ($Message::Util::AutoLoad::Registry::Feature->{$feature}->{$version}) {  
   $r = $self;  
 }  
   
   
 }  
   
 ;  
 unless (defined $r) {  
     
   
 {  
   
 local $Error::Depth = $Error::Depth + 1;  
   
 {  
   
   
   
     $r = $self->SUPER::get_feature ($feature, $version);  
     
   
   
 }  
   
   
 ;}  
   
 ;  
 }  
   
   
 }  
 $r}  
 sub base_uri ($;$) {  
 if (@_ == 1) {my ($self) = @_;  
 my $r = '';  
   
 {  
   
   
 {  
   
 local $Error::Depth = $Error::Depth + 1;  
   
 {  
   
   
   
   $r = $self->  
 owner_document  
 ->  
 base_uri  
 ;  
   
   
1218    
1219  }    return $r;
1220    } # create_document
1221    
1222    =head1 LICENSE
1223    
1224  ;}  Copyright 2007 Wakaba <w@suika.fam.cx>
1225    
1226  ;  This program is free software; you can redistribute it and/or
1227    modify it under the same terms as Perl itself.
1228    
1229    =cut
1230    
 }  
 $r;  
 } else {my ($self) = @_;  
 report Message::Util::Error::DOMException::CoreException -object => $self, '-type' => 'NO_MODIFICATION_ALLOWED_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#on' => 'get', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#subtype' => 'http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/DOMException#READ_ONLY_ATTRIBUTE_ERR', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#class' => 'Message::DOM::Document::ManakaiDOMDocumentFragment', 'http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#attr' => 'base_uri';  
 }  
 }  
 $Message::DOM::DOMFeature::ClassInfo->{q<Message::DOM::Document::ManakaiDOMDocumentFragment>}->{has_feature} = {'core',  
 {'',  
 '1',  
 '1.0',  
 '1',  
 '2.0',  
 '1',  
 '3.0',  
 '1'},  
 'xml',  
 {'',  
 '1',  
 '1.0',  
 '1',  
 '2.0',  
 '1',  
 '3.0',  
 '1'},  
 'xmlversion',  
 {'',  
 '1',  
 '1.0',  
 '1',  
 '1.1',  
 '1'}};  
 $Message::DOM::ClassPoint{q<Message::DOM::Document::ManakaiDOMDocumentFragment>} = 14.1;  
 for ($Message::DOM::IFLatest::Node::){}  
 ## License: <http://suika.fam.cx/~wakaba/archive/2004/8/18/license#Perl+MPL>  
1231  1;  1;
1232    ## $Date$

Legend:
Removed from v.1.14  
changed lines
  Added in v.1.22

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24