/[suikacvs]/messaging/manakai/lib/Message/Util/Grove.dis
Suika

Contents of /messaging/manakai/lib/Message/Util/Grove.dis

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.10 - (hide annotations) (download)
Mon Apr 3 12:53:25 2006 UTC (19 years, 3 months ago) by wakaba
Branch: MAIN
Changes since 1.9: +44 -43 lines
++ manakai/bin/ChangeLog	3 Apr 2006 11:17:32 -0000
2006-04-03  Wakaba  <wakaba@suika.fam.cx>

	* daf.pl (perl-pm): Sets the |impl| argument
	of the |pl_generate_perl_module| method.

++ manakai/lib/Message/Util/ChangeLog	3 Apr 2006 12:18:05 -0000
2006-04-03  Wakaba  <wakaba@suika.fam.cx>

	* Grove.dis (mg:mutations): It is changed from array
	reference to hash reference.

	* PerlCode.dis (replaceVariable): The |pc2:| namespace
	support.
	(IN_USE_NODE_ERR, BAD_CHILD_ERR): Removed.
	(createPCIf, createPCPackage): New methods.
	(createPCFile): Renamed from |createPerlFile|.  Set
	configuration parameters.

++ manakai/lib/Message/Util/DIS/ChangeLog	3 Apr 2006 12:25:32 -0000
2006-04-03  Wakaba  <wakaba@suika.fam.cx>

	* DNLite.dis (plImplementation): Removed.

	* Perl.dis (plImplementation): Removed.
	(plCodeFragment): Changed from attribute to method.
	(plValueCodeFragment, plCodeFragment): The |factory|
	parameter is added.
	(plPreprocessPerlCode, plPreprocessPerlStatement, plAppendThrow):
	The |factory| parameter is added.
	(ManakaiDOM:InputNormalize, dis:GetNodeProp): Removed.
	(plIsDefined): Removed.
	($NS_URI_NO_NULL): Removed.
	(setDefaultValue): Removed.

++ manakai/lib/Message/DOM/ChangeLog	3 Apr 2006 12:04:56 -0000
2006-04-03  Wakaba  <wakaba@suika.fam.cx>

	* DOMMain.dis (GetPropNode, CheckReadOnly): Removed.

	* Node.dis (cfg:dtd-default-attribute): The configuration
	parameter |cfg:dtd-default-attributes| is renamed
	as |cfg:dtd-default-attribute|.
	(Roles): Definitions are changed so that classes
	that implement those classes MUST implement the |Node|
	and its subinterfaces.
	(cfg:dtd-attribute-type): New configuration parameter.

	* Document.dis (adoptNode): Don't throw exception
	if |strictErrorChecking| is |false|.

	* Element.dis (setAttribute, setAttributeNS): Don't
	set [attribute type] if the |cfg:dtd-attribute-type|
	configuration parameter is set to |false|.
	(removeAttribute, removeAttributeNS, removeAttributeNode): Don't
	regenerate default attribute nodes if the |cfg:dtd-default-attribute|
	configuration parameter is set to |false|.

++ manakai/lib/manakai/ChangeLog	3 Apr 2006 12:26:00 -0000
2006-04-03  Wakaba  <wakaba@suika.fam.cx>

	* DISLang.dis (ManakaiDOM:InputNormalize): Removed.

