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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations) (download)
Thu Mar 3 06:26:16 2005 UTC (20 years, 4 months ago) by wakaba
Branch: MAIN
lib/Message/Util/PerlCode.dis: New module; lib/Message/DOM/DOMMetaImpl.dis: +feature bug fixed

1 wakaba 1.1 Module:
2     @QName:
3     Util:PerlCode
4     @FullName:
5     @@lang: en
6     @@@:
7     Perl Code Constructor
8     @Namespace:
9     http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/PerlCode#
10    
11     @Description:
12     @@lang:en
13     @@@:
14     This module provides an object-oriented interface to construct
15     Perl code.
16    
17     @Author:
18     @@FullName: Wakaba
19     @@Mail: w@suika.fam.cx
20     @License:
21     @@@:
22     license:Perl+MPL
23     @@Original:
24     @@@FullName:
25     manakai <CODE::lib/manakai/genlib.pl>
26     @@@Year:2004
27     @@@Author:
28     @@@@FullName:Wakaba
29     @@@@Mail:w@suika.fam.cx
30     @Date:
31     @@@:
32     $Date: 2005/03/02 07:46:31 $
33     @@ContentType:
34     dis:Date.RCS
35    
36     @Require:
37     @@Module:
38     @@@Name: ManakaiNode
39     @@@WithFor:
40     ManakaiDOM:Perl
41     @@Module:
42     @@@Name: DOMBoot
43     @@@WithFor:
44     ManakaiDOM:ManakaiDOMLatest
45     @@Module:
46     @@@Name: DOMMetaImpl
47     @@@WithFor:
48     ManakaiDOM:ManakaiDOMLatest
49    
50     @DefaultFor:
51     ManakaiDOM:Perl
52    
53     Namespace:
54     @DIS:
55     http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/DIS#
56     @dis:
57     http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--
58     @dis2pm:
59     http://suika.fam.cx/~wakaba/archive/2004/11/8/dis2pm#
60     @DISlib:
61     http://suika.fam.cx/~wakaba/archive/2004/dis/
62     @DOMCore:
63     http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#
64     @DOMLS:
65     http://suika.fam.cx/~wakaba/archive/2004/dom/ls#
66     @DOMMain:
67     http://suika.fam.cx/~wakaba/archive/2004/dom/main#
68     @infoset:
69     http://www.w3.org/2001/04/infoset#
70     @lang:
71     http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#
72     @license:
73     http://suika.fam.cx/~wakaba/archive/2004/8/18/license#
74     @ManakaiDOM:
75     http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom#
76     @Markup:
77     http://suika.fam.cx/~wakaba/archive/2005/manakai/Markup#
78     @MDOMX:
79     http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#
80     @owl:
81     http://www.w3.org/2002/07/owl#
82     @pc:
83     http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/PerlCode#
84     @Perl:
85     http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#Perl--
86     @rdf:
87     http://www.w3.org/1999/02/22-rdf-syntax-ns#
88     @rdfs:
89     http://www.w3.org/2000/01/rdf-schema#
90     @swcfg21:
91     http://suika.fam.cx/~wakaba/archive/2005/swcfg21#
92     @TreeCore:\
93     @Util:
94     http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/
95    
96     ## -- Features
97    
98     ElementTypeBinding:
99     @Name: FeatureDef
100     @ElementType:
101     dis:ResourceDef
102     @ShadowContent:
103     @@rdf:type:
104     DOMMain:DOMFeature
105     @@AliasFor:
106     @@@@:
107     ::ManakaiDOM:all
108     @@@For:
109     !=ManakaiDOM:all
110    
111     ElementTypeBinding:
112     @Name: FeatureVerDef
113     @ElementType:
114     dis:ResourceDef
115     @ShadowContent:
116     @@rdf:type:
117     DOMMain:DOMFeature
118    
119     ElementTypeBinding:
120     @Name: featureQName
121     @ElementType:
122     dis:AppName
123     @ShadowContent:
124     @@ContentType:
125     dis:TypeQName
126    
127     FeatureDef:
128     @QName: CoreFeature
129     @featureQName:
130     Util:PerlCode
131     @FeatureVerDef:
132     @@QName: CoreFeature10
133     @@Version: 1.0
134     @@ISA: CoreFeature
135     @@FullName:
136     @@@lang:en
137     @@@@:
138     Perl Code Constructor, version 1.0
139     @@Description:
140     @@@lang:en
141     @@@@:
142     Perl Code Constructor, version 1.0.
143    
144     ## -- Classes
145    
146     ClsDef:
147     @ClsQName: ManakaiPerlCodeFragment
148     @ClsISA:
149     ManakaiDOM:ManakaiDOMNodeReference::ManakaiDOM:Perl
150     @enDesc:
151     A class on which another Perl code classes are constructed based.
152    
153     @IntMethod:
154     @@Operator:
155     @@@@:
156     ManakaiDOM:MUErrorHandler
157     @@@ContentType:
158     dis:TypeQName
159     @@Description:
160     @@@lang:en
161     @@@@:
162     This method is a generic error handler; all manakai exceptions
163     and warnings associated to an object are once reported to this method
164     and then delivered to appropriate entities.
165     \
166     If the error is an exception (such as <X::DOMCore:DOMException> or
167     <X::ManakaiDOM:ManakaiDOMImplementationException>), it is
168     simply thrown. If the error is only a warning, it is reported
169     via the <IF::DOMCore:DOMError> interface.
170     \
171     See <PerlModule::Message::Util::Error> documentation for more
172     information on the error reporting mechanism.
173     \
174     {NOTE:: This kind of methods are named as <Perl::___report_error>
175     in the convention of <PerlModule::Message::Util::Error>.
176     \
177     }
178     @@Param:
179     @@@Name:err
180     @@@Type:
181     ManakaiDOM:ManakaiDOMExceptionOrWarning::ManakaiDOM:Perl
182     @@@Description:
183     @@@@lang:en
184     @@@@@:
185     An exception object that describes what kind of error it is
186     and how it should be recovered.
187     \
188     {NOTE:: Exception objects in manakai implementation
189     inherit the class <PerlModule::Message::Util::Error>,
190     that in turn inherits <PerlModule::Error>.
191     \
192     }
193     @@Return:
194     @@@PerlDef:
195     if ($err->isa (<ClassName::ManakaiDOM:ManakaiDOMException
196     ::ManakaiDOM:Perl>)) {
197     $err->throw;
198     } else {
199     \## TODO: Implement warning reporting
200     warn $err->stringify;
201     }
202    
203     @Attr:
204     @@Name: parentNode
205     @@enDesc:
206     The parent construction of this object.
207     @@Get:
208     @@@Type: ManakaiPerlCodeFragment
209     @@@PerlDef:
210     $r = $self->{<Q::TreeCore:node>}->{<Q::pc:parent>};
211     $r = $r-><M::ManakaiDOM:ManakaiDOMNodeObject
212     ::ManakaiDOM:Perl.newReference>
213     (<ClassName::ManakaiPerlSub>) if $r;
214     ##PerlCodeFragment
215    
216     ClsDef:
217     @ClsQName: ManakaiPerlFile
218     @ClsISA: ManakaiPerlCodeFragment
219     @enDesc:
220     Perl source code files.
221    
222     @IntMethod:
223     @@Name:newObject
224     @@ManakaiDOM:isStatic:1
225     @@Description:
226     @@@lang:en
227     @@@@:
228     Creates a new instance object for <Class::ManakaiPerlFile>.
229     @@Return:
230     @@@Type:
231     ManakaiDOM:ManakaiDOMNodeObject::ManakaiDOM:Perl
232     @@@Description:
233     @@@@lang:en
234     @@@@@:
235     The newly created node object.
236     @@@PerlDef:
237     @@@@@:
238     my $node = $r = <ClassM::ManakaiDOM:ManakaiDOMNodeObject
239     ::ManakaiDOM:Perl.new>;
240     push @{$node->{<Q::TreeCore:subnode>}}, <Q::pc:childNodes>;
241     $node->{<Q::pc:childNodes>} = [];
242     $node->{<Q::pc:sourceFile>} = '';
243     $node->{<Q::pc:sourceModule>} = '';
244     $node->{<Q::pc:sourceFor>} = '';
245     $node->{<Q::pc:currentPackage>} = 'main';
246     $node->{<Q::pc:currentChunk>} = 0;
247     @@@@ImplNote:
248     @@@@@lang:en
249     @@@@@@:
250     Properties: <Q::pc:sourceFile>,
251     <Q::pc:sourceModule>, <Q::pc:sourceFor>, <Q::childNodes>,
252     <Q::pc:currentPackage>, <Q::pc:currentChunk>.
253    
254     @Method:
255     @@Name: appendNewPackage
256     @@enDesc:
257     Appends a new package scope block.
258     @@Param:
259     @@@Name: packageName
260     @@@Type:
261     Perl:package-name::ManakaiDOM:all
262     @@@enDesc:
263     The fully-qualified name of the package to create.
264     @@Return:
265     @@@Type: ManakaiPerlPackageScope
266     @@@enDesc:
267     The newly created package scope object.
268     @@@PerlDef:
269     $r = <ClassM::ManakaiPerlPackageScope.newObject>;
270     $r->{<Q::pc:packageName>} = $packageName;
271     $self->{<Q::TreeCore:node>}
272     -><M::ManakaiDOM:ManakaiDOMNodeObject::ManakaiDOM:Perl
273     .importTree> ($r);
274     push @{$self->{<Q::TreeCore:node>}->{<Q::pc:childNodes>}}, $r;
275     $r->{<Q::pc:parent>} = $self->{<Q::TreeCore:node>};
276     $r = $r-><M::ManakaiDOM:ManakaiDOMNodeObject
277     ::ManakaiDOM:Perl.newReference>
278     (<ClassName::ManakaiPerlPackageScope>);
279    
280    
281     @Method:
282     @@Name: getFirstPackage
283     @@enDesc:
284     Gets the first package scope block of a name.
285     @@Param:
286     @@@Name: packageName
287     @@@@Type:
288     Perl:package-name::ManakaiDOM:all
289     @@@@enDesc:
290     The fully-qualified name of the package to get.
291     @@NamedParam:
292     @@@Name: makeNewPackage
293     @@@Type:
294     DOMMain:boolean
295     @@@enDesc:
296     Whether a new package scope object should be created if
297     no package of <P::packageName> found.
298     @@@TrueCase:
299     @@@@enDesc:
300     Makes a new object if not found.
301     @@@FalseCase:
302     @@@@enDesc:
303     Don't make a new object.
304     @@Return:
305     @@@Type: ManakaiPerlPackageScope
306     @@@enDesc:
307     The first package scope object whose name is equal to
308     <P::packageName>.
309     @@@nullCase:
310     @@@@enDesc:
311     There is no <P::packageName> package object and
312     the <P::makeNewPackage> parameter is set to <DOM::false>.
313     @@@PerlDef:
314     for my $cn (@{$self->{<Q::TreeCore:node>}->{<Q::pc:childNodes>}}) {
315     if ($cn->{<Q::pc:packageName>} eq $packageName) {
316     $r = $cn;
317     last;
318     }
319     }
320     if ($r) {
321     $r = $r-><M::ManakaiDOM:ManakaiDOMNodeObject
322     ::ManakaiDOM:Perl.newReference>
323     (<ClassName::ManakaiPerlPackageScope>);
324     } elsif ($makeNewPackage) {
325     __DEEP{
326     $r = $self-><M::ManakaiPerlFile.appendNewPackage> ($packageName);
327     }__;
328     }
329    
330     @Method:
331     @@Name: getLastPackage
332     @@enDesc:
333     Gets the last package scope block of a name.
334     @@Param:
335     @@@Name: packageName
336     @@@@Type:
337     Perl:package-name::ManakaiDOM:all
338     @@@@enDesc:
339     The fully-qualified name of the package to get.
340     @@NamedParam:
341     @@@Name: makeNewPackage
342     @@@Type:
343     DOMMain:boolean
344     @@@enDesc:
345     Whether a new package scope object should be created if
346     no package of <P::packageName> found.
347     @@@TrueCase:
348     @@@@enDesc:
349     Makes a new object if not found.
350     @@@FalseCase:
351     @@@@enDesc:
352     Don't make a new object.
353     @@Return:
354     @@@Type: ManakaiPerlPackageScope
355     @@@enDesc:
356     The last package scope object whose name is equal to
357     <P::packageName>.
358     @@@nullCase:
359     @@@@enDesc:
360     There is no <P::packageName> package object and
361     the <P::makeNewPackage> parameter is set to <DOM::false>.
362     @@@PerlDef:
363     for my $cn (reverse @{$self->{<Q::TreeCore:node>}
364     ->{<Q::pc:childNodes>}}) {
365     if ($cn->{<Q::pc:packageName>} eq $packageName) {
366     $r = $cn;
367     last;
368     }
369     }
370     if ($r) {
371     $r = $r-><M::ManakaiDOM:ManakaiDOMNodeObject
372     ::ManakaiDOM:Perl.newReference>
373     (<ClassName::ManakaiPerlPackageScope>);
374     } elsif ($makeNewPackage) {
375     __DEEP{
376     $r = $self-><M::ManakaiPerlFile.appendNewPackage> ($packageName);
377     }__;
378     }
379    
380     @Attr:
381     @@Name: length
382     @@enDesc:
383     The number of child code fragments.
384     @@Type:
385     DOMMain:unsigned-long
386     @@Get:
387     @@@PerlDef:
388     $r = @{$self->{<Q::TreeCore:childNodes>}->{<Q::pc:childNodes>}};
389    
390     @Attr:
391     @@Name: sourceFile
392     @@enDesc:
393     The file name of the source file from which this
394     Perl code is primary generated.
395     @@Get:
396     @@@Type:
397     DISLang:String
398     @@@disDef:
399     @@@@GetProp: sourceFile
400     @@Set:
401     @@@Type:
402     DISLang:String
403     @@@disDef:
404     @@@@SetProp: sourceFile
405    
406     @Attr:
407     @@Name: sourceModule
408     @@enDesc:
409     The name URI reference of the source module that this package defines.
410     @@Get:
411     @@@Type:
412     DISLang:String
413     @@@disDef:
414     @@@@GetProp: sourceModule
415     @@Set:
416     @@@Type:
417     DISLang:String
418     @@@disDef:
419     @@@@SetProp: sourceModule
420    
421     @Attr:
422     @@Name: sourceFor
423     @@enDesc:
424     The URI reference of the source module <QUOTE::for> for which this
425     package is.
426     @@Get:
427     @@@Type:
428     DISLang:String
429     @@@disDef:
430     @@@@GetProp: sourceFor
431     @@Set:
432     @@@Type:
433     DISLang:String
434     @@@disDef:
435     @@@@SetProp: sourceFor
436    
437     @ToStringMethod:
438     @@Return:
439     @@@Type:
440     DISLang:String
441     @@@enDesc:
442     The Perl code generated.
443     @@@PerlDef:
444     __DEEP{
445     my $node = $self->{<Q::TreeCore:node>};
446     ## -- Header
447     $r = qq<#!/usr/bin/perl \n>;
448     $r .= <ClassM::ManakaiPerlCodeImplementation.perlComment>
449     (q<This file is automatically generated>);
450     $r .= <ClassM::ManakaiPerlCodeImplementation.perlComment>
451     (q< at >.<ClassM::ManakaiPerlCodeImplementation
452     .rfc3339DateTime> (time).q<,>);
453     $r .= <ClassM::ManakaiPerlCodeImplementation.perlComment>
454     (q< from file ">.$node->{<Q::sourceFile>}.q<",>);
455     $r .= <ClassM::ManakaiPerlCodeImplementation.perlComment>
456     (q[ module <].$node->{<Q::sourceModule>}.q[>,]);
457     $r .= <ClassM::ManakaiPerlCodeImplementation.perlComment>
458     (q[ for <].$node->{<Q::sourceFor>}.q[>.]);
459     $r .= <ClassM::ManakaiPerlCodeImplementation.perlComment>
460     (q<Don't edit by hand!>);
461     $r .= qq<use strict;\n>;
462     $self-><AS::ManakaiPerlFile.currentPackage> ('main');
463     $self-><AS::ManakaiPerlFile.currentChunk> (0);
464    
465     ## -- Packages
466     my $pack = {};
467     for my $sp (@{$node->{<Q::pc:childNodes>}}) {
468     my $spe = $sp-><M::ManakaiDOM:ManakaiDOMNodeObject
469     ::ManakaiDOM:Perl.newReference>
470     (<ClassName::ManakaiPerlPackageScope>);
471     $r .= $spe->stringify;
472     for my $ipack (keys %{$sp->{<Q::dis:Implement>}}) {
473     $pack->{$ipack} ||= true; # not defined
474     }
475     $pack->{$sp->{<Q::pc:packageName>}} = []; # defined
476     }
477    
478     ## -- Enables interface packages
479     $r .= q<for (>. join (', ',
480     map {'$' . $_ . '::'}
481     grep {not ref $pack->{$_} and
482     $pack->{$_}} keys %$pack) . qq<){}\n>;
483    
484     ## -- Footer
485     $r .= <ClassM::ManakaiPerlCodeImplementation.perlComment>
486     (q[License: <].$node->{<Q::license>}.qq[>\n]);
487     $r .= qq<1;\n>;
488     }__;
489    
490     @Attr:
491     @@Name: currentPackage
492     @@enDesc:
493     The current Perl package (used in stringify method).
494     @@Type:
495     Perl:package-name::ManakaiDOM:all
496     @@Get:
497     @@@disDef:
498     @@@@GetProp: currentPackage
499     @@Set:
500     @@@disDef:
501     @@@@SetProp: currentPackage
502    
503     @Attr:
504     @@Name: currentChunk
505     @@enDesc:
506     The current code chunk (used in stringify method).
507     @@Type:
508     DOMMain:unsigned-long::ManakaiDOM:all
509     @@Get:
510     @@@disDef:
511     @@@@GetProp: currentChunk
512     @@Set:
513     @@@disDef:
514     @@@@SetProp: currentChunk
515     ##PerlFile
516    
517     PropDef:
518     @QName: sourceModule
519     @enDesc:
520     The soruce module name URI reference.
521    
522     PropDef:
523     @QName: sourceFor
524     @enDesc:
525     The source module <QUOTE::for> URI reference.
526    
527     PropDef:
528     @QName: currentPackage
529     @enDesc:
530     The current Perl package name (used for stringify).
531    
532     PropDef:
533     @QName: currentChunk
534     @enDesc:
535     The current code chunk (used for stringify).
536    
537     ClsDef:
538     @ClsQName: ManakaiPerlPackageScope
539     @ClsISA: ManakaiPerlCodeFragment
540    
541     @Attr:
542     @@Name: packageName
543     @@Type:
544     Perl:package-name
545     @@enDesc:
546     The fully-qualified package name.
547     @@Get:
548     @@@disDef:
549     @@@@GetProp: packageName
550    
551     @IntMethod:
552     @@Name:newObject
553     @@ManakaiDOM:isStatic:1
554     @@Description:
555     @@@lang:en
556     @@@@:
557     Creates a new instance object for <Class::ManakaiPerlPackageScope>.
558     @@Return:
559     @@@Type:
560     ManakaiDOM:ManakaiDOMNodeObject::ManakaiDOM:Perl
561     @@@Description:
562     @@@@lang:en
563     @@@@@:
564     The newly created node object.
565     @@@PerlDef:
566     @@@@@:
567     my $node = $r = <ClassM::ManakaiDOM:ManakaiDOMNodeObject
568     ::ManakaiDOM:Perl.new>;
569     push @{$node->{<Q::TreeCore:subnode2>}}, <Q::pc:sub>;
570     push @{$node->{<Q::TreeCore:origin>}}, <Q::pc:parent>;
571     $node->{<Q::pc:sub>} = {};
572     $node->{<Q::dis:ISA>} = [];
573     $node->{<Q::dis:Implement>} = {};
574     @@@@ImplNote:
575     @@@@@lang:en
576     @@@@@@:
577     Optional properties: none.
578    
579     @Method:
580     @@Name: getSub
581     @@enDesc:
582     Gets a subroutine.
583     @@Param:
584     @@@Name: subName
585     @@@Type:
586     DISPerl:SubName::ManakaiDOM:all
587     @@@enDesc:
588     The name of subroutine to get.
589     @@NamedParam:
590     @@@Name: makeNewNode
591     @@@Type:
592     DOMMain:boolean
593     @@@enDesc:
594     Whether a new subroutine object should be created,
595     if it is not exist, or not.
596     @@Return:
597     @@@Type: ManakaiPerlSub
598     @@@enDesc:
599     The subroutine object.
600     @@@PerlDef:
601     if ($self->{<Q::TreeCore:node>}->{<Q::pc:sub>}->{$subName}) {
602     $r = $self->{<Q::TreeCore:node>}->{<Q::pc:sub>}->{$subName};
603     } elsif ($makeNewNode) {
604     $r = $self->{<Q::TreeCore:node>}->{<Q::pc:sub>}->{$subName}
605     = <ClassM::ManakaiPerlSub.newObject>;
606     $self->{<Q::TreeCore:node>}
607     -><M::ManakaiDOM:ManakaiDOMNodeObject
608     ::ManakaiDOM:Perl.importTree> ($r);
609     $r->{<Q::pc:parent>} = $self->{<Q::TreeCore:node>};
610     $r->{<Q::pc:localName>} = $subName;
611     }
612     $r = $r-><M::ManakaiDOM:ManakaiDOMNodeObject
613     ::ManakaiDOM:Perl.newReference>
614     (<ClassName::ManakaiPerlSub>) if $r;
615    
616     @Attr:
617     @@Name: length
618     @@enDesc:
619     The number of child code fragments.
620     @@Type:
621     DOMMain:unsigned-long
622     @@Get:
623     @@@PerlDef:
624     $r = keys %{$self->{<Q::TreeCore:childNodes>}->{<Q::pc:sub>}};
625    
626     @Method:
627     @@Name: addIsaPackage
628     @@enDesc:
629     Adds a class package that this class inherits.
630     @@Param:
631     @@@Name: packageName
632     @@@Type:
633     Perl:package-name::ManakaiDOM:all
634     @@@enDesc:
635     The name of package to add.
636     @@Return:
637     @@@PerlDef:
638     push @{$self->{<Q::TreeCore:node>}->{<Q::dis:ISA>}}, $packageName;
639    
640     @Method:
641     @@Name: addImplementPackage
642     @@enDesc:
643     Adds a interface package that this class implements.
644     @@Param:
645     @@@Name: packageName
646     @@@Type:
647     Perl:package-name::ManakaiDOM:all
648     @@@enDesc:
649     The name of package to add.
650     @@Return:
651     @@@PerlDef:
652     $self->{<Q::TreeCore:node>}->{<Q::dis:Implement>}->{$packageName} = true;
653    
654     @ToStringMethod:
655     @@Return:
656     @@@Type:
657     DISLang:String
658     @@@enDesc:
659     Perl code.
660     @@@PerlDef:
661     my $file = $self-><AG::ManakaiPerlCodeFragment.parentNode>;
662     my $node = $self->{<Q::TreeCore:node>};
663     my $pn = $node->{<Q::pc:packageName>};
664     $r .= q<package > . $pn . ";\n";
665     __DEEP{
666     $file-><AS::ManakaiPerlFile.currentPackage> ($pn);
667     $r .= 'our $VERSION = '.
668     <ClassM::ManakaiPerlCodeImplementation.versionDateTime> (time).
669     ";\n";
670     }__;
671     my @isa = (@{$node->{<Q::dis:ISA>}},
672     sort keys %{$node->{<Q::dis:Implement>}});
673     if (@isa) {
674     $r .= 'push our @ISA, ' .
675     <ClassM::ManakaiPerlCodeImplementation.perlList> (\@isa) .
676     ";\n";
677     }
678     ##PerlPackageScope
679    
680     ClsDef:
681     @ClsQName: ManakaiPerlSub
682     @ClsISA: ManakaiPerlCodeFragment
683     @enDesc:
684     Perl subroutines.
685    
686     @IntMethod:
687     @@Name:newObject
688     @@ManakaiDOM:isStatic:1
689     @@Description:
690     @@@lang:en
691     @@@@:
692     Creates a new instance object for <Class::ManakaiPerlSub>.
693     @@Return:
694     @@@Type:
695     ManakaiDOM:ManakaiDOMNodeObject::ManakaiDOM:Perl
696     @@@Description:
697     @@@@lang:en
698     @@@@@:
699     The newly created node object.
700     @@@PerlDef:
701     @@@@@:
702     my $node = $r = <ClassM::ManakaiDOM:ManakaiDOMNodeObject
703     ::ManakaiDOM:Perl.new>;
704     push @{$node->{<Q::TreeCore:subnode>}}, <Q::pc:childNodes>;
705     push @{$node->{<Q::TreeCore:origin>}}, <Q::pc:parent>;
706     $node->{<Q::pc:childNodes>} = [];
707     $node->{<Q::pc:sourceLine>} = 0;
708     @@@@ImplNote:
709     @@@@@lang:en
710     @@@@@@:
711     Optional properties: <Q::pc:localName>,
712     <Q::pc:sourceFile>, <Q::pc:sourceLine>.
713    
714     @Attr:
715     @@Name: length
716     @@enDesc:
717     The number of child code fragments.
718     @@Type:
719     DOMMain:unsigned-long
720     @@Get:
721     @@@PerlDef:
722     $r = @{$self->{<Q::TreeCore:childNodes>}->{<Q::pc:childNodes>}};
723    
724     @Attr:
725     @@Name: name
726     @@enDesc:
727     The name of this subroutine.
728     @@Type:
729     DISPerl:SubName
730     @@Get:
731     @@@disDef:
732     @@@@GetProp: localName
733    
734     @Attr:
735     @@Name: prototype
736     @@enDesc:
737     The prototype of this subroutine.
738     @@Type:
739     DISPerl:SubPrototype
740     @@Get:
741     @@@disDef:
742     @@@@GetProp: prototype
743     @@@nullCase:
744     @@@@enDesc:
745     No prototype is set.
746     @@Set:
747     @@@disDef:
748     @@@@SetProp: prototype
749     @@@nullCase:
750     @@@@enDesc:
751     No prototype declaration.
752    
753     @Attr:
754     @@Name: currentSourceFile
755     @@enDesc:
756     The current source file name that is referred when
757     a code fragment is added.
758     @@Type:
759     DISLang:String
760     @@Get:
761     @@@nullCase:
762     @@@@enDesc: No source file name is set.
763     @@@disDef:
764     @@@@GetProp: sourceFile
765     @@Set:
766     @@@nullCase:
767     @@@@enDesc: No (or unknown) source file.
768     @@@disDef:
769     @@@@SetProp: sourceFile
770    
771     @Attr:
772     @@Name: currentSourceLine
773     @@enDesc:
774     The current line number in source file that is referred when
775     a code fragment is added.
776     @@Type:
777     DOMMain:unsigned-long
778     @@Get:
779     @@@disDef:
780     @@@@GetProp: sourceLine
781     @@Set:
782     @@@disDef:
783     @@@@SetProp: sourceLine
784    
785     @Method:
786     @@Name: appendCode
787     @@enDesc:
788     Appends an unparsed Perl code fragment.
789     @@Param:
790     @@@Name: codeArg
791     @@@Type:
792     lang:Perl::ManakaiDOM:all
793     @@@enDesc:
794     An unparsed Perl code fragment.
795     @@Return:
796     @@@Type: ManakaiPerlUnparsedCode
797     @@@enDesc:
798     The newly created Perl code object.
799     @@@PerlDef:
800     $r = <ClassM::ManakaiPerlUnparsedCode.newObject>;
801     my $node = $self->{<Q::TreeCore:node>};
802     $r->{<Q::sourceFile>} = $node->{<Q::sourceFile>};
803     $r->{<Q::sourceLine>} = $node->{<Q::sourceLine>};
804     $r->{<Q::code>} = $codeArg;
805     $node->{<Q::sourceLine>} += ($codeArg =~ tr/\x0A/\x0A/);
806     $r = $r-><M::ManakaiDOM:ManakaiDOMNodeObject
807     ::ManakaiDOM:Perl.newReference>
808     (<ClassName::ManakaiPerlUnparsedCode>);
809    
810     @Method:
811     @@Name: skipLines
812     @@enDesc:
813     Skips lines in a code.
814     @@Param:
815     @@@Name: codeArg
816     @@@Type:
817     lang:Perl::ManakaiDOM:all
818     @@@enDesc:
819     A code fragment, which is counted lines.
820     @@Return:
821     @@@PerlDef:
822     $self->{<Q::TreeCore:node>}->{<Q::sourceLine>}
823     += ($codeArg =~ tr/\x0A/\x0A/);
824     ##PerlSub
825    
826     ClsDef:
827     @ClsQName: ManakaiPerlUnparsedCode
828     @ClsISA: ManakaiPerlCodeFragment
829     @enDesc:
830     Unparsed Perl code fragments.
831    
832     @IntMethod:
833     @@Name:newObject
834     @@ManakaiDOM:isStatic:1
835     @@Description:
836     @@@lang:en
837     @@@@:
838     Creates a new instance object for <Class::ManakaiPerlUnparsedCode>.
839     @@Return:
840     @@@Type:
841     ManakaiDOM:ManakaiDOMNodeObject::ManakaiDOM:Perl
842     @@@Description:
843     @@@@lang:en
844     @@@@@:
845     The newly created node object.
846     @@@PerlDef:
847     @@@@@:
848     my $node = $r = <ClassM::ManakaiDOM:ManakaiDOMNodeObject
849     ::ManakaiDOM:Perl.new>;
850     push @{$node->{<Q::TreeCore:origin>}}, <Q::pc:parent>;
851     $node->{<Q::pc:code>} = '';
852     @@@@ImplNote:
853     @@@@@lang:en
854     @@@@@@:
855     Optional properties: <Q::pc:cide>.
856     ##PerlUnparsedCode
857    
858     ClsDef:
859     @ClsQName: ManakaiPerlCodeImplementation
860     @enDesc:
861     The class that provides factory methods.
862    
863     @Role:
864     @@@:
865     DOMCore:DOMImplementation::ManakaiDOM:ManakaiDOM
866     @@compat:
867     DOMCore:ManakaiDOMImplementation::ManakaiDOM:ManakaiDOMLatest
868    
869     @Method:
870     @@Name: createPerlFile
871     @@enDesc:
872     Creates a Perl code file.
873     @@Return:
874     @@@Type: ManakaiPerlFile
875     @@@enDesc: A newly created Perl source file object.
876     @@@PerlDef:
877     $r = <ClassM::ManakaiPerlFile.newObject>;
878     $r = $r-><M::ManakaiDOM:ManakaiDOMNodeObject
879     ::ManakaiDOM:Perl.newReference>
880     (<ClassName::ManakaiPerlFile>);
881    
882     @IntMethod:
883     @@Name: perlComment
884     @@ManakaiDOM:isStatic:1
885     @@enDesc:
886     Generates a Perl comment string.
887     @@Param:
888     @@@Name: str
889     @@@Type:
890     DISLang:String
891     @@@enDesc:
892     A comment text.
893     @@Return:
894     @@@Type:
895     DISLang:String
896     @@@enDesc:
897     A Perl comment string.
898     @@@PerlDef:
899     $r = $str;
900     $r =~ s/\n/\n## /g;
901     $r =~ s/\n## $/\n/s;
902     $r .= "\n" unless $r =~ /\n$/;
903     $r = q<## > . $r;
904    
905     @IntMethod:
906     @@Name: rfc3339DateTime
907     @@ManakaiDOM:isStatic:1
908     @@enDesc:
909     Returns RFC 3339 <CODE::date-time> representation of a date.
910     @@Param:
911     @@@Name: perlDate
912     @@@Type:
913     DOMMain:unsigned-long
914     @@@enDesc:
915     A Perl representation of date.
916     @@Return:
917     @@@Type:
918     DISLang:String
919     @@@enDesc:
920     RFC 3339 date string.
921     @@@PerlDef:
922     my @time = gmtime $perlDate;
923     $r = sprintf q<%04d-%02d-%02dT%02d:%02d:%02d+00:00>,
924     $time[5] + 1900, $time[4] + 1, @time[3,2,1,0];
925    
926     @IntMethod:
927     @@Name: versionDateTime
928     @@ManakaiDOM:isStatic:1
929     @@enDesc:
930     Returns date for version.
931     @@Param:
932     @@@Name: perlDate
933     @@@Type:
934     DOMMain:unsigned-long
935     @@@enDesc:
936     A Perl representation of date.
937     @@Return:
938     @@@Type:
939     DISLang:String
940     @@@enDesc:
941     A Perl number literal.
942     @@@PerlDef:
943     my @time = gmtime $perlDate;
944     $r = sprintf q<%04d%02d%02d.%02d%02d>,
945     $time[5] + 1900, $time[4] + 1, @time[3,2,1];
946    
947     @Method:
948     @@Name: perlLiteral
949     @@enDesc:
950     Perl code representation.
951     @@Param:
952     @@@Name: val
953     @@@Type:
954     DOMMain:any
955     @@@enDesc:
956     A Perl value.
957     @@Return:
958     @@@Type:
959     DISLang:String
960     @@@enDesc:
961     A Perl lexical representation of <P::val>.
962     @@@PerlDef:
963     unless (defined $val) {
964     $r = q<undef>;
965     } elsif (ref $val eq 'ARRAY') {
966     __DEEP{
967     $r = q<[> . <ClassM::ManakaiPerlCodeImplementation
968     .perlLiteral> ($val) . q<]>;
969     }__;
970     } elsif (ref $val eq 'HASH') {
971     __DEEP{
972     $r = q<{> . <ClassM::ManakaiPerlCodeImplementation
973     .perlLiteral> ([%$val]) . q<}>;
974     }__;
975     } else {
976     $val =~ s/(['\\])/\\$1/g;
977     $r = q<'> . $val . q<'>;
978     }
979    
980     @Method:
981     @@Name: perlList
982     @@enDesc:
983     Perl code representation of a list.
984     @@Param:
985     @@@Name: val
986     @@@Type:
987     Perl:ARRAY
988     @@@enDesc:
989     A Perl array reference.
990     @@Return:
991     @@@Type:
992     DISLang:String
993     @@@enDesc:
994     A Perl lexical representation of <CODE::@$val>.
995     @@@PerlDef:
996     __DEEP{
997     $r = join (q<, >, map {<ClassM::ManakaiPerlCodeImplementation
998     .perlLiteral> ($_)} @{$val});
999     }__;
1000     ##PerlCodeImplementation
1001    
1002     PropDef:
1003     @QName: code
1004     @enDesc: Perl code.
1005    
1006     PropDef:
1007     @QName: sourceFile
1008     @enDesc:
1009     Source file.
1010    
1011     PropDef:
1012     @QName: sourceLine
1013     @enDesc:
1014     Source line number.
1015    
1016     PropDef:
1017     @QName: prototype
1018     @enDesc:
1019     Prototype of subroutine.
1020    
1021     PropDef:
1022     @QName: parent
1023     @enDesc:
1024     Higher-level object.
1025    
1026     PropDef:
1027     @QName: sub
1028     @enDesc:
1029     Perl subroutines.
1030    
1031     PropDef:
1032     @QName: packageName
1033     @Type:
1034     Perl:package-name
1035     @enDesc:
1036     The fully qualified names of packages.
1037    
1038     PropDef:
1039     @QName: childNodes
1040     @enDesc:
1041     Child code fragments.
1042    
1043     PropDef:
1044     @QName: localName
1045     @enDesc:
1046     Scoped names.
1047    
1048     ElementTypeBinding:
1049     @Name: ClsDef
1050     @ElementType:
1051     dis:ResourceDef
1052     @ShadowContent:
1053     @@rdf:type:
1054     ManakaiDOM:Class
1055     @@AliasFor:
1056     @@@@:
1057     ::ManakaiDOM:Perl
1058     @@@For:
1059     !=ManakaiDOM:Perl
1060     @@ForCheck:
1061     ManakaiDOM:Perl
1062     @@DOMMain:implementFeature: CoreFeature10
1063    
1064     ElementTypeBinding:
1065     @Name: ClsQName
1066     @ElementType:
1067     dis:QName
1068    
1069     ElementTypeBinding:
1070     @Name: ClsISA
1071     @ElementType:
1072     dis:ISA
1073    
1074     ElementTypeBinding:
1075     @Name: Method
1076     @ElementType:
1077     dis:ResourceDef
1078     @ShadowContent:
1079     @@rdf:type:
1080     DISLang:Method
1081    
1082     ElementTypeBinding:
1083     @Name: ToStringMethod
1084     @ElementType:
1085     dis:ResourceDef
1086     @ShadowContent:
1087     @@rdf:type:
1088     DISLang:Method
1089     @@Operator:
1090     @@@@:
1091     DISPerl:AsStringMethod
1092     @@@ContentType:
1093     dis:TypeQName
1094     @@Description:
1095     @@@lang:en
1096     @@@@:
1097     Returns the textual Perl source code representation of this object.
1098    
1099     ElementTypeBinding:
1100     @Name: IntMethod
1101     @ElementType:
1102     dis:ResourceDef
1103     @ShadowContent:
1104     @@rdf:type:
1105     DISLang:Method
1106     @@ManakaiDOM:isForInternal:1
1107    
1108     ElementTypeBinding:
1109     @Name: Attr
1110     @ElementType:
1111     dis:ResourceDef
1112     @ShadowContent:
1113     @@rdf:type:
1114     DISLang:Attribute
1115    
1116     ElementTypeBinding:
1117     @Name: Return
1118     @ElementType:
1119     dis:ResourceDef
1120     @ShadowContent:
1121     @@rdf:type:
1122     DISLang:MethodReturn
1123    
1124     ElementTypeBinding:
1125     @Name: Get
1126     @ElementType:
1127     dis:ResourceDef
1128     @ShadowContent:
1129     @@rdf:type:
1130     DISLang:AttributeGet
1131    
1132     ElementTypeBinding:
1133     @Name: Set
1134     @ElementType:
1135     dis:ResourceDef
1136     @ShadowContent:
1137     @@rdf:type:
1138     DISLang:AttributeSet
1139    
1140     ElementTypeBinding:
1141     @Name: Param
1142     @ElementType:
1143     dis:ResourceDef
1144     @ShadowContent:
1145     @@rdf:type:
1146     DISLang:MethodParameter
1147    
1148     ElementTypeBinding:
1149     @Name: PerlDef
1150     @ElementType:
1151     dis:Def
1152     @ShadowContent:
1153     @@ContentType:
1154     lang:Perl
1155    
1156     ElementTypeBinding:
1157     @Name: disDef
1158     @ElementType:
1159     dis:Def
1160     @ShadowContent:
1161     @@ContentType:
1162     lang:dis
1163    
1164     ElementTypeBinding:
1165     @Name: InCase
1166     @ElementType:
1167     dis:ResourceDef
1168     @ShadowContent:
1169     @@rdf:type:
1170     ManakaiDOM:InCase
1171    
1172     ElementTypeBinding:
1173     @Name: nullCase
1174     @ElementType:
1175     dis:ResourceDef
1176     @ShadowContent:
1177     @@rdf:type:
1178     ManakaiDOM:InCase
1179     @@Value:
1180     @@@is-null:1
1181    
1182     ElementTypeBinding:
1183     @Name: TrueCase
1184     @ElementType:
1185     dis:ResourceDef
1186     @ShadowContent:
1187     @@rdf:type:
1188     ManakaiDOM:InCase
1189     @@Value:true
1190     @@Type:
1191     DOMMain:boolean
1192    
1193    
1194     ElementTypeBinding:
1195     @Name: FalseCase
1196     @ElementType:
1197     dis:ResourceDef
1198     @ShadowContent:
1199     @@rdf:type:
1200     ManakaiDOM:InCase
1201     @@Value:false
1202     @@Type:
1203     DOMMain:boolean
1204    
1205     ElementTypeBinding:
1206     @Name: enDesc
1207     @ElementType:
1208     dis:Description
1209     @ShadowContent:
1210     @@lang:en
1211    
1212     ElementTypeBinding:
1213     @Name: PropDef
1214     @ElementType:
1215     dis:ResourceDef
1216     @ShadowContent:
1217     @@rdf:type:
1218     rdf:Property
1219     @@AliasFor:
1220     @@@@:
1221     ::ManakaiDOM:all
1222     @@@For:
1223     !=ManakaiDOM:all
1224    
1225     ElementTypeBinding:
1226     @Name: NamedParam
1227     @ElementType:
1228     dis:ResourceDef
1229     @ShadowContent:
1230     @@rdf:type:
1231     DISLang:MethodParameter
1232     @@DISPerl:isNamedParameter:1
1233    

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24