/[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.11 - (show annotations) (download)
Sat Dec 2 12:46:21 2006 UTC (17 years, 11 months ago) by wakaba
Branch: MAIN
Changes since 1.10: +20 -20 lines
++ manakai/t/ChangeLog	2 Dec 2006 12:46:13 -0000
2006-12-02  Wakaba  <wakaba@suika.fam.cx>

	* Makefile (dom-DOMString.t): New test.

++ manakai/bin/ChangeLog	2 Dec 2006 12:35:25 -0000
2006-12-02  Wakaba  <wakaba@suika.fam.cx>

	* daf.pl: Call |get_dom_implementation|
	instead of obsolete |get_implementation|.

	* grep-dis.pl: |lib/manakai/*.pl| is added.

++ manakai/lib/Message/Util/ChangeLog	2 Dec 2006 12:45:49 -0000
2006-12-02  Wakaba  <wakaba@suika.fam.cx>

	* Makefile: |lib/Message/DOM/DOMString.pm| is added.

++ manakai/lib/Message/DOM/ChangeLog	2 Dec 2006 12:45:20 -0000
2006-12-02  Wakaba  <wakaba@suika.fam.cx>

	* DOMString.dis: New module.

	* DOMString.pm: New file.

	* DOMCore.dis (min): Moved from |DOMFeature.dis|.
	(ImplementationRegistryVariable): Moved from |DOMFeature.dis|.
	Now it references the |DOMImplementationRegistry| object.
	(DOMImplementationRegistryVariable): Moved from |DOMMain.dis|.
	(DOMImplementationRegistry): New interface and
	class, reformed from |ImplementationRegistry| in |DOMFeature.dis|
	and |DOMImplementationRegistry| in |DOMMain.dis|.  Note
	that the class no longer support |get_implementation|
	and |get_implementation_list| methods from
	the |ImplementationRegistry| interface.
	(DOMImplementationList): Class implemented; no
	longer inherits from |ImplementationList|.
	(DOMImplementationSource): Class implemented; no
	longer inherits from |ImplementationSource|.  Note that
	the class no longer support |get_implementation|
	and |get_implementation_list| methods from
	the |ImplementationSource| interface.
	(DOMStringList): Removed.

	* DOMFeature.dis (min, ManakaiDOM:DOMHTMLFeature,
	ManakaiDOM:DOMEventsFeature, ManakaiDOM:DOMXMLFeature,
	ManakaiDOM:DOMXMLFeatureXML11, most part of
	documentation for obsolete DOM Level 3 Minimum Implementation
	module, obsolete property name aliases,
	ImplemenationRegistryVar, ImplementationRegistry,
	DEBUG, MIString, ImplementationList, ImplementationSource,
	ManakaiDOM:implID): Removed.

	* DOMMain.dis (Redefine, RedefinedBy, Redefined): Removed.
	(DOMString): Removed.
	(DOMImplementationRegistryVar, DOMImplementationRegistry): Removed.

	* Makefile: |DOMString.pm| is added.

	* TreeCore.dis (is_default_namespace): |null| was
	returned where a false is expected (|null| is
	a false in Perl, but real |false| is appropriate here).

1 #!/usr/bin/perl
2 ## This file is automatically generated
3 ## at 2006-12-02T09:40:02+00:00,
4 ## from file "../lib/Message/DOM/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 = 20061202.0940;
14 package Message::DOM::Document::ManakaiDOMImplementationDocument;
15 our $VERSION = 20061202.0940;
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:1165044229:30838:aqhmc7623+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 = 20061202.0940;
203 package Message::DOM::Document::ManakaiDOMDocument;
204 our $VERSION = 20061202.0940;
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:1165044229:30838:aqhmc7623+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:1165044229:30838:aqhmc7623+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::DOM::DOMFeature::ClassInfo->{q<Message::DOM::Document::ManakaiDOMDocument>}->{compat_class}->{q<Message::DOM::Document::ManakaiDOMDocument>} = 1;
4134 $Message::Util::Grove::ClassProp{q<Message::DOM::Document::ManakaiDOMDocument>} = {'s1a',
4135 ['child'],
4136 'v1h',
4137 ['do'],
4138 'w0',
4139 ['impl']};
4140 package Message::DOM::IFLatest::DocumentFragment;
4141 our $VERSION = 20061202.0940;
4142 package Message::DOM::Document::ManakaiDOMDocumentFragment;
4143 our $VERSION = 20061202.0940;
4144 push our @ISA, 'Message::DOM::TreeCore::ManakaiDOMNode',
4145 'Message::DOM::IF::DocumentFragment',
4146 'Message::DOM::IF::Node',
4147 'Message::DOM::IFLatest::DocumentFragment',
4148 'Message::DOM::IFLatest::Node',
4149 'Message::DOM::IFLevel1::DocumentFragment',
4150 'Message::DOM::IFLevel1::Node',
4151 'Message::DOM::IFLevel2::DocumentFragment',
4152 'Message::DOM::IFLevel2::Node',
4153 'Message::DOM::IFLevel3::DocumentFragment',
4154 'Message::DOM::IFLevel3::Node';
4155 sub ___create_node_stem ($$$$) {
4156 my ($self, $bag, $obj, $opt) = @_;
4157 my $r = {};
4158
4159 {
4160
4161
4162 $obj->{
4163 'child'
4164 } = [];
4165
4166
4167 {
4168
4169
4170 $obj->{'od'} = $opt->{'od'}->{
4171 'id'
4172 };
4173 $bag->{${$opt->{'od'}->{
4174 'id'
4175 }}}
4176 ->{'do'}->{${$obj->{
4177 'id'
4178 }}}
4179 = $obj->{
4180 'id'
4181 };
4182
4183
4184 }
4185
4186 ;
4187 $r = $obj;
4188
4189
4190 }
4191 $r}
4192 sub node_type ($;$) {
4193 if (@_ == 1) {my ($self) = @_;
4194 my $r;
4195 $r = 11;
4196 $r;
4197 } else {my ($self) = @_;
4198 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';
4199 }
4200 }
4201 sub append_child ($$) {
4202 my ($self, $newChild) = @_;
4203 my $r;
4204
4205 {
4206
4207 if
4208 ($self eq $newChild) {
4209
4210 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';
4211
4212 ;
4213 }
4214 my $self_od = $self->
4215 owner_document
4216 ;
4217 my $child_od = $newChild->
4218 owner_document
4219 ;
4220 my $child_nt = $newChild->
4221 node_type
4222 ;
4223
4224
4225 {
4226
4227
4228 {
4229
4230 local $Error::Depth = $Error::Depth + 1;
4231
4232 {
4233
4234
4235 my
4236 $strict = $self_od->
4237 strict_error_checking
4238 ;
4239
4240 ## -- Node Type check
4241 my @new_child;
4242 if ({
4243 3 => 1,
4244 5 => 1,
4245 1 => 1,
4246 7 => 1,
4247 4 => 1,
4248 8 => 1,
4249 }->{$child_nt}) {
4250 push @new_child, $newChild;
4251 } elsif ($child_nt ==
4252 11
4253 ) {
4254 for my $cn (@{$newChild->
4255 child_nodes
4256 }) {
4257 unless ({
4258 3 => 1,
4259 5 => 1,
4260 1 => 1,
4261 7 => 1,
4262 4 => 1,
4263 8 => 1,
4264 }->{$cn->
4265 node_type
4266 }) {
4267
4268
4269 {
4270
4271 local $Error::Depth = $Error::Depth - 1;
4272
4273 {
4274
4275 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;
4276
4277
4278 }
4279
4280
4281 ;}
4282
4283 ;
4284 }
4285 push @new_child, $cn;
4286 }
4287 } else {
4288
4289
4290 {
4291
4292 local $Error::Depth = $Error::Depth - 1;
4293
4294 {
4295
4296 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;
4297
4298
4299 }
4300
4301
4302 ;}
4303
4304 ;
4305 }
4306
4307 my $nc_parent = @new_child ? $new_child[0]->
4308 parent_node
4309 :
4310
4311 undef
4312 ;
4313 if ($strict) {
4314 ## -- Wrong-document check
4315 unless ($self_od eq $child_od) {
4316
4317
4318 {
4319
4320 local $Error::Depth = $Error::Depth - 1;
4321
4322 {
4323
4324 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;
4325
4326
4327 }
4328
4329
4330 ;}
4331
4332 ;
4333 }
4334
4335 ## -- Read-onlyness check
4336 if ($self->
4337 manakai_read_only
4338 ) {
4339
4340
4341 {
4342
4343 local $Error::Depth = $Error::Depth - 1;
4344
4345 {
4346
4347 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';
4348
4349
4350 }
4351
4352
4353 ;}
4354
4355 ;
4356 }
4357 if (@new_child) {
4358 if ($nc_parent and
4359 $nc_parent->
4360 manakai_read_only
4361 ) {
4362
4363
4364 {
4365
4366 local $Error::Depth = $Error::Depth - 1;
4367
4368 {
4369
4370 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';
4371
4372
4373 }
4374
4375
4376 ;}
4377
4378 ;
4379 }
4380 }
4381 }
4382
4383 ## -- Insert at...
4384 my $index = -1; # last
4385
4386
4387 ; # FOR !tc:ForAppendChild
4388
4389 ## -- Removes from parent
4390 if ($nc_parent) {
4391 if ($child_nt ==
4392 11
4393 ) {
4394
4395
4396 {
4397
4398
4399 $newChild->{
4400 'b'
4401 }->{${$newChild->{
4402 'id'
4403 }}}
4404 ->{'child'} = [];
4405
4406
4407 }
4408
4409 ;
4410 } else {
4411 my $v;
4412
4413
4414 {
4415
4416
4417 $v = $nc_parent->{
4418 'b'
4419 }->{${$nc_parent->{
4420 'id'
4421 }}}
4422 ->{'child'};
4423
4424
4425 }
4426
4427 ;
4428 RP: for my $i (0..$#$v) {
4429 my $nodeid = $v->[$i];
4430 if (
4431 (${$new_child[0]->{'id'}} eq ${$nodeid})
4432 ) {
4433 splice @$v, $i, 1, ();
4434 last RP;
4435 }
4436 } # RP
4437 }
4438 }
4439
4440 ## -- Rewrite the |parentNode| properties
4441 for my $nc (@new_child) {
4442
4443
4444 {
4445
4446
4447 $nc->{
4448 'b'
4449 }->{${$nc->{
4450 'id'
4451 }}}
4452 ->{'parent'} = $self->{
4453 'id'
4454 };
4455
4456
4457 }
4458
4459 ;
4460 }
4461
4462 my $children;
4463
4464
4465 {
4466
4467
4468 $children = $self->{
4469 'b'
4470 }->{${$self->{
4471 'id'
4472 }}}
4473 ->{'child'};
4474
4475
4476 }
4477
4478 ;
4479
4480
4481
4482 {
4483
4484
4485 ## -- Adds to children list
4486 push @$children, map {
4487
4488 $_->{'id'}
4489
4490 } @new_child;
4491 $r = $newChild;
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 }
4523 $r}
4524 sub insert_before ($$;$) {
4525 my ($self, $newChild, $refChild) = @_;
4526 my $r;
4527
4528 {
4529
4530 if
4531 ($self eq $newChild) {
4532
4533 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';
4534
4535 ;
4536 }
4537 my $self_od = $self->
4538 owner_document
4539 ;
4540 my $child_od = $newChild->
4541 owner_document
4542 ;
4543 my $child_nt = $newChild->
4544 node_type
4545 ;
4546
4547
4548 {
4549
4550
4551 {
4552
4553 local $Error::Depth = $Error::Depth + 1;
4554
4555 {
4556
4557
4558 my
4559 $strict = $self_od->
4560 strict_error_checking
4561 ;
4562
4563 ## -- Node Type check
4564 my @new_child;
4565 if ({
4566 3 => 1,
4567 5 => 1,
4568 1 => 1,
4569 7 => 1,
4570 4 => 1,
4571 8 => 1,
4572 }->{$child_nt}) {
4573 push @new_child, $newChild;
4574 } elsif ($child_nt ==
4575 11
4576 ) {
4577 for my $cn (@{$newChild->
4578 child_nodes
4579 }) {
4580 unless ({
4581 3 => 1,
4582 5 => 1,
4583 1 => 1,
4584 7 => 1,
4585 4 => 1,
4586 8 => 1,
4587 }->{$cn->
4588 node_type
4589 }) {
4590
4591
4592 {
4593
4594 local $Error::Depth = $Error::Depth - 1;
4595
4596 {
4597
4598 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;
4599
4600
4601 }
4602
4603
4604 ;}
4605
4606 ;
4607 }
4608 push @new_child, $cn;
4609 }
4610 } else {
4611
4612
4613 {
4614
4615 local $Error::Depth = $Error::Depth - 1;
4616
4617 {
4618
4619 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;
4620
4621
4622 }
4623
4624
4625 ;}
4626
4627 ;
4628 }
4629
4630 my $nc_parent = @new_child ? $new_child[0]->
4631 parent_node
4632 :
4633
4634 undef
4635 ;
4636 if ($strict) {
4637 ## -- Wrong-document check
4638 unless ($self_od eq $child_od) {
4639
4640
4641 {
4642
4643 local $Error::Depth = $Error::Depth - 1;
4644
4645 {
4646
4647 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;
4648
4649
4650 }
4651
4652
4653 ;}
4654
4655 ;
4656 }
4657
4658 ## -- Read-onlyness check
4659 if ($self->
4660 manakai_read_only
4661 ) {
4662
4663
4664 {
4665
4666 local $Error::Depth = $Error::Depth - 1;
4667
4668 {
4669
4670 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';
4671
4672
4673 }
4674
4675
4676 ;}
4677
4678 ;
4679 }
4680 if (@new_child) {
4681 if ($nc_parent and
4682 $nc_parent->
4683 manakai_read_only
4684 ) {
4685
4686
4687 {
4688
4689 local $Error::Depth = $Error::Depth - 1;
4690
4691 {
4692
4693 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';
4694
4695
4696 }
4697
4698
4699 ;}
4700
4701 ;
4702 }
4703 }
4704 }
4705
4706 ## -- Insert at...
4707 my $index = -1; # last
4708
4709
4710 {
4711
4712
4713 # tc:ForAppendChild & tc:ForReplaceChild
4714 if (defined $refChild) {
4715 if ($refChild eq $newChild) {
4716
4717
4718 {
4719
4720
4721 {
4722
4723 local $Error::Depth = $Error::Depth - 1;
4724
4725 {
4726
4727 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';
4728
4729
4730 }
4731
4732
4733 ;}
4734
4735 ;
4736
4737
4738
4739 }
4740
4741 ;
4742
4743
4744 ;
4745 }
4746
4747 my $cns = $self->
4748 child_nodes
4749 ;
4750 my $cnsl = @$cns;
4751 C: {
4752 $index = 0;
4753 for my $i (0..($cnsl-1)) {
4754 my $cn = $cns->[$i];
4755 if ($cn eq $refChild) {
4756 $index += $i;
4757 last C;
4758 } elsif ($cn eq $newChild) {
4759 $index = -1; # offset
4760 }
4761 }
4762
4763
4764 {
4765
4766
4767 {
4768
4769 local $Error::Depth = $Error::Depth - 1;
4770
4771 {
4772
4773 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;
4774
4775
4776 }
4777
4778
4779 ;}
4780
4781 ;
4782
4783
4784
4785 }
4786
4787 ;
4788
4789
4790 ;
4791 } # C
4792 } else { # |oldChild| is not defined
4793
4794
4795 ;
4796 }
4797
4798
4799
4800 }
4801
4802 ; # FOR !tc:ForAppendChild
4803
4804 ## -- Removes from parent
4805 if ($nc_parent) {
4806 if ($child_nt ==
4807 11
4808 ) {
4809
4810
4811 {
4812
4813
4814 $newChild->{
4815 'b'
4816 }->{${$newChild->{
4817 'id'
4818 }}}
4819 ->{'child'} = [];
4820
4821
4822 }
4823
4824 ;
4825 } else {
4826 my $v;
4827
4828
4829 {
4830
4831
4832 $v = $nc_parent->{
4833 'b'
4834 }->{${$nc_parent->{
4835 'id'
4836 }}}
4837 ->{'child'};
4838
4839
4840 }
4841
4842 ;
4843 RP: for my $i (0..$#$v) {
4844 my $nodeid = $v->[$i];
4845 if (
4846 (${$new_child[0]->{'id'}} eq ${$nodeid})
4847 ) {
4848 splice @$v, $i, 1, ();
4849 last RP;
4850 }
4851 } # RP
4852 }
4853 }
4854
4855 ## -- Rewrite the |parentNode| properties
4856 for my $nc (@new_child) {
4857
4858
4859 {
4860
4861
4862 $nc->{
4863 'b'
4864 }->{${$nc->{
4865 'id'
4866 }}}
4867 ->{'parent'} = $self->{
4868 'id'
4869 };
4870
4871
4872 }
4873
4874 ;
4875 }
4876
4877 my $children;
4878
4879
4880 {
4881
4882
4883 $children = $self->{
4884 'b'
4885 }->{${$self->{
4886 'id'
4887 }}}
4888 ->{'child'};
4889
4890
4891 }
4892
4893 ;
4894
4895
4896
4897 ;
4898
4899
4900
4901 {
4902
4903
4904 ## -- Adds to children list
4905 if ($index == -1) {
4906 push @$children, map {
4907
4908 $_->{'id'}
4909
4910 } @new_child;
4911 } else {
4912 splice @$children, $index, 0, map {
4913
4914 $_->{'id'}
4915
4916 } @new_child;
4917 }
4918 $r = $newChild;
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 }
4946 $r}
4947 sub replace_child ($$$) {
4948 my ($self, $newChild, $oldChild) = @_;
4949 my $r;
4950
4951 {
4952
4953 if
4954 ($self eq $newChild) {
4955
4956 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';
4957
4958 ;
4959 }
4960 my $self_od = $self->
4961 owner_document
4962 ;
4963 my $child_od = $newChild->
4964 owner_document
4965 ;
4966 my $child_nt = $newChild->
4967 node_type
4968 ;
4969
4970
4971 {
4972
4973
4974 {
4975
4976 local $Error::Depth = $Error::Depth + 1;
4977
4978 {
4979
4980
4981 my
4982 $strict = $self_od->
4983 strict_error_checking
4984 ;
4985
4986 ## -- Node Type check
4987 my @new_child;
4988 if ({
4989 3 => 1,
4990 5 => 1,
4991 1 => 1,
4992 7 => 1,
4993 4 => 1,
4994 8 => 1,
4995 }->{$child_nt}) {
4996 push @new_child, $newChild;
4997 } elsif ($child_nt ==
4998 11
4999 ) {
5000 for my $cn (@{$newChild->
5001 child_nodes
5002 }) {
5003 unless ({
5004 3 => 1,
5005 5 => 1,
5006 1 => 1,
5007 7 => 1,
5008 4 => 1,
5009 8 => 1,
5010 }->{$cn->
5011 node_type
5012 }) {
5013
5014
5015 {
5016
5017 local $Error::Depth = $Error::Depth - 1;
5018
5019 {
5020
5021 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;
5022
5023
5024 }
5025
5026
5027 ;}
5028
5029 ;
5030 }
5031 push @new_child, $cn;
5032 }
5033 } else {
5034
5035
5036 {
5037
5038 local $Error::Depth = $Error::Depth - 1;
5039
5040 {
5041
5042 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;
5043
5044
5045 }
5046
5047
5048 ;}
5049
5050 ;
5051 }
5052
5053 my $nc_parent = @new_child ? $new_child[0]->
5054 parent_node
5055 :
5056
5057 undef
5058 ;
5059 if ($strict) {
5060 ## -- Wrong-document check
5061 unless ($self_od eq $child_od) {
5062
5063
5064 {
5065
5066 local $Error::Depth = $Error::Depth - 1;
5067
5068 {
5069
5070 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;
5071
5072
5073 }
5074
5075
5076 ;}
5077
5078 ;
5079 }
5080
5081 ## -- Read-onlyness check
5082 if ($self->
5083 manakai_read_only
5084 ) {
5085
5086
5087 {
5088
5089 local $Error::Depth = $Error::Depth - 1;
5090
5091 {
5092
5093 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';
5094
5095
5096 }
5097
5098
5099 ;}
5100
5101 ;
5102 }
5103 if (@new_child) {
5104 if ($nc_parent and
5105 $nc_parent->
5106 manakai_read_only
5107 ) {
5108
5109
5110 {
5111
5112 local $Error::Depth = $Error::Depth - 1;
5113
5114 {
5115
5116 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';
5117
5118
5119 }
5120
5121
5122 ;}
5123
5124 ;
5125 }
5126 }
5127 }
5128
5129 ## -- Insert at...
5130 my $index = -1; # last
5131
5132
5133 {
5134
5135
5136 # tc:ForAppendChild & tc:ForReplaceChild
5137 if (defined $oldChild) {
5138 if ($oldChild eq $newChild) {
5139
5140
5141 ;
5142
5143
5144 {
5145
5146
5147 {
5148
5149 local $Error::Depth = $Error::Depth - 1;
5150
5151 {
5152
5153 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';
5154
5155
5156 }
5157
5158
5159 ;}
5160
5161 ;
5162
5163
5164
5165 }
5166
5167 ;
5168 }
5169
5170 my $cns = $self->
5171 child_nodes
5172 ;
5173 my $cnsl = @$cns;
5174 C: {
5175 $index = 0;
5176 for my $i (0..($cnsl-1)) {
5177 my $cn = $cns->[$i];
5178 if ($cn eq $oldChild) {
5179 $index += $i;
5180 last C;
5181 } elsif ($cn eq $newChild) {
5182 $index = -1; # offset
5183 }
5184 }
5185
5186
5187 ;
5188
5189
5190 {
5191
5192
5193 {
5194
5195 local $Error::Depth = $Error::Depth - 1;
5196
5197 {
5198
5199 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;
5200
5201
5202 }
5203
5204
5205 ;}
5206
5207 ;
5208
5209
5210
5211 }
5212
5213 ;
5214 } # C
5215 } else { # |oldChild| is not defined
5216
5217
5218 {
5219
5220
5221 {
5222
5223 local $Error::Depth = $Error::Depth - 1;
5224
5225 {
5226
5227 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;
5228
5229
5230 }
5231
5232
5233 ;}
5234
5235 ;
5236
5237
5238
5239 }
5240
5241 ;
5242 }
5243
5244
5245
5246 }
5247
5248 ; # FOR !tc:ForAppendChild
5249
5250 ## -- Removes from parent
5251 if ($nc_parent) {
5252 if ($child_nt ==
5253 11
5254 ) {
5255
5256
5257 {
5258
5259
5260 $newChild->{
5261 'b'
5262 }->{${$newChild->{
5263 'id'
5264 }}}
5265 ->{'child'} = [];
5266
5267
5268 }
5269
5270 ;
5271 } else {
5272 my $v;
5273
5274
5275 {
5276
5277
5278 $v = $nc_parent->{
5279 'b'
5280 }->{${$nc_parent->{
5281 'id'
5282 }}}
5283 ->{'child'};
5284
5285
5286 }
5287
5288 ;
5289 RP: for my $i (0..$#$v) {
5290 my $nodeid = $v->[$i];
5291 if (
5292 (${$new_child[0]->{'id'}} eq ${$nodeid})
5293 ) {
5294 splice @$v, $i, 1, ();
5295 last RP;
5296 }
5297 } # RP
5298 }
5299 }
5300
5301 ## -- Rewrite the |parentNode| properties
5302 for my $nc (@new_child) {
5303
5304
5305 {
5306
5307
5308 $nc->{
5309 'b'
5310 }->{${$nc->{
5311 'id'
5312 }}}
5313 ->{'parent'} = $self->{
5314 'id'
5315 };
5316
5317
5318 }
5319
5320 ;
5321 }
5322
5323 my $children;
5324
5325
5326 {
5327
5328
5329 $children = $self->{
5330 'b'
5331 }->{${$self->{
5332 'id'
5333 }}}
5334 ->{'child'};
5335
5336
5337 }
5338
5339 ;
5340
5341
5342
5343 ;
5344
5345
5346
5347 ;
5348
5349
5350
5351 {
5352
5353
5354 ## -- Replaces the node
5355 splice @$children, $index, 1, map {
5356
5357 $_->{'id'}
5358
5359 } @new_child;
5360
5361
5362 {
5363
5364 CORE::delete
5365 $oldChild->{
5366 'b'
5367 }->{${$oldChild->{
5368 'id'
5369 }}}
5370 ->{'parent'};
5371
5372
5373 }
5374
5375 ;
5376 $r = $oldChild;
5377
5378
5379
5380 }
5381
5382 ;
5383
5384
5385
5386 }
5387
5388
5389 ;}
5390
5391 ;
5392
5393
5394 }
5395
5396 ;
5397
5398
5399 }
5400 $r}
5401 sub node_name ($;$) {
5402 if (@_ == 1) {my ($self) = @_;
5403 my $r;
5404 $r = '#document-fragment';
5405 $r;
5406 } else {my ($self) = @_;
5407 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';
5408 }
5409 }
5410 sub manakai_append_text ($$) {
5411 my ($self, $string) = @_;
5412 my $r;
5413
5414 {
5415
5416
5417 {
5418
5419 local $Error::Depth = $Error::Depth + 1;
5420
5421 {
5422
5423
5424 my
5425 $lc = $self->
5426 last_child
5427 ;
5428 if (defined $lc and
5429 $lc->
5430 node_type
5431 ==
5432 3
5433 ) {
5434 $lc->
5435 manakai_append_text
5436
5437 (ref $string eq 'SCALAR' ? $string : \$string);
5438 } else {
5439 my $text = $self->
5440 owner_document
5441
5442 ->
5443 create_text_node
5444
5445 (ref $string eq 'SCALAR' ? $$string : $string);
5446 $self->
5447 append_child
5448 ($text);
5449 }
5450 $r = $self;
5451
5452
5453
5454 }
5455
5456
5457 ;}
5458
5459 ;
5460
5461
5462 }
5463 $r}
5464 sub get_feature ($$$) {
5465 my ($self, $feature, $version) = @_;
5466
5467 {
5468
5469
5470 $feature = lc $feature;
5471
5472
5473 }
5474
5475 {
5476
5477
5478 $version = '' unless defined $version;
5479
5480
5481 }
5482 my $r;
5483
5484 {
5485
5486
5487 $feature =~ s/^\+//;
5488
5489
5490 {
5491
5492 if
5493 ($Message::Util::AutoLoad::Registry::Feature->{$feature}->{$version}) {
5494 $r = $self;
5495 }
5496
5497
5498 }
5499
5500 ;
5501 unless (defined $r) {
5502
5503
5504 {
5505
5506 local $Error::Depth = $Error::Depth + 1;
5507
5508 {
5509
5510
5511
5512 $r = $self->SUPER::get_feature ($feature, $version);
5513
5514
5515
5516 }
5517
5518
5519 ;}
5520
5521 ;
5522 }
5523
5524
5525 }
5526 $r}
5527 sub base_uri ($;$) {
5528 if (@_ == 1) {my ($self) = @_;
5529 my $r;
5530
5531 {
5532
5533
5534 {
5535
5536 local $Error::Depth = $Error::Depth + 1;
5537
5538 {
5539
5540
5541
5542 $r = $self->
5543 owner_document
5544 ->
5545 base_uri
5546 ;
5547
5548
5549
5550 }
5551
5552
5553 ;}
5554
5555 ;
5556
5557
5558 }
5559 $r;
5560 } else {my ($self) = @_;
5561 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';
5562 }
5563 }
5564 $Message::DOM::DOMFeature::ClassInfo->{q<Message::DOM::Document::ManakaiDOMDocumentFragment>}->{has_feature} = {'core',
5565 {'',
5566 '1',
5567 '1.0',
5568 '1',
5569 '2.0',
5570 '1',
5571 '3.0',
5572 '1'},
5573 'xml',
5574 {'',
5575 '1',
5576 '1.0',
5577 '1',
5578 '2.0',
5579 '1',
5580 '3.0',
5581 '1'},
5582 'xmlversion',
5583 {'',
5584 '1',
5585 '1.0',
5586 '1',
5587 '1.1',
5588 '1'}};
5589 $Message::DOM::ClassPoint{q<Message::DOM::Document::ManakaiDOMDocumentFragment>} = 14.1;
5590 $Message::DOM::DOMFeature::ClassInfo->{q<Message::DOM::Document::ManakaiDOMDocumentFragment>}->{compat_class}->{q<Message::DOM::Document::ManakaiDOMDocumentFragment>} = 1;
5591 $Message::Util::Grove::ClassProp{q<Message::DOM::Document::ManakaiDOMDocumentFragment>} = {'s1a',
5592 ['child'],
5593 'w0',
5594 ['od']};
5595 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::){}
5596 ## License: <http://suika.fam.cx/~wakaba/archive/2004/8/18/license#Perl+MPL>
5597 1;

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24