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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.12 - (show annotations) (download)
Sun Dec 3 05:40:33 2006 UTC (17 years, 11 months ago) by wakaba
Branch: MAIN
CVS Tags: manakai-200612
Changes since 1.11: +20 -22 lines
++ manakai/lib/Message/Util/DIS/ChangeLog	3 Dec 2006 05:40:22 -0000
2006-12-03  Wakaba  <wakaba@suika.fam.cx>

	* Perl.dis: Support for obsolete |role|s is removed.

++ manakai/lib/Message/DOM/ChangeLog	3 Dec 2006 05:39:22 -0000
2006-12-03  Wakaba  <wakaba@suika.fam.cx>

	* DOMFeature.dis, TreeCore.dis: Unused |role|s are removed.

1 #!/usr/bin/perl
2 ## This file is automatically generated
3 ## at 2006-12-03T04:27:27+00:00,
4 ## from file "Document.dis",
5 ## module <http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom#ManakaiDOM.Document>,
6 ## for <http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom#ManakaiDOMLatest>.
7 ## Don't edit by hand!
8 use strict;
9 require Message::DOM::DOMCore;
10 require Message::DOM::TreeCore;
11 require Message::Util::Error::DOMException;
12 package Message::DOM::Document;
13 our $VERSION = 20061203.0427;
14 package Message::DOM::Document::ManakaiDOMImplementationDocument;
15 our $VERSION = 20061203.0427;
16 push @Message::DOM::DOMCore::ManakaiDOMImplementation::ISA, q<Message::DOM::Document::ManakaiDOMImplementationDocument> unless Message::DOM::DOMCore::ManakaiDOMImplementation->isa (q<Message::DOM::Document::ManakaiDOMImplementationDocument>);
17 sub create_document ($;$$$) {
18 my ($self, $namespaceURI, $qualifiedName, $doctype) = @_;
19
20 {
21
22 if
23 (CORE::defined $namespaceURI and CORE::length $namespaceURI == 0) {
24 require Message::DOM::DOMMain;
25
26 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:1165118814:1861:wAUT122229+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';
27
28 ;
29
30
31
32 {
33
34
35 $namespaceURI = undef;
36
37
38
39 }
40
41 ;
42 }
43
44
45 }
46 my $r;
47
48 {
49
50 my
51 $bag =
52 $self->{'b'}
53 ;
54 my $stem;
55
56
57 {
58
59
60 $stem = 'Message::DOM::Document::ManakaiDOMDocument'->___create_node_stem ($bag, {
61
62 'rc'
63 => 0,
64
65 'id'
66 => \
67 (
68 'tag:suika.fam.cx,2005-09:' . time . ':' . $$ . ':' .
69 (++$Message::Util::ManakaiNode::UniqueIDN)
70 )
71 ,
72 }, {
73 'impl' => $self,
74 });
75
76
77 {
78
79 if
80 (defined 'Message::DOM::Document::ManakaiDOMDocument') {
81 if (ref 'Message::DOM::Document::ManakaiDOMDocument' eq 'SCALAR') {
82 $stem->{'cls'} = 'Message::DOM::Document::ManakaiDOMDocument';
83 } elsif (defined $Message::Util::ManakaiStringRef::Value{'Message::DOM::Document::ManakaiDOMDocument'}) {
84 $stem->{'cls'} = $Message::Util::ManakaiStringRef::Value{'Message::DOM::Document::ManakaiDOMDocument'};
85 } else {
86 require Scalar::Util;
87 $stem->{'cls'} = $Message::Util::ManakaiStringRef::Value{'Message::DOM::Document::ManakaiDOMDocument'} = \('Message::DOM::Document::ManakaiDOMDocument');
88 Scalar::Util::weaken ($Message::Util::ManakaiStringRef::Value{'Message::DOM::Document::ManakaiDOMDocument'});
89 }
90 } else {
91 CORE::delete $stem->{'cls'};
92 }
93
94
95 }
96
97 ;
98 $bag->{${$stem->{
99 'id'
100 }}} = $stem;
101
102
103 }
104
105 ;
106
107
108 {
109
110
111 $r = ${$stem->{
112 'cls'
113 }}->___create_node_ref ({
114
115 'id'
116 => $stem->{
117 'id'
118 },
119
120 'b'
121 => $bag,
122 }, {
123 });
124 $stem->{
125 'rc'
126 }++;
127
128
129 }
130
131 ;
132
133 if (defined $doctype) {
134
135
136 {
137
138 local $Error::Depth = $Error::Depth + 1;
139
140 {
141
142
143
144 $r->
145 append_child
146 ($doctype);
147
148
149
150 }
151
152
153 ;}
154
155 ;
156 }
157
158 if (defined $qualifiedName) {
159
160
161 {
162
163 local $Error::Depth = $Error::Depth + 1;
164
165 {
166
167
168 my
169 $el = $r->
170 create_element_ns
171
172 ($namespaceURI, $qualifiedName);
173 $r->
174 append_child
175 ($el);
176 $r = $el->
177 owner_document
178 ;
179 ## Choose the class based on document element type
180
181
182
183 }
184
185
186 ;}
187
188 ;
189 } elsif (defined $namespaceURI) {
190
191 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';
192
193 ;
194 }
195
196
197 }
198 $r}
199 $Message::DOM::DOMFeature::ClassInfo->{q<Message::DOM::Document::ManakaiDOMImplementationDocument>}->{has_feature} = {};
200 $Message::DOM::ClassPoint{q<Message::DOM::Document::ManakaiDOMImplementationDocument>} = 0;
201 package Message::DOM::IFLatest::Document;
202 our $VERSION = 20061203.0427;
203 package Message::DOM::Document::ManakaiDOMDocument;
204 our $VERSION = 20061203.0427;
205 push our @ISA, 'Message::DOM::TreeCore::ManakaiDOMNode',
206 'Message::DOM::IF::Document',
207 'Message::DOM::IF::Node',
208 'Message::DOM::IFLatest::Document',
209 'Message::DOM::IFLatest::Node',
210 'Message::DOM::IFLevel1::Document',
211 'Message::DOM::IFLevel1::Node',
212 'Message::DOM::IFLevel2::Document',
213 'Message::DOM::IFLevel2::Node',
214 'Message::DOM::IFLevel3::Document',
215 'Message::DOM::IFLevel3::Node';
216 sub ___create_node_stem ($$$$) {
217 my ($self, $bag, $obj, $opt) = @_;
218 my $r = {};
219
220 {
221
222
223 $obj->{
224 'child'
225 } = [];
226 $obj->{
227 'do'
228 } = {};
229 $obj->{
230 'http://www.w3.org/2001/04/infoset#version'
231 } = '1.0';
232
233
234 {
235
236
237 $obj->{'impl'} = $opt->{'impl'}->{
238 'id'
239 };
240 $bag->{${$opt->{'impl'}->{
241 'id'
242 }}}
243 ->{'lpmi'}->{${$obj->{
244 'id'
245 }}}
246 = $obj->{
247 'id'
248 };
249
250
251 }
252
253 ;
254 $r = $obj;
255
256
257 }
258 $r}
259 sub node_type ($;$) {
260 if (@_ == 1) {my ($self) = @_;
261 my $r;
262 $r = 9;
263 $r;
264 } else {my ($self) = @_;
265 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';
266 }
267 }
268 sub append_child ($$) {
269 my ($self, $newChild) = @_;
270 my $r;
271
272 {
273
274 my
275 $strictc = $self->
276 dom_config
277
278 ->
279 get_parameter
280
281 (
282 'http://suika.fam.cx/www/2006/dom-config/strict-document-children'
283 );
284 my $child_od = $newChild->
285 owner_document
286 || $self;
287 my $child_nt = $newChild->
288 node_type
289 ;
290 if ($strictc and $self->
291 strict_error_checking
292 ) {
293
294
295 {
296
297 local $Error::Depth = $Error::Depth + 1;
298
299 {
300
301
302 my
303 $has_el;
304 my $has_dt;
305 if ($child_nt ==
306 1
307 ) {
308 $has_el =
309 1
310 ;
311 } elsif ($child_nt ==
312 10
313 ) {
314 $has_dt =
315 1
316 ;
317 } elsif ($child_nt ==
318 11
319 ) {
320 for my $cn (@{$newChild->
321 child_nodes
322 }) {
323 my $cnt = $cn->
324 node_type
325 ;
326 if ($cnt ==
327 1
328 ) {
329 if ($has_el) {
330
331
332 {
333
334 local $Error::Depth = $Error::Depth - 1;
335
336 {
337
338 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;
339
340
341 }
342
343
344 ;}
345
346 ;
347 }
348 $has_el =
349 1
350 ;
351 }
352 # DocumentType node cannot be contained in DocumentFragments
353 }
354 }
355
356 if ($has_el) {
357 my $anode = $self->
358 last_child
359 ;
360 while (defined $anode) {
361 if ($anode->
362 node_type
363 ==
364 1
365 ) {
366
367
368 {
369
370 local $Error::Depth = $Error::Depth - 1;
371
372 {
373
374 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;
375
376
377 }
378
379
380 ;}
381
382 ;
383 }
384 $anode = $anode->
385 previous_sibling
386 ;
387 }
388 } # has_el
389 if ($has_dt) {
390 my $anode = $self->
391 last_child
392 ;
393 while (defined $anode) {
394 my $ant = $anode->
395 node_type
396 ;
397 if ($ant ==
398 1
399 ) {
400
401
402 {
403
404 local $Error::Depth = $Error::Depth - 1;
405
406 {
407
408 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;
409
410
411 }
412
413
414 ;}
415
416 ;
417 } elsif ($ant ==
418 10
419 ) {
420
421
422 {
423
424 local $Error::Depth = $Error::Depth - 1;
425
426 {
427
428 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;
429
430
431 }
432
433
434 ;}
435
436 ;
437 }
438 $anode = $anode->
439 previous_sibling
440 ;
441 }
442 } # has_dt
443
444
445
446 }
447
448
449 ;}
450
451 ;
452 }
453
454
455 {
456
457
458 {
459
460 local $Error::Depth = $Error::Depth + 1;
461
462 {
463
464
465 my
466 $strict = $self->
467 strict_error_checking
468 ;
469
470 ## -- Node Type check
471 my @new_child;
472 if ({
473 3 => (not $strictc),
474 5 => (not $strictc),
475 1 => 1,
476 4 => (not $strictc),
477 7 => 1,
478 8 => 1,
479 10 => 1,
480 }->{$child_nt}) {
481 push @new_child, $newChild;
482 } elsif ($child_nt ==
483 11
484 ) {
485 for my $cn (@{$newChild->
486 child_nodes
487 }) {
488 unless ({
489 3 => (not $strictc),
490 5 => (not $strictc),
491 1 => 1,
492 4 => (not $strictc),
493 7 => 1,
494 8 => 1,
495 10 => 1,
496 }->{$cn->
497 node_type
498 }) {
499
500
501 {
502
503 local $Error::Depth = $Error::Depth - 1;
504
505 {
506
507 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;
508
509
510 }
511
512
513 ;}
514
515 ;
516 }
517 push @new_child, $cn;
518 }
519 } else {
520
521
522 {
523
524 local $Error::Depth = $Error::Depth - 1;
525
526 {
527
528 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;
529
530
531 }
532
533
534 ;}
535
536 ;
537 }
538
539 my $nc_parent = @new_child ? $new_child[0]->
540 parent_node
541 :
542
543 undef
544 ;
545 if ($strict) {
546 ## -- Wrong-document check
547 unless ($self eq $child_od) {
548
549
550 {
551
552 local $Error::Depth = $Error::Depth - 1;
553
554 {
555
556 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;
557
558
559 }
560
561
562 ;}
563
564 ;
565 }
566
567 ## -- Read-onlyness check
568 if ($self->
569 manakai_read_only
570 ) {
571
572
573 {
574
575 local $Error::Depth = $Error::Depth - 1;
576
577 {
578
579 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';
580
581
582 }
583
584
585 ;}
586
587 ;
588 }
589 if (@new_child) {
590 if ($nc_parent and
591 $nc_parent->
592 manakai_read_only
593 ) {
594
595
596 {
597
598 local $Error::Depth = $Error::Depth - 1;
599
600 {
601
602 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';
603
604
605 }
606
607
608 ;}
609
610 ;
611 }
612 }
613 }
614
615 ## -- Insert at...
616 my $index = -1; # last
617
618
619 ; # FOR !tc:ForAppendChild
620
621 ## -- Removes from parent
622 if ($nc_parent) {
623 if ($child_nt ==
624 11
625 ) {
626
627
628 {
629
630
631 $newChild->{
632 'b'
633 }->{${$newChild->{
634 'id'
635 }}}
636 ->{'child'} = [];
637
638
639 }
640
641 ;
642 } else {
643 my $v;
644
645
646 {
647
648
649 $v = $nc_parent->{
650 'b'
651 }->{${$nc_parent->{
652 'id'
653 }}}
654 ->{'child'};
655
656
657 }
658
659 ;
660 RP: for my $i (0..$#$v) {
661 my $nodeid = $v->[$i];
662 if (
663 (${$new_child[0]->{'id'}} eq ${$nodeid})
664 ) {
665 splice @$v, $i, 1, ();
666 last RP;
667 }
668 } # RP
669 }
670 }
671
672 ## -- Rewrite the |parentNode| properties
673 for my $nc (@new_child) {
674
675
676 {
677
678
679 $nc->{
680 'b'
681 }->{${$nc->{
682 'id'
683 }}}
684 ->{'parent'} = $self->{
685 'id'
686 };
687
688
689 }
690
691 ;
692 }
693
694 my $children;
695
696
697 {
698
699
700 $children = $self->{
701 'b'
702 }->{${$self->{
703 'id'
704 }}}
705 ->{'child'};
706
707
708 }
709
710 ;
711
712
713
714 {
715
716
717 ## -- Adds to children list
718 push @$children, map {
719
720 $_->{'id'}
721
722 } @new_child;
723 $r = $newChild;
724
725
726
727 }
728
729 ;
730
731
732
733 ;
734
735
736
737 ;
738
739
740
741 }
742
743
744 ;}
745
746 ;
747
748
749 }
750
751 ;
752 if ($child_nt ==
753 10 and
754
755 not defined $newChild->
756 owner_document
757 ) {
758 my $bag =
759 $self->{'b'}
760 ;
761
762
763 {
764
765 CORE::delete
766 $bag->{${$bag->{${$newChild->{
767 'id'
768 }}}
769 ->{'impl'} or \''}}
770 ->{'lpmi'};
771 $bag->{
772 'm'
773 }++;
774 CORE::delete $bag->{${$newChild->{
775 'id'
776 }}}
777 ->{'impl'};
778
779
780 }
781
782 ;
783
784
785 {
786
787
788 $bag->{${$newChild->{
789 'id'
790 }}}->{'od'}
791 = $self->{
792 'id'
793 };
794 $bag->{${$self->{
795 'id'
796 }}}
797 ->{'do'}->{${$newChild->{
798 'id'
799 }}}
800 = $newChild->{
801 'id'
802 };
803
804
805 }
806
807 ;
808 }
809
810
811 }
812 $r}
813 sub insert_before ($$;$) {
814 my ($self, $newChild, $refChild) = @_;
815 my $r;
816
817 {
818
819 my
820 $strictc = $self->
821 dom_config
822
823 ->
824 get_parameter
825
826 (
827 'http://suika.fam.cx/www/2006/dom-config/strict-document-children'
828 );
829 my $child_od = $newChild->
830 owner_document
831 || $self;
832 my $child_nt = $newChild->
833 node_type
834 ;
835 if ($strictc and $self->
836 strict_error_checking
837 ) {
838
839
840 {
841
842 local $Error::Depth = $Error::Depth + 1;
843
844 {
845
846
847 my
848 $has_el;
849 my $has_dt;
850 if ($child_nt ==
851 1
852 ) {
853 $has_el =
854 1
855 ;
856 } elsif ($child_nt ==
857 10
858 ) {
859 $has_dt =
860 1
861 ;
862 } elsif ($child_nt ==
863 11
864 ) {
865 for my $cn (@{$newChild->
866 child_nodes
867 }) {
868 my $cnt = $cn->
869 node_type
870 ;
871 if ($cnt ==
872 1
873 ) {
874 if ($has_el) {
875
876
877 {
878
879 local $Error::Depth = $Error::Depth - 1;
880
881 {
882
883 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;
884
885
886 }
887
888
889 ;}
890
891 ;
892 }
893 $has_el =
894 1
895 ;
896 }
897 # DocumentType node cannot be contained in DocumentFragments
898 }
899 }
900
901 if ($has_el) {
902 my $anode = $refChild ? $refChild->
903 previous_sibling
904 :
905 $self->
906 last_child
907 ;
908 while (defined $anode) {
909 if ($anode->
910 node_type
911 ==
912 1
913 ) {
914
915
916 {
917
918 local $Error::Depth = $Error::Depth - 1;
919
920 {
921
922 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;
923
924
925 }
926
927
928 ;}
929
930 ;
931 }
932 $anode = $anode->
933 previous_sibling
934 ;
935 }
936 $anode = $refChild;
937 while (defined $anode) {
938 my $ant = $anode->
939 node_type
940 ;
941 if ($ant ==
942 1
943 ) {
944
945
946 {
947
948 local $Error::Depth = $Error::Depth - 1;
949
950 {
951
952 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;
953
954
955 }
956
957
958 ;}
959
960 ;
961 } elsif ($ant ==
962 10
963 ) {
964
965
966 {
967
968 local $Error::Depth = $Error::Depth - 1;
969
970 {
971
972 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;
973
974
975 }
976
977
978 ;}
979
980 ;
981 }
982 $anode = $anode->
983 next_sibling
984 ;
985 }
986 } # has_el
987 if ($has_dt) {
988 my $anode = $refChild ? $refChild->
989 previous_sibling
990 :
991 $self->
992 last_child
993 ;
994 while (defined $anode) {
995 my $ant = $anode->
996 node_type
997 ;
998 if ($ant ==
999 1
1000 ) {
1001
1002
1003 {
1004
1005 local $Error::Depth = $Error::Depth - 1;
1006
1007 {
1008
1009 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;
1010
1011
1012 }
1013
1014
1015 ;}
1016
1017 ;
1018 } elsif ($ant ==
1019 10
1020 ) {
1021
1022
1023 {
1024
1025 local $Error::Depth = $Error::Depth - 1;
1026
1027 {
1028
1029 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;
1030
1031
1032 }
1033
1034
1035 ;}
1036
1037 ;
1038 }
1039 $anode = $anode->
1040 previous_sibling
1041 ;
1042 }
1043 $anode = $refChild;
1044 while (defined $anode) {
1045 if ($anode->
1046 node_type
1047
1048 ==
1049 10
1050 ) {
1051
1052
1053 {
1054
1055 local $Error::Depth = $Error::Depth - 1;
1056
1057 {
1058
1059 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;
1060
1061
1062 }
1063
1064
1065 ;}
1066
1067 ;
1068 }
1069 $anode = $anode->
1070 next_sibling
1071 ;
1072 }
1073 } # has_dt
1074
1075
1076
1077 }
1078
1079
1080 ;}
1081
1082 ;
1083 }
1084
1085
1086 {
1087
1088
1089 {
1090
1091 local $Error::Depth = $Error::Depth + 1;
1092
1093 {
1094
1095
1096 my
1097 $strict = $self->
1098 strict_error_checking
1099 ;
1100
1101 ## -- Node Type check
1102 my @new_child;
1103 if ({
1104 3 => (not $strictc),
1105 5 => (not $strictc),
1106 1 => 1,
1107 4 => (not $strictc),
1108 7 => 1,
1109 8 => 1,
1110 10 => 1,
1111 }->{$child_nt}) {
1112 push @new_child, $newChild;
1113 } elsif ($child_nt ==
1114 11
1115 ) {
1116 for my $cn (@{$newChild->
1117 child_nodes
1118 }) {
1119 unless ({
1120 3 => (not $strictc),
1121 5 => (not $strictc),
1122 1 => 1,
1123 4 => (not $strictc),
1124 7 => 1,
1125 8 => 1,
1126 10 => 1,
1127 }->{$cn->
1128 node_type
1129 }) {
1130
1131
1132 {
1133
1134 local $Error::Depth = $Error::Depth - 1;
1135
1136 {
1137
1138 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;
1139
1140
1141 }
1142
1143
1144 ;}
1145
1146 ;
1147 }
1148 push @new_child, $cn;
1149 }
1150 } else {
1151
1152
1153 {
1154
1155 local $Error::Depth = $Error::Depth - 1;
1156
1157 {
1158
1159 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;
1160
1161
1162 }
1163
1164
1165 ;}
1166
1167 ;
1168 }
1169
1170 my $nc_parent = @new_child ? $new_child[0]->
1171 parent_node
1172 :
1173
1174 undef
1175 ;
1176 if ($strict) {
1177 ## -- Wrong-document check
1178 unless ($self eq $child_od) {
1179
1180
1181 {
1182
1183 local $Error::Depth = $Error::Depth - 1;
1184
1185 {
1186
1187 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;
1188
1189
1190 }
1191
1192
1193 ;}
1194
1195 ;
1196 }
1197
1198 ## -- Read-onlyness check
1199 if ($self->
1200 manakai_read_only
1201 ) {
1202
1203
1204 {
1205
1206 local $Error::Depth = $Error::Depth - 1;
1207
1208 {
1209
1210 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';
1211
1212
1213 }
1214
1215
1216 ;}
1217
1218 ;
1219 }
1220 if (@new_child) {
1221 if ($nc_parent and
1222 $nc_parent->
1223 manakai_read_only
1224 ) {
1225
1226
1227 {
1228
1229 local $Error::Depth = $Error::Depth - 1;
1230
1231 {
1232
1233 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';
1234
1235
1236 }
1237
1238
1239 ;}
1240
1241 ;
1242 }
1243 }
1244 }
1245
1246 ## -- Insert at...
1247 my $index = -1; # last
1248
1249
1250 {
1251
1252
1253 # tc:ForAppendChild & tc:ForReplaceChild
1254 if (defined $refChild) {
1255 if ($refChild eq $newChild) {
1256
1257
1258 {
1259
1260
1261 {
1262
1263 local $Error::Depth = $Error::Depth - 1;
1264
1265 {
1266
1267 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';
1268
1269
1270 }
1271
1272
1273 ;}
1274
1275 ;
1276
1277
1278
1279 }
1280
1281 ;
1282
1283
1284 ;
1285 }
1286
1287 my $cns = $self->
1288 child_nodes
1289 ;
1290 my $cnsl = @$cns;
1291 C: {
1292 $index = 0;
1293 for my $i (0..($cnsl-1)) {
1294 my $cn = $cns->[$i];
1295 if ($cn eq $refChild) {
1296 $index += $i;
1297 last C;
1298 } elsif ($cn eq $newChild) {
1299 $index = -1; # offset
1300 }
1301 }
1302
1303
1304 {
1305
1306
1307 {
1308
1309 local $Error::Depth = $Error::Depth - 1;
1310
1311 {
1312
1313 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;
1314
1315
1316 }
1317
1318
1319 ;}
1320
1321 ;
1322
1323
1324
1325 }
1326
1327 ;
1328
1329
1330 ;
1331 } # C
1332 } else { # |oldChild| is not defined
1333
1334
1335 ;
1336 }
1337
1338
1339
1340 }
1341
1342 ; # FOR !tc:ForAppendChild
1343
1344 ## -- Removes from parent
1345 if ($nc_parent) {
1346 if ($child_nt ==
1347 11
1348 ) {
1349
1350
1351 {
1352
1353
1354 $newChild->{
1355 'b'
1356 }->{${$newChild->{
1357 'id'
1358 }}}
1359 ->{'child'} = [];
1360
1361
1362 }
1363
1364 ;
1365 } else {
1366 my $v;
1367
1368
1369 {
1370
1371
1372 $v = $nc_parent->{
1373 'b'
1374 }->{${$nc_parent->{
1375 'id'
1376 }}}
1377 ->{'child'};
1378
1379
1380 }
1381
1382 ;
1383 RP: for my $i (0..$#$v) {
1384 my $nodeid = $v->[$i];
1385 if (
1386 (${$new_child[0]->{'id'}} eq ${$nodeid})
1387 ) {
1388 splice @$v, $i, 1, ();
1389 last RP;
1390 }
1391 } # RP
1392 }
1393 }
1394
1395 ## -- Rewrite the |parentNode| properties
1396 for my $nc (@new_child) {
1397
1398
1399 {
1400
1401
1402 $nc->{
1403 'b'
1404 }->{${$nc->{
1405 'id'
1406 }}}
1407 ->{'parent'} = $self->{
1408 'id'
1409 };
1410
1411
1412 }
1413
1414 ;
1415 }
1416
1417 my $children;
1418
1419
1420 {
1421
1422
1423 $children = $self->{
1424 'b'
1425 }->{${$self->{
1426 'id'
1427 }}}
1428 ->{'child'};
1429
1430
1431 }
1432
1433 ;
1434
1435
1436
1437 ;
1438
1439
1440
1441 {
1442
1443
1444 ## -- Adds to children list
1445 if ($index == -1) {
1446 push @$children, map {
1447
1448 $_->{'id'}
1449
1450 } @new_child;
1451 } else {
1452 splice @$children, $index, 0, map {
1453
1454 $_->{'id'}
1455
1456 } @new_child;
1457 }
1458 $r = $newChild;
1459
1460
1461
1462 }
1463
1464 ;
1465
1466
1467
1468 ;
1469
1470
1471
1472 }
1473
1474
1475 ;}
1476
1477 ;
1478
1479
1480 }
1481
1482 ;
1483 if ($child_nt ==
1484 10 and
1485
1486 not defined $newChild->
1487 owner_document
1488 ) {
1489 my $bag =
1490 $self->{'b'}
1491 ;
1492
1493
1494 {
1495
1496 CORE::delete
1497 $bag->{${$bag->{${$newChild->{
1498 'id'
1499 }}}
1500 ->{'impl'} or \''}}
1501 ->{'lpmi'};
1502 $bag->{
1503 'm'
1504 }++;
1505 CORE::delete $bag->{${$newChild->{
1506 'id'
1507 }}}
1508 ->{'impl'};
1509
1510
1511 }
1512
1513 ;
1514
1515
1516 {
1517
1518
1519 $bag->{${$newChild->{
1520 'id'
1521 }}}->{'od'}
1522 = $self->{
1523 'id'
1524 };
1525 $bag->{${$self->{
1526 'id'
1527 }}}
1528 ->{'do'}->{${$newChild->{
1529 'id'
1530 }}}
1531 = $newChild->{
1532 'id'
1533 };
1534
1535
1536 }
1537
1538 ;
1539 }
1540
1541
1542 }
1543 $r}
1544 sub replace_child ($$$) {
1545 my ($self, $newChild, $oldChild) = @_;
1546 my $r;
1547
1548 {
1549
1550 my
1551 $strictc = $self->
1552 dom_config
1553
1554 ->
1555 get_parameter
1556
1557 (
1558 'http://suika.fam.cx/www/2006/dom-config/strict-document-children'
1559 );
1560 my $child_od = $newChild->
1561 owner_document
1562 || $self;
1563 my $child_nt = $newChild->
1564 node_type
1565 ;
1566 if ($strictc and $self->
1567 strict_error_checking
1568 ) {
1569
1570
1571 {
1572
1573 local $Error::Depth = $Error::Depth + 1;
1574
1575 {
1576
1577
1578 my
1579 $has_el;
1580 my $has_dt;
1581 if ($child_nt ==
1582 1
1583 ) {
1584 $has_el =
1585 1
1586 ;
1587 } elsif ($child_nt ==
1588 10
1589 ) {
1590 $has_dt =
1591 1
1592 ;
1593 } elsif ($child_nt ==
1594 11
1595 ) {
1596 for my $cn (@{$newChild->
1597 child_nodes
1598 }) {
1599 my $cnt = $cn->
1600 node_type
1601 ;
1602 if ($cnt ==
1603 1
1604 ) {
1605 if ($has_el) {
1606
1607
1608 {
1609
1610 local $Error::Depth = $Error::Depth - 1;
1611
1612 {
1613
1614 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;
1615
1616
1617 }
1618
1619
1620 ;}
1621
1622 ;
1623 }
1624 $has_el =
1625 1
1626 ;
1627 }
1628 # DocumentType node cannot be contained in DocumentFragments
1629 }
1630 }
1631
1632 if ($has_el) {
1633 my $anode = $oldChild->
1634 previous_sibling
1635 ;
1636 while (defined $anode) {
1637 if ($anode->
1638 node_type
1639 ==
1640 1
1641 ) {
1642
1643
1644 {
1645
1646 local $Error::Depth = $Error::Depth - 1;
1647
1648 {
1649
1650 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;
1651
1652
1653 }
1654
1655
1656 ;}
1657
1658 ;
1659 }
1660 $anode = $anode->
1661 previous_sibling
1662 ;
1663 }
1664 $anode = $oldChild->
1665 next_sibling
1666 ;
1667 while (defined $anode) {
1668 my $ant = $anode->
1669 node_type
1670 ;
1671 if ($ant ==
1672 1
1673 ) {
1674
1675
1676 {
1677
1678 local $Error::Depth = $Error::Depth - 1;
1679
1680 {
1681
1682 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;
1683
1684
1685 }
1686
1687
1688 ;}
1689
1690 ;
1691 } elsif ($ant ==
1692 10
1693 ) {
1694
1695
1696 {
1697
1698 local $Error::Depth = $Error::Depth - 1;
1699
1700 {
1701
1702 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;
1703
1704
1705 }
1706
1707
1708 ;}
1709
1710 ;
1711 }
1712 $anode = $anode->
1713 next_sibling
1714 ;
1715 }
1716 } # has_el
1717 if ($has_dt) {
1718 my $anode = $oldChild->
1719 previous_sibling
1720 ;
1721 while (defined $anode) {
1722 my $ant = $anode->
1723 node_type
1724 ;
1725 if ($ant ==
1726 1
1727 ) {
1728
1729
1730 {
1731
1732 local $Error::Depth = $Error::Depth - 1;
1733
1734 {
1735
1736 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;
1737
1738
1739 }
1740
1741
1742 ;}
1743
1744 ;
1745 } elsif ($ant ==
1746 10
1747 ) {
1748
1749
1750 {
1751
1752 local $Error::Depth = $Error::Depth - 1;
1753
1754 {
1755
1756 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;
1757
1758
1759 }
1760
1761
1762 ;}
1763
1764 ;
1765 }
1766 $anode = $anode->
1767 previous_sibling
1768 ;
1769 }
1770 $anode = $oldChild->
1771 next_sibling
1772 ;
1773 while (defined $anode) {
1774 if ($anode->
1775 node_type
1776
1777 ==
1778 10
1779 ) {
1780
1781
1782 {
1783
1784 local $Error::Depth = $Error::Depth - 1;
1785
1786 {
1787
1788 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;
1789
1790
1791 }
1792
1793
1794 ;}
1795
1796 ;
1797 }
1798 $anode = $anode->
1799 next_sibling
1800 ;
1801 }
1802 } # has_dt
1803
1804
1805
1806 }
1807
1808
1809 ;}
1810
1811 ;
1812 }
1813
1814
1815 {
1816
1817
1818 {
1819
1820 local $Error::Depth = $Error::Depth + 1;
1821
1822 {
1823
1824
1825 my
1826 $strict = $self->
1827 strict_error_checking
1828 ;
1829
1830 ## -- Node Type check
1831 my @new_child;
1832 if ({
1833 3 => (not $strictc),
1834 5 => (not $strictc),
1835 1 => 1,
1836 4 => (not $strictc),
1837 7 => 1,
1838 8 => 1,
1839 10 => 1,
1840 }->{$child_nt}) {
1841 push @new_child, $newChild;
1842 } elsif ($child_nt ==
1843 11
1844 ) {
1845 for my $cn (@{$newChild->
1846 child_nodes
1847 }) {
1848 unless ({
1849 3 => (not $strictc),
1850 5 => (not $strictc),
1851 1 => 1,
1852 4 => (not $strictc),
1853 7 => 1,
1854 8 => 1,
1855 10 => 1,
1856 }->{$cn->
1857 node_type
1858 }) {
1859
1860
1861 {
1862
1863 local $Error::Depth = $Error::Depth - 1;
1864
1865 {
1866
1867 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;
1868
1869
1870 }
1871
1872
1873 ;}
1874
1875 ;
1876 }
1877 push @new_child, $cn;
1878 }
1879 } else {
1880
1881
1882 {
1883
1884 local $Error::Depth = $Error::Depth - 1;
1885
1886 {
1887
1888 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;
1889
1890
1891 }
1892
1893
1894 ;}
1895
1896 ;
1897 }
1898
1899 my $nc_parent = @new_child ? $new_child[0]->
1900 parent_node
1901 :
1902
1903 undef
1904 ;
1905 if ($strict) {
1906 ## -- Wrong-document check
1907 unless ($self eq $child_od) {
1908
1909
1910 {
1911
1912 local $Error::Depth = $Error::Depth - 1;
1913
1914 {
1915
1916 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;
1917
1918
1919 }
1920
1921
1922 ;}
1923
1924 ;
1925 }
1926
1927 ## -- Read-onlyness check
1928 if ($self->
1929 manakai_read_only
1930 ) {
1931
1932
1933 {
1934
1935 local $Error::Depth = $Error::Depth - 1;
1936
1937 {
1938
1939 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';
1940
1941
1942 }
1943
1944
1945 ;}
1946
1947 ;
1948 }
1949 if (@new_child) {
1950 if ($nc_parent and
1951 $nc_parent->
1952 manakai_read_only
1953 ) {
1954
1955
1956 {
1957
1958 local $Error::Depth = $Error::Depth - 1;
1959
1960 {
1961
1962 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';
1963
1964
1965 }
1966
1967
1968 ;}
1969
1970 ;
1971 }
1972 }
1973 }
1974
1975 ## -- Insert at...
1976 my $index = -1; # last
1977
1978
1979 {
1980
1981
1982 # tc:ForAppendChild & tc:ForReplaceChild
1983 if (defined $oldChild) {
1984 if ($oldChild eq $newChild) {
1985
1986
1987 ;
1988
1989
1990 {
1991
1992
1993 {
1994
1995 local $Error::Depth = $Error::Depth - 1;
1996
1997 {
1998
1999 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';
2000
2001
2002 }
2003
2004
2005 ;}
2006
2007 ;
2008
2009
2010
2011 }
2012
2013 ;
2014 }
2015
2016 my $cns = $self->
2017 child_nodes
2018 ;
2019 my $cnsl = @$cns;
2020 C: {
2021 $index = 0;
2022 for my $i (0..($cnsl-1)) {
2023 my $cn = $cns->[$i];
2024 if ($cn eq $oldChild) {
2025 $index += $i;
2026 last C;
2027 } elsif ($cn eq $newChild) {
2028 $index = -1; # offset
2029 }
2030 }
2031
2032
2033 ;
2034
2035
2036 {
2037
2038
2039 {
2040
2041 local $Error::Depth = $Error::Depth - 1;
2042
2043 {
2044
2045 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;
2046
2047
2048 }
2049
2050
2051 ;}
2052
2053 ;
2054
2055
2056
2057 }
2058
2059 ;
2060 } # C
2061 } else { # |oldChild| is not defined
2062
2063
2064 {
2065
2066
2067 {
2068
2069 local $Error::Depth = $Error::Depth - 1;
2070
2071 {
2072
2073 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;
2074
2075
2076 }
2077
2078
2079 ;}
2080
2081 ;
2082
2083
2084
2085 }
2086
2087 ;
2088 }
2089
2090
2091
2092 }
2093
2094 ; # FOR !tc:ForAppendChild
2095
2096 ## -- Removes from parent
2097 if ($nc_parent) {
2098 if ($child_nt ==
2099 11
2100 ) {
2101
2102
2103 {
2104
2105
2106 $newChild->{
2107 'b'
2108 }->{${$newChild->{
2109 'id'
2110 }}}
2111 ->{'child'} = [];
2112
2113
2114 }
2115
2116 ;
2117 } else {
2118 my $v;
2119
2120
2121 {
2122
2123
2124 $v = $nc_parent->{
2125 'b'
2126 }->{${$nc_parent->{
2127 'id'
2128 }}}
2129 ->{'child'};
2130
2131
2132 }
2133
2134 ;
2135 RP: for my $i (0..$#$v) {
2136 my $nodeid = $v->[$i];
2137 if (
2138 (${$new_child[0]->{'id'}} eq ${$nodeid})
2139 ) {
2140 splice @$v, $i, 1, ();
2141 last RP;
2142 }
2143 } # RP
2144 }
2145 }
2146
2147 ## -- Rewrite the |parentNode| properties
2148 for my $nc (@new_child) {
2149
2150
2151 {
2152
2153
2154 $nc->{
2155 'b'
2156 }->{${$nc->{
2157 'id'
2158 }}}
2159 ->{'parent'} = $self->{
2160 'id'
2161 };
2162
2163
2164 }
2165
2166 ;
2167 }
2168
2169 my $children;
2170
2171
2172 {
2173
2174
2175 $children = $self->{
2176 'b'
2177 }->{${$self->{
2178 'id'
2179 }}}
2180 ->{'child'};
2181
2182
2183 }
2184
2185 ;
2186
2187
2188
2189 ;
2190
2191
2192
2193 ;
2194
2195
2196
2197 {
2198
2199
2200 ## -- Replaces the node
2201 splice @$children, $index, 1, map {
2202
2203 $_->{'id'}
2204
2205 } @new_child;
2206
2207
2208 {
2209
2210 CORE::delete
2211 $oldChild->{
2212 'b'
2213 }->{${$oldChild->{
2214 'id'
2215 }}}
2216 ->{'parent'};
2217
2218
2219 }
2220
2221 ;
2222 $r = $oldChild;
2223
2224
2225
2226 }
2227
2228 ;
2229
2230
2231
2232 }
2233
2234
2235 ;}
2236
2237 ;
2238
2239
2240 }
2241
2242 ;
2243 if ($child_nt ==
2244 10 and
2245
2246 not defined $newChild->
2247 owner_document
2248 ) {
2249 my $bag =
2250 $self->{'b'}
2251 ;
2252
2253
2254 {
2255
2256 CORE::delete
2257 $bag->{${$bag->{${$newChild->{
2258 'id'
2259 }}}
2260 ->{'impl'} or \''}}
2261 ->{'lpmi'};
2262 $bag->{
2263 'm'
2264 }++;
2265 CORE::delete $bag->{${$newChild->{
2266 'id'
2267 }}}
2268 ->{'impl'};
2269
2270
2271 }
2272
2273 ;
2274
2275
2276 {
2277
2278
2279 $bag->{${$newChild->{
2280 'id'
2281 }}}->{'od'}
2282 = $self->{
2283 'id'
2284 };
2285 $bag->{${$self->{
2286 'id'
2287 }}}
2288 ->{'do'}->{${$newChild->{
2289 'id'
2290 }}}
2291 = $newChild->{
2292 'id'
2293 };
2294
2295
2296 }
2297
2298 ;
2299 }
2300
2301
2302 }
2303 $r}
2304 sub manakai_append_text ($$) {
2305 my ($self, $string) = @_;
2306 my $r;
2307
2308 {
2309
2310
2311 {
2312
2313 local $Error::Depth = $Error::Depth + 1;
2314
2315 {
2316
2317
2318 unless
2319 ($self->
2320 dom_config
2321
2322 ->
2323 get_parameter
2324
2325 (
2326 'http://suika.fam.cx/www/2006/dom-config/strict-document-children'
2327 )) {
2328 my $lc = $self->
2329 last_child
2330 ;
2331 if (defined $lc and
2332 $lc->
2333 node_type
2334 ==
2335 3
2336 ) {
2337 $lc->
2338 manakai_append_text
2339
2340 (ref $string eq 'SCALAR' ? $string : \$string);
2341 } else {
2342 my $text = $self->
2343 create_text_node
2344
2345 (ref $string eq 'SCALAR' ? $$string : $string);
2346 $self->
2347 append_child
2348 ($text);
2349 }
2350 }
2351 $r = $self;
2352
2353
2354
2355 }
2356
2357
2358 ;}
2359
2360 ;
2361
2362
2363 }
2364 $r}
2365 sub remove_child ($$) {
2366 my ($self, $oldChild) = @_;
2367 my $r;
2368
2369 {
2370
2371 if
2372 ($self->
2373 strict_error_checking and
2374
2375 $self->
2376 manakai_read_only
2377 ) {
2378
2379 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';
2380
2381 ;
2382 }
2383
2384
2385 {
2386
2387 F:
2388 {
2389 my $i = -1;
2390 for my $cld (@{$self->
2391 child_nodes
2392 }) {
2393 $i++;
2394 if ($cld eq $oldChild) {
2395 my $v;
2396
2397
2398 {
2399
2400
2401 $v = $self->{
2402 'b'
2403 }->{${$self->{
2404 'id'
2405 }}}
2406 ->{'child'};
2407
2408
2409 }
2410
2411 ;
2412 splice @$v, $i, 1, ();
2413
2414
2415 {
2416
2417 CORE::delete
2418 $oldChild->{
2419 'b'
2420 }->{${$oldChild->{
2421 'id'
2422 }}}
2423 ->{'parent'};
2424
2425
2426 }
2427
2428 ;
2429 $r = $oldChild;
2430 last F;
2431 }
2432 }
2433
2434 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;
2435
2436 ;
2437 } # F
2438
2439
2440 }
2441
2442 ;
2443
2444
2445 }
2446 $r}
2447 sub node_name ($;$) {
2448 if (@_ == 1) {my ($self) = @_;
2449 my $r = '';
2450 $r = '#document';
2451 $r;
2452 } else {my ($self) = @_;
2453 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';
2454 }
2455 }
2456 sub text_content ($;$) {
2457 if (@_ == 1) {my ($self) = @_;
2458 my $r = '';
2459
2460 {
2461
2462
2463 {
2464
2465 local $Error::Depth = $Error::Depth + 1;
2466
2467 {
2468
2469
2470 if
2471 ($self->
2472 dom_config
2473
2474 ->
2475 get_parameter
2476
2477 (
2478 'http://suika.fam.cx/www/2006/dom-config/strict-document-children'
2479 )) {
2480 $r =
2481 undef
2482 ;
2483 } else {
2484 $r = '';
2485 my @target = @{$self->
2486 child_nodes
2487 };
2488 C: for my $node (@target) {
2489 my $nt = $node->
2490 node_type
2491 ;
2492 if ($nt ==
2493 3 or
2494
2495 $nt ==
2496 4
2497 ) {
2498 $r .= $node->
2499 data
2500 unless
2501 $node->
2502 is_element_content_whitespace
2503 ;
2504 } elsif ($nt ==
2505 1 or
2506
2507 $nt ==
2508 5
2509 ) {
2510 unshift @target, @{$node->
2511 child_nodes
2512 };
2513 }
2514 }
2515 }
2516
2517
2518
2519 }
2520
2521
2522 ;}
2523
2524 ;
2525
2526
2527 }
2528 $r;
2529 } else {my ($self, $given) = @_;
2530
2531 {
2532
2533 if
2534 ($self->
2535 dom_config
2536
2537 ->
2538 get_parameter
2539
2540 (
2541 'http://suika.fam.cx/www/2006/dom-config/strict-document-children'
2542 )) {
2543
2544 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';
2545
2546 ;
2547 } else {
2548
2549
2550 {
2551
2552
2553 {
2554
2555 if
2556 ($self->
2557 manakai_read_only
2558 ) {
2559
2560 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';
2561
2562 ;
2563 }
2564
2565
2566 }
2567
2568 ;
2569
2570 my @__old_children = @{$self->
2571 child_nodes
2572 };
2573 for my $__old_child (@__old_children) {
2574
2575
2576 {
2577
2578 CORE::delete
2579 $__old_child->{
2580 'b'
2581 }->{${$__old_child->{
2582 'id'
2583 }}}
2584 ->{'parent'};
2585
2586
2587 }
2588
2589 ;
2590 }
2591
2592 my @__new_children;
2593 if (defined $given and length $given) {
2594 my $__text = $self->
2595 create_text_node
2596 ($given);
2597 push @__new_children,
2598 $__text->{'id'}
2599 ;
2600
2601
2602 {
2603
2604
2605 $__text->{
2606 'b'
2607 }->{${$__text->{
2608 'id'
2609 }}}
2610 ->{'parent'} = $self->{
2611 'id'
2612 };
2613
2614
2615 }
2616
2617 ;
2618 }
2619
2620
2621
2622 {
2623
2624
2625 $self->{
2626 'b'
2627 }->{${$self->{
2628 'id'
2629 }}}
2630 ->{'child'} = \@__new_children;
2631
2632
2633 }
2634
2635 ;
2636
2637
2638 }
2639
2640 ;
2641 }
2642
2643
2644 }
2645 }
2646 }
2647 sub get_feature ($$$) {
2648 my ($self, $feature, $version) = @_;
2649
2650 {
2651
2652
2653 $feature = lc $feature;
2654
2655
2656 }
2657
2658 {
2659
2660
2661 $version = '' unless defined $version;
2662
2663
2664 }
2665 my $r;
2666
2667 {
2668
2669
2670 $feature =~ s/^\+//;
2671
2672 ## TODO: Remove this code and implement autoload
2673 if ($feature eq
2674 'http://suika.fam.cx/www/2006/feature/xdoctype'
2675 ) {
2676 require Message::DOM::XDoctype;
2677 }
2678
2679
2680
2681 {
2682
2683 if
2684 ($Message::Util::AutoLoad::Registry::Feature->{$feature}->{$version}) {
2685 $r = $self;
2686 }
2687
2688
2689 }
2690
2691 ;
2692 unless (defined $r) {
2693
2694
2695 {
2696
2697 local $Error::Depth = $Error::Depth + 1;
2698
2699 {
2700
2701
2702
2703 $r = $self->SUPER::get_feature ($feature, $version);
2704
2705
2706
2707 }
2708
2709
2710 ;}
2711
2712 ;
2713 }
2714
2715
2716 }
2717 $r}
2718 sub base_uri ($;$) {
2719 if (@_ == 1) {my ($self) = @_;
2720 my $r = '';
2721
2722 {
2723
2724
2725 {
2726
2727
2728 $r = $self->{
2729 'b'
2730 }->{${$self->{
2731 'id'
2732 }}}
2733 ->{'buri'};
2734
2735
2736 }
2737
2738 ;
2739 unless (defined $r) {
2740
2741
2742 {
2743
2744
2745 $r = $self->{
2746 'b'
2747 }->{${$self->{
2748 'id'
2749 }}}
2750 ->{'duri'};
2751
2752
2753 }
2754
2755 ;
2756 }
2757
2758
2759 }
2760 $r;
2761 } else {my ($self) = @_;
2762 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';
2763 }
2764 }
2765 sub create_document_fragment ($) {
2766 my ($self) = @_;
2767 my $r;
2768
2769 {
2770
2771 my
2772 $bag =
2773 $self->{'b'}
2774 ;
2775 my $stem;
2776
2777
2778 {
2779
2780
2781 $stem = 'Message::DOM::Document::ManakaiDOMDocumentFragment'->___create_node_stem ($bag, {
2782
2783 'rc'
2784 => 0,
2785
2786 'id'
2787 => \
2788 (
2789 'tag:suika.fam.cx,2005-09:' . time . ':' . $$ . ':' .
2790 (++$Message::Util::ManakaiNode::UniqueIDN)
2791 )
2792 ,
2793 }, {
2794 'od' => $self,
2795 });
2796
2797
2798 {
2799
2800 if
2801 (defined 'Message::DOM::Document::ManakaiDOMDocumentFragment') {
2802 if (ref 'Message::DOM::Document::ManakaiDOMDocumentFragment' eq 'SCALAR') {
2803 $stem->{'cls'} = 'Message::DOM::Document::ManakaiDOMDocumentFragment';
2804 } elsif (defined $Message::Util::ManakaiStringRef::Value{'Message::DOM::Document::ManakaiDOMDocumentFragment'}) {
2805 $stem->{'cls'} = $Message::Util::ManakaiStringRef::Value{'Message::DOM::Document::ManakaiDOMDocumentFragment'};
2806 } else {
2807 require Scalar::Util;
2808 $stem->{'cls'} = $Message::Util::ManakaiStringRef::Value{'Message::DOM::Document::ManakaiDOMDocumentFragment'} = \('Message::DOM::Document::ManakaiDOMDocumentFragment');
2809 Scalar::Util::weaken ($Message::Util::ManakaiStringRef::Value{'Message::DOM::Document::ManakaiDOMDocumentFragment'});
2810 }
2811 } else {
2812 CORE::delete $stem->{'cls'};
2813 }
2814
2815
2816 }
2817
2818 ;
2819 $bag->{${$stem->{
2820 'id'
2821 }}} = $stem;
2822
2823
2824 }
2825
2826 ;
2827
2828
2829 {
2830
2831
2832 $r = ${$stem->{
2833 'cls'
2834 }}->___create_node_ref ({
2835
2836 'id'
2837 => $stem->{
2838 'id'
2839 },
2840
2841 'b'
2842 => $bag,
2843 }, {
2844 });
2845 $stem->{
2846 'rc'
2847 }++;
2848
2849
2850 }
2851
2852 ;
2853
2854
2855 }
2856 $r}
2857 sub strict_error_checking ($;$) {
2858 if (@_ == 1) {my ($self) = @_;
2859 my $r = 0;
2860
2861 {
2862
2863
2864 {
2865
2866
2867 $r = $self->{
2868 'b'
2869 }->{${$self->{
2870 'id'
2871 }}}
2872 ->{'chk'};
2873
2874
2875 }
2876
2877 ;
2878 $r =
2879 1 unless
2880 defined $r;
2881
2882
2883 }
2884 $r;
2885 } else {my ($self, $given) = @_;
2886
2887 {
2888
2889
2890 {
2891
2892
2893 $self->{
2894 'b'
2895 }->{${$self->{
2896 'id'
2897 }}}
2898 ->{'chk'} = $given ? 1 : 0;
2899
2900
2901 }
2902
2903 ;
2904
2905
2906 }
2907 }
2908 }
2909 sub dom_config ($;$) {
2910 if (@_ == 1) {my ($self) = @_;
2911 my $r;
2912
2913 {
2914
2915
2916 {
2917
2918
2919 $r = bless [$self, ($self->{'b'}->{${$self->{'id'}}}), 'Message::DOM::IFLatest::Document'],
2920
2921 'Message::DOM::DOMCore::ManakaiDOMConfiguration'
2922 ;
2923
2924
2925 }
2926
2927 ;
2928
2929
2930 }
2931 $r;
2932 } else {my ($self) = @_;
2933 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';
2934 }
2935 }
2936 sub document_element ($;$) {
2937 if (@_ == 1) {my ($self) = @_;
2938 my $r;
2939
2940 {
2941
2942
2943 {
2944
2945 local $Error::Depth = $Error::Depth + 1;
2946
2947 {
2948
2949
2950 F:
2951 for my $child (@{$self->
2952 child_nodes
2953 }) {
2954 if ($child->
2955 node_type
2956 ==
2957 1
2958 ) {
2959 $r = $child;
2960 last F;
2961 }
2962 } # F
2963
2964
2965
2966 }
2967
2968
2969 ;}
2970
2971 ;
2972
2973
2974 }
2975 $r;
2976 } else {my ($self) = @_;
2977 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';
2978 }
2979 }
2980 sub implementation ($;$) {
2981 if (@_ == 1) {my ($self) = @_;
2982 my $r;
2983
2984 {
2985
2986
2987 {
2988
2989 my
2990 $__v = $self->{
2991 'b'
2992 }->{${$self->{
2993 'id'
2994 }}}
2995 ->{'impl'};
2996 if (defined $__v) {
2997
2998
2999 {
3000
3001
3002 $r = ${$self->{'b'}->{${$__v}}->{
3003 'cls'
3004 }}->___create_node_ref ({
3005
3006 'id'
3007 => $__v,
3008
3009 'b'
3010 => $self->{'b'},
3011 }, {});
3012 $self->{'b'}->{${$__v}}->{
3013 'rc'
3014 }++;
3015
3016
3017 }
3018
3019 ;
3020 }
3021
3022
3023 }
3024
3025 ;
3026
3027
3028 }
3029 $r;
3030 } else {my ($self) = @_;
3031 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';
3032 }
3033 }
3034 sub xml_version ($;$) {
3035 if (@_ == 1) {my ($self) = @_;
3036 my $r = '';
3037
3038 {
3039
3040
3041 {
3042
3043
3044 $r = $self->{
3045 'b'
3046 }->{${$self->{
3047 'id'
3048 }}}
3049 ->{'http://www.w3.org/2001/04/infoset#version'};
3050
3051
3052 }
3053
3054 ;
3055 $r = '1.0' unless defined $r;
3056
3057
3058 }
3059 $r;
3060 } else {my ($self, $given) = @_;
3061
3062 {
3063
3064
3065 {
3066
3067 if
3068 ($self->
3069 manakai_read_only
3070 ) {
3071
3072 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';
3073
3074 ;
3075 }
3076
3077
3078 }
3079
3080 ;
3081 if (defined $given and
3082 ($given eq '1.0' or $given eq '1.1' or
3083 not $self->
3084 strict_error_checking
3085 )) {
3086
3087
3088 {
3089
3090
3091 $self->{
3092 'b'
3093 }->{${$self->{
3094 'id'
3095 }}}
3096 ->{'http://www.w3.org/2001/04/infoset#version'} = $given;
3097
3098
3099 }
3100
3101 ;
3102 } else {
3103
3104 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;
3105
3106 ;
3107 }
3108
3109
3110 }
3111 }
3112 }
3113 sub doctype ($;$) {
3114 if (@_ == 1) {my ($self) = @_;
3115 my $r;
3116
3117 {
3118
3119
3120 {
3121
3122 local $Error::Depth = $Error::Depth + 1;
3123
3124 {
3125
3126
3127 F:
3128 for my $child (@{$self->
3129 child_nodes
3130 }) {
3131 my $nt = $child->
3132 node_type
3133 ;
3134 if ($nt ==
3135 10
3136 ) {
3137 $r = $child;
3138 last F;
3139 } elsif ($nt ==
3140 1
3141 ) { # document element
3142 last F;
3143 }
3144 } # F
3145
3146
3147
3148 }
3149
3150
3151 ;}
3152
3153 ;
3154
3155
3156 }
3157 $r;
3158 } else {my ($self) = @_;
3159 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';
3160 }
3161 }
3162 sub document_uri ($;$) {
3163 if (@_ == 1) {my ($self) = @_;
3164 my $r = '';
3165
3166 {
3167
3168
3169 {
3170
3171
3172 $r = $self->{
3173 'b'
3174 }->{${$self->{
3175 'id'
3176 }}}
3177 ->{'duri'};
3178
3179
3180 }
3181
3182 ;
3183
3184
3185 }
3186 $r;
3187 } else {my ($self, $given) = @_;
3188
3189 {
3190
3191
3192 {
3193
3194 if
3195 ($self->
3196 manakai_read_only
3197 ) {
3198
3199 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';
3200
3201 ;
3202 }
3203
3204
3205 }
3206
3207 ;
3208
3209
3210 {
3211
3212
3213 $self->{
3214 'b'
3215 }->{${$self->{
3216 'id'
3217 }}}
3218 ->{'duri'} = $given;
3219
3220
3221 }
3222
3223 ;
3224
3225
3226 }
3227 }
3228 }
3229 sub input_encoding ($;$) {
3230 if (@_ == 1) {my ($self) = @_;
3231 my $r = '';
3232
3233 {
3234
3235
3236 {
3237
3238
3239 $r = $self->{
3240 'b'
3241 }->{${$self->{
3242 'id'
3243 }}}
3244 ->{'ces'};
3245
3246
3247 }
3248
3249 ;
3250
3251
3252 }
3253 $r;
3254 } else {my ($self, $given) = @_;
3255
3256 {
3257
3258
3259 {
3260
3261 if
3262 ($self->
3263 manakai_read_only
3264 ) {
3265
3266 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';
3267
3268 ;
3269 }
3270
3271
3272 }
3273
3274 ;
3275
3276
3277 {
3278
3279
3280 $self->{
3281 'b'
3282 }->{${$self->{
3283 'id'
3284 }}}
3285 ->{'ces'} = $given;
3286
3287
3288 }
3289
3290 ;
3291
3292
3293 }
3294 }
3295 }
3296 sub xml_encoding ($;$) {
3297 if (@_ == 1) {my ($self) = @_;
3298 my $r = '';
3299
3300 {
3301
3302
3303 {
3304
3305
3306 $r = $self->{
3307 'b'
3308 }->{${$self->{
3309 'id'
3310 }}}
3311 ->{'xcs'};
3312
3313
3314 }
3315
3316 ;
3317
3318
3319 }
3320 $r;
3321 } else {my ($self, $given) = @_;
3322
3323 {
3324
3325
3326 {
3327
3328 if
3329 ($self->
3330 manakai_read_only
3331 ) {
3332
3333 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';
3334
3335 ;
3336 }
3337
3338
3339 }
3340
3341 ;
3342
3343
3344 {
3345
3346
3347 $self->{
3348 'b'
3349 }->{${$self->{
3350 'id'
3351 }}}
3352 ->{'xcs'} = $given;
3353
3354
3355 }
3356
3357 ;
3358
3359
3360 }
3361 }
3362 }
3363 sub xml_standalone ($;$) {
3364 if (@_ == 1) {my ($self) = @_;
3365 my $r = 0;
3366
3367 {
3368
3369
3370 {
3371
3372
3373 $r = $self->{
3374 'b'
3375 }->{${$self->{
3376 'id'
3377 }}}
3378 ->{'http://www.w3.org/2001/04/infoset#standalone'};
3379
3380
3381 }
3382
3383 ;
3384
3385
3386 }
3387 $r;
3388 } else {my ($self, $given) = @_;
3389
3390 {
3391
3392
3393 {
3394
3395 if
3396 ($self->
3397 manakai_read_only
3398 ) {
3399
3400 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';
3401
3402 ;
3403 }
3404
3405
3406 }
3407
3408 ;
3409
3410
3411 {
3412
3413
3414 $self->{
3415 'b'
3416 }->{${$self->{
3417 'id'
3418 }}}
3419 ->{'http://www.w3.org/2001/04/infoset#standalone'} = $given;
3420
3421
3422 }
3423
3424 ;
3425
3426
3427 }
3428 }
3429 }
3430 sub adopt_node ($$) {
3431 my ($self, $source) = @_;
3432 my $r;
3433
3434 {
3435
3436 ADOPT:
3437 {
3438 last ADOPT
3439 unless $source->isa (
3440 'Message::DOM::TreeCore::ManakaiDOMNode'
3441 ) and
3442
3443 $self->{'b'}
3444 eq
3445
3446 $source->{'b'}
3447 ;
3448
3449 my $strict = $self->
3450 strict_error_checking
3451 ;
3452 if ($strict and $self->
3453 manakai_read_only
3454 ) {
3455
3456 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';
3457
3458 ;
3459 }
3460 my $parent = $source->
3461 parent_node
3462 ;
3463 if ($strict and defined $parent and
3464 $parent->
3465 manakai_read_only
3466 ) {
3467
3468 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';
3469
3470 ;
3471 }
3472 my $nt = $source->
3473 node_type
3474 ;
3475 my $oe;
3476 if ($nt ==
3477 2
3478 ) {
3479 $oe = $source->
3480 owner_element
3481 ;
3482 if ($strict and defined $oe and $oe->
3483 manakai_read_only
3484 ) {
3485
3486 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';
3487
3488 ;
3489 }
3490 } elsif ($nt ==
3491 9 or
3492
3493 $nt ==
3494 10 or
3495
3496 $nt ==
3497 6 or
3498
3499 $nt ==
3500 12
3501 ) {
3502
3503 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';
3504
3505 ;
3506 }
3507
3508 my @change_od;
3509 my @nodes = ($source);
3510 while (@nodes) {
3511 my $node = shift @nodes;
3512 my $nt = $node->
3513 node_type
3514 ;
3515 if ($strict and $node->
3516 manakai_read_only
3517 ) {
3518
3519 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;
3520
3521 ;
3522 }
3523 if ($nt ==
3524 1
3525 ) {
3526 push @change_od, $node;
3527 push @nodes, @{$node->
3528 child_nodes
3529 };
3530 my $attrs = $node->
3531 attributes
3532 ;
3533 my $attrsLength = $attrs->
3534 length
3535 ;
3536 for my $i (0..($attrsLength - 1)) {
3537 push @nodes, $attrs->
3538 item
3539 ($i);
3540 }
3541 } elsif ($nt ==
3542 2 or
3543
3544 $nt ==
3545 5 or
3546
3547 $nt ==
3548 11
3549 ) {
3550 push @change_od, $node;
3551 push @nodes, @{$node->
3552 child_nodes
3553 };
3554 } elsif ($nt ==
3555 3 or
3556
3557 $nt ==
3558 8 or
3559
3560 $nt ==
3561 7 or
3562
3563 $nt ==
3564 4
3565 ) {
3566 push @change_od, $node;
3567 } else {
3568 ## TODO: assertion
3569 }
3570 } # nodes
3571
3572
3573
3574 {
3575
3576 local $Error::Depth = $Error::Depth + 1;
3577
3578 {
3579
3580
3581 if
3582 (defined $parent) {
3583 $parent->
3584 remove_child
3585 ($source);
3586 } elsif (defined $oe) {
3587 $oe->
3588 remove_attribute_node
3589 ($source);
3590 }
3591
3592
3593
3594 }
3595
3596
3597 ;}
3598
3599 ;
3600
3601 $r = $source;
3602 my $old_od = $change_od[0]->
3603 owner_document
3604 ;
3605 ## NOTE: The array must have more than zero
3606 ## nodes by definition. In addition,
3607 ## it cannot contain document or document
3608 ## type nodes in current implementation.
3609
3610 if ($old_od eq $self) {
3611 last ADOPT;
3612 }
3613
3614 my $old_od_list;
3615
3616
3617 {
3618
3619
3620 $old_od_list = $old_od->{
3621 'b'
3622 }->{${$old_od->{
3623 'id'
3624 }}}
3625 ->{'do'};
3626
3627
3628 }
3629
3630 ;
3631 my $new_od_list;
3632
3633
3634 {
3635
3636
3637 $new_od_list = $self->{
3638 'b'
3639 }->{${$self->{
3640 'id'
3641 }}}
3642 ->{'do'};
3643
3644
3645 }
3646
3647 ;
3648 for my $n (@change_od) {
3649
3650
3651 {
3652
3653
3654 $n->{
3655 'b'
3656 }->{${$n->{
3657 'id'
3658 }}}
3659 ->{'od'} = $self->{
3660 'id'
3661 };
3662
3663
3664 }
3665
3666 ;
3667 my $nid =
3668 $n->{'id'}
3669 ;
3670 CORE::delete $old_od_list->{$$nid};
3671 $new_od_list->{$$nid} = $nid;
3672 }
3673
3674 for my $src (@change_od) {
3675 my $src_ud;
3676
3677
3678 {
3679
3680
3681 $src_ud = $src->{
3682 'b'
3683 }->{${$src->{
3684 'id'
3685 }}}
3686 ->{'ud'};
3687
3688
3689 }
3690
3691 ;
3692 for my $key (keys %{$src_ud or {}}) {
3693 my $dh = $src_ud->{$key}->[1];
3694 if ($dh) {
3695 $dh->
3696 handle
3697
3698 (
3699 5
3700 ,
3701 $key, $src_ud->{$key}->[0], $src,
3702 undef
3703 );
3704 }
3705 }
3706 }
3707 } # ADOPT
3708
3709
3710 }
3711 $r}
3712 sub get_element_by_id ($$) {
3713 my ($self, $elementId) = @_;
3714 my $r;
3715
3716 {
3717
3718
3719 {
3720
3721 local $Error::Depth = $Error::Depth + 1;
3722
3723 {
3724
3725
3726 my
3727 @nodes = @{$self->
3728 child_nodes
3729 };
3730 N: while (@nodes) {
3731 my $node = shift @nodes;
3732 next N unless $node->
3733 node_type
3734 ==
3735 1
3736 ;
3737 for my $attr (@{$node->
3738 attributes
3739 }) {
3740 if ($attr->
3741 is_id and
3742
3743 $attr->
3744 value eq
3745 $elementId) {
3746 $r = $attr;
3747 last N;
3748 }
3749 }
3750 unshift @nodes, @{$node->
3751 child_nodes
3752 };
3753 } # N
3754
3755
3756
3757 }
3758
3759
3760 ;}
3761
3762 ;
3763
3764
3765 }
3766 $r}
3767 sub get_elements_by_tag_name ($$) {
3768 my ($self, $name) = @_;
3769 my $r;
3770
3771 {
3772
3773
3774 $name = "$name";
3775 my $chk;
3776 if ($name eq '*') {
3777 $chk = sub {
3778 1
3779 };
3780 } else {
3781 $chk = sub {
3782 my $node = shift;
3783 my $nodeName = $node->
3784 node_name
3785 ;
3786 ($nodeName eq $name);
3787 };
3788 }
3789
3790
3791 {
3792
3793
3794 $r = bless \[$self, $chk],
3795 'Message::DOM::TreeCore::ManakaiDOMGetElementsNodeList'
3796 ;
3797
3798
3799 }
3800
3801 ;
3802
3803
3804 }
3805 $r}
3806 sub get_elements_by_tag_name_ns ($$$) {
3807 my ($self, $namespaceURI, $localName) = @_;
3808
3809 {
3810
3811 if
3812 (CORE::defined $namespaceURI and CORE::length $namespaceURI == 0) {
3813 require Message::DOM::DOMMain;
3814
3815 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:1165118814:1861:wAUT122229+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';
3816
3817 ;
3818
3819
3820
3821 {
3822
3823
3824 $namespaceURI = undef;
3825
3826
3827
3828 }
3829
3830 ;
3831 }
3832
3833
3834 }
3835 my $r;
3836
3837 {
3838
3839
3840 $namespaceURI = "$namespaceURI" if defined $namespaceURI;
3841 $localName = "$localName";
3842 my $chk;
3843 if (not defined $namespaceURI) {
3844 if ($localName eq '*') {
3845 $chk = sub {
3846 my $node = shift;
3847 (not defined $node->
3848 namespace_uri
3849 );
3850 };
3851 } else {
3852 $chk = sub {
3853 my $node = shift;
3854 (not defined $node->
3855 namespace_uri and
3856
3857 $node->
3858 local_name eq
3859 $localName);
3860 };
3861 }
3862 } elsif ($namespaceURI eq '*') {
3863 if ($localName eq '*') {
3864 $chk = sub {
3865 1
3866 };
3867 } else {
3868 $chk = sub {
3869 my $node = shift;
3870 ($node->
3871 local_name eq
3872 $localName);
3873 };
3874 }
3875 } else {
3876 if ($localName eq '*') {
3877 $chk = sub {
3878 my $node = shift;
3879 my $nsuri = $node->
3880 namespace_uri
3881 ;
3882 (defined $nsuri and $nsuri eq $namespaceURI);
3883 };
3884 } else {
3885 $chk = sub {
3886 my $node = shift;
3887 my $nsuri = $node->
3888 namespace_uri
3889 ;
3890 (defined $nsuri and $nsuri eq $namespaceURI and
3891 $node->
3892 local_name eq
3893 $localName);
3894 };
3895 }
3896 }
3897
3898
3899 {
3900
3901
3902 $r = bless \[$self, $chk],
3903 'Message::DOM::TreeCore::ManakaiDOMGetElementsNodeList'
3904 ;
3905
3906
3907 }
3908
3909 ;
3910
3911
3912 }
3913 $r}
3914 sub import_node ($$;$) {
3915 my ($self, $importedNode, $deep) = @_;
3916 my $r;
3917 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';
3918 $r}
3919 sub normalize_document ($) {
3920 my ($self) = @_;
3921 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';
3922 }
3923 sub rename_node ($$$$) {
3924 my ($self, $n, $namespaceURI, $qualifiedName) = @_;
3925
3926 {
3927
3928 if
3929 (CORE::defined $namespaceURI and CORE::length $namespaceURI == 0) {
3930 require Message::DOM::DOMMain;
3931
3932 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:1165118814:1861:wAUT122229+http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom%23ManakaiDOMLatest';
3933
3934 ;
3935
3936
3937
3938 {
3939
3940
3941 $namespaceURI = undef;
3942
3943
3944
3945 }
3946
3947 ;
3948 }
3949
3950
3951 }
3952 my $r;
3953 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';
3954 $r}
3955 sub manakai_entity_base_uri ($;$) {
3956 if (@_ == 1) {my ($self) = @_;
3957 my $r = '';
3958
3959 {
3960
3961
3962 {
3963
3964
3965 $r = $self->{
3966 'b'
3967 }->{${$self->{
3968 'id'
3969 }}}
3970 ->{'buri'};
3971
3972
3973 }
3974
3975 ;
3976 unless (defined $r) {
3977
3978
3979 {
3980
3981
3982 $r = $self->{
3983 'b'
3984 }->{${$self->{
3985 'id'
3986 }}}
3987 ->{'duri'};
3988
3989
3990 }
3991
3992 ;
3993 }
3994
3995
3996 }
3997 $r;
3998 } else {my ($self, $given) = @_;
3999
4000 {
4001
4002
4003 {
4004
4005 if
4006 ($self->
4007 manakai_read_only
4008 ) {
4009
4010 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';
4011
4012 ;
4013 }
4014
4015
4016 }
4017
4018 ;
4019
4020
4021 {
4022
4023
4024 $self->{
4025 'b'
4026 }->{${$self->{
4027 'id'
4028 }}}
4029 ->{'buri'} = $given;
4030
4031
4032 }
4033
4034 ;
4035
4036
4037 }
4038 }
4039 }
4040 sub all_declarations_processed ($;$) {
4041 if (@_ == 1) {my ($self) = @_;
4042 my $r = 0;
4043
4044 {
4045
4046
4047 {
4048
4049
4050 $r = $self->{
4051 'b'
4052 }->{${$self->{
4053 'id'
4054 }}}
4055 ->{'http://www.w3.org/2001/04/infoset#allDeclarationsProcessed'};
4056
4057
4058 }
4059
4060 ;
4061
4062
4063 }
4064 $r;
4065 } else {my ($self, $given) = @_;
4066
4067 {
4068
4069
4070 {
4071
4072 if
4073 ($self->
4074 manakai_read_only
4075 ) {
4076
4077 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';
4078
4079 ;
4080 }
4081
4082
4083 }
4084
4085 ;
4086
4087
4088 {
4089
4090
4091 $self->{
4092 'b'
4093 }->{${$self->{
4094 'id'
4095 }}}
4096 ->{'http://www.w3.org/2001/04/infoset#allDeclarationsProcessed'} = $given;
4097
4098
4099 }
4100
4101 ;
4102
4103
4104 }
4105 }
4106 }
4107 $Message::DOM::DOMFeature::ClassInfo->{q<Message::DOM::Document::ManakaiDOMDocument>}->{has_feature} = {'core',
4108 {'',
4109 '1',
4110 '1.0',
4111 '1',
4112 '2.0',
4113 '1',
4114 '3.0',
4115 '1'},
4116 'xml',
4117 {'',
4118 '1',
4119 '1.0',
4120 '1',
4121 '2.0',
4122 '1',
4123 '3.0',
4124 '1'},
4125 'xmlversion',
4126 {'',
4127 '1',
4128 '1.0',
4129 '1',
4130 '1.1',
4131 '1'}};
4132 $Message::DOM::ClassPoint{q<Message::DOM::Document::ManakaiDOMDocument>} = 14.1;
4133 $Message::Util::Grove::ClassProp{q<Message::DOM::Document::ManakaiDOMDocument>} = {'s1a',
4134 ['child'],
4135 'v1h',
4136 ['do'],
4137 'w0',
4138 ['impl']};
4139 package Message::DOM::IFLatest::DocumentFragment;
4140 our $VERSION = 20061203.0427;
4141 package Message::DOM::Document::ManakaiDOMDocumentFragment;
4142 our $VERSION = 20061203.0427;
4143 push our @ISA, 'Message::DOM::TreeCore::ManakaiDOMNode',
4144 'Message::DOM::IF::DocumentFragment',
4145 'Message::DOM::IF::Node',
4146 'Message::DOM::IFLatest::DocumentFragment',
4147 'Message::DOM::IFLatest::Node',
4148 'Message::DOM::IFLevel1::DocumentFragment',
4149 'Message::DOM::IFLevel1::Node',
4150 'Message::DOM::IFLevel2::DocumentFragment',
4151 'Message::DOM::IFLevel2::Node',
4152 'Message::DOM::IFLevel3::DocumentFragment',
4153 'Message::DOM::IFLevel3::Node';
4154 sub ___create_node_stem ($$$$) {
4155 my ($self, $bag, $obj, $opt) = @_;
4156 my $r = {};
4157
4158 {
4159
4160
4161 $obj->{
4162 'child'
4163 } = [];
4164
4165
4166 {
4167
4168
4169 $obj->{'od'} = $opt->{'od'}->{
4170 'id'
4171 };
4172 $bag->{${$opt->{'od'}->{
4173 'id'
4174 }}}
4175 ->{'do'}->{${$obj->{
4176 'id'
4177 }}}
4178 = $obj->{
4179 'id'
4180 };
4181
4182
4183 }
4184
4185 ;
4186 $r = $obj;
4187
4188
4189 }
4190 $r}
4191 sub node_type ($;$) {
4192 if (@_ == 1) {my ($self) = @_;
4193 my $r;
4194 $r = 11;
4195 $r;
4196 } else {my ($self) = @_;
4197 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';
4198 }
4199 }
4200 sub append_child ($$) {
4201 my ($self, $newChild) = @_;
4202 my $r;
4203
4204 {
4205
4206 if
4207 ($self eq $newChild) {
4208
4209 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';
4210
4211 ;
4212 }
4213 my $self_od = $self->
4214 owner_document
4215 ;
4216 my $child_od = $newChild->
4217 owner_document
4218 ;
4219 my $child_nt = $newChild->
4220 node_type
4221 ;
4222
4223
4224 {
4225
4226
4227 {
4228
4229 local $Error::Depth = $Error::Depth + 1;
4230
4231 {
4232
4233
4234 my
4235 $strict = $self_od->
4236 strict_error_checking
4237 ;
4238
4239 ## -- Node Type check
4240 my @new_child;
4241 if ({
4242 3 => 1,
4243 5 => 1,
4244 1 => 1,
4245 7 => 1,
4246 4 => 1,
4247 8 => 1,
4248 }->{$child_nt}) {
4249 push @new_child, $newChild;
4250 } elsif ($child_nt ==
4251 11
4252 ) {
4253 for my $cn (@{$newChild->
4254 child_nodes
4255 }) {
4256 unless ({
4257 3 => 1,
4258 5 => 1,
4259 1 => 1,
4260 7 => 1,
4261 4 => 1,
4262 8 => 1,
4263 }->{$cn->
4264 node_type
4265 }) {
4266
4267
4268 {
4269
4270 local $Error::Depth = $Error::Depth - 1;
4271
4272 {
4273
4274 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;
4275
4276
4277 }
4278
4279
4280 ;}
4281
4282 ;
4283 }
4284 push @new_child, $cn;
4285 }
4286 } else {
4287
4288
4289 {
4290
4291 local $Error::Depth = $Error::Depth - 1;
4292
4293 {
4294
4295 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;
4296
4297
4298 }
4299
4300
4301 ;}
4302
4303 ;
4304 }
4305
4306 my $nc_parent = @new_child ? $new_child[0]->
4307 parent_node
4308 :
4309
4310 undef
4311 ;
4312 if ($strict) {
4313 ## -- Wrong-document check
4314 unless ($self_od eq $child_od) {
4315
4316
4317 {
4318
4319 local $Error::Depth = $Error::Depth - 1;
4320
4321 {
4322
4323 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;
4324
4325
4326 }
4327
4328
4329 ;}
4330
4331 ;
4332 }
4333
4334 ## -- Read-onlyness check
4335 if ($self->
4336 manakai_read_only
4337 ) {
4338
4339
4340 {
4341
4342 local $Error::Depth = $Error::Depth - 1;
4343
4344 {
4345
4346 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';
4347
4348
4349 }
4350
4351
4352 ;}
4353
4354 ;
4355 }
4356 if (@new_child) {
4357 if ($nc_parent and
4358 $nc_parent->
4359 manakai_read_only
4360 ) {
4361
4362
4363 {
4364
4365 local $Error::Depth = $Error::Depth - 1;
4366
4367 {
4368
4369 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';
4370
4371
4372 }
4373
4374
4375 ;}
4376
4377 ;
4378 }
4379 }
4380 }
4381
4382 ## -- Insert at...
4383 my $index = -1; # last
4384
4385
4386 ; # FOR !tc:ForAppendChild
4387
4388 ## -- Removes from parent
4389 if ($nc_parent) {
4390 if ($child_nt ==
4391 11
4392 ) {
4393
4394
4395 {
4396
4397
4398 $newChild->{
4399 'b'
4400 }->{${$newChild->{
4401 'id'
4402 }}}
4403 ->{'child'} = [];
4404
4405
4406 }
4407
4408 ;
4409 } else {
4410 my $v;
4411
4412
4413 {
4414
4415
4416 $v = $nc_parent->{
4417 'b'
4418 }->{${$nc_parent->{
4419 'id'
4420 }}}
4421 ->{'child'};
4422
4423
4424 }
4425
4426 ;
4427 RP: for my $i (0..$#$v) {
4428 my $nodeid = $v->[$i];
4429 if (
4430 (${$new_child[0]->{'id'}} eq ${$nodeid})
4431 ) {
4432 splice @$v, $i, 1, ();
4433 last RP;
4434 }
4435 } # RP
4436 }
4437 }
4438
4439 ## -- Rewrite the |parentNode| properties
4440 for my $nc (@new_child) {
4441
4442
4443 {
4444
4445
4446 $nc->{
4447 'b'
4448 }->{${$nc->{
4449 'id'
4450 }}}
4451 ->{'parent'} = $self->{
4452 'id'
4453 };
4454
4455
4456 }
4457
4458 ;
4459 }
4460
4461 my $children;
4462
4463
4464 {
4465
4466
4467 $children = $self->{
4468 'b'
4469 }->{${$self->{
4470 'id'
4471 }}}
4472 ->{'child'};
4473
4474
4475 }
4476
4477 ;
4478
4479
4480
4481 {
4482
4483
4484 ## -- Adds to children list
4485 push @$children, map {
4486
4487 $_->{'id'}
4488
4489 } @new_child;
4490 $r = $newChild;
4491
4492
4493
4494 }
4495
4496 ;
4497
4498
4499
4500 ;
4501
4502
4503
4504 ;
4505
4506
4507
4508 }
4509
4510
4511 ;}
4512
4513 ;
4514
4515
4516 }
4517
4518 ;
4519
4520
4521 }
4522 $r}
4523 sub insert_before ($$;$) {
4524 my ($self, $newChild, $refChild) = @_;
4525 my $r;
4526
4527 {
4528
4529 if
4530 ($self eq $newChild) {
4531
4532 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';
4533
4534 ;
4535 }
4536 my $self_od = $self->
4537 owner_document
4538 ;
4539 my $child_od = $newChild->
4540 owner_document
4541 ;
4542 my $child_nt = $newChild->
4543 node_type
4544 ;
4545
4546
4547 {
4548
4549
4550 {
4551
4552 local $Error::Depth = $Error::Depth + 1;
4553
4554 {
4555
4556
4557 my
4558 $strict = $self_od->
4559 strict_error_checking
4560 ;
4561
4562 ## -- Node Type check
4563 my @new_child;
4564 if ({
4565 3 => 1,
4566 5 => 1,
4567 1 => 1,
4568 7 => 1,
4569 4 => 1,
4570 8 => 1,
4571 }->{$child_nt}) {
4572 push @new_child, $newChild;
4573 } elsif ($child_nt ==
4574 11
4575 ) {
4576 for my $cn (@{$newChild->
4577 child_nodes
4578 }) {
4579 unless ({
4580 3 => 1,
4581 5 => 1,
4582 1 => 1,
4583 7 => 1,
4584 4 => 1,
4585 8 => 1,
4586 }->{$cn->
4587 node_type
4588 }) {
4589
4590
4591 {
4592
4593 local $Error::Depth = $Error::Depth - 1;
4594
4595 {
4596
4597 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;
4598
4599
4600 }
4601
4602
4603 ;}
4604
4605 ;
4606 }
4607 push @new_child, $cn;
4608 }
4609 } else {
4610
4611
4612 {
4613
4614 local $Error::Depth = $Error::Depth - 1;
4615
4616 {
4617
4618 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;
4619
4620
4621 }
4622
4623
4624 ;}
4625
4626 ;
4627 }
4628
4629 my $nc_parent = @new_child ? $new_child[0]->
4630 parent_node
4631 :
4632
4633 undef
4634 ;
4635 if ($strict) {
4636 ## -- Wrong-document check
4637 unless ($self_od eq $child_od) {
4638
4639
4640 {
4641
4642 local $Error::Depth = $Error::Depth - 1;
4643
4644 {
4645
4646 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;
4647
4648
4649 }
4650
4651
4652 ;}
4653
4654 ;
4655 }
4656
4657 ## -- Read-onlyness check
4658 if ($self->
4659 manakai_read_only
4660 ) {
4661
4662
4663 {
4664
4665 local $Error::Depth = $Error::Depth - 1;
4666
4667 {
4668
4669 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';
4670
4671
4672 }
4673
4674
4675 ;}
4676
4677 ;
4678 }
4679 if (@new_child) {
4680 if ($nc_parent and
4681 $nc_parent->
4682 manakai_read_only
4683 ) {
4684
4685
4686 {
4687
4688 local $Error::Depth = $Error::Depth - 1;
4689
4690 {
4691
4692 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';
4693
4694
4695 }
4696
4697
4698 ;}
4699
4700 ;
4701 }
4702 }
4703 }
4704
4705 ## -- Insert at...
4706 my $index = -1; # last
4707
4708
4709 {
4710
4711
4712 # tc:ForAppendChild & tc:ForReplaceChild
4713 if (defined $refChild) {
4714 if ($refChild eq $newChild) {
4715
4716
4717 {
4718
4719
4720 {
4721
4722 local $Error::Depth = $Error::Depth - 1;
4723
4724 {
4725
4726 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';
4727
4728
4729 }
4730
4731
4732 ;}
4733
4734 ;
4735
4736
4737
4738 }
4739
4740 ;
4741
4742
4743 ;
4744 }
4745
4746 my $cns = $self->
4747 child_nodes
4748 ;
4749 my $cnsl = @$cns;
4750 C: {
4751 $index = 0;
4752 for my $i (0..($cnsl-1)) {
4753 my $cn = $cns->[$i];
4754 if ($cn eq $refChild) {
4755 $index += $i;
4756 last C;
4757 } elsif ($cn eq $newChild) {
4758 $index = -1; # offset
4759 }
4760 }
4761
4762
4763 {
4764
4765
4766 {
4767
4768 local $Error::Depth = $Error::Depth - 1;
4769
4770 {
4771
4772 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;
4773
4774
4775 }
4776
4777
4778 ;}
4779
4780 ;
4781
4782
4783
4784 }
4785
4786 ;
4787
4788
4789 ;
4790 } # C
4791 } else { # |oldChild| is not defined
4792
4793
4794 ;
4795 }
4796
4797
4798
4799 }
4800
4801 ; # FOR !tc:ForAppendChild
4802
4803 ## -- Removes from parent
4804 if ($nc_parent) {
4805 if ($child_nt ==
4806 11
4807 ) {
4808
4809
4810 {
4811
4812
4813 $newChild->{
4814 'b'
4815 }->{${$newChild->{
4816 'id'
4817 }}}
4818 ->{'child'} = [];
4819
4820
4821 }
4822
4823 ;
4824 } else {
4825 my $v;
4826
4827
4828 {
4829
4830
4831 $v = $nc_parent->{
4832 'b'
4833 }->{${$nc_parent->{
4834 'id'
4835 }}}
4836 ->{'child'};
4837
4838
4839 }
4840
4841 ;
4842 RP: for my $i (0..$#$v) {
4843 my $nodeid = $v->[$i];
4844 if (
4845 (${$new_child[0]->{'id'}} eq ${$nodeid})
4846 ) {
4847 splice @$v, $i, 1, ();
4848 last RP;
4849 }
4850 } # RP
4851 }
4852 }
4853
4854 ## -- Rewrite the |parentNode| properties
4855 for my $nc (@new_child) {
4856
4857
4858 {
4859
4860
4861 $nc->{
4862 'b'
4863 }->{${$nc->{
4864 'id'
4865 }}}
4866 ->{'parent'} = $self->{
4867 'id'
4868 };
4869
4870
4871 }
4872
4873 ;
4874 }
4875
4876 my $children;
4877
4878
4879 {
4880
4881
4882 $children = $self->{
4883 'b'
4884 }->{${$self->{
4885 'id'
4886 }}}
4887 ->{'child'};
4888
4889
4890 }
4891
4892 ;
4893
4894
4895
4896 ;
4897
4898
4899
4900 {
4901
4902
4903 ## -- Adds to children list
4904 if ($index == -1) {
4905 push @$children, map {
4906
4907 $_->{'id'}
4908
4909 } @new_child;
4910 } else {
4911 splice @$children, $index, 0, map {
4912
4913 $_->{'id'}
4914
4915 } @new_child;
4916 }
4917 $r = $newChild;
4918
4919
4920
4921 }
4922
4923 ;
4924
4925
4926
4927 ;
4928
4929
4930
4931 }
4932
4933
4934 ;}
4935
4936 ;
4937
4938
4939 }
4940
4941 ;
4942
4943
4944 }
4945 $r}
4946 sub replace_child ($$$) {
4947 my ($self, $newChild, $oldChild) = @_;
4948 my $r;
4949
4950 {
4951
4952 if
4953 ($self eq $newChild) {
4954
4955 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';
4956
4957 ;
4958 }
4959 my $self_od = $self->
4960 owner_document
4961 ;
4962 my $child_od = $newChild->
4963 owner_document
4964 ;
4965 my $child_nt = $newChild->
4966 node_type
4967 ;
4968
4969
4970 {
4971
4972
4973 {
4974
4975 local $Error::Depth = $Error::Depth + 1;
4976
4977 {
4978
4979
4980 my
4981 $strict = $self_od->
4982 strict_error_checking
4983 ;
4984
4985 ## -- Node Type check
4986 my @new_child;
4987 if ({
4988 3 => 1,
4989 5 => 1,
4990 1 => 1,
4991 7 => 1,
4992 4 => 1,
4993 8 => 1,
4994 }->{$child_nt}) {
4995 push @new_child, $newChild;
4996 } elsif ($child_nt ==
4997 11
4998 ) {
4999 for my $cn (@{$newChild->
5000 child_nodes
5001 }) {
5002 unless ({
5003 3 => 1,
5004 5 => 1,
5005 1 => 1,
5006 7 => 1,
5007 4 => 1,
5008 8 => 1,
5009 }->{$cn->
5010 node_type
5011 }) {
5012
5013
5014 {
5015
5016 local $Error::Depth = $Error::Depth - 1;
5017
5018 {
5019
5020 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;
5021
5022
5023 }
5024
5025
5026 ;}
5027
5028 ;
5029 }
5030 push @new_child, $cn;
5031 }
5032 } else {
5033
5034
5035 {
5036
5037 local $Error::Depth = $Error::Depth - 1;
5038
5039 {
5040
5041 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;
5042
5043
5044 }
5045
5046
5047 ;}
5048
5049 ;
5050 }
5051
5052 my $nc_parent = @new_child ? $new_child[0]->
5053 parent_node
5054 :
5055
5056 undef
5057 ;
5058 if ($strict) {
5059 ## -- Wrong-document check
5060 unless ($self_od eq $child_od) {
5061
5062
5063 {
5064
5065 local $Error::Depth = $Error::Depth - 1;
5066
5067 {
5068
5069 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;
5070
5071
5072 }
5073
5074
5075 ;}
5076
5077 ;
5078 }
5079
5080 ## -- Read-onlyness check
5081 if ($self->
5082 manakai_read_only
5083 ) {
5084
5085
5086 {
5087
5088 local $Error::Depth = $Error::Depth - 1;
5089
5090 {
5091
5092 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';
5093
5094
5095 }
5096
5097
5098 ;}
5099
5100 ;
5101 }
5102 if (@new_child) {
5103 if ($nc_parent and
5104 $nc_parent->
5105 manakai_read_only
5106 ) {
5107
5108
5109 {
5110
5111 local $Error::Depth = $Error::Depth - 1;
5112
5113 {
5114
5115 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';
5116
5117
5118 }
5119
5120
5121 ;}
5122
5123 ;
5124 }
5125 }
5126 }
5127
5128 ## -- Insert at...
5129 my $index = -1; # last
5130
5131
5132 {
5133
5134
5135 # tc:ForAppendChild & tc:ForReplaceChild
5136 if (defined $oldChild) {
5137 if ($oldChild eq $newChild) {
5138
5139
5140 ;
5141
5142
5143 {
5144
5145
5146 {
5147
5148 local $Error::Depth = $Error::Depth - 1;
5149
5150 {
5151
5152 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';
5153
5154
5155 }
5156
5157
5158 ;}
5159
5160 ;
5161
5162
5163
5164 }
5165
5166 ;
5167 }
5168
5169 my $cns = $self->
5170 child_nodes
5171 ;
5172 my $cnsl = @$cns;
5173 C: {
5174 $index = 0;
5175 for my $i (0..($cnsl-1)) {
5176 my $cn = $cns->[$i];
5177 if ($cn eq $oldChild) {
5178 $index += $i;
5179 last C;
5180 } elsif ($cn eq $newChild) {
5181 $index = -1; # offset
5182 }
5183 }
5184
5185
5186 ;
5187
5188
5189 {
5190
5191
5192 {
5193
5194 local $Error::Depth = $Error::Depth - 1;
5195
5196 {
5197
5198 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;
5199
5200
5201 }
5202
5203
5204 ;}
5205
5206 ;
5207
5208
5209
5210 }
5211
5212 ;
5213 } # C
5214 } else { # |oldChild| is not defined
5215
5216
5217 {
5218
5219
5220 {
5221
5222 local $Error::Depth = $Error::Depth - 1;
5223
5224 {
5225
5226 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;
5227
5228
5229 }
5230
5231
5232 ;}
5233
5234 ;
5235
5236
5237
5238 }
5239
5240 ;
5241 }
5242
5243
5244
5245 }
5246
5247 ; # FOR !tc:ForAppendChild
5248
5249 ## -- Removes from parent
5250 if ($nc_parent) {
5251 if ($child_nt ==
5252 11
5253 ) {
5254
5255
5256 {
5257
5258
5259 $newChild->{
5260 'b'
5261 }->{${$newChild->{
5262 'id'
5263 }}}
5264 ->{'child'} = [];
5265
5266
5267 }
5268
5269 ;
5270 } else {
5271 my $v;
5272
5273
5274 {
5275
5276
5277 $v = $nc_parent->{
5278 'b'
5279 }->{${$nc_parent->{
5280 'id'
5281 }}}
5282 ->{'child'};
5283
5284
5285 }
5286
5287 ;
5288 RP: for my $i (0..$#$v) {
5289 my $nodeid = $v->[$i];
5290 if (
5291 (${$new_child[0]->{'id'}} eq ${$nodeid})
5292 ) {
5293 splice @$v, $i, 1, ();
5294 last RP;
5295 }
5296 } # RP
5297 }
5298 }
5299
5300 ## -- Rewrite the |parentNode| properties
5301 for my $nc (@new_child) {
5302
5303
5304 {
5305
5306
5307 $nc->{
5308 'b'
5309 }->{${$nc->{
5310 'id'
5311 }}}
5312 ->{'parent'} = $self->{
5313 'id'
5314 };
5315
5316
5317 }
5318
5319 ;
5320 }
5321
5322 my $children;
5323
5324
5325 {
5326
5327
5328 $children = $self->{
5329 'b'
5330 }->{${$self->{
5331 'id'
5332 }}}
5333 ->{'child'};
5334
5335
5336 }
5337
5338 ;
5339
5340
5341
5342 ;
5343
5344
5345
5346 ;
5347
5348
5349
5350 {
5351
5352
5353 ## -- Replaces the node
5354 splice @$children, $index, 1, map {
5355
5356 $_->{'id'}
5357
5358 } @new_child;
5359
5360
5361 {
5362
5363 CORE::delete
5364 $oldChild->{
5365 'b'
5366 }->{${$oldChild->{
5367 'id'
5368 }}}
5369 ->{'parent'};
5370
5371
5372 }
5373
5374 ;
5375 $r = $oldChild;
5376
5377
5378
5379 }
5380
5381 ;
5382
5383
5384
5385 }
5386
5387
5388 ;}
5389
5390 ;
5391
5392
5393 }
5394
5395 ;
5396
5397
5398 }
5399 $r}
5400 sub node_name ($;$) {
5401 if (@_ == 1) {my ($self) = @_;
5402 my $r = '';
5403 $r = '#document-fragment';
5404 $r;
5405 } else {my ($self) = @_;
5406 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';
5407 }
5408 }
5409 sub manakai_append_text ($$) {
5410 my ($self, $string) = @_;
5411 my $r;
5412
5413 {
5414
5415
5416 {
5417
5418 local $Error::Depth = $Error::Depth + 1;
5419
5420 {
5421
5422
5423 my
5424 $lc = $self->
5425 last_child
5426 ;
5427 if (defined $lc and
5428 $lc->
5429 node_type
5430 ==
5431 3
5432 ) {
5433 $lc->
5434 manakai_append_text
5435
5436 (ref $string eq 'SCALAR' ? $string : \$string);
5437 } else {
5438 my $text = $self->
5439 owner_document
5440
5441 ->
5442 create_text_node
5443
5444 (ref $string eq 'SCALAR' ? $$string : $string);
5445 $self->
5446 append_child
5447 ($text);
5448 }
5449 $r = $self;
5450
5451
5452
5453 }
5454
5455
5456 ;}
5457
5458 ;
5459
5460
5461 }
5462 $r}
5463 sub get_feature ($$$) {
5464 my ($self, $feature, $version) = @_;
5465
5466 {
5467
5468
5469 $feature = lc $feature;
5470
5471
5472 }
5473
5474 {
5475
5476
5477 $version = '' unless defined $version;
5478
5479
5480 }
5481 my $r;
5482
5483 {
5484
5485
5486 $feature =~ s/^\+//;
5487
5488
5489 {
5490
5491 if
5492 ($Message::Util::AutoLoad::Registry::Feature->{$feature}->{$version}) {
5493 $r = $self;
5494 }
5495
5496
5497 }
5498
5499 ;
5500 unless (defined $r) {
5501
5502
5503 {
5504
5505 local $Error::Depth = $Error::Depth + 1;
5506
5507 {
5508
5509
5510
5511 $r = $self->SUPER::get_feature ($feature, $version);
5512
5513
5514
5515 }
5516
5517
5518 ;}
5519
5520 ;
5521 }
5522
5523
5524 }
5525 $r}
5526 sub base_uri ($;$) {
5527 if (@_ == 1) {my ($self) = @_;
5528 my $r = '';
5529
5530 {
5531
5532
5533 {
5534
5535 local $Error::Depth = $Error::Depth + 1;
5536
5537 {
5538
5539
5540
5541 $r = $self->
5542 owner_document
5543 ->
5544 base_uri
5545 ;
5546
5547
5548
5549 }
5550
5551
5552 ;}
5553
5554 ;
5555
5556
5557 }
5558 $r;
5559 } else {my ($self) = @_;
5560 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';
5561 }
5562 }
5563 $Message::DOM::DOMFeature::ClassInfo->{q<Message::DOM::Document::ManakaiDOMDocumentFragment>}->{has_feature} = {'core',
5564 {'',
5565 '1',
5566 '1.0',
5567 '1',
5568 '2.0',
5569 '1',
5570 '3.0',
5571 '1'},
5572 'xml',
5573 {'',
5574 '1',
5575 '1.0',
5576 '1',
5577 '2.0',
5578 '1',
5579 '3.0',
5580 '1'},
5581 'xmlversion',
5582 {'',
5583 '1',
5584 '1.0',
5585 '1',
5586 '1.1',
5587 '1'}};
5588 $Message::DOM::ClassPoint{q<Message::DOM::Document::ManakaiDOMDocumentFragment>} = 14.1;
5589 $Message::Util::Grove::ClassProp{q<Message::DOM::Document::ManakaiDOMDocumentFragment>} = {'s1a',
5590 ['child'],
5591 'w0',
5592 ['od']};
5593 for ($Message::DOM::IF::Document::, $Message::DOM::IF::DocumentFragment::, $Message::DOM::IF::Node::, $Message::DOM::IFLatest::Node::, $Message::DOM::IFLevel1::Document::, $Message::DOM::IFLevel1::DocumentFragment::, $Message::DOM::IFLevel1::Node::, $Message::DOM::IFLevel2::Document::, $Message::DOM::IFLevel2::DocumentFragment::, $Message::DOM::IFLevel2::Node::, $Message::DOM::IFLevel3::Document::, $Message::DOM::IFLevel3::DocumentFragment::, $Message::DOM::IFLevel3::Node::){}
5594 ## License: <http://suika.fam.cx/~wakaba/archive/2004/8/18/license#Perl+MPL>
5595 1;

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24