1 wakaba 1.1 Module:
2     @QName: Util|Grove
3     @enFN:
4     Manakai Grove Module
5    
6     @Namespace:
7     http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Grove/
8    
9     @DISCore:author: DISCore|Wakaba
10     @License: license|Perl+MPL
11     @Date:
12 wakaba 1.10 $Date: 2006/04/01 14:41:33 $
13 wakaba 1.1
14     @Require:
15     @@Module:
16     @@@QName: DISlib|DISPerl
17     @DefaultFor: ManakaiDOM|all
18    
19     Namespace:
20     @dis:
21     http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--
22     @DISlib:
23     http://suika.fam.cx/~wakaba/archive/2004/dis/
24     @f:
25     http://suika.fam.cx/~wakaba/archive/2004/dom/feature#
26     @fe:
27     http://suika.fam.cx/www/2006/feature/
28     @idl:
29     http://suika.fam.cx/~wakaba/archive/2004/dis/IDL#
30     @kwd:
31     http://suika.fam.cx/~wakaba/archive/2005/rfc2119/
32     @lang:
33     http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#
34     @license:
35     http://suika.fam.cx/~wakaba/archive/2004/8/18/license#
36     @ManakaiDOM:
37     http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom#
38     @mg:
39     http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Grove/
40     @test:
41     http://suika.fam.cx/~wakaba/archive/2004/dis/Test#
42     @Util:
43     http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/
44    
45     ElementTypeBinding:
46     @Name: ClsDef
47     @ElementType:
48     dis:ResourceDef
49     @ShadowContent:
50     @@DISCore:resourceType: DISLang|Class
51    
52     ElementTypeBinding:
53     @Name: CODE
54     @ElementType:
55     dis:ResourceDef
56     @ShadowContent:
57     @@DISCore:resourceType: DISPerl|BlockCode
58    
59     ElementTypeBinding:
60     @Name: Method
61     @ElementType:
62     dis:ResourceDef
63     @ShadowContent:
64     @@DISCore:resourceType: DISLang|Method
65    
66     ElementTypeBinding:
67     @Name: Param
68     @ElementType:
69     dis:ResourceDef
70     @ShadowContent:
71     @@DISCore:resourceType: DISLang|MethodParameter
72    
73     ElementTypeBinding:
74     @Name: Return
75     @ElementType:
76     dis:ResourceDef
77     @ShadowContent:
78     @@DISCore:resourceType: DISLang|MethodReturn
79    
80     ElementTypeBinding:
81     @Name: nullCase
82     @ElementType:
83     dis:ResourceDef
84     @ShadowContent:
85     @@DISCore:resourceType:
86     ManakaiDOM:InCase
87     @@Value:
88     @@@is-null:1
89    
90     ElementTypeBinding:
91     @Name: PerlDef
92     @ElementType:
93     dis:Def
94     @ShadowContent:
95     @@ContentType:
96     lang:Perl
97    
98     ElementTypeBinding:
99     @Name: enDesc
100     @ElementType:
101     dis:Description
102     @ShadowContent:
103     @@lang:en
104    
105     ElementTypeBinding:
106     @Name: enImplNote
107     @ElementType:
108     dis:ImplNote
109     @ShadowContent:
110     @@lang:en
111    
112     ElementTypeBinding:
113     @Name: enFN
114     @ElementType:
115     dis:FullName
116     @ShadowContent:
117     @@lang:en
118    
119     ElementTypeBinding:
120     @Name: ClsQName
121     @ElementType:
122     dis:QName
123    
124     ElementTypeBinding:
125     @Name: Code
126     @ElementType:
127     dis:ResourceDef
128     @ShadowContent:
129     @@DISCore:resourceType: DISPerl|InlineCode
130    
131     ElementTypeBinding:
132     @Name: IntPropDef
133     @ElementType:
134     dis:ResourceDef
135     @ShadowContent:
136     @@DISCore:resourceType: DISCore|Property
137    
138     ElementTypeBinding:
139     @Name: RPropDef
140     @ElementType:
141     dis:ResourceDef
142     @ShadowContent:
143     @@DISCore:resourceType: DISSource|ResourceProperty
144    
145     ElementTypeBinding:
146     @Name: Test
147     @ElementType:
148     dis:ResourceDef
149     @ShadowContent:
150     @@DISCore:resourceType: test|StandaloneTest
151    
152     ResourceDef:
153     @QName: HASH
154     @AliasFor: DISPerl|HASH||ManakaiDOM|all
155    
156     ## --------------------------------
157     ## --- Node Bag
158    
159     ClsDef:
160     @ClsQName: NodeBag
161    
162     @CODE:
163     @@QName: mg|createNodeBag
164     @@enDesc:
165     Creates a new node bag.
166     @@PerlDef:
167     $bag = {
168 wakaba 1.10 <H::mg|mutations> => {},
169 wakaba 1.1 };
170     ##NodeBag
171    
172     ## -- Bag Internal Properties
173    
174     RPropDef:
175     @QName: mg|nodeBagKey
176     @subsetOf: DISPerl|propHashKey
177     @multipleProperties: DISCore|Single
178     @dataType: DISCore|String
179    
180     IntPropDef:
181     @QName: mg|mutations
182     @mg:nodeBagKey: m
183     @enDesc:
184     The <Q::mg|mutations> property of a node bag contains
185     a reference to the array that contains references to
186     the node identifiers. They should be identifiers
187     of nodes that might be no longer referenced from anywhere
188     other than bag and when garbage collection procedure is
189     invoked they are really no longer referenced or not.
190    
191     ## --------------------------------
192     ## --- Node Stem
193    
194     ClsDef:
195     @ClsQName: NodeStem
196    
197     @CODE:
198     @@QName: mg|createNodeStem
199     @@enDesc:
200     Creates a new node stem.
201     @@PerlDef:
202     $stem = $class->___create_node_stem ($bag, {
203     <H::mg|references> => 0,
204     <H::mg|nodeID> => \<Code::mg|generateUniqueID>,
205     }, $opt);
206 wakaba 1.2 __CODE{DISPerl|HashStringRef||ManakaiDOM|all::
207     $result => {$stem->{<H::mg|nodeClass>}},
208     $given => {$class},
209     }__;
210 wakaba 1.1 $bag->{${$stem->{<H::mg|nodeID>}}} = $stem;
211    
212     @Code:
213     @@QName: mg|generateUniqueID
214     @@PerlDef:
215     (
216     'tag:suika.fam.cx,2005-09:' . time . ':' . $$ . ':' .
217     ($Message::Util::ManakaiNode::UniqueIDR ||=
218     [qw/A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
219     a b c d e f g h i j k l m n o p q r s t u v w x y z
220     0 1 2 3 4 5 6 7 8 9/]->[rand 62] .
221     [qw/A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
222     a b c d e f g h i j k l m n o p q r s t u v w x y z
223     0 1 2 3 4 5 6 7 8 9/]->[rand 62] .
224     [qw/A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
225     a b c d e f g h i j k l m n o p q r s t u v w x y z
226     0 1 2 3 4 5 6 7 8 9/]->[rand 62] .
227     [qw/A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
228     a b c d e f g h i j k l m n o p q r s t u v w x y z
229     0 1 2 3 4 5 6 7 8 9/]->[rand 62] .
230     [qw/A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
231     a b c d e f g h i j k l m n o p q r s t u v w x y z
232     0 1 2 3 4 5 6 7 8 9/]->[rand 62]) .
233     (++$Message::Util::ManakaiNode::UniqueIDN)
234     )
235    
236     @CODE:
237     @@QName: mg|setOwnerProp
238     @@enDesc:
239     Setting <Q::mg|owner0> and <Q::mg|ownee1h> property values.
240     @@PerlDef:
241     $ownee->{$owner0prop} = $ownerref->{<H::mg|nodeIDReference>};
242     $bag->{${$ownerref->{<H::mg|nodeIDReference>}}}
243     ->{$ownee1hprop}->{${$ownee->{<H::mg|nodeID>}}}
244     = $ownee->{<H::mg|nodeID>};
245 wakaba 1.6
246     @CODE:
247     @@QName: mg|setOwnerPropRR
248     @@enDesc:
249     Setting <Q::mg|owner0> and <Q::mg|ownee1h> property values
250     (node reference to node reference).
251     @@PerlDef:
252     $bag->{${$owneeref->{<H::mg|nodeIDReference>}}}->{$owner0prop}
253     = $ownerref->{<H::mg|nodeIDReference>};
254     $bag->{${$ownerref->{<H::mg|nodeIDReference>}}}
255     ->{$ownee1hprop}->{${$owneeref->{<H::mg|nodeIDReference>}}}
256     = $owneeref->{<H::mg|nodeIDReference>};
257    
258     @CODE:
259     @@QName: mg|deleteOwnerProp
260     @@enDesc:
261     Deletes <Q::mg|owner0> and <Q::mg|ownee1h> property values.
262     @@PerlDef:
263     CORE::delete $bag->{${$bag->{${$owneeref->{<H::mg|nodeIDReference>}}}
264     ->{$owner0prop} or \''}}
265     ->{$ownee1hprop};
266 wakaba 1.10 $bag->{<H::mg|mutations>}
267     ->{${$bag->{${$owneeref->{<H::mg|nodeIDReference>}}}->{$owner0prop}}}
268     = true;
269 wakaba 1.6 CORE::delete $bag->{${$owneeref->{<H::mg|nodeIDReference>}}}
270     ->{$owner0prop};
271 wakaba 1.1 ##NodeStem
272    
273    
274     ## -- Stem Internal Property Types
275    
276     RPropDef:
277     @QName: mg|propertyTypeKey
278     @subsetOf: DISPerl|propHashKey
279    
280     PTPropDef:
281     @QName: mg|subnode0
282     @enDesc:
283     A subnode property.
284     @mg:propertyTypeKey: s0
285    
286     PTPropDef:
287     @QName: mg|subnode1a
288     @enDesc:
289     A subnode property containing an array reference.
290     @mg:propertyTypeKey: s1a
291    
292     PTPropDef:
293     @QName: mg|subnode1h
294     @enDesc:
295     A subnode property containing a hash reference.
296     @mg:propertyTypeKey: s1h
297    
298     PTPropDef:
299     @QName: mg|subnode2hh
300     @enDesc:
301     A subnode property containing a hash reference
302     containing hash references.
303     @mg:propertyTypeKey: s2hh
304    
305     PTPropDef:
306     @QName: mg|origin0
307     @enDesc:
308     An origin property.
309     @mg:propertyTypeKey: o0
310    
311     PTPropDef:
312     @QName: mg|owner0
313     @enDesc:
314     An owner property. It is <EM::not> traversed when garbage collection is
315     done.
316     @mg:propertyTypeKey: w0
317    
318     PTPropDef:
319     @QName: mg|ownee1h
320     @enDesc:
321     An ownee property. It <EM::is> traversed when garvage collection is done.
322     @mg:propertyTypeKey: v1h
323    
324     ElementTypeBinding:
325     @Name: PTPropDef
326     @ElementType:
327     dis:ResourceDef
328     @ShadowContent:
329     @@DISCore:resourceType: DISSource|ResourceProperty
330     @@multipleProperties: DISCore|UnorderedList
331     @@dataType: DISCore|QName
332    
333     ## -- Stem Internal Properties
334    
335     RPropDef:
336     @QName: mg|nodeStemKey
337     @subsetOf: DISPerl|propHashKey
338     @multipleProperties: DISCore|Single
339     @dataType: DISCore|String
340    
341     IntPropDef:
342     @QName: mg|references
343     @enDesc:
344     The number of the external references to the node.
345     @Type: DISPerl|Number
346     @mg:nodeStemKey: rc
347    
348     IntPropDef:
349     @QName: mg|nodeClass
350     @enDesc:
351     The Perl fully-qualified package name of the class
352     whose <CODE::___create_node_ref> method is invoked when
353     a reference to the node is instantiated.
354     @Type: DISPerl|String
355     @mg:nodeStemKey: cls
356    
357     IntPropDef:
358     @QName: mg|nodeID
359     @enDesc:
360     The hash key string by which the node stem object can
361     be retrieved from the node bag.
362     @Type: DISPerl|SCALAR
363     @mg:nodeStemKey: id
364    
365 wakaba 1.8 IntPropDef:
366     @QName: mg|onunload
367     @enDesc:
368     The code that is executed just before the node stem
369     is deleted from the node bag. Applications <kwd:MUST-NOT>
370     rely on the code being executed. Exactly when it
371     is executed is undefined. However, at the time of the
372     execution, the node stem is still accessible from
373     the node bag.
374    
375     The code would receive two parameters: the node bag
376     and a reference to the node identifier. The code
377     <kwd:MUST-NOT> modify the node identifier. The code
378     <kwd:MUST-NOT> modify the node bag directly (neither
379     by hand nor by code fragments defined in this module); if
380     it does, the result is undefined. The code <kwd:MAY>
381     modify the node bag indirectly, via other node references,
382     since the referenced nodes should never part of the grove
383     being removed if there is such node reference.
384    
385     The code <kwd:MUST-NOT> throw exceptions; if it does, result is undefined.
386     @Type: DISPerl|CODE
387     @mg:nodeStemKey: beforefree
388 wakaba 1.1
389     ## --------------------------------
390     ## --- Node Reference
391    
392     ClsDef:
393     @ClsQName: NodeRef
394    
395     @ResourceDef:
396     @@QName: mg|NodeRefRole
397     @@DISCore:resourceType: DISLang|Role
398     @@enDesc:
399     Any class that is used as a node reference <kwd:MUST> set
400     its <Q::DISLang|role> property as <Q::mg|NodeRefRole>.
401    
402     @ResourceDef:
403     @@QName: mg|CreateNodeStemMethod
404     @@DISCore:resourceType: DISPerl|CommonMethod
405     @@enDesc:
406     The method to create a node stem.
407    
408     The method will invoked with four parameters: class name, node bag,
409     node stem prototype, and a reference to hash containing
410     optional parameters. The method <kwd:MUST> return a node
411     stem object. It <kwd:MAY> create and return the node
412     stem optionally by <Perl::bless>ing the node stem prototype
413     parameter with any appropriate class, or <kwd:MAY> create and
414     return the node stem object by its own way. It
415     <kwd:MAY> use options contained by the third parameter
416     to create the node stem object.
417    
418     @CODE:
419     @@QName: mg|createNodeRef
420     @@enDesc:
421     Creates a new node reference for the node stem.
422     @@PerlDef:
423 wakaba 1.2 $ref = ${$stem->{<H::mg|nodeClass>}}->___create_node_ref ({
424 wakaba 1.1 <H::mg|nodeIDReference> => $stem->{<H::mg|nodeID>},
425     <H::mg|nodeBag> => $bag,
426     }, $opt);
427     $stem->{<H::mg|references>}++;
428    
429 wakaba 1.2 @CODE:
430     @@QName: mg|createNodeRefFromID
431     @@enDesc:
432     Creates a new node reference for the node stem.
433     @@PerlDef:
434 wakaba 1.3 $ref = ${$bag->{${$stemid}}->{<H::mg|nodeClass>}}->___create_node_ref ({
435 wakaba 1.2 <H::mg|nodeIDReference> => $stemid,
436     <H::mg|nodeBag> => $bag,
437     }, $opt);
438 wakaba 1.3 $bag->{${$stemid}}->{<H::mg|references>}++;
439 wakaba 1.2
440 wakaba 1.6 @Code:
441     @@QName: mg|createNodeRefHashFromID
442     @@enDesc:
443     Creates a node reference hash, which is a hash reference
444     that can be handled as if it were a node reference,
445     from a node bag by its node identifier.
446     @@PerlDef:
447     {
448     <H::mg|nodeIDReference> => $stemid,
449     <H::mg|nodeBag> => $bag,
450     }
451    
452 wakaba 1.1 @ResourceDef:
453     @@QName: mg|CreateNodeRefMethod
454     @@DISCore:resourceType: DISPerl|CommonMethod
455     @@enDesc:
456     The method to create a node reference to the node.
457    
458     The method will invoked with three parameters: class name,
459     node reference prototype, and a reference to hash containing
460     optional parameters. The method <kwd:MUST> return a node
461     reference object. It <kwd:MAY> create and return the node
462     reference by <Perl::bless>ing the node reference prototype
463     parameter with any appropriate class, or <kwd:MAY> create and
464     return the node reference object by its own way. It
465     <kwd:MAY> use options contained by the third parameter
466     to create the node reference object.
467    
468     @Code:
469     @@QName: mg|getNodeBag
470     @@enDesc:
471 wakaba 1.3 Returns the node bag to which the node stem referenced by
472     a node reference belongs.
473 wakaba 1.1 @@PerlDef:
474     $ref->{<H::mg|nodeBag>}
475    
476 wakaba 1.3 @Code:
477     @@QName: mg|getNodeID
478     @@enDesc:
479     Returns the identifier of the node referenced by a node reference.
480     @@PerlDef:
481     $ref->{<H::mg|nodeIDReference>}
482    
483     @Code:
484     @@QName: mg|getNodeStem
485     @@enDesc:
486     Returns the node stem referenced by a node reference.
487     @@PerlDef:
488     $ref->{<H::mg|nodeBag>}->{${$ref->{<H::mg|nodeIDReference>}}}
489    
490 wakaba 1.1 @Method:
491     @@Name: destroy
492     @@Return:
493     @@@PerlDef:
494     my $id = $self->{<H::mg|nodeIDReference>};
495     my $bag = $self->{<H::mg|nodeBag>};
496     if (--$bag->{$$id}->{<H::mg|references>} < 1) {
497 wakaba 1.10 $bag->{<H::mg|mutations>}->{$$id} = true;
498     if (0+(keys %{$bag->{<H::mg|mutations>}})
499 wakaba 1.9 > (defined $Message::Util::Grove::GCLatency
500 wakaba 1.10 ? $Message::Util::Grove::GCLatency : 40000)) {
501     __CODE{mg|collectGarbage:: $bag => $bag}__;
502 wakaba 1.1 }
503     }
504    
505     @CODE:
506     @@QName: mg|collectGarbage
507     @@enDesc:
508     Garbage collection.
509     @@Param:
510 wakaba 1.10 @@@Name: bag
511 wakaba 1.1 @@@Type: HASH
512     @@@enDesc:
513 wakaba 1.10 The node bag.
514 wakaba 1.1 @@PerlDef:
515     my %done;
516     my %has_xref;
517 wakaba 1.10 TARGET: while (%{$bag->{<H::mg|mutations>}}) {
518     my $target = each %{$bag->{<H::mg|mutations>}};
519     CORE::delete $bag->{<H::mg|mutations>}->{$target};
520 wakaba 1.1
521 wakaba 1.10 next TARGET if $has_xref{$target} or $done{$target};
522 wakaba 1.1
523 wakaba 1.10 unless (defined $bag->{$target}) {
524     $done{$target} = true;
525 wakaba 1.1 next TARGET;
526     }
527    
528 wakaba 1.3 my %grove;
529 wakaba 1.10 my %gtarget = ($target => true);
530 wakaba 1.1 my @gwreferred;
531 wakaba 1.10 GTARGET: while (%gtarget) {
532     my $gtarget = each %gtarget;
533     CORE::delete $gtarget{$gtarget};
534     next GTARGET if $grove{$gtarget};
535 wakaba 1.3
536 wakaba 1.10 my $gtstem = $bag->{$gtarget};
537 wakaba 1.1 unless (defined $gtstem) {
538 wakaba 1.10 $done{$gtarget} = true;
539 wakaba 1.1 next GTARGET;
540     }
541    
542 wakaba 1.10 if ($has_xref{$gtarget} or $gtstem->{<H::mg|references>}) {
543     $has_xref{$gtarget} = true;
544 wakaba 1.3 $has_xref{$_} = true for keys %grove;
545 wakaba 1.10 for (keys %gtarget) {
546     $has_xref{$_} = defined $bag->{$_};
547     $done{$_} = true;
548 wakaba 1.1 }
549     next TARGET;
550 wakaba 1.10 } elsif ($done{$gtarget}) {
551 wakaba 1.1 next GTARGET;
552     }
553    
554     my $clsprop = $Message::Util::Grove::ClassProp{
555 wakaba 1.2 ${$gtstem->{<H::mg|nodeClass>}}
556 wakaba 1.1 };
557    
558 wakaba 1.10 for my $key (@{$clsprop->{<H::mg|origin0>} or []}) {
559     $gtarget{${$gtstem->{$key}}} = true if ref $gtstem->{$key};
560 wakaba 1.1 }
561    
562 wakaba 1.10 A: for my $key ((@{$clsprop->{<H::mg|ownee1h>} or []}),
563     (@{$clsprop->{<H::mg|subnode1h>} or []})) {
564 wakaba 1.1 next A unless ref $gtstem->{$key};
565 wakaba 1.10 $gtarget{$$_} = true for grep {ref $_} values %{$gtstem->{$key}};
566 wakaba 1.1 }
567    
568 wakaba 1.10 A: for my $key (@{$clsprop->{<H::mg|subnode1a>} or []}) {
569 wakaba 1.1 next A unless ref $gtstem->{$key};
570 wakaba 1.10 $gtarget{$$_} = true for grep {ref $_} @{$gtstem->{$key}};
571 wakaba 1.1 }
572    
573 wakaba 1.10 A: for my $key (@{$clsprop->{<H::mg|subnode2hh>} or []}) {
574 wakaba 1.1 next A unless ref $gtstem->{$key};
575     B: for my $key2 (keys %{$gtstem->{$key}}) {
576     next B unless ref $gtstem->{$key}->{$key2};
577 wakaba 1.10 $gtarget{$$_} = true for grep {ref $_}
578     values %{$gtstem->{$key}->{$key2}};
579 wakaba 1.1 }
580     }
581    
582 wakaba 1.10 for my $key (@{$clsprop->{<H::mg|owner0>} or []}) {
583     push @gwreferred, ${$gtstem->{$key}} if ref $gtstem->{$key};
584 wakaba 1.1 }
585    
586 wakaba 1.10 $grove{$gtarget} = true;
587 wakaba 1.1 } # GTARGET
588    
589 wakaba 1.3 for (keys %grove) {
590     $done{$_} = true;
591 wakaba 1.8 if (defined $bag->{$_}->{<H::mg|onunload>}) {
592     $bag->{$_}->{<H::mg|onunload>}->($bag, \$_);
593     }
594 wakaba 1.3 delete $bag->{$_};
595 wakaba 1.1 }
596 wakaba 1.10 $bag->{<H::mg|mutations>}->{$_} = true for @gwreferred;
597 wakaba 1.1 } # TARGET
598 wakaba 1.2
599     @CODE:
600     @@QName: mg|getNodeStemPropValue
601     @@enDesc:
602     Obtains a property value set to the node stem associated
603     to the node reference.
604     @@PerlDef:
605     $r = $ref->{<H::mg|nodeBag>}->{${$ref->{<H::mg|nodeIDReference>}}}
606     ->{$prop};
607    
608     @CODE:
609 wakaba 1.3 @@QName: mg|getNodeStemPropValueRef
610     @@enDesc:
611     Obtains the reference to a property value set to the node stem associated
612     to the node reference.
613     @@PerlDef:
614     $r = \$ref->{<H::mg|nodeBag>}->{${$ref->{<H::mg|nodeIDReference>}}}
615     ->{$prop};
616    
617     @CODE:
618 wakaba 1.4 @@QName: mg|get++NodeStemPropValue
619     @@enDesc:
620     Obtains a property value set to the node stem associated
621     to the node reference and then increments the value.
622     @@PerlDef:
623     $r = $ref->{<H::mg|nodeBag>}->{${$ref->{<H::mg|nodeIDReference>}}}
624     ->{$prop}++;
625    
626     @CODE:
627 wakaba 1.2 @@QName: mg|setNodeStemPropValue
628     @@enDesc:
629     Sets a property value to the node stem associated
630     to the node reference.
631     @@PerlDef:
632     $ref->{<H::mg|nodeBag>}->{${$ref->{<H::mg|nodeIDReference>}}}
633     ->{$prop} = $given;
634 wakaba 1.4
635     @CODE:
636     @@QName: mg|orSetNodeStemPropValue
637     @@enDesc:
638     Sets a property value to the node stem associated
639     to the node reference by <Perl::||=> operator.
640     @@PerlDef:
641     $ref->{<H::mg|nodeBag>}->{${$ref->{<H::mg|nodeIDReference>}}}
642     ->{$prop} ||= $given;
643 wakaba 1.2
644     @CODE:
645     @@QName: mg|getNodeStemProp0Node
646     @@enDesc:
647     Obtains a property value node reference set to the node stem associated
648     to the node reference.
649     @@PerlDef:
650     my $__v = $ref->{<H::mg|nodeBag>}->{${$ref->{<H::mg|nodeIDReference>}}}
651     ->{$prop};
652     if (defined $__v) {
653     __CODE{mg|createNodeRefFromID||ManakaiDOM|all::
654     $bag => {$ref->{<H::mg|nodeBag>}},
655     $stemid => $__v,
656     $ref => $r,
657 wakaba 1.7 $opt => $opt,
658 wakaba 1.2 }__;
659     }
660 wakaba 1.3
661     @CODE:
662     @@QName: mg|setNodeStemProp0Node
663     @@enDesc:
664     Sets a property value node to the node stem associated
665     to the node reference.
666     @@PerlDef:
667     $ref->{<H::mg|nodeBag>}->{${$ref->{<H::mg|nodeIDReference>}}}
668     ->{$prop} = $given->{<H::mg|nodeIDReference>};
669    
670     @CODE:
671     @@QName: mg|deleteNodeStemPropValue
672     @@enDesc:
673     Deletes a property value node from the node stem associated
674     to the node reference.
675     @@PerlDef:
676     CORE::delete $ref->{<H::mg|nodeBag>}->{${$ref->{<H::mg|nodeIDReference>}}}
677     ->{$prop};
678    
679     @Code:
680     @@QName: mg|nodeIDMatch
681     @@enDesc:
682     Whether a node reference references the same node
683     as a reference to a node identifier.
684     @@PerlDef:
685     (${$noderef->{<H::mg|nodeIDReference>}} eq ${$nodeid})
686 wakaba 1.5
687     @CODE:
688     @@QName: mg|getNodeRefPropValue
689     @@enDesc:
690     Obtains a property value set to the node reference.
691     @@PerlDef:
692     $r = $ref->{$prop};
693    
694     @CODE:
695     @@QName: mg|setNodeRefPropValue
696     @@enDesc:
697     Sets a property value set to the node reference.
698     @@PerlDef:
699     $ref->{$prop} = $given;
700 wakaba 1.1 ##NodeRef
701    
702     ## -- Reference Internal Properties
703    
704     RPropDef:
705     @QName: mg|nodeRefKey
706     @subsetOf: DISPerl|propHashKey
707     @multipleProperties: DISCore|Single
708     @dataType: DISCore|String
709    
710     IntPropDef:
711     @QName: mg|nodeIDReference
712     @enDesc:
713     The <Q::mg|nodeID> of the node referenced by the node reference object.
714     @Type: DISPerl|SCALAR
715     @mg:nodeRefKey: id
716    
717     IntPropDef:
718     @QName: mg|nodeBag
719     @enDesc:
720     The node bag object referenced by the node reference object.
721     @Type: DISPerl|Ref
722     @mg:nodeRefKey: b
723 wakaba 1.6
724     ## -- Other Property Names for Options
725    
726     IntPropDef:
727     @QName: mg|nodeRefClass
728     @mg:nodeStemKey: nrcls
729     @enDesc:
730     The Perl package name of the class of the node reference.
731 wakaba 1.7
732     IntPropDef:
733     @QName: mg|nodeRefInterfaces
734     @mg:nodeStemKey: nrifs
735     @enDesc:
736     A reference to the array that contains the Perl
737     package names of the interfaces that the node reference
738     should implement.

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24