/[suikacvs]/messaging/manakai/lib/Message/Markup/Atom.dis
Suika

Contents of /messaging/manakai/lib/Message/Markup/Atom.dis

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.11 - (hide annotations) (download)
Fri Aug 18 12:26:54 2006 UTC (17 years, 8 months ago) by wakaba
Branch: MAIN
Changes since 1.10: +8 -14 lines
++ manakai/lib/Message/Markup/ChangeLog	18 Aug 2006 12:25:07 -0000
2006-08-18  Wakaba  <wakaba@suika.fam.cx>

	* Atom.dis (Require): Reference to the |DISlib:DISMarkup|
	module is added.
	(Atom): The |mv:id| and |mv:vid| properties
	are removed so that the entity name prefix becomes |Atom.|
	and file name prefix becomes |atom-|.  The |infoset:namespaceName|
	and |infoset:prefix| properties are replaced with
	the |mv:targetNamespace| and |mv:defaultNamespacePrefix|
	properties.

++ manakai/lib/manakai/ChangeLog	18 Aug 2006 12:26:46 -0000
2006-08-18  Wakaba  <wakaba@suika.fam.cx>

	* DISMarkup.dis (mv|defaultNamespacePrefix): New property.

	* daf-dtd-modules.pl (daf_dm_qname_module_content): Generated
	DTD fragment is now more XHTML-m12n-friendly.
	(daf_dm_get_entity_name): Don't capitalize letters
	in the entity names in the module sets (as examples
	in the XHTML m12n spec).

1 wakaba 1.1 Module:
2     @QName: Markup|Atom
3     @enFN:
4     Atom DOM
5     @enDesc:
6     The <DFN::Atom DOM> is a language and platform independent
7     programming language interface to Atom 1.0 documents
8     built on the W3C Document Object Model (DOM). It defines
9     a number of interfaces that provide convenience
10     methods and attributes to process Atom 1.0 documents.
11    
12     {TODO::
13     - Move descriptions below to somewhere.
14    
15     - Formal definition for <IF::StaticNodeList> (reference
16     to Selectors API?) is necessary.
17     }
18    
19     Some attributes are defined to contain a <IF::StaticNodeList>.
20     Multiple invocations for such an attribute don't have
21     to return exactly same object, even if no changes are made
22     on the underlying DOM structure.
23    
24     {NOTE::
25     The equality of <IF::StaticNodeList> objects as per
26     the <M::Node.isEqualNode> method, however, is
27     preserved as long as the underlying DOM structure
28     and the configuration parameters are not changed.
29     }
30    
31     Methods and attributes defined in this module does <EM::not>
32     support <IF::tx|EntityReference>s; for example, an element
33     node that is a child node of an entity reference node
34     that is a child node of another element node is <EM::not> considered
35     as a child element node of the other element node. As a
36     result, applications written using this module might ignore
37     parts of Atom documents unless they configures their XML
38     parser not to expose entity references in the result DOM tree.
39    
40     @Namespace:
41     http://suika.fam.cx/~wakaba/archive/2005/manakai/Markup/Atom/
42    
43     @DISCore:author: DISCore|Wakaba
44     @License: license|Perl+MPL
45     @Date:
46 wakaba 1.11 $Date: 2006/08/17 12:12:02 $
47 wakaba 1.1
48     @Require:
49     @@Module:
50     @@@QName: Markup|common
51     @@Module:
52     @@@QName: MDOM|TreeCore
53     @@@WithFor: ManakaiDOM|ManakaiDOMLatest
54     @@Module:
55     @@@WithFor: ManakaiDOM|ManakaiDOM
56     @@Module:
57     @@@WithFor: ManakaiDOM|ManakaiDOMLatest
58 wakaba 1.11 @@Module:
59     @@@QName: DISlib|DISMarkup
60     @@@WithFor: ManakaiDOM|all
61 wakaba 1.1 @DefaultFor: ManakaiDOM|ManakaiDOMLatest
62    
63     Namespace:
64     @atom:
65     http://www.w3.org/2005/Atom
66     @c:
67     http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#
68     @cfg:
69     http://suika.fam.cx/www/2006/dom-config/
70 wakaba 1.11 @DISlib:
71     http://suika.fam.cx/~wakaba/archive/2004/dis/
72 wakaba 1.1 @dis:
73     http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--
74 wakaba 1.4 @dlp:
75     http://suika.fam.cx/~wakaba/archive/2004/dis/Perl#
76 wakaba 1.1 @d:
77     http://suika.fam.cx/~wakaba/archive/2004/dom/xdt#
78     @DOMMain:
79     http://suika.fam.cx/~wakaba/archive/2004/dom/main#
80     @dx:
81     http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/DOMException#
82 wakaba 1.9 @dxm:
83     http://suika.fam.cx/~wakaba/archive/2004/dis/XML#
84 wakaba 1.1 @ecore:
85     http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/Core/
86     @f:
87     http://suika.fam.cx/~wakaba/archive/2004/dom/feature#
88     @fe:
89     http://suika.fam.cx/www/2006/feature/
90     @html:
91     http://www.w3.org/1999/xhtml
92     @idl:
93     http://suika.fam.cx/~wakaba/archive/2004/dis/IDL#
94     @kwd:
95     http://suika.fam.cx/~wakaba/archive/2005/rfc2119/
96     @lang:
97     http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#
98     @license:
99     http://suika.fam.cx/~wakaba/archive/2004/8/18/license#
100     @ManakaiDOM:
101     http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom#
102     @Markup:
103     http://suika.fam.cx/~wakaba/archive/2005/manakai/Markup#
104     @MDOM:
105     http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom#ManakaiDOM.
106     @MDOMX:
107     http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#
108 wakaba 1.4 @mv:
109     http://suika.fam.cx/www/2006/05/mv/
110 wakaba 1.1 @rel:
111     http://www.iana.org/assignments/relation/
112     @s:
113     http://suika.fam.cx/~wakaba/archive/2004/dis/Markup#
114     @tc:
115     http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/
116     @td:
117     http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/Document/
118     @te:
119     http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/Element/
120     @test:
121     http://suika.fam.cx/~wakaba/archive/2004/dis/Test#
122     @tx:
123     http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/XML/
124     @urigen:
125     http://suika.fam.cx/~wakaba/archive/2005/manakai/URI/Generic/
126     @xml:
127     http://www.w3.org/XML/1998/namespace
128    
129     ElementTypeBinding:
130     @Name: CODE
131     @ElementType:
132     dis:ResourceDef
133     @ShadowContent:
134     @@DISCore:resourceType: dlp|BlockCode
135     @@ForCheck: ManakaiDOM|ForClass
136    
137     ElementTypeBinding:
138     @Name: Method
139     @ElementType:
140     dis:ResourceDef
141     @ShadowContent:
142     @@DISCore:resourceType: DISLang|Method
143     @@ForCheck: !=ManakaiDOM|ManakaiDOM
144    
145     ElementTypeBinding:
146     @Name: Param
147     @ElementType:
148     dis:ResourceDef
149     @ShadowContent:
150     @@DISCore:resourceType: DISLang|MethodParameter
151    
152     ElementTypeBinding:
153     @Name: Return
154     @ElementType:
155     dis:ResourceDef
156     @ShadowContent:
157     @@DISCore:resourceType: DISLang|MethodReturn
158    
159     ElementTypeBinding:
160     @Name: Attr
161     @ElementType:
162     dis:ResourceDef
163     @ShadowContent:
164     @@DISCore:resourceType: DISLang|Attribute
165     @@ForCheck: !=ManakaiDOM|ManakaiDOM
166    
167     ElementTypeBinding:
168 wakaba 1.6 @Name: ATTR
169     @ElementType:
170     dis:ResourceDef
171     @ShadowContent:
172     @@DISCore:resourceType:
173     @@@@: DISLang|Attribute
174     @@@ForCheck: ManakaiDOM|ForIF
175     @@DISCore:resourceType:
176     @@@@: DISLang|Attribute
177     @@@ForCheck: ManakaiDOM|ForClass
178     @@DISCore:resourceType:
179 wakaba 1.7 @@@@: mv|AttributeType
180 wakaba 1.6 @@@ForCheck: s|ForML
181     @@ForCheck: !=ManakaiDOM|ManakaiDOM
182    
183     ElementTypeBinding:
184 wakaba 1.1 @Name: Get
185     @ElementType:
186     dis:ResourceDef
187     @ShadowContent:
188     @@DISCore:resourceType: DISLang|AttributeGet
189    
190     ElementTypeBinding:
191     @Name: Set
192     @ElementType:
193     dis:ResourceDef
194     @ShadowContent:
195     @@DISCore:resourceType: DISLang|AttributeSet
196    
197     ElementTypeBinding:
198     @Name: nullCase
199     @ElementType:
200     dis:ResourceDef
201     @ShadowContent:
202     @@DISCore:resourceType: ManakaiDOM|InCase
203     @@Value:
204     @@@is-null:1
205    
206     ElementTypeBinding:
207     @Name: PerlDef
208     @ElementType:
209     dis:Def
210     @ShadowContent:
211     @@ContentType: lang|Perl
212     @@ForCheck: ManakaiDOM|ForClass
213    
214     ElementTypeBinding:
215     @Name: PerlCDef
216     @ElementType:
217     dis:Def
218     @ShadowContent:
219     @@ContentType: lang|Perl
220    
221     ElementTypeBinding:
222     @Name: enImplNote
223     @ElementType:
224     dis:ImplNote
225     @ShadowContent:
226     @@lang:en
227    
228     ElementTypeBinding:
229     @Name: enFN
230     @ElementType:
231     dis:FullName
232     @ShadowContent:
233     @@lang:en
234    
235     ElementTypeBinding:
236     @Name: IFClsETDef
237     @ElementType:
238     dis:ResourceDef
239     @ShadowContent:
240     @@DISCore:resourceType:
241     @@@@: dis|MultipleResource
242     @@@ForCheck: !ManakaiDOM|ForIF !ManakaiDOM|ForClass !s|ForML
243     @@resourceFor: ManakaiDOM|ForIF
244     @@resourceFor: ManakaiDOM|ForClass
245     @@resourceFor: s|ForML
246     @@For: ManakaiDOM|ManakaiDOM
247    
248     @@DISCore:resourceType:
249     @@@@: DISLang|Interface
250     @@@ForCheck: ManakaiDOM|ForIF
251    
252     @@DISCore:resourceType:
253     @@@@: DISLang|Class
254     @@@ForCheck: ManakaiDOM|ForClass
255     @@Implement:
256     @@@@: ||ManakaiDOM|ManakaiDOM||ManakaiDOM|ForIF
257     @@@ContentType: DISCore|TFPQNames
258     @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOM
259     @@Implement:
260     @@@@: ||ManakaiDOM|ManakaiDOMLatest||ManakaiDOM|ForIF
261     @@@ContentType: DISCore|TFPQNames
262     @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOMLatest
263    
264     @@s:elementType:
265     @@@@: ||+||s|ForML
266     @@@ContentType: DISCore|TFPQNames
267     @@@DISCore:stopISARecursive:1
268    
269     @@DISCore:resourceType:
270     @@@@: s|ElementType
271     @@@ForCheck: s|ForML
272    
273     @@f:implements: AtomFeature10
274    
275     ElementTypeBinding:
276     @Name: IFClsDef
277     @ElementType:
278     dis:ResourceDef
279     @ShadowContent:
280     @@DISCore:resourceType:
281     @@@@: dis|MultipleResource
282     @@@ForCheck: !ManakaiDOM|ForIF !ManakaiDOM|ForClass !s|ForML
283     @@resourceFor: ManakaiDOM|ForIF
284     @@resourceFor: ManakaiDOM|ForClass
285     @@For: ManakaiDOM|ManakaiDOM
286    
287     @@DISCore:resourceType:
288     @@@@: DISLang|Interface
289     @@@ForCheck: ManakaiDOM|ForIF
290    
291     @@DISCore:resourceType:
292     @@@@: DISLang|Class
293     @@@ForCheck: ManakaiDOM|ForClass
294     @@Implement:
295     @@@@: ||ManakaiDOM|ManakaiDOM||ManakaiDOM|ForIF
296     @@@ContentType: DISCore|TFPQNames
297     @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOM
298     @@Implement:
299     @@@@: ||ManakaiDOM|ManakaiDOMLatest||ManakaiDOM|ForIF
300     @@@ContentType: DISCore|TFPQNames
301     @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOMLatest
302    
303     @@f:implements: AtomFeature10
304    
305     ElementTypeBinding:
306 wakaba 1.6 @Name: IFClsConstructDef
307     @ElementType:
308     dis:ResourceDef
309     @ShadowContent:
310     @@DISCore:resourceType:
311     @@@@: dis|MultipleResource
312 wakaba 1.7 @@@ForCheck:
313     !ManakaiDOM|ForIF !ManakaiDOM|ForClass !s|ForML !mv|ForCM !mv|ForAG
314 wakaba 1.6 @@resourceFor: ManakaiDOM|ForIF
315     @@resourceFor: ManakaiDOM|ForClass
316     @@resourceFor: mv|ForCM
317     @@resourceFor: mv|ForAG
318     @@For: ManakaiDOM|ManakaiDOM
319    
320     @@DISCore:resourceType:
321     @@@@: DISLang|Interface
322     @@@ForCheck: ManakaiDOM|ForIF
323    
324     @@DISCore:resourceType:
325     @@@@: DISLang|Class
326     @@@ForCheck: ManakaiDOM|ForClass
327     @@Implement:
328     @@@@: ||ManakaiDOM|ManakaiDOM||ManakaiDOM|ForIF
329     @@@ContentType: DISCore|TFPQNames
330     @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOM
331     @@Implement:
332     @@@@: ||ManakaiDOM|ManakaiDOMLatest||ManakaiDOM|ForIF
333     @@@ContentType: DISCore|TFPQNames
334     @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOMLatest
335    
336     @@DISCore:resourceType:
337     @@@@: mv|AttributeTypeGroup
338     @@@ForCheck: mv|ForAG
339    
340     @@DISCore:resourceType:
341     @@@@: mv|ElementContentModel
342     @@@ForCheck: mv|ForCM
343    
344     @@f:implements: AtomFeature10
345    
346     ElementTypeBinding:
347 wakaba 1.1 @Name: IFQName
348     @ElementType:
349     dis:QName
350     @ShadowContent:
351     @@ForCheck: ManakaiDOM|ForIF
352    
353     ElementTypeBinding:
354     @Name: ClsQName
355     @ElementType:
356     dis:QName
357     @ShadowContent:
358     @@ForCheck: ManakaiDOM|ForClass
359    
360     ElementTypeBinding:
361     @Name: ETRQName
362     @ElementType:
363     dis:QName
364     @ShadowContent:
365     @@ForCheck: s|ForML
366    
367     ElementTypeBinding:
368     @Name: ETQName
369     @ElementType:
370     dis:AppName
371     @ShadowContent:
372     @@ForCheck: s|ForML
373     @@ContentType: DISCore|QName
374    
375     ElementTypeBinding:
376 wakaba 1.6 @Name: CMQName
377     @ElementType:
378     dis:QName
379     @ShadowContent:
380     @@ForCheck: mv|ForCM
381    
382     ElementTypeBinding:
383     @Name: CMName
384     @ElementType:
385     mv:elementContentModelName
386     @ShadowContent:
387     @@ForCheck: mv|ForCM
388    
389     ElementTypeBinding:
390     @Name: AGQName
391     @ElementType:
392     dis:QName
393     @ShadowContent:
394     @@ForCheck: mv|ForAG
395    
396     ElementTypeBinding:
397     @Name: AGName
398     @ElementType:
399     mv:attributeTypeGroupName
400     @ShadowContent:
401     @@ForCheck: mv|ForAG
402    
403     ElementTypeBinding:
404 wakaba 1.1 @Name: IFISA
405     @ElementType:
406     dis:ISA
407     @ShadowContent:
408     @@ForCheck: ManakaiDOM|ForIF
409    
410     ElementTypeBinding:
411     @Name: ClsISA
412     @ElementType:
413     dis:ISA
414     @ShadowContent:
415     @@ForCheck: ManakaiDOM|ForClass
416    
417     ElementTypeBinding:
418     @Name: disDef
419     @ElementType:
420     dis:Def
421     @ShadowContent:
422     @@ContentType:
423     lang:dis
424     @@ForCheck: ManakaiDOM|ForClass
425    
426     ElementTypeBinding:
427     @Name: Code
428     @ElementType:
429     dis:ResourceDef
430     @ShadowContent:
431     @@DISCore:resourceType: dlp|InlineCode
432     @@ForCheck: ManakaiDOM|ForClass
433    
434     ElementTypeBinding:
435     @Name: Test
436     @ElementType:
437     dis:ResourceDef
438     @ShadowContent:
439     @@DISCore:resourceType: test|StandaloneTest
440     @@ForCheck: ManakaiDOM|ForClass
441    
442     ElementTypeBinding:
443     @Name: TestC
444     @ElementType:
445     dis:ResourceDef
446     @ShadowContent:
447     @@DISCore:resourceType: test|StandaloneTest
448    
449     ResourceDef:
450     @QName: Document
451     @AliasFor: td|Document
452     @For: ManakaiDOM|DOM
453    
454     ResourceDef:
455     @QName: Element
456     @AliasFor: te|Element
457     @For: ManakaiDOM|DOM
458    
459     ResourceDef:
460     @QName: Attr
461     @AliasFor: te|Attr
462     @For: ManakaiDOM|DOM
463    
464     ResourceDef:
465     @QName: DOMString
466     @AliasFor: DOMMain|DOMString
467     @For: ManakaiDOM|DOM
468    
469     ResourceDef:
470     @QName: DOMURI
471     @AliasFor: ManakaiDOM|ManakaiDOMURI
472     @For: ManakaiDOM|DOM3
473    
474     ResourceDef:
475     @QName: DOMTimeStamp
476     @AliasFor: DOMMain|DOMTimeStamp
477     @For: ManakaiDOM|DOM2
478    
479     ResourceDef:
480     @QName: boolean
481     @AliasFor: idl|boolean||ManakaiDOM|all
482    
483     ResourceDef:
484     @QName: Node
485     @AliasFor: tc|Node
486     @For: ManakaiDOM|ManakaiDOM
487    
488     ResourceDef:
489     @QName: NodeList
490     @AliasFor: tc|NodeList
491     @For: ManakaiDOM|ManakaiDOM
492    
493     ResourceDef:
494     @QName: StaticNodeList
495     @AliasFor: tc|StaticNodeList
496     @For: ManakaiDOM|ManakaiDOM
497    
498     ElementTypeBinding:
499     @Name: enDesc
500     @ElementType:
501     dis:Description
502     @ShadowContent:
503     @@lang:en
504    
505     ElementTypeBinding:
506 wakaba 1.4 @Name: enLN
507     @ElementType:
508     mv:longName
509     @ShadowContent:
510     @@lang:en
511    
512     ElementTypeBinding:
513 wakaba 1.1 @Name: TrueCase
514     @ElementType:
515     dis:ResourceDef
516     @ShadowContent:
517     @@DISCore:resourceType:
518     ManakaiDOM:InCase
519     @@Value:
520     @@@@: 1
521     @@@ContentType: DISCore|Boolean
522     @@Type: idl|boolean||ManakaiDOM|all
523    
524     ElementTypeBinding:
525     @Name: FalseCase
526     @ElementType:
527     dis:ResourceDef
528     @ShadowContent:
529     @@DISCore:resourceType:
530     ManakaiDOM:InCase
531     @@Value:
532     @@@@: 0
533     @@@ContentType: DISCore|Boolean
534     @@Type: idl|boolean||ManakaiDOM|all
535    
536     ## -- Features
537    
538     ElementTypeBinding:
539     @Name: FeatureDef
540     @ElementType:
541     dis:ResourceDef
542     @ShadowContent:
543     @@DISCore:resourceType: f|Feature
544     @@For: =ManakaiDOM|all
545    
546     ElementTypeBinding:
547     @Name: FeatureVerDef
548     @ElementType:
549     dis:ResourceDef
550     @ShadowContent:
551     @@DISCore:resourceType: f|Feature
552    
553     ElementTypeBinding:
554     @Name: featureQName
555     @ElementType:
556     f:name
557     @ShadowContent:
558     @@ContentType: DISCore|QName
559    
560     FeatureDef:
561     @featureQName: fe|Atom
562     @QName: AtomFeature
563     @FeatureVerDef:
564     @@QName: AtomFeature10
565     @@Version: 1.0
566     @@f:instanceOf: AtomFeature
567     @@f:requires: tx|XMLFeature30
568     @@enDesc:
569     The Atom DOM, version 1.0.
570 wakaba 1.4
571     ## -- Modules
572    
573     ModuleSetDef:
574     @QName: Atom
575     @enLN: Atom
576     @mv:version: 1.0
577 wakaba 1.7 @mv:contains: AtomDatatypes
578     @mv:contains: AtomProperties
579     @mv:contains: AtomEntry
580 wakaba 1.4 @mv:contains: AtomFeed
581 wakaba 1.10 @mv:contains: AtomQName
582    
583 wakaba 1.11 @mv:targetNamespace: atom|
584     @mv:defaultNamespacePrefix: atom
585 wakaba 1.4
586     ModuleDef:
587     @QName: AtomFeed
588     @mv:id: feed
589     @enLN: Feed
590 wakaba 1.8 @mv:contains: feed-prop
591 wakaba 1.4 @mv:contains: atom|feed
592    
593     ModuleDef:
594     @QName: AtomEntry
595     @mv:id: entry
596     @enLN: Entry
597 wakaba 1.8 @mv:contains: entry-prop
598 wakaba 1.4 @mv:contains: atom|entry
599    
600     ModuleDef:
601 wakaba 1.6 @QName: AtomProperties
602     @mv:id: props
603     @enLN: Properties
604 wakaba 1.4 @mv:contains: atom|content
605 wakaba 1.8 @mv:contains: atom|contributor
606 wakaba 1.4 @mv:contains: atom|category
607     @mv:contains: atom|generator
608     @mv:contains: atom|link
609     @mv:contains: atom|author
610     @mv:contains: atom|published
611     @mv:contains: atom|updated
612 wakaba 1.8 @mv:contains: atom|icon
613 wakaba 1.4 @mv:contains: atom|id
614 wakaba 1.8 @mv:contains: atom|logo
615     @mv:contains: atom|rights
616     @mv:contains: atom|subtitle
617     @mv:contains: atom|summary
618 wakaba 1.4 @mv:contains: atom|title
619 wakaba 1.8 @mv:contains: source-prop
620     @mv:contains: atom|source
621 wakaba 1.6
622     ModuleDef:
623     @QName: AtomDatatypes
624     @mv:id: datatypes
625     @enLN: Datatypes
626 wakaba 1.7
627     @mv:contains: atomNCName
628     @mv:contains: atomMediaType
629     @mv:contains: atomLanguageTag
630     @mv:contains: atomUri
631 wakaba 1.9 @mv:contains: atomUriCM
632 wakaba 1.7 @mv:contains: atomEmailAddress
633 wakaba 1.9 @mv:contains: atomEmailAddressCM
634 wakaba 1.7
635 wakaba 1.8 @mv:contains: undefinedAttributes
636 wakaba 1.9 @mv:contains: undefinedContent
637 wakaba 1.7 @mv:contains: atomCommonAttributes
638    
639 wakaba 1.8 @mv:contains: simpleExtensionElements
640     @mv:contains: structuredExtensionElements
641     @mv:contains: extensionElements
642    
643 wakaba 1.6 @mv:contains: TextAG
644     @mv:contains: TextCM
645 wakaba 1.8
646     @mv:contains: atom|name
647     @mv:contains: atom|email
648     @mv:contains: atom|uri
649 wakaba 1.6 @mv:contains: PersonAG
650 wakaba 1.8 @mv:contains: person-prop
651 wakaba 1.6 @mv:contains: PersonCM
652 wakaba 1.8
653 wakaba 1.6 @mv:contains: DateAG
654     @mv:contains: DateCM
655 wakaba 1.10
656     ResourceDef:
657     @QName: AtomQName
658     @enLN: Qualified Names
659     @mv:id: qname
660     @For: =ManakaiDOM|ManakaiDOMLatest
661     @DISCore:resourceType: mv|XMLDTDQNameModule
662    
663     @mv:contains: Atom
664 wakaba 1.4
665     ElementTypeBinding:
666     @Name: ModuleSetDef
667     @ElementType:
668     dis:ResourceDef
669     @ShadowContent:
670     @@DISCore:resourceType: mv|XMLDTDModuleSet
671     @@For: =ManakaiDOM|ManakaiDOMLatest
672    
673     ElementTypeBinding:
674     @Name: ModuleDef
675     @ElementType:
676     dis:ResourceDef
677     @ShadowContent:
678     @@DISCore:resourceType: mv|XMLDTDModule
679     @@For: =ManakaiDOM|ManakaiDOMLatest
680 wakaba 1.1
681     ## -- Implementation
682    
683     IFClsDef:
684     @IFQName: AtomImplementation
685     @ClsQName: ManakaiAtomImplementation
686    
687     @IFISA: c|DOMImplementation
688     @ClsISA: c|ManakaiDOMImplementation
689    
690     @enDesc:
691     The <IF::AtomImplementation> interface provides convenience
692     methods to create Atom documents.
693    
694     @f:provides: AtomFeature10
695    
696     @Test:
697     @@QName: AtomImplementation.interface.test
698     @@PerlDef:
699     for my $interface (
700     <IFName::AtomImplementation>,
701     <IFName::AtomImplementation||ManakaiDOM|ManakaiDOM>,
702     <IFName::c|DOMImplementation>,
703     <IFName::urigen|URIImplementation>,
704     <IFName::f|MinimumImplementation>,
705     <IFName::f|GetFeature>,
706     ) {
707     $test->id ($interface);
708     $test->assert_true
709     (<Class::ManakaiAtomImplementation>->isa ($interface));
710     }
711     @Test:
712     @@QName: ImplementationRegistry.AtomImplementation.1.test
713     @@PerlDef:
714     require Message::Markup::Atom;
715     my $impl = $Message::DOM::ImplementationRegistry
716     ->get_implementation ({
717     <Q::fe|Atom> => '1.0',
718     });
719    
720     $test->assert_isa ($impl, <IFName::AtomImplementation>);
721     @Test:
722     @@QName: ImplementationRegistry.AtomImplementation.2.test
723     @@PerlDef:
724     require Message::Markup::Atom;
725     my $impl = $Message::DOM::ImplementationRegistry
726     ->get_implementation ({
727     Core => '3.0',
728     <Q::fe|Atom> => '1.0',
729     });
730    
731     $test->assert_isa ($impl, <IFName::AtomImplementation>);
732     @Test:
733     @@QName: ImplementationRegistry.AtomImplementation.3.test
734     @@PerlDef:
735     require Message::Markup::Atom;
736     my $impl = $Message::DOM::ImplementationRegistry
737     ->get_implementation ({
738     XML => '3.0',
739     <Q::fe|Atom> => '1.0',
740     });
741    
742     $test->assert_isa ($impl, <IFName::AtomImplementation>);
743    
744     @Method:
745     @@Name: createAtomFeedDocument
746     @@enDesc:
747     Creates an Atom Feed Document object.
748     @@Param:
749     @@@Name: id
750     @@@Type: DOMString
751     @@@actualType: DOMURI
752     @@@enDesc:
753     The <XE::atom|id> of the feed.
754     @@Param:
755     @@@Name: title
756     @@@Type: DOMString
757     @@@enDesc:
758     The <XE::atom|title> of the feed.
759     @@@nullCase:
760     @@@@enDesc:
761     The implementation <kwd:MUST> treate <DOM::null>
762     as if an empty string is specified.
763     @@Param:
764     @@@Name: lang
765     @@@Type: DOMString
766     @@@enDesc:
767     The default natural language of the feed.
768     @@@nullCase:
769     @@@@enDesc:
770     The implementation <kwd:MUST> treate <DOM::null>
771     as if an empty string is specified.
772     @@Return:
773     @@@Type: AtomFeedDocument
774     @@@enDesc:
775     The newly created Atom Feed Document.
776    
777     {P:: The returned object <kwd:MUST> be a <IF::Document> node
778     with attributes:
779    
780     - <A::Node.childNodes>::: A <IF::NodeList> containing
781     a new <XE::atom|feed> element node.
782    
783     - <A::Document.xmlVersion>::: <XML::1.0>.
784    
785     }
786    
787     {P:: The newly created <XE::atom|feed> element node <kwd:MUST>
788     have attributes set as:
789    
790     - <A::Node.attributes>::: A <IF::NamedNodeMap> that contains
791     at least a new <XA::xml|lang>
792     attribute node.
793    
794     - <A::Node.childNodes>::: A <IF::NodeList> containing
795     a new <XE::atom|id> element node,
796     a new <XE::atom|title> element node, and
797     a new <XE::atom|updated> element node
798     in any order.
799    
800     }
801    
802     {P:: The newly created <XA::xml|lang> attribute node <kwd:MUST>
803     have attributes set as:
804    
805     - <A::Node.nodeValue>::: <P::lang>.
806    
807     - <A::Attr.specified>::: <DOM::true>.
808    
809     }
810    
811     {P:: The newly created <XE::atom|id> element node <kwd:MUST>
812     have attributes set as:
813    
814     - <A::Node.textContent>::: <P::id>.
815    
816     }
817    
818     {P:: The newly created <XE::atom|title> element node <kwd:MUST>
819     have attributes set as:
820    
821     - <A::Node.textContent>::: <P::title>.
822    
823     }
824    
825     The <XA::type> attribute node <kwd:MUST-NOT> be attached
826     to the <XE::atom|title> element node.
827    
828     {P:: The newly created <XE::atom|updated> element node <kwd:MUST>
829     have attributes set as:
830    
831     - <A::Node.textContent>::: A uppercase RFC 3339 <CODE::date-time>
832     representation of the time when the method is invoked.
833     The implementation <kwd:MAY> align its timezone to
834     that of the environment in which the method is invoked.
835    
836     }
837     @@@PerlDef:
838     __DEEP{
839     $r = $self-><M::c|DOMImplementation.createDocument>
840     (<Q::atom|>, 'feed');
841     $r-><AS::Document.xmlVersion> ('1.0');
842    
843     my $feede = $r-><AG::Document.documentElement>;
844     $feede-><AS::Node.manakaiLanguage> (defined $lang ? $lang : '');
845    
846     $feede-><AS::AtomFeedElement.id> ($id);
847    
848     my $titlee = $r-><M::Document.createElementNS> (<Q::atom|>, 'title');
849     $titlee-><AS::Node.textContent> (defined $title ? $title : '');
850     $feede-><M::Node.appendChild> ($titlee);
851    
852     my $updatede = $r-><M::Document.createElementNS>
853     (<Q::atom|>, 'updated');
854     $updatede-><AS::AtomDateConstruct.value> (scalar time);
855     $feede-><M::Node.appendChild> ($updatede);
856     }__;
857    
858     @@Test:
859     @@@QName: AtomImplementation.createAtomFeedDocument.test
860     @@@PerlDef:
861     my $impl;
862     __CODE{tc|createImplForTest:: $impl => $impl}__;
863     $impl = $impl->get_feature (<Q::fe|Atom> => '1.0');
864    
865     my $doc = $impl-><M::AtomImplementation.createAtomFeedDocument>
866     ('about:id', 'feed title', 'en');
867    
868     $test->id ('document.interface');
869     $test->assert_isa ($doc, <IFName::Document>);
870    
871     $test->id ('document.xmlVersion');
872     $test->assert_equals ($doc-><AG::Document.xmlVersion>, '1.0');
873    
874     my $feed = $doc-><AG::Document.documentElement>;
875    
876     $test->id ('feed.namespaceURI');
877     $test->assert_equals ($feed-><AG::Node.namespaceURI>, <Q::atom|>);
878    
879     $test->id ('feed.localName');
880     $test->assert_equals ($feed-><AG::Node.localName>, 'feed');
881    
882     $test->id ('feed.lang');
883     $test->assert_equals ($feed-><M::Element.getAttributeNS>
884     (<Q::xml|>, 'lang'),
885     'en');
886    
887     my $id;
888     my $title;
889     my $updated;
890    
891     for my $cn (@{$feed-><AG::Node.childNodes>}) {
892     if ($cn-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
893     $cn-><AG::Node.namespaceURI> eq <Q::atom|>) {
894     if ($cn-><AG::Node.localName> eq 'id') {
895     $id = $cn;
896     } elsif ($cn-><AG::Node.localName> eq 'title') {
897     $title = $cn;
898     } elsif ($cn-><AG::Node.localName> eq 'updated') {
899     $updated = $cn;
900     }
901     }
902     }
903    
904     $test->id ('id');
905     $test->assert_not_null ($id);
906    
907     $test->id ('id.value');
908     $test->assert_equals ($id-><AG::Node.textContent>, 'about:id');
909    
910     $test->id ('title');
911     $test->assert_not_null ($title);
912    
913     $test->id ('title.value');
914     $test->assert_equals ($title-><AG::Node.textContent>, 'feed title');
915    
916     $test->id ('title.type');
917     $test->assert_null ($title-><M::Element.getAttributeNS> (null, 'type'));
918    
919     $test->id ('updated');
920     $test->assert_not_null ($updated);
921    
922     $test->id ('updated.value');
923     $test->assert_num_not_equals
924     (actual_value => $updated-><AG::AtomDateConstruct.value>,
925     expected_value => 0);
926    
927     @Method:
928     @@Name: createAtomEntryDocument
929     @@enDesc:
930     Creates an Atom Entry Document object.
931     @@Param:
932     @@@Name: id
933     @@@Type: DOMString
934     @@@actualType: DOMURI
935     @@@enDesc:
936     The <XE::atom|id> of the entry.
937     @@Param:
938     @@@Name: title
939     @@@Type: DOMString
940     @@@enDesc:
941     The <XE::atom|title> of the entry.
942     @@@nullCase:
943     @@@@enDesc:
944     The implementation <kwd:MUST> treate <DOM::null>
945     as if an empty string is specified.
946     @@Param:
947     @@@Name: lang
948     @@@Type: DOMString
949     @@@enDesc:
950     The natural language of the entry.
951     @@@nullCase:
952     @@@@enDesc:
953     The implementation <kwd:MUST> treate <DOM::null>
954     as if an empty string is specified.
955     @@Return:
956     @@@Type: AtomEntryDocument
957     @@@enDesc:
958     The newly created Atom Entry Document.
959    
960     {P:: The returned object <kwd:MUST> be a <IF::Document> node
961     with attributes:
962    
963     - <A::Node.childNodes>::: A <IF::NodeList> containing
964     a new <XE::atom|entry> element node.
965    
966     - <A::Document.xmlVersion>::: <XML::1.0>.
967    
968     }
969    
970     {P:: The newly created <XE::atom|entry> element node <kwd:MUST>
971     have attributes set as:
972    
973     - <A::Node.attributes>::: A <IF::NamedNodeMap> that contains
974     at least a new <XA::xml|lang>
975     attribute node.
976    
977     - <A::Node.childNodes>::: A <IF::NodeList> containing
978     a new <XE::atom|id> element node,
979     a new <XE::atom|title> element node, and
980     a new <XE::atom|updated> element node
981     in any order.
982    
983     }
984    
985     {P:: The newly created <XA::xml|lang> attribute node <kwd:MUST>
986     have attributes set as:
987    
988     - <A::Node.nodeValue>::: <P::lang>.
989    
990     - <A::Attr.specified>::: <DOM::true>.
991    
992     }
993    
994     {P:: The newly created <XE::atom|id> element node <kwd:MUST>
995     have attributes set as:
996    
997     - <A::Node.textContent>::: <P::id>.
998    
999     }
1000    
1001     {P:: The newly created <XE::atom|title> element node <kwd:MUST>
1002     have attributes set as:
1003    
1004     - <A::Node.textContent>::: <P::title>.
1005    
1006     }
1007    
1008     The <XA::type> attribute node <kwd:MUST-NOT> be attached
1009     to the <XE::atom|title> element node.
1010    
1011     {P:: The newly created <XE::atom|updated> element node <kwd:MUST>
1012     have attributes set as:
1013    
1014     - <A::Node.textContent>::: A uppercase RFC 3339 <CODE::date-time>
1015     representation of the time when the method is invoked.
1016     The implementation <kwd:MAY> align its timezone to
1017     that of the environment in which the method is invoked.
1018    
1019     }
1020     @@@PerlDef:
1021     __DEEP{
1022     $r = $self-><M::c|DOMImplementation.createDocument>
1023     (<Q::atom|>, 'entry');
1024     $r-><AS::Document.xmlVersion> ('1.0');
1025    
1026     my $feede = $r-><AG::Document.documentElement>;
1027     $feede-><AS::Node.manakaiLanguage> (defined $lang ? $lang : '');
1028    
1029     $feede-><AS::AtomFeedElement.id> ($id);
1030    
1031     my $titlee = $r-><M::Document.createElementNS> (<Q::atom|>, 'title');
1032     $titlee-><AS::Node.textContent> (defined $title ? $title : '');
1033     $feede-><M::Node.appendChild> ($titlee);
1034    
1035     my $updatede = $r-><M::Document.createElementNS>
1036     (<Q::atom|>, 'updated');
1037     $updatede-><AS::AtomDateConstruct.value> (scalar time);
1038     $feede-><M::Node.appendChild> ($updatede);
1039     }__;
1040    
1041     @@Test:
1042     @@@QName: AtomImplementation.createAtomEntryDocument.test
1043     @@@PerlDef:
1044     my $impl;
1045     __CODE{tc|createImplForTest:: $impl => $impl}__;
1046     $impl = $impl->get_feature (<Q::fe|Atom> => '1.0');
1047    
1048     my $doc = $impl-><M::AtomImplementation.createAtomEntryDocument>
1049     ('about:id', 'entry title', 'en');
1050    
1051     $test->id ('document.interface');
1052     $test->assert_isa ($doc, <IFName::Document>);
1053    
1054     $test->id ('document.xmlVersion');
1055     $test->assert_equals ($doc-><AG::Document.xmlVersion>, '1.0');
1056    
1057     my $feed = $doc-><AG::Document.documentElement>;
1058    
1059     $test->id ('feed.namespaceURI');
1060     $test->assert_equals ($feed-><AG::Node.namespaceURI>, <Q::atom|>);
1061    
1062     $test->id ('feed.localName');
1063     $test->assert_equals ($feed-><AG::Node.localName>, 'entry');
1064    
1065     $test->id ('feed.lang');
1066     $test->assert_equals ($feed-><M::Element.getAttributeNS>
1067     (<Q::xml|>, 'lang'),
1068     'en');
1069    
1070     my $id;
1071     my $title;
1072     my $updated;
1073    
1074     for my $cn (@{$feed-><AG::Node.childNodes>}) {
1075     if ($cn-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
1076     $cn-><AG::Node.namespaceURI> eq <Q::atom|>) {
1077     if ($cn-><AG::Node.localName> eq 'id') {
1078     $id = $cn;
1079     } elsif ($cn-><AG::Node.localName> eq 'title') {
1080     $title = $cn;
1081     } elsif ($cn-><AG::Node.localName> eq 'updated') {
1082     $updated = $cn;
1083     }
1084     }
1085     }
1086    
1087     $test->id ('id');
1088     $test->assert_not_null ($id);
1089    
1090     $test->id ('id.value');
1091     $test->assert_equals ($id-><AG::Node.textContent>, 'about:id');
1092    
1093     $test->id ('title');
1094     $test->assert_not_null ($title);
1095    
1096     $test->id ('title.value');
1097     $test->assert_equals ($title-><AG::Node.textContent>, 'entry title');
1098    
1099     $test->id ('title.type');
1100     $test->assert_null ($title-><M::Element.getAttributeNS> (null, 'type'));
1101    
1102     $test->id ('updated');
1103     $test->assert_not_null ($updated);
1104    
1105     $test->id ('updated.value');
1106     $test->assert_num_not_equals
1107     (actual_value => $updated-><AG::AtomDateConstruct.value>,
1108     expected_value => 0);
1109    
1110     @enImplNote:
1111     @@ddid: imt
1112     @@@:
1113     {ISSUE::
1114     The <CODE::contentType> attribute of the created document
1115     should be set to <CODE::application/atom+xml>?
1116     }
1117    
1118     @CODE:
1119     @@QName: returnChildElement
1120     @@enDesc:
1121     {P:: The algorithm to <DFN::return <VAR::element-type> child
1122     element> of the element node <VAR::E> is defined as:
1123    
1124     = If <VAR::E> contains one or more child element node
1125     whose element type is <VAR::element-type>,
1126     it <kwd:MUST> return the first such element node
1127     in document order.
1128    
1129     {OLI:: Otherwise,
1130    
1131     {OLI:: If the <cfg::cfg|create-child-element> configuration
1132     parameter is set to <DOM::true>,
1133    
1134     = Create an element node <VAR::N> whose element type
1135     is <VAR::element-type>.
1136    
1137     = Append <VAR::N> to <VAR::E> as if the <M::Node.appendChild>
1138     method were called for <VAR::E> with its parameter
1139     set to <VAR::N>. Note that this might throw an exception.
1140    
1141     = Then, <VAR::N> <kwd:MUST> be returned.
1142    
1143     }
1144    
1145     = Otherwise, <DOM::null> <kwd:MUST> be returned.
1146    
1147     }
1148    
1149     }
1150     @@PerlDef:
1151     __DEEP{
1152     E: {
1153     no warnings 'uninitialized';
1154     for my $__el (@{$node-><AG::Node.childNodes>}) {
1155     if ($__el-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
1156     $__el-><AG::Node.localName> eq $localName and
1157     $__el-><AG::Node.namespaceURI> eq $namespaceURI) {
1158     $r = $__el;
1159     last E;
1160     }
1161     }
1162    
1163     my $od = $node-><AG::Node.ownerDocument>;
1164     if ($od-><AG::Document.domConfig>
1165     -><M::CFG.getParameter> (<Q::cfg|create-child-element>)) {
1166     $r = $od-><M::Document.createElementNS> ($namespaceURI, $localName);
1167     $node-><M::Node.appendChild> ($r);
1168     }
1169     } # E
1170     }__;
1171    
1172     @CODE:
1173     @@QName: returnChildElementList
1174     @@enDesc:
1175     {P:: The algorithm to <DFN::return <VAR::element-type> child
1176     element list> of the element node <VAR::E> is defined as:
1177    
1178     = Creates an empty <IF::StaticNodeList> object <VAR::L>
1179     that is <EM::not> read-only.
1180    
1181     = For each child element node of <VAR::E>,
1182     add that element node to <VAR::L> in document order
1183     if its element type is <VAR::element-type>.
1184    
1185     = Returns <VAR::E>.
1186    
1187     }
1188     @@PerlDef:
1189     __DEEP{
1190     no warnings 'uninitialized';
1191     __CODE{tc|createStaticNodeList:: $r => $r}__;
1192     for my $__el (@{$node-><AG::Node.childNodes>}) {
1193     if ($__el-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
1194     $__el-><AG::Node.localName> eq $localName and
1195     $__el-><AG::Node.namespaceURI> eq $namespaceURI) {
1196     push @{$r}, $__el;
1197     }
1198     }
1199     }__;
1200    
1201     @CODE:
1202     @@QName: getReflectStringValue
1203     @@enDesc:
1204     {P:: If a DOM attribute is defined to <DFN::reflect the string value
1205     of the <VAR::element-type> child element> of the node <VAR::E>,
1206     the getter of the attribute <kwd:MUST> return the value
1207     defined by the algorithm:
1208    
1209     = If the <VAR::E> contains a child element node <VAR::C> whose element
1210     type is <VAR::element-type>, it <kwd:MUST> return
1211     the <A::Node.textContent> value of the <VAR::C>.
1212    
1213     = Otherwise, it <kwd:MUST> return <DOM::null>.
1214    
1215     }
1216     @@PerlDef:
1217     __DEEP{
1218     E: {
1219     no warnings 'uninitialized';
1220     for my $__cn (@{$node-><AG::Node.childNodes>}) {
1221     if ($__cn-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
1222     $__cn-><AG::Node.localName> eq $localName and
1223     $__cn-><AG::Node.namespaceURI> eq $namespaceURI) {
1224     $r = $__cn-><AG::Node.textContent>;
1225     last E;
1226     }
1227     }
1228     $r = null;
1229     } # E
1230     }__;
1231    
1232     @CODE:
1233     @@QName: setReflectStringValue
1234     @@enDesc:
1235     {P:: If a DOM attribute is defined to <DFN::reflect the string value
1236     of the <VAR::element-type> child element> of the node <VAR::E>,
1237     the setter of the attribute <kwd:MUST> modify the node as
1238     defined by the algorithm:
1239    
1240     = If the given value is <DOM::null>, any child elements
1241     whose element types are <VAR::element-type> <kwd:MUST>
1242     be removed from the list of child nodes.
1243    
1244     = Otherwise, if there is no <VAR::element-type> child element
1245     node in the child node list of the <VAR::E>, it
1246     <kwd:MUST> create an element node whose element type
1247     is <VAR::element-type>, append it to the <VAR::E> as
1248     if the <M::Node.appendChild> method were invoked, and
1249     set the <A::Node.textContent> of the newly created
1250     element node to the given value.
1251    
1252     = Otherwise, it <kwd:MUST> set the <A::Node.textContent>
1253     of the first <VAR::element-type> child element node
1254     in the child node list of the <VAR::E> to the given value.
1255    
1256     }
1257    
1258     {NOTE::
1259     It might throw an exception.
1260     }
1261     @@PerlDef:
1262     __DEEP{
1263     no warnings 'uninitialized';
1264     if (defined $given) {
1265     my $__target;
1266     E: {
1267     for my $__cl (@{$node-><AG::Node.childNodes>}) {
1268     if ($__cl-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
1269     $__cl-><AG::Node.localName> eq $localName and
1270     $__cl-><AG::Node.namespaceURI> eq $namespaceURI) {
1271     $__target = $__cl;
1272     last E;
1273     }
1274     }
1275    
1276     $__target = $node-><AG::Node.ownerDocument>
1277     -><M::Document.createElementNS>
1278     ($namespaceURI, $localName);
1279     $node-><M::Node.appendChild> ($__target);
1280     } # E
1281    
1282     $__target-><AS::Node.textContent> ($given);
1283     } else {
1284     my @__remove;
1285     for my $__cl (@{$node-><AG::Node.childNodes>}) {
1286     if ($__cl-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
1287     $__cl-><AG::Node.localName> eq $localName and
1288     $__cl-><AG::Node.namespaceURI> eq $namespaceURI) {
1289     push @__remove, $__cl;
1290     }
1291     }
1292     $node-><M::Node.removeChild> ($_) for @__remove;
1293     }
1294     }__;
1295    
1296     @CODE:
1297     @@QName: getReflectAttrStringValue
1298     @@enDesc:
1299     {P:: If a DOM attribute is defined to <DFN::reflect the string value
1300     of the <VAR::attr-name> attribute> of the node <VAR::E>,
1301     the getter of the attribute <kwd:MUST> return the value
1302     defined by the algorithm:
1303    
1304     = If the <VAR::E> contains an attribute node <VAR::A> whose name
1305     is <VAR::attr-name>, it <kwd:MUST> return
1306     the <A::Node.nodeValue> of the <VAR::A>.
1307    
1308     = If a default value is explicitly defined
1309     where this algorithm is referenced, it <kwd:MUST>
1310     return the default value.
1311    
1312     = Otherwise, it <kwd:MUST> return <DOM::null>.
1313    
1314     }
1315     @@PerlDef:
1316     __DEEP{
1317     E: {
1318     $r = $node-><M::Element.getAttributeNS> ($namespaceURI, $localName);
1319     last E if defined $r;
1320    
1321     $r = $defaultValue;
1322     } # E
1323     }__;
1324    
1325     @CODE:
1326     @@QName: setReflectAttrStringValue
1327     @@enDesc:
1328     {P:: If a DOM attribute is defined to <DFN::reflect the string value
1329     of the <VAR::attr-name> attribute> of the node <VAR::E>,
1330     the setter of the attribute <kwd:MUST> modify the node as
1331     defined by the algorithm:
1332    
1333     = If the given value is <DOM::null>, it <kwd:MUST>
1334     remove the <VAR::attr-name> attribute node, if any,
1335     from the list of attribute nodes of <VAR::E>.
1336    
1337     = Otherwise, it <kwd:MUST> set the <VAR::attr-name>
1338     attribute node value to the given value as if
1339     the <M::Element.setAttributeNS> method were invoked.
1340    
1341     }
1342    
1343     {NOTE::
1344     It might throw an exception.
1345     }
1346     @@PerlDef:
1347     __DEEP{
1348     if (defined $given) {
1349     $node-><M::Element.setAttributeNS> ($namespaceURI, $localName, $given);
1350     } else {
1351     $node-><M::Element.removeAttributeNS> ($namespaceURI, $localName);
1352     }
1353     }__;
1354    
1355     @CODE:
1356     @@QName: getReflectURIValue
1357     @@enDesc:
1358     {P:: If a DOM attribute is defined to <DFN::reflect the URI value
1359     of the <VAR::element-type> child element> of the node <VAR::E>,
1360     the getter of the attribute <kwd:MUST> return the value
1361     defined by the algorithm:
1362    
1363     = Get the string <VAR::S> that would be returned
1364     if the DOM attribute <I::reflects the string value
1365     of the <VAR::element-type> child element> of the <VAR::E>.
1366    
1367     = If the <VAR::S> is <DOM::null>, it <kwd:MUST> return
1368     <DOM::null>.
1369    
1370     = Otherwise, if the <A::Node.baseURI> of the node
1371     from which the <VAR::S> comes is <DOM::null>,
1372     it <kwd:MUST> return the <VAR::S>.
1373    
1374     = Otherwise, a string that would be returned by the
1375     <M::urigen|URIReference.getAbsoluteReference>
1376     method on a <IF::urigen|URIReference> object whose
1377     <A::urigen|URIReference.uriReference> value
1378     equals to <A::Node.textContent> with the <CODE::base> parameter
1379     set to the <A::Node.baseURI> of the node
1380     from which the <VAR::S> comes and the <CODE::nonStrict>
1381     parameter set to <DOM::false>.
1382    
1383     }
1384     @@PerlDef:
1385     __DEEP{
1386     E: {
1387     no warnings 'uninitialized';
1388     for my $__cn (@{$node-><AG::Node.childNodes>}) {
1389     if ($__cn-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
1390     $__cn-><AG::Node.localName> eq $localName and
1391     $__cn-><AG::Node.namespaceURI> eq $namespaceURI) {
1392     my $__ref_buri = $__cn-><AG::Node.baseURI>;
1393     if (defined $__ref_buri) {
1394     $r = $node-><AG::Node.ownerDocument>
1395     -><AG::Document.implementation>
1396     -><M::urigen|URIImplementation.createURIReference>
1397     ($__cn-><AG::Node.textContent>)
1398     -><M::urigen|URIReference.getAbsoluteReference>
1399     ($__ref_buri)
1400     -><AG::urigen|URIReference.uriReference>;
1401     } else {
1402     $r = $__cn-><AG::Node.textContent>;
1403     }
1404     last E;
1405     }
1406     }
1407     $r = null;
1408     } # E
1409     }__;
1410    
1411     @CODE:
1412     @@QName: setReflectURIValue
1413     @@enDesc:
1414     If a DOM attribute is defined to <DFN::reflect the URI value
1415     of the <VAR::element-type> child element> of the node <VAR::E>,
1416     the setter of the attribute <kwd:MUST> modify the node as
1417     if the DOM attribute <I::reflects the string value of
1418     the <VAR::element-type> child element> of the <VAR::E>.
1419    
1420     {NOTE::
1421     It might throw an exception.
1422     }
1423     @@PerlDef:
1424     __CODE{setReflectStringValue}__;
1425    
1426     @CODE:
1427     @@QName: getReflectAttrURIValue
1428     @@enDesc:
1429     {P:: If a DOM attribute is defined to <DFN::reflect the URI value
1430     of the <VAR::attr-name> attribute> of the node <VAR::E>,
1431     the getter of the attribute <kwd:MUST> return the value
1432     defined by the algorithm:
1433    
1434     = Get the string <VAR::S> that would be returned
1435     if the DOM attribute <I::reflects the string value
1436     of the <VAR::attr-name> attribute> of the <VAR::E>.
1437    
1438     = If the <VAR::S> is <DOM::null>, it <kwd:MUST> return
1439     <DOM::null>.
1440    
1441     = Otherwise, if the <A::Node.baseURI> of the node
1442     from which the <VAR::S> comes is <DOM::null>,
1443     it <kwd:MUST> return the <VAR::S>.
1444    
1445     = Otherwise, a string that would be returned by the
1446     <M::urigen|URIReference.getAbsoluteReference>
1447     method on a <IF::urigen|URIReference> object whose
1448     <A::urigen|URIReference.uriReference> value
1449     equals to <A::Node.textContent> with the <CODE::base> parameter
1450     set to the <A::Node.baseURI> of the node
1451     from which the <VAR::S> comes and the <CODE::nonStrict>
1452     parameter set to <DOM::false>.
1453    
1454     }
1455     @@PerlDef:
1456     __DEEP{
1457     my $__attr = $node-><M::Element.getAttributeNodeNS>
1458     ($namespaceURI, $localName);
1459     if (defined $__attr) {
1460     my $__attr_base = $__attr-><AG::Node.baseURI>;
1461     if (defined $__attr_base) {
1462     $r = $node-><AG::Node.ownerDocument>
1463     -><AG::Document.implementation>
1464     -><M::urigen|URIImplementation.createURIReference>
1465     ($__attr-><AG::Node.nodeValue>)
1466     -><M::urigen|URIReference.getAbsoluteReference>
1467     ($__attr_base)
1468     -><AG::urigen|URIReference.uriReference>;
1469     } else {
1470     $r = $__attr-><AG::Node.nodeValue>;
1471     }
1472     } else {
1473     $r = null;
1474     }
1475     }__;
1476    
1477     @CODE:
1478     @@QName: setReflectAttrURIValue
1479     @@enDesc:
1480     If a DOM attribute is defined to <DFN::reflect the URI value
1481     of the <VAR::attr-name> attribute> of the node <VAR::E>,
1482     the setter of the DOM attribute <kwd:MUST> modify the node as
1483     if the DOM attribute <I::reflects the string value of
1484     the <VAR::attr-name> attribute> of the <VAR::E>.
1485    
1486     {NOTE::
1487     It might throw an exception.
1488     }
1489     @@PerlDef:
1490     __CODE{setReflectAttrStringValue}__;
1491    
1492     @enImplNote:
1493     @@ddid: datereflect
1494     @@@:
1495     {ISSUE::
1496     <QUOTE::reflecting Date child element> attribute should
1497     be provided for published and created?
1498     }
1499     ##AtomImplementation
1500    
1501     IFClsDef:
1502     @IFQName: AtomDocument
1503     @ClsQName: ManakaiAtomDocument
1504    
1505     @IFISA: Document
1506     @ClsISA: td|ManakaiDOMDocument
1507    
1508     @s:rootElementType: AnyAtomElement||ManakaiDOM|all
1509    
1510     @enDesc:
1511     If the <Feature::fe|Atom> feature version <FeatureVer::1.0>
1512     is supported, a <IF::Document> object whose <A::Document.documentElement>'s
1513     <A::Node.namespaceURI>, if any, is <URI^^DISCore|QName::atom|> at least
1514     at the time of creation <kwd:MUST> also
1515     implement the <IF::AtomDocument> interface. Other
1516     <IF:Document> objects <kwd:MAY> also implement
1517     the <IF::AtomDocument> interface.
1518    
1519     @Test:
1520     @@QName: createDocument.AtomDocument.test
1521     @@PerlDef:
1522     my $impl;
1523     __CODE{tc|createImplForTest:: $impl => $impl}__;
1524    
1525     my $doc = $impl-><M::c|DOMImplementation.createDocument>
1526     (<Q::atom|>, 'unknown');
1527    
1528     $test->id ('interface');
1529     $test->assert_isa ($doc, <IFName::AtomDocument>);
1530     ##AtomDocument
1531    
1532     IFClsDef:
1533     @IFQName: AtomFeedDocument
1534     @ClsQName: ManakaiFeedEntryDocument
1535    
1536     @IFISA: AtomDocument
1537     @ClsISA: ManakaiAtomDocument
1538    
1539     @s:rootElementType:
1540     @@@: atom|feed
1541     @@DISCore:stopISARecursive: 1
1542    
1543     @enDesc:
1544     The <IF::AtomFeedDocument> interface provides convenience
1545     methods and attributes for an Atom
1546     Feed Document, i.e. representation of an Atom feed.
1547    
1548     If the <Feature::fe|Atom> feature version <FeatureVer::1.0>
1549     is supported, a <IF::Document> object whose <A::Document.documentElement>'s
1550     element type, if any, is <XE::atom|feed> at least at
1551     the time of creation <kwd:MUST> also
1552     implement the <IF::AtomFeedDocument> interface. Other
1553     <IF::Document> objects <kwd:MAY> also implement
1554     the <IF::AtomFeedDocument> interface.
1555    
1556     @Test:
1557     @@QName: createDocument.AtomFeedDocument.test
1558     @@PerlDef:
1559     my $impl;
1560     __CODE{tc|createImplForTest:: $impl => $impl}__;
1561    
1562     my $doc = $impl-><M::c|DOMImplementation.createDocument>
1563     (<Q::atom|>, 'feed');
1564    
1565     $test->id ('interface');
1566     $test->assert_isa ($doc, <IFName::AtomFeedDocument>);
1567     ##AtomFeedDocument
1568    
1569     IFClsDef:
1570     @IFQName: AtomEntryDocument
1571     @ClsQName: ManakaiAtomEntryDocument
1572    
1573     @IFISA: AtomDocument
1574     @ClsISA: ManakaiAtomDocument
1575    
1576     @s:rootElementType:
1577     @@@: atom|entry
1578     @@DISCore:stopISARecursive: 1
1579    
1580     @enDesc:
1581     The <IF::AtomEntryDocument> interface provides convenience
1582     methods and attributes for an Atom
1583     Entry Document, i.e. exactly one Atom entry, outside
1584     of the context of an Atom feed.
1585    
1586     If the <Feature::fe|Atom> feature version <FeatureVer::1.0>
1587     is supported, a <IF::Document> object whose <A::Document.documentElement>'s
1588     element type, if any, is <XE::atom|entry> at least at
1589     the time of the creation <kwd:MUST> also
1590     implement the <IF::AtomEntryDocument> interface. Other
1591     <IF::Document> objects <kwd:MAY> also implement
1592     the <IF::AtomEntryDocument> interface.
1593    
1594     @Test:
1595     @@QName: createDocument.AtomEntryDocument.test
1596     @@PerlDef:
1597     my $impl;
1598     __CODE{tc|createImplForTest:: $impl => $impl}__;
1599    
1600     my $doc = $impl-><M::c|DOMImplementation.createDocument>
1601     (<Q::atom|>, 'entry');
1602    
1603     $test->id ('interface');
1604     $test->assert_isa ($doc, <IFName::AtomEntryDocument>);
1605     ##AtomEntryDocument
1606    
1607 wakaba 1.7 AGDef:
1608     @QName: atomCommonAttributes
1609     @enFN: common attributes
1610     @mv:attributeTypeGroupName: common
1611    
1612     @ATDef:
1613     @@mv:attributeTypeName: xml|base
1614     @@mv:attributeValueType: atomUri
1615    
1616     @ATDef:
1617     @@mv:attributeTypeName: xml|lang
1618     @@mv:attributeValueType: atomLanguageTag
1619    
1620 wakaba 1.8 @mv:refers: undefinedAttributes
1621 wakaba 1.7 ##atomCommonAttributes
1622    
1623     STDef:
1624     @QName: atomNCName
1625     @mv:datatypeEntityName: NCName
1626     #subsetOf: xsd|string
1627     #minLength, pattern
1628    
1629     STDef:
1630     @QName: atomMediaType
1631     @mv:datatypeEntityName: MediaType
1632     #subsetOf xsd|string
1633     # pattern
1634    
1635     STDef:
1636     @QName: atomLanguageTag
1637     @mv:datatypeEntityName: LangaugeTag
1638     #subsetOf: xsd|string
1639     #pattern
1640    
1641     STDef:
1642     @QName: atomUri
1643     @mv:datatypeEntityName: URI
1644     #aliasfor text
1645 wakaba 1.9 STCDef:
1646     @QName: atomUriCM
1647     @mv:elementContentModelName: URI
1648     @cm: (dxm|PCDATA||ManakaiDOM|all)*
1649 wakaba 1.7
1650     STDef:
1651     @QName: atomEmailAddress
1652     @mv:datatypeEntityName: EmailAddress
1653     #subsetOf xsd|string
1654     #pattern
1655 wakaba 1.9 STCDef:
1656     @QName: atomEmailAddressCM
1657     @mv:elementContentModelName: EmailAddress
1658     @cm: (dxm|PCDATA||ManakaiDOM|all)*
1659 wakaba 1.7
1660     ElementTypeBinding:
1661     @Name: AGDef
1662     @ElementType:
1663     dis:ResourceDef
1664     @ShadowContent:
1665     @@DISCore:resourceType: mv|AttributeTypeGroup
1666     @@For: =ManakaiDOM|ManakaiDOMLatest
1667    
1668     ElementTypeBinding:
1669     @Name: ATDef
1670     @ElementType:
1671     dis:ResourceDef
1672     @ShadowContent:
1673     @@DISCore:resourceType: mv|AttributeType
1674     @@For: =ManakaiDOM|ManakaiDOMLatest
1675    
1676     ElementTypeBinding:
1677 wakaba 1.8 @Name: ECDef
1678     @ElementType:
1679     dis:ResourceDef
1680     @ShadowContent:
1681     @@DISCore:resourceType: mv|ElementTypeClass
1682     @@For: =ManakaiDOM|ManakaiDOMLatest
1683    
1684     ElementTypeBinding:
1685     @Name: EMDef
1686     @ElementType:
1687     dis:ResourceDef
1688     @ShadowContent:
1689     @@DISCore:resourceType: mv|ElementTypeClassMix
1690     @@For: =ManakaiDOM|ManakaiDOMLatest
1691    
1692     ElementTypeBinding:
1693 wakaba 1.7 @Name: STDef
1694     @ElementType:
1695     dis:ResourceDef
1696     @ShadowContent:
1697     @@DISCore:resourceType: mv|XMLDTDDatatypeEntity
1698     @@For: =ManakaiDOM|ManakaiDOMLatest
1699    
1700 wakaba 1.9 ElementTypeBinding:
1701     @Name: STCDef
1702     @ElementType:
1703     dis:ResourceDef
1704     @ShadowContent:
1705     @@DISCore:resourceType: mv|ElementContentModel
1706     @@For: =ManakaiDOM|ManakaiDOMLatest
1707    
1708 wakaba 1.1 IFClsDef:
1709     @IFQName: AtomElement
1710     @ClsQName: ManakaiAtomElement
1711    
1712     @IFISA: Element
1713     @ClsISA: te|ManakaiDOMElement
1714    
1715     @s:elementType: AnyAtomElement||ManakaiDOM|all
1716    
1717     @enDesc:
1718     The <IF::AtomElement> interface provides convenience
1719     methods and attributes for Atom elements.
1720    
1721     If the <Feature::fe|Atom> feature version <FeatureVer::1.0>
1722     is supported, an <IF::Element> object whose namespace URI
1723     is <URI^^DIS|QName::atom|> <kwd:MUST> also implement
1724     the <IF::AtomElement> interface. Other <IF::Element> objects
1725     <kwd:MAY> also implement the <IF::AtomElement> interface.
1726    
1727     @enImplNote:
1728     @@ddid: todo
1729     @@@:
1730     {TODO::
1731     Need <CODE::xmllang> and <CODE::xmlbase> attributes
1732     from SVG?
1733     }
1734    
1735     @Test:
1736     @@QName: AtomElement.interface.test
1737     @@PerlDef:
1738     for my $interface (
1739     <IFName::AtomElement>,
1740     <IFName::AtomElement||ManakaiDOM|ManakaiDOM>,
1741     <IFName::Element>,
1742     <IFName::Node>,
1743     <IFName::f|GetFeature>,
1744     ) {
1745     $test->id ($interface);
1746     $test->assert_true (<Class::ManakaiAtomElement>->isa ($interface));
1747     }
1748     @Test:
1749     @@QName: createElementNS.AtomElement.test
1750     @@PerlDef:
1751     my $doc;
1752     __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
1753    
1754     my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'unknown');
1755     $test->assert_isa ($el, <IFName::AtomElement>);
1756     ##AtomElement
1757    
1758     ResourceDef:
1759     @QName: AnyAtomElement
1760     @DISCore:resourceType: s|AnyElementInNS
1761     @AppName:
1762     @@@: atom|*
1763     @@ContentType: DISCore|QName
1764     @ForCheck: =ManakaiDOM|all
1765    
1766 wakaba 1.9 ElementTypeBinding:
1767     @Name: cm
1768     @ElementType:
1769     mv:elementContentModel
1770     @ShadowContent:
1771     @@ContentType: lang|dcmodel
1772    
1773 wakaba 1.6 IFClsConstructDef:
1774 wakaba 1.1 @IFQName: AtomTextConstruct
1775     @ClsQName: ManakaiAtomTextConstruct
1776 wakaba 1.6 @AGQName: TextAG
1777     @AGName: text
1778     @CMQName: TextCM
1779     @CMName: text
1780 wakaba 1.1
1781     @IFISA: AtomElement
1782     @ClsISA: ManakaiAtomElement
1783    
1784 wakaba 1.10 @mv:refers: atomCommonAttributes
1785    
1786 wakaba 1.9 @cm:
1787     dxm|ANY||ManakaiDOM|all
1788     @enImplNote:
1789     @@ddid:cm
1790     @@@:
1791     {TODO::
1792     (dxm|PCDATA||ManakaiDOM|all | html|div)*
1793     }
1794    
1795 wakaba 1.1 @enDesc:
1796     The <IF::AtomTextConstruct> interface provides convenience
1797     methods and attributes for <IF::Element> nodes
1798     classfied to the Text constructs. Other <IF::Element>
1799     objects <kwd:MAY> also implement the <IF::AtomTextConstruct>
1800     interface.
1801    
1802     A Text construct contains human-readable text, usually in
1803 wakaba 1.7 small quantities. The content of a Text construct is
1804 wakaba 1.1 Language-Sensitive.
1805    
1806 wakaba 1.6 @ATTR:
1807 wakaba 1.1 @@Name: type
1808     @@enDesc:
1809     The <XA::type> attribute of the element.
1810    
1811     It <kwd:MUST> <I::reflect the string value
1812     of the <XA::type> attribute> of the node. The
1813     default value <kwd:MUST> be <CODE::text>.
1814     @@Type: DOMString
1815     @@Get:
1816     @@@nullCase:
1817     @@@@enDesc:
1818     If the algorithm returns <DOM::null>.
1819     @@@PerlDef:
1820     __CODE{getReflectAttrStringValue::
1821     $node => $self,
1822     $namespaceURI => {null},
1823     $localName => 'type',
1824     $r => $r,
1825     $defaultValue => 'text',
1826     }__;
1827     @@Set:
1828     @@@nullCase:
1829     @@@@enDesc:
1830     Removes the attribute.
1831     @@@NodeReadOnlyError:
1832     @@@PerlDef:
1833     __CODE{setReflectAttrStringValue::
1834     $node => $self,
1835     $namespaceURI => {null},
1836     $localName => 'type',
1837     $given => $given,
1838     }__;
1839    
1840     @Attr:
1841     @@Name: container
1842     @@enDesc:
1843     The container element that contains the actual content
1844     of the construct.
1845     @@Type: Element
1846     @@Get:
1847     @@@enDesc:
1848     If the <A::AtomTextConstruct.type> is <CODE::xhtml>,
1849     the getter <kwd:MUST> <I::return the <XE::html|div> child element>.
1850     Otherwise, the object itself <kwd:MUST> be returned.
1851     @@@nullCase:
1852     @@@@enDesc:
1853     If the <A::AtomTextConstruct.type> is <CODE::xhtml>
1854     and the algorithm returns <DOM::null>.
1855     @@@NodeReadOnlyError:
1856     @@@PerlDef:
1857     __DEEP{
1858     my $type = $self-><AG::AtomTextConstruct.type>;
1859     if ($type eq 'xhtml') {
1860     __CODE{returnChildElement::
1861     $node => $self,
1862     $namespaceURI => {<Q::html|>},
1863     $localName => 'div',
1864     $r => $r,
1865     }__;
1866     } else {
1867     $r = $self;
1868     }
1869     }__;
1870    
1871     @@Test:
1872     @@@QName: AtomTextConstruct.container.test
1873     @@@PerlDef:
1874     my $doc;
1875     __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
1876    
1877     my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'title');
1878    
1879     $test->id ('no');
1880     $test->assert_equals ($el-><AG::AtomTextConstruct.container>, $el);
1881    
1882     $test->id ('text');
1883     $el-><AS::AtomTextConstruct.type> ('text');
1884     $test->assert_equals ($el-><AG::AtomTextConstruct.container>, $el);
1885    
1886     $test->id ('html');
1887     $el-><AS::AtomTextConstruct.type> ('html');
1888     $test->assert_equals ($el-><AG::AtomTextConstruct.container>, $el);
1889    
1890     $test->id ('xhtml');
1891     $el-><AS::AtomTextConstruct.type> ('xhtml');
1892     $test->assert_null ($el-><AG::AtomTextConstruct.container>);
1893    
1894     $doc-><AG::Document.domConfig>
1895     -><M::CFG.setParameter> (<Q::cfg|create-child-element> => true);
1896     my $con = $el-><AG::AtomTextConstruct.container>;
1897    
1898     $test->id ('xhtml.create');
1899     $test->assert_not_equals ($con, $el);
1900    
1901     $test->id ('xhtml.namespaceURI');
1902     $test->assert_equals ($con-><AG::Node.namespaceURI>, <Q::html|>);
1903    
1904     $test->id ('xhtml.localName');
1905     $test->assert_equals ($con-><AG::Node.localName>, 'div');
1906    
1907     $test->id ('xhtml.parentNode');
1908     $test->assert_equals ($con-><AG::Node.parentNode>, $el);
1909    
1910     $test->id ('xhtml.2');
1911     $test->assert_equals ($el-><AG::AtomTextConstruct.container>, $con);
1912     ##AtomTextConstruct
1913    
1914 wakaba 1.6 IFClsConstructDef:
1915 wakaba 1.1 @IFQName: AtomPersonConstruct
1916     @ClsQName: ManakaiAtomPersonConstruct
1917 wakaba 1.6 @AGQName: PersonAG
1918     @AGName: person
1919     @CMQName: PersonCM
1920     @CMName: person
1921 wakaba 1.1
1922     @IFISA: AtomElement
1923     @ClsISA: ManakaiAtomElement
1924    
1925 wakaba 1.10 @mv:refers: atomCommonAttributes
1926    
1927 wakaba 1.9 @cm:
1928     (person-prop+)
1929    
1930 wakaba 1.1 @enDesc:
1931     The <IF::AtomPersonConstruct> interface provides convenience
1932     methods and attributes for <IF::Element> nodes
1933     classfied to the Person constructs. Other <IF::Element>
1934     objects <kwd:MAY> also implement the <IF::AtomPersonConstruct>
1935     interface.
1936    
1937     A Person construct is an element that describes a person,
1938     corporation, or similar entity.
1939    
1940     @Attr:
1941     @@Name: name
1942     @@enDesc:
1943     The <XE::atom|name> value of the feed.
1944    
1945     It <kwd:MUST> <I::reflect the string value
1946     of the <XE::atom|name> child element> of the node.
1947     @@Type: DOMString
1948     @@Get:
1949     @@@nullCase:
1950     @@@@enDesc:
1951     If the algorithm returns <DOM::null>.
1952     @@@NodeReadOnlyError:
1953     @@@PerlDef:
1954     __CODE{getReflectStringValue::
1955     $node => $self,
1956     $namespaceURI => {<Q::atom|>},
1957     $localName => 'name',
1958     $r => $r,
1959     }__;
1960     @@Set:
1961     @@@nullCase:
1962     @@@@enDesc:
1963     Removes the value.
1964     @@@NodeReadOnlyError:
1965     @@@PerlDef:
1966     __CODE{setReflectStringValue::
1967     $node => $self,
1968     $namespaceURI => {<Q::atom|>},
1969     $localName => 'name',
1970     $given => $given,
1971     }__;
1972    
1973     @Attr:
1974     @@Name: nameElement
1975     @@enDesc:
1976     The <XE::atom|name> child element of the node.
1977 wakaba 1.7 @@Type: AtomNameElement
1978 wakaba 1.1 @@Get:
1979     @@@enDesc:
1980     It <kwd:MUST> <I::return a <XE::atom|name> child element>
1981     of the node.
1982     @@@nullCase:
1983     @@@@enDesc:
1984     If the algorithm returns <DOM::null>.
1985     @@@NodeReadOnlyError:
1986     @@@PerlDef:
1987     __CODE{returnChildElement::
1988     $node => $self,
1989     $namespaceURI => {<Q::atom|>},
1990     $localName => 'name',
1991     $r => $r,
1992     }__;
1993    
1994     @Attr:
1995     @@Name: uri
1996     @@enDesc:
1997     The <XE::atom|uri> value of the feed.
1998    
1999     It <kwd:MUST> <I::reflect the URI value
2000     of the <XE::atom|uri> child element> of the node.
2001     @@Type: DOMString
2002     @@actualType: DOMURI
2003     @@Get:
2004     @@@nullCase:
2005     @@@@enDesc:
2006     If the algorithm returns <DOM::null>.
2007     @@@NodeReadOnlyError:
2008     @@@PerlDef:
2009     __CODE{getReflectURIValue::
2010     $node => $self,
2011     $namespaceURI => {<Q::atom|>},
2012     $localName => 'uri',
2013     $r => $r,
2014     }__;
2015     @@Set:
2016     @@@nullCase:
2017     @@@@enDesc:
2018     Removes the value.
2019     @@@NodeReadOnlyError:
2020     @@@PerlDef:
2021     __CODE{setReflectURIValue::
2022     $node => $self,
2023     $namespaceURI => {<Q::atom|>},
2024     $localName => 'uri',
2025     $given => $given,
2026     }__;
2027    
2028     @Attr:
2029     @@Name: email
2030     @@enDesc:
2031     The <XE::atom|email> value of the feed.
2032    
2033     It <kwd:MUST> <I::reflect the string value
2034     of the <XE::atom|email> child element> of the node.
2035     @@Type: DOMString
2036     @@Get:
2037     @@@nullCase:
2038     @@@@enDesc:
2039     If the algorithm returns <DOM::null>.
2040     @@@NodeReadOnlyError:
2041     @@@PerlDef:
2042     __CODE{getReflectStringValue::
2043     $node => $self,
2044     $namespaceURI => {<Q::atom|>},
2045     $localName => 'email',
2046     $r => $r,
2047     }__;
2048     @@Set:
2049     @@@nullCase:
2050     @@@@enDesc:
2051     Removes the value.
2052     @@@NodeReadOnlyError:
2053     @@@PerlDef:
2054     __CODE{setReflectStringValue::
2055     $node => $self,
2056     $namespaceURI => {<Q::atom|>},
2057     $localName => 'email',
2058     $given => $given,
2059     }__;
2060     ##AtomPersonConstruct
2061    
2062 wakaba 1.8 ECDef:
2063     @QName: person-prop
2064     @mv:elementTypeClassName: person-prop
2065     @mv:refers: atom|name
2066     @mv:refers: atom|uri
2067     @mv:refers: atom|email
2068     @mv:refers: extensionElements
2069    
2070 wakaba 1.6 IFClsConstructDef:
2071 wakaba 1.1 @IFQName: AtomDateConstruct
2072     @ClsQName: ManakaiAtomDateConstruct
2073 wakaba 1.6 @AGQName: DateAG
2074     @AGName: date
2075     @CMQName: DateCM
2076     @CMName: date
2077 wakaba 1.1
2078     @IFISA: AtomElement
2079     @ClsISA: ManakaiAtomElement
2080    
2081 wakaba 1.10 @mv:refers: atomCommonAttributes
2082    
2083 wakaba 1.9 @cm:
2084     (dxm|PCDATA||ManakaiDOM|all)*
2085     @enImplNote:
2086     @@ddid: cm
2087     @@@:
2088     {TODO::
2089     xsd|dateTime
2090     }
2091    
2092 wakaba 1.1 @enDesc:
2093     The <IF::AtomDateConstruct> interface provides convenience
2094     methods and attributes for <IF::Element> nodes
2095     classfied to the Date constructs. Other <IF::Element>
2096     objects <kwd:MAY> also implement the <IF::AtomDateConstruct>
2097     interface.
2098    
2099     A Date construct is an element whose content is a date that
2100     conforms to the uppercase version of the RFC 3339 format.
2101    
2102     @Attr:
2103     @@Name: value
2104     @@enDesc:
2105     The date value of the node.
2106    
2107     {ISSUE::
2108    
2109     - Out of range of platform DOMTimeStamp type
2110    
2111     - Errorous xsd:dateTime
2112    
2113     - Leap seconds
2114    
2115     - Timezone
2116    
2117     - Precision
2118    
2119     }
2120     @@Type: DOMTimeStamp
2121     @@Get:
2122     @@@enDesc:
2123     {TODO:: Define
2124     }
2125     @@@PerlDef:
2126     my $value = $self-><AG::Node.textContent>;
2127     if ($value =~ /\A(\d+)-(\d+)-(\d+)T(\d+):(\d+):(\d+)(\.\d+)?
2128     (?:Z|([+-]\d+):(\d+))\z/x) {
2129     require Time::Local;
2130     $r = Time::Local::timegm_nocheck
2131     ($6, defined $8 ? $8 > 0 ? $5 - $9 : $5 + $9 : $5,
2132     defined $8 ? $4 - $8 : $4, $3, $2-1, $1-1900);
2133     $r += "0$7" if defined $7;
2134     } else {
2135     $r = 0;
2136     }
2137     @@Set:
2138     @@@enDesc:
2139     {TODO:: Define
2140     }
2141     @@@NodeReadOnlyError:
2142     @@@PerlDef:
2143     __DEEP{
2144     my @value = gmtime (int ($given / 1));
2145     my $value = sprintf '%04d-%02d-%02dT%02d:%02d:%02d',
2146     $value[5] + 1900, $value[4] + 1,
2147     $value[3], $value[2], $value[1], $value[0];
2148     my $f = $given % 1;
2149     $value .= substr (''.$f, 1) if $f;
2150     $value .= 'Z';
2151     $self-><AS::Node.textContent> ($value);
2152     }__;
2153    
2154     @enImplNote:
2155     @@ddid: todo
2156     @@@:
2157     {TODO::
2158     Access to components, especially timezone and -00:00.
2159     }
2160     ##AtomDateConstruct
2161    
2162 wakaba 1.8 ECDef:
2163     @QName: feed-prop
2164     @mv:elementTypeClassName: feed-prop
2165     @mv:refers: atom|author
2166     @mv:refers: atom|category
2167     @mv:refers: atom|contributor
2168     @mv:refers: atom|generator
2169     @mv:refers: atom|icon
2170     @mv:refers: atom|id
2171     @mv:refers: atom|link
2172     @mv:refers: atom|logo
2173     @mv:refers: atom|rights
2174     @mv:refers: atom|subtitle
2175     @mv:refers: atom|title
2176     @mv:refers: atom|updated
2177     @mv:refers: extensionElements
2178    
2179 wakaba 1.1 IFClsETDef:
2180     @IFQName: AtomFeedElement
2181     @ETQName: atom|feed
2182     @ETRQName: atom|feed
2183     @ClsQName: ManakaiAtomFeedElement
2184    
2185     @IFISA: AtomElement
2186     @ClsISA: ManakaiAtomElement
2187    
2188 wakaba 1.10 @mv:refers: atomCommonAttributes
2189    
2190 wakaba 1.9 @cm:
2191     (feed-prop+, atom|entry*)
2192    
2193 wakaba 1.1 @enDesc:
2194     The <XE::atom|feed> element is the document element
2195     of an Atom Feed Document.
2196 wakaba 1.3
2197     {ISSUE::
2198     <XE::atom|entry> children <kwd:MUST> be placed after
2199     any other elements. Attributes creating children
2200     should insert them before any entries?
2201     }
2202 wakaba 1.1
2203     @Attr:
2204     @@Name: authorElements
2205     @@enDesc:
2206     A static list of <XE::atom|author> child elements of the node.
2207     @@Type: StaticNodeList
2208     @@Get:
2209     @@@enDesc:
2210     It <kwd:MUST> <I::return a <XE::atom|author> child element list>
2211     of the node.
2212     @@@PerlDef:
2213     __CODE{returnChildElementList::
2214     $node => $self,
2215     $namespaceURI => {<Q::atom|>},
2216     $localName => 'author',
2217     $r => $r,
2218     }__;
2219    
2220     @@Test:
2221     @@@QName: AtomFeedElement.authorElements.empty.test
2222     @@@PerlDef:
2223     my $doc;
2224     __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
2225    
2226     my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'feed');
2227    
2228     my $list = $el-><AG::AtomFeedElement.authorElements>;
2229    
2230     $test->id ('interface');
2231     $test->assert_isa ($list, <IFName::StaticNodeList>);
2232    
2233     $test->id ('length');
2234     $test->assert_num_equals
2235     (actual_value => 0+@{$list}, expected_value => 0);
2236    
2237     $test->id ('readOnly');
2238     $test->assert_false ($list-><AG::NodeList.manakaiReadOnly>);
2239     @@Test:
2240     @@@QName: AtomFeedElement.authorElements.two.test
2241     @@@PerlDef:
2242     my $doc;
2243     __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
2244    
2245     my $e1 = $doc-><M::Document.createElementNS> (<Q::atom|>, 'feed');
2246     my $a1 = $doc-><M::Document.createElementNS> (<Q::atom|>, 'author');
2247     $e1-><M::Node.appendChild> ($a1);
2248     my $a2 = $doc-><M::Document.createElementNS> (<Q::atom|>, 'author');
2249     $e1-><M::Node.appendChild> ($a2);
2250    
2251     my $list = $e1-><AG::AtomFeedElement.authorElements>;
2252     my $a3 = $doc-><M::Document.createElementNS> (<Q::atom|>, 'author');
2253     $e1-><M::Node.appendChild> ($a3);
2254    
2255     $test->id ('length');
2256     $test->assert_num_equals
2257     (actual_value => 0+@{$list}, expected_value => 2);
2258    
2259     $test->id (0);
2260     $test->assert_equals ($list->[0], $a1);
2261    
2262     $test->id (1);
2263     $test->assert_equals ($list->[1], $a2);
2264    
2265     @Attr:
2266     @@Name: categoryElements
2267     @@enDesc:
2268     A static list of <XE::atom|category> child elements of the node.
2269     @@Type: StaticNodeList
2270     @@Get:
2271     @@@enDesc:
2272     It <kwd:MUST> <I::return a <XE::atom|category> child element list>
2273     of the node.
2274     @@@PerlDef:
2275     __CODE{returnChildElementList::
2276     $node => $self,
2277     $namespaceURI => {<Q::atom|>},
2278     $localName => 'category',
2279     $r => $r,
2280     }__;
2281    
2282     @Attr:
2283     @@Name: contributorElements
2284     @@enDesc:
2285     A static list of <XE::atom|contributor> child elements of the node.
2286     @@Type: StaticNodeList
2287     @@Get:
2288     @@@enDesc:
2289     It <kwd:MUST> <I::return a <XE::atom|contributor> child element list>
2290     of the node.
2291     @@@PerlDef:
2292     __CODE{returnChildElementList::
2293     $node => $self,
2294     $namespaceURI => {<Q::atom|>},
2295     $localName => 'contributor',
2296     $r => $r,
2297     }__;
2298    
2299     @Attr:
2300     @@Name: generatorElement
2301     @@enDesc:
2302     The <XE::atom|generator> child element of the node.
2303     @@Type: AtomGeneratorElement
2304     @@Get:
2305     @@@enDesc:
2306     It <kwd:MUST> <I::return a <XE::atom|generator> child element>
2307     of the node.
2308     @@@nullCase:
2309     @@@@enDesc:
2310     If the algorithm returns <DOM::null>.
2311     @@@NodeReadOnlyError:
2312     @@@PerlDef:
2313     __CODE{returnChildElement::
2314     $node => $self,
2315     $namespaceURI => {<Q::atom|>},
2316     $localName => 'generator',
2317     $r => $r,
2318     }__;
2319    
2320     @@Test:
2321     @@@QName: AtomFeedElement.generatorElement.test
2322     @@@PerlDef:
2323     my $doc;
2324     __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
2325    
2326     my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'feed');
2327    
2328     $test->id ('no');
2329     $test->assert_null ($el-><AG::AtomFeedElement.generatorElement>);
2330    
2331     $doc-><AG::Document.domConfig>
2332     -><M::CFG.setParameter> (<Q::cfg|create-child-element> => true);
2333     my $ge = $el-><AG::AtomFeedElement.generatorElement>;
2334    
2335     $test->id ('create.interface');
2336     $test->assert_isa ($ge, <IFName::Element>);
2337    
2338     $test->id ('create.namespaceURI');
2339     $test->assert_equals ($ge-><AG::Node.namespaceURI>, <Q::atom|>);
2340    
2341     $test->id ('create.localName');
2342     $test->assert_equals ($ge-><AG::Node.localName>, 'generator');
2343    
2344     $test->id ('has');
2345     my $ge2 = $el-><AG::AtomFeedElement.generatorElement>;
2346     $test->assert_equals ($ge2, $ge);
2347    
2348     $test->id ('multiple');
2349     $el-><M::Node.appendChild>
2350     ($doc-><M::Document.createElementNS> (<Q::atom|>, 'generator'));
2351     my $ge3 = $el-><AG::AtomFeedElement.generatorElement>;
2352     $test->assert_equals ($ge3, $ge);
2353    
2354     @Attr:
2355     @@Name: icon
2356     @@enDesc:
2357     The <XE::atom|icon> value of the feed.
2358    
2359     It <kwd:MUST> <I::reflect the URI value
2360     of the <XE::atom|icon> child element> of the node.
2361     @@Type: DOMString
2362     @@actualType: DOMURI
2363     @@Get:
2364     @@@nullCase:
2365     @@@@enDesc:
2366     If the algorithm returns <DOM::null>.
2367     @@@NodeReadOnlyError:
2368     @@@PerlDef:
2369     __CODE{getReflectURIValue::
2370     $node => $self,
2371     $namespaceURI => {<Q::atom|>},
2372     $localName => 'icon',
2373     $r => $r,
2374     }__;
2375     @@Set:
2376     @@@nullCase:
2377     @@@@enDesc:
2378     Removes the value.
2379     @@@NodeReadOnlyError:
2380     @@@PerlDef:
2381     __CODE{setReflectURIValue::
2382     $node => $self,
2383     $namespaceURI => {<Q::atom|>},
2384     $localName => 'icon',
2385     $given => $given,
2386     }__;
2387    
2388     @@Test:
2389     @@@QName: AtomFeedElement.icon.test
2390     @@@PerlDef:
2391     my $doc;
2392     __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
2393    
2394     my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'feed');
2395    
2396     $test->id ('default');
2397     $test->assert_null ($el-><AG::AtomFeedElement.icon>);
2398    
2399     $test->id ('set');
2400     $el-><AS::AtomFeedElement.icon> ('http://example.com/');
2401     $test->assert_equals ($el-><AG::AtomFeedElement.icon>,
2402     'http://example.com/');
2403    
2404     $test->id ('relative');
2405     $el-><AS::AtomFeedElement.icon> ('favicon.ico');
2406     $test->assert_equals ($el-><AG::AtomFeedElement.icon>,
2407     'favicon.ico');
2408    
2409     $test->id ('relative.base');
2410     $el-><M::Element.setAttributeNS> (<Q::xml:>, 'xml:base',
2411     'http://www.example.com/');
2412     $test->assert_equals ($el-><AG::AtomFeedElement.icon>,
2413     'http://www.example.com/favicon.ico');
2414    
2415     $test->id ('multiple');
2416     $el-><M::Node.appendChild>
2417     ($doc-><M::Document.createElementNS> (<Q::atom|>, 'icon'))
2418     -><AS::Node.textContent> ('/default.ico'); # ignored
2419     $test->assert_equals ($el-><AG::AtomFeedElement.icon>,
2420     'http://www.example.com/favicon.ico');
2421    
2422     $test->id ('remove');
2423     $el-><AS::AtomFeedElement.icon> (null);
2424     $test->assert_null ($el-><AG::AtomFeedElement.icon>);
2425    
2426     @Attr:
2427     @@Name: id
2428     @@enDesc:
2429     The <XE::atom|id> value of the feed.
2430    
2431     It <kwd:MUST> <I::reflect the string value
2432     of the <XE::atom|id> child element> of the node.
2433     @@Type: DOMString
2434     @@actualType: DOMURI
2435     @@Get:
2436     @@@nullCase:
2437     @@@@enDesc:
2438     If the algorithm returns <DOM::null>.
2439     @@@NodeReadOnlyError:
2440     @@@PerlDef:
2441     __CODE{getReflectStringValue::
2442     $node => $self,
2443     $namespaceURI => {<Q::atom|>},
2444     $localName => 'id',
2445     $r => $r,
2446     }__;
2447     @@Set:
2448     @@@nullCase:
2449     @@@@enDesc:
2450     Removes the value.
2451     @@@NodeReadOnlyError:
2452     @@@PerlDef:
2453     __CODE{setReflectStringValue::
2454     $node => $self,
2455     $namespaceURI => {<Q::atom|>},
2456     $localName => 'id',
2457     $given => $given,
2458     }__;
2459    
2460     @@Test:
2461     @@@QName: AtomFeedElement.id.test
2462     @@@PerlDef:
2463     my $doc;
2464     __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
2465    
2466     my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'feed');
2467    
2468     $test->id ('default');
2469     $test->assert_null ($el-><AG::AtomFeedElement.id>);
2470    
2471     $test->id ('set');
2472     $el-><AS::AtomFeedElement.id> ('http://example.com/');
2473     $test->assert_equals ($el-><AG::AtomFeedElement.id>,
2474     'http://example.com/');
2475    
2476     $test->id ('relative');
2477     $el-><AS::AtomFeedElement.id> ('favicon.ico');
2478     $test->assert_equals ($el-><AG::AtomFeedElement.id>,
2479     'favicon.ico');
2480    
2481     $test->id ('relative.base');
2482     $el-><M::Element.setAttributeNS> (<Q::xml:>, 'xml:base',
2483     'http://www.example.com/');
2484     $test->assert_equals ($el-><AG::AtomFeedElement.id>,
2485     'favicon.ico');
2486    
2487     $test->id ('multiple');
2488     $el-><M::Node.appendChild>
2489     ($doc-><M::Document.createElementNS> (<Q::atom|>, 'id'))
2490     -><AS::Node.textContent> ('/default.ico'); # ignored
2491     $test->assert_equals ($el-><AG::AtomFeedElement.id>,
2492     'favicon.ico');
2493    
2494     $test->id ('remove');
2495     $el-><AS::AtomFeedElement.id> (null);
2496     $test->assert_null ($el-><AG::AtomFeedElement.id>);
2497    
2498     @Attr:
2499     @@Name: linkElements
2500     @@enDesc:
2501     A static list of <XE::atom|link> child elements of the node.
2502     @@Type: StaticNodeList
2503     @@Get:
2504     @@@enDesc:
2505     It <kwd:MUST> <I::return a <XE::atom|link> child element list>
2506     of the node.
2507     @@@PerlDef:
2508     __CODE{returnChildElementList::
2509     $node => $self,
2510     $namespaceURI => {<Q::atom|>},
2511     $localName => 'link',
2512     $r => $r,
2513     }__;
2514    
2515     @Attr:
2516     @@Name: logo
2517     @@enDesc:
2518     The <XE::atom|logo> value of the feed.
2519    
2520     It <kwd:MUST> <I::reflect the URI value
2521     of the <XE::atom|logo> child element> of the node.
2522     @@Type: DOMString
2523     @@actualType: DOMURI
2524     @@Get:
2525     @@@nullCase:
2526     @@@@enDesc:
2527     If the algorithm returns <DOM::null>.
2528     @@@NodeReadOnlyError:
2529     @@@PerlDef:
2530     __CODE{getReflectURIValue::
2531     $node => $self,
2532     $namespaceURI => {<Q::atom|>},
2533     $localName => 'logo',
2534     $r => $r,
2535     }__;
2536     @@Set:
2537     @@@nullCase:
2538     @@@@enDesc:
2539     Removes the value.
2540     @@@NodeReadOnlyError:
2541     @@@PerlDef:
2542     __CODE{setReflectURIValue::
2543     $node => $self,
2544     $namespaceURI => {<Q::atom|>},
2545     $localName => 'logo',
2546     $given => $given,
2547     }__;
2548    
2549     @Attr:
2550     @@Name: rightsElement
2551     @@enDesc:
2552     The <XE::atom|rights> child element of the node.
2553     @@Type: AtomRightsElement
2554     @@Get:
2555     @@@enDesc:
2556     It <kwd:MUST> <I::return a <XE::atom|rights> child element>
2557     of the node.
2558     @@@nullCase:
2559     @@@@enDesc:
2560     If the algorithm returns <DOM::null>.
2561     @@@NodeReadOnlyError:
2562     @@@PerlDef:
2563     __CODE{returnChildElement::
2564     $node => $self,
2565     $namespaceURI => {<Q::atom|>},
2566     $localName => 'rights',
2567     $r => $r,
2568     }__;
2569    
2570     @Attr:
2571     @@Name: subtitleElement
2572     @@enDesc:
2573     The <XE::atom|subtitle> child element of the node.
2574     @@Type: AtomSubtitleElement
2575     @@Get:
2576     @@@enDesc:
2577     It <kwd:MUST> <I::return a <XE::atom|subtitle> child element>
2578     of the node.
2579     @@@nullCase:
2580     @@@@enDesc:
2581     If the algorithm returns <DOM::null>.
2582     @@@NodeReadOnlyError:
2583     @@@PerlDef:
2584     __CODE{returnChildElement::
2585     $node => $self,
2586     $namespaceURI => {<Q::atom|>},
2587     $localName => 'subtitle',
2588     $r => $r,
2589     }__;
2590    
2591     @Attr:
2592     @@Name: titleElement
2593     @@enDesc:
2594     The <XE::atom|title> child element of the node.
2595     @@Type: AtomTitleElement
2596     @@Get:
2597     @@@enDesc:
2598     It <kwd:MUST> <I::return a <XE::atom|title> child element>
2599     of the node.
2600     @@@nullCase:
2601     @@@@enDesc:
2602     If the algorithm returns <DOM::null>.
2603     @@@NodeReadOnlyError:
2604     @@@PerlDef:
2605     __CODE{returnChildElement::
2606     $node => $self,
2607     $namespaceURI => {<Q::atom|>},
2608     $localName => 'title',
2609     $r => $r,
2610     }__;
2611    
2612     @Attr:
2613     @@Name: updatedElement
2614     @@enDesc:
2615     The <XE::atom|updated> child element of the node.
2616     @@Type: AtomUpdatedElement
2617     @@Get:
2618     @@@enDesc:
2619     It <kwd:MUST> <I::return a <XE::atom|updated> child element>
2620     of the node.
2621     @@@nullCase:
2622     @@@@enDesc:
2623     If the algorithm returns <DOM::null>.
2624     @@@NodeReadOnlyError:
2625     @@@PerlDef:
2626     __CODE{returnChildElement::
2627     $node => $self,
2628     $namespaceURI => {<Q::atom|>},
2629     $localName => 'updated',
2630     $r => $r,
2631     }__;
2632    
2633     @Attr:
2634     @@Name: entryElements
2635     @@enDesc:
2636     A static list of <XE::atom|entry> child elements of the node.
2637     @@Type: StaticNodeList
2638     @@Get:
2639     @@@enDesc:
2640     It <kwd:MUST> <I::return a <XE::atom|entry> child element list>
2641     of the node.
2642     @@@PerlDef:
2643     __CODE{returnChildElementList::
2644     $node => $self,
2645     $namespaceURI => {<Q::atom|>},
2646     $localName => 'entry',
2647     $r => $r,
2648     }__;
2649    
2650     @Method:
2651     @@Name: getEntryElementById
2652     @@enDesc:
2653     Returns an <XE::atom|entry> node selected by its <XE::atom|id>.
2654     @@Param:
2655     @@@Name: idArg
2656     @@@Type: DOMString
2657     @@@actualType: DOMURI
2658     @@@enDesc:
2659     The identifier of the entry.
2660     @@Return:
2661     @@@Type: AtomEntryElement
2662     @@@enDesc:
2663     The <XE::atom|entry> element whose identifier equals to
2664     <P::id>.
2665    
2666     It <kwd:MUST> return the first child element node in document
2667     order whose element type is <XE::atom|entry> and
2668     whose first child element node in document order
2669     with element type <XE::atom|id> has <A::Node.textContent>
2670     equals to <P::id>, if any, or <DOM::null>.
2671     @@@nullCase:
2672     @@@@enDesc:
2673     If no matching element.
2674     @@@PerlDef:
2675     E: {
2676     no warnings 'uninitialized';
2677     for my $cn (@{$self-><AG::Node.childNodes>}) {
2678     if ($cn-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
2679     $cn-><AG::Node.localName> eq 'entry' and
2680     $cn-><AG::Node.namespaceURI> eq <Q::atom|>) {
2681     if ($cn-><AG::AtomEntryElement.id> eq $idArg) {
2682     $r = $cn;
2683     last E;
2684     }
2685     }
2686     }
2687     } # E
2688    
2689     @Method:
2690     @@Name: addNewEntry
2691     @@enDesc:
2692     Creates an <XA::atom|entry> element node and
2693     appends to the node.
2694     @@Param:
2695     @@@Name: id
2696     @@@Type: DOMString
2697     @@@actualType: DOMURI
2698     @@@enDesc:
2699     The <XE::atom|id> of the entry.
2700     @@Param:
2701     @@@Name: title
2702     @@@Type: DOMString
2703     @@@enDesc:
2704     The <XE::atom|title> of the entry.
2705     @@@nullCase:
2706     @@@@enDesc:
2707     The implementation <kwd:MUST> treate <DOM::null>
2708     as if an empty string is specified.
2709     @@Param:
2710     @@@Name: lang
2711     @@@Type: DOMString
2712     @@@enDesc:
2713     The natural language of the entry.
2714     @@@nullCase:
2715     @@@@enDesc:
2716     No explicit language specification is added.
2717     @@Return:
2718     @@@Type: AtomEntryElement
2719     @@@enDesc:
2720     The newly created <XE::atom|entry> element.
2721    
2722     {P:: The newly created <XE::atom|entry> element node <kwd:MUST>
2723     have attributes set as:
2724    
2725     - <A::Node.attributes>::: A <IF::NamedNodeMap> that contains
2726     at least a new <XA::xml|lang>
2727     attribute node except when
2728     the <P::lang> parameter is set
2729     to <DOM::null>.
2730    
2731     - <A::Node.childNodes>::: A <IF::NodeList> containing
2732     a new <XE::atom|id> element node,
2733     a new <XE::atom|title> element node, and
2734     a new <XE::atom|updated> element node
2735     in any order.
2736    
2737     }
2738    
2739     This element node <kwd:MUST> be appended to the node
2740     as if the <M::Node.appendChild> method were invoked
2741     on the node and <kwd:MUST> be returned by the method.
2742     Note that an exception might be thrown during this course.
2743    
2744     {P:: The <XA::xml|lang> attribute node, if created, <kwd:MUST>
2745     have attributes set as:
2746    
2747     - <A::Node.nodeValue>::: <P::lang>.
2748    
2749     - <A::Attr.specified>::: <DOM::true>.
2750    
2751     }
2752    
2753     {P:: The newly created <XE::atom|id> element node <kwd:MUST>
2754     have attributes set as:
2755    
2756     - <A::Node.textContent>::: <P::id>.
2757    
2758     }
2759    
2760     {P:: The newly created <XE::atom|title> element node <kwd:MUST>
2761     have attributes set as:
2762    
2763     - <A::Node.textContent>::: <P::title>.
2764    
2765     }
2766    
2767     The <XA::type> attribute node <kwd:MUST-NOT> be attached
2768     to the <XE::atom|title> element node.
2769    
2770     {P:: The newly created <XE::atom|updated> element node <kwd:MUST>
2771     have attributes set as:
2772    
2773     - <A::Node.textContent>::: A uppercase RFC 3339 <CODE::date-time>
2774     representation of the time when the method is invoked.
2775     The implementation <kwd:MAY> align its timezone to
2776     that of the environment in which the method is invoked.
2777    
2778     }
2779     @@@PerlDef:
2780     __DEEP{
2781     my $od = $self-><AG::Node.ownerDocument>;
2782    
2783     $r = $od-><M::Document.createElementNS> (<Q::atom|>, 'entry');
2784     $r-><AS::Node.manakaiLanguage> ($lang) if defined $lang;
2785    
2786     $r-><AS::AtomFeedElement.id> ($id);
2787    
2788     my $titlee = $od-><M::Document.createElementNS> (<Q::atom|>, 'title');
2789     $titlee-><AS::Node.textContent> (defined $title ? $title : '');
2790     $r-><M::Node.appendChild> ($titlee);
2791    
2792     my $updatede = $od-><M::Document.createElementNS>
2793     (<Q::atom|>, 'updated');
2794     $updatede-><AS::AtomDateConstruct.value> (scalar time);
2795     $r-><M::Node.appendChild> ($updatede);
2796     }__;
2797    
2798     @@Test:
2799     @@@QName: AtomFeedElement.addNewEntry.1.test
2800     @@@PerlDef:
2801     my $doc;
2802     __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
2803    
2804     my $feed = $doc-><M::Document.createElementNS> (<Q::atom|>, 'feed');
2805    
2806     my $ent = $feed-><M::AtomFeedElement.addNewEntry>
2807     ('about:id', 'entry title', 'en');
2808    
2809     $test->id ('entry.interface');
2810     $test->assert_isa ($ent, <IFName::AtomEntryElement>);
2811    
2812     $test->id ('entry.namespaceURI');
2813     $test->assert_equals ($ent-><AG::Node.namespaceURI>, <Q::atom|>);
2814    
2815     $test->id ('entry.localName');
2816     $test->assert_equals ($ent-><AG::Node.localName>, 'entry');
2817    
2818     $test->id ('entry.lang');
2819     $test->assert_equals ($ent-><M::Element.getAttributeNS>
2820     (<Q::xml|>, 'lang'),
2821     'en');
2822    
2823     my $id;
2824     my $title;
2825     my $updated;
2826    
2827     for my $cn (@{$ent-><AG::Node.childNodes>}) {
2828     if ($cn-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
2829     $cn-><AG::Node.namespaceURI> eq <Q::atom|>) {
2830     if ($cn-><AG::Node.localName> eq 'id') {
2831     $id = $cn;
2832     } elsif ($cn-><AG::Node.localName> eq 'title') {
2833     $title = $cn;
2834     } elsif ($cn-><AG::Node.localName> eq 'updated') {
2835     $updated = $cn;
2836     }
2837     }
2838     }
2839    
2840     $test->id ('id');
2841     $test->assert_not_null ($id);
2842    
2843     $test->id ('id.value');
2844     $test->assert_equals ($id-><AG::Node.textContent>, 'about:id');
2845    
2846     $test->id ('title');
2847     $test->assert_not_null ($title);
2848    
2849     $test->id ('title.value');
2850     $test->assert_equals ($title-><AG::Node.textContent>, 'entry title');
2851    
2852     $test->id ('title.type');
2853     $test->assert_null ($title-><M::Element.getAttributeNS> (null, 'type'));
2854    
2855     $test->id ('updated');
2856     $test->assert_not_null ($updated);
2857    
2858     $test->id ('updated.value');
2859     $test->assert_num_not_equals
2860     (actual_value => $updated-><AG::AtomDateConstruct.value>,
2861     expected_value => 0);
2862     @@Test:
2863     @@@QName: AtomFeedElement.addNewEntry.2.test
2864     @@@enDesc:
2865     <DOM::null> <CODE::lang>.
2866     @@@PerlDef:
2867     my $doc;
2868     __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
2869    
2870     my $feed = $doc-><M::Document.createElementNS> (<Q::atom|>, 'feed');
2871    
2872     my $ent = $feed-><M::AtomFeedElement.addNewEntry>
2873     ('about:id', 'entry title', null);
2874    
2875     $test->id ('entry.lang');
2876     $test->assert_null ($ent-><M::Element.getAttributeNS>
2877     (<Q::xml|>, 'lang'));
2878     ##AtomFeedElement
2879    
2880 wakaba 1.8 ECDef:
2881     @QName: entry-prop
2882     @mv:elementTypeClassName: entry-prop
2883     @mv:refers: atom|author
2884     @mv:refers: atom|category
2885     @mv:refers: atom|content
2886     @mv:refers: atom|contributor
2887     @mv:refers: atom|id
2888     @mv:refers: atom|link
2889     @mv:refers: atom|published
2890     @mv:refers: atom|rights
2891     @mv:refers: atom|source
2892     @mv:refers: atom|summary
2893     @mv:refers: atom|title
2894     @mv:refers: atom|updated
2895     @mv:refers: extensionElements
2896    
2897 wakaba 1.1 IFClsETDef:
2898     @IFQName: AtomEntryElement
2899     @ETQName: atom|entry
2900     @ETRQName: atom|entry
2901     @ClsQName: ManakaiAtomEntryElement
2902    
2903     @IFISA: AtomElement
2904     @ClsISA: ManakaiAtomElement
2905    
2906 wakaba 1.10 @mv:refers: atomCommonAttributes
2907    
2908 wakaba 1.9 @cm:
2909     (entry-prop+)
2910    
2911 wakaba 1.1 @enDesc:
2912     The <XE::atom|entry> element represents an individual
2913     entry, acting as a container for metadata and data
2914     associated with the entry.
2915    
2916     @Attr:
2917     @@Name: authorElements
2918     @@enDesc:
2919     A static list of <XE::atom|author> child elements of the node.
2920     @@Type: StaticNodeList
2921     @@Get:
2922     @@@enDesc:
2923     It <kwd:MUST> <I::return a <XE::atom|author> child element list>
2924     of the node.
2925     @@@disDef:
2926     @@@@dlp:cloneCode: ManakaiAtomFeedElement.authorElements.get
2927    
2928     @Attr:
2929     @@Name: entryAuthorElements
2930     @@enDesc:
2931     A static list of <XE::atom|author> elements for the node.
2932     @@Type: StaticNodeList
2933     @@Get:
2934     @@@enDesc:
2935     = If the node contains one or more <XE::atom|author>
2936     element node in its child node list, then it
2937     <kwd:MUST> return a <IF::StaticNodeList> that
2938     would be returned by the <A::AtomEntryElement.authorElements>
2939     attribute of the node.
2940    
2941     = Otherwise, if the node contains a <XE::atom|source>
2942     element node in its child node list, then it
2943     <kwd:MUST> return a <IF::StaticNodeList> that
2944     would be returned by the <A::AtomSourceElement.authorElements>
2945     attribute of that node, unless its <A::NodeList.length>
2946     is zero.
2947    
2948     = Otherwise, if the <A::Node.parentNode> of the
2949     node is a <XE::atom|feed> element node, then
2950     it <kwd:MUST> return a <IF::StaticNodeList> that
2951     would be returned by the <A::AtomFeedElement.authorElements>
2952     attribute of that node.
2953    
2954     = Otherwise, it <kwd:MUST> return a <IF::StaticNodeList>
2955     whose <A::NodeList.length> is zero.
2956     @@@PerlDef:
2957     __DEEP{
2958     E: {
2959     no warnings 'uninitialized';
2960     __CODE{tc|createStaticNodeList:: $r => $r}__;
2961    
2962     my $source;
2963     for my $cn (@{$self-><AG::Node.childNodes>}) {
2964     if ($cn-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
2965     $cn-><AG::Node.namespaceURI> eq <Q::atom|>) {
2966     if ($cn-><AG::Node.localName> eq 'author') {
2967     push @{$r}, $cn;
2968     } elsif ($cn-><AG::Node.localName> eq 'source') {
2969     $source = $cn;
2970     }
2971     }
2972     }
2973     last E unless @{$r} == 0;
2974    
2975     if (defined $source) {
2976     $r = $source-><AG::AtomSourceElement.authorElements>;
2977     }
2978     last E unless @{$r} == 0;
2979    
2980     my $parent = $self-><AG::Node.parentNode>;
2981     if (defined $parent and
2982     $parent-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
2983     $parent-><AG::Node.namespaceURI> eq <Q::atom|> and
2984     $parent-><AG::Node.localName> eq 'feed') {
2985     $r = $parent-><AG::AtomFeedElement.authorElements>;
2986     }
2987     } # E
2988     }__;
2989    
2990     @@Test:
2991     @@@QName: AtomEntryElement.entryAuthorElements.1.test
2992     @@@PerlDef:
2993     my $doc;
2994     __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
2995    
2996     my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'entry');
2997    
2998    
2999     $test->id ('empty');
3000     my $list = $el-><AG::AtomEntryElement.entryAuthorElements>;
3001     $test->assert_num_equals (actual_value => 0+@$list, expected_value => 0);
3002    
3003     $test->id ('one');
3004     $el-><M::Node.appendChild>
3005     ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3006     $list = $el-><AG::AtomEntryElement.entryAuthorElements>;
3007     $test->assert_num_equals (actual_value => 0+@$list, expected_value => 1);
3008    
3009     $test->id ('source');
3010     for ($el-><M::Node.appendChild>
3011     ($doc-><M::Document.createElementNS>
3012     (<Q::atom|>, 'source'))) {
3013     $_-><M::Node.appendChild>
3014     ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3015     $_-><M::Node.appendChild>
3016     ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3017     }
3018     $list = $el-><AG::AtomEntryElement.entryAuthorElements>;
3019     $test->assert_num_equals (actual_value => 0+@$list, expected_value => 1);
3020    
3021     $test->id ('parent');
3022     for ($doc-><M::Document.createElementNS> (<Q::atom|>, 'feed')) {
3023     $_-><M::Node.appendChild>
3024     ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3025     $_-><M::Node.appendChild>
3026     ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3027     $_-><M::Node.appendChild>
3028     ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3029     $_-><M::Node.appendChild> ($el);
3030     }
3031     $list = $el-><AG::AtomEntryElement.entryAuthorElements>;
3032     $test->assert_num_equals (actual_value => 0+@$list, expected_value => 1);
3033     @@Test:
3034     @@@QName: AtomEntryElement.entryAuthorElements.2.test
3035     @@@PerlDef:
3036     my $doc;
3037     __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
3038    
3039     my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'entry');
3040    
3041     $test->id ('source');
3042     for ($el-><M::Node.appendChild>
3043     ($doc-><M::Document.createElementNS>
3044     (<Q::atom|>, 'source'))) {
3045     $_-><M::Node.appendChild>
3046     ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3047     $_-><M::Node.appendChild>
3048     ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3049     }
3050     my $list = $el-><AG::AtomEntryElement.entryAuthorElements>;
3051     $test->assert_num_equals (actual_value => 0+@$list, expected_value => 2);
3052    
3053     $test->id ('parent');
3054     for ($doc-><M::Document.createElementNS> (<Q::atom|>, 'feed')) {
3055     $_-><M::Node.appendChild>
3056     ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3057     $_-><M::Node.appendChild>
3058     ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3059     $_-><M::Node.appendChild>
3060     ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3061     $_-><M::Node.appendChild> ($el);
3062     }
3063     $list = $el-><AG::AtomEntryElement.entryAuthorElements>;
3064     $test->assert_num_equals (actual_value => 0+@$list, expected_value => 2);
3065     @@Test:
3066     @@@QName: AtomEntryElement.entryAuthorElements.3.test
3067     @@@PerlDef:
3068     my $doc;
3069     __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
3070    
3071     my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'entry');
3072    
3073     $test->id ('source');
3074     for ($el-><M::Node.appendChild>
3075     ($doc-><M::Document.createElementNS>
3076     (<Q::atom|>, 'source'))) {
3077     # empty
3078     }
3079     my $list = $el-><AG::AtomEntryElement.entryAuthorElements>;
3080     $test->assert_num_equals (actual_value => 0+@$list, expected_value => 0);
3081    
3082     $test->id ('parent');
3083     for ($doc-><M::Document.createElementNS> (<Q::atom|>, 'feed')) {
3084     $_-><M::Node.appendChild>
3085     ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3086     $_-><M::Node.appendChild>
3087     ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3088     $_-><M::Node.appendChild>
3089     ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3090     $_-><M::Node.appendChild> ($el);
3091     }
3092     $list = $el-><AG::AtomEntryElement.entryAuthorElements>;
3093     $test->assert_num_equals (actual_value => 0+@$list, expected_value => 3);
3094     @@Test:
3095     @@@QName: AtomEntryElement.entryAuthorElements.4.test
3096     @@@PerlDef:
3097     my $doc;
3098     __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
3099    
3100     my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'entry');
3101    
3102     $test->id ('parent');
3103     for ($doc-><M::Document.createElementNS> (<Q::atom|>, 'feed')) {
3104     $_-><M::Node.appendChild>
3105     ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3106     $_-><M::Node.appendChild>
3107     ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3108     $_-><M::Node.appendChild>
3109     ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3110     $_-><M::Node.appendChild> ($el);
3111     }
3112     my $list = $el-><AG::AtomEntryElement.entryAuthorElements>;
3113     $test->assert_num_equals (actual_value => 0+@$list, expected_value => 3);
3114    
3115     @Attr:
3116     @@Name: categoryElements
3117     @@enDesc:
3118     A static list of <XE::atom|category> child elements of the node.
3119     @@Type: StaticNodeList
3120     @@Get:
3121     @@@enDesc:
3122     It <kwd:MUST> <I::return a <XE::atom|category> child element list>
3123     of the node.
3124     @@@disDef:
3125     @@@@dlp:cloneCode: ManakaiAtomFeedElement.categoryElements.get
3126 wakaba 1.2
3127     @Attr:
3128     @@Name: contentElement
3129     @@enDesc:
3130     The <XE::atom|content> child element of the node.
3131     @@Type: AtomContentElement
3132     @@Get:
3133     @@@enDesc:
3134     It <kwd:MUST> <I::return a <XE::atom|content> child element>
3135     of the node.
3136     @@@nullCase:
3137     @@@@enDesc:
3138     If the algorithm returns <DOM::null>.
3139     @@@NodeReadOnlyError:
3140     @@@PerlDef:
3141     __CODE{returnChildElement::
3142     $node => $self,
3143     $namespaceURI => {<Q::atom|>},
3144     $localName => 'content',
3145     $r => $r,
3146     }__;
3147 wakaba 1.1
3148     @Attr:
3149     @@Name: contributorElements
3150     @@enDesc:
3151     A static list of <XE::atom|contributor> child elements of the node.
3152     @@Type: StaticNodeList
3153     @@Get:
3154     @@@enDesc:
3155     It <kwd:MUST> <I::return a <XE::atom|contributor> child element list>
3156     of the node.
3157     @@@disDef:
3158     @@@@dlp:cloneCode: ManakaiAtomFeedElement.contributorElements.get
3159    
3160     @Attr:
3161     @@Name: id
3162     @@enDesc:
3163     The <XE::atom|id> value of the feed.
3164    
3165     It <kwd:MUST> <I::reflect the string value
3166     of the <XE::atom|id> child element> of the node.
3167     @@Type: DOMString
3168     @@actualType: DOMURI
3169     @@Get:
3170     @@@nullCase:
3171     @@@@enDesc:
3172     If the algorithm returns <DOM::null>.
3173     @@@NodeReadOnlyError:
3174     @@@disDef:
3175     @@@@dlp:cloneCode: ManakaiAtomFeedElement.id.get
3176     @@Set:
3177     @@@nullCase:
3178     @@@@enDesc:
3179     Removes the value.
3180     @@@NodeReadOnlyError:
3181     @@@disDef:
3182     @@@@dlp:cloneCode: ManakaiAtomFeedElement.id.set
3183    
3184     @Attr:
3185     @@Name: linkElements
3186     @@enDesc:
3187     A static list of <XE::atom|link> child elements of the node.
3188     @@Type: StaticNodeList
3189     @@Get:
3190     @@@enDesc:
3191     It <kwd:MUST> <I::return a <XE::atom|link> child element list>
3192     of the node.
3193     @@@disDef:
3194     @@@@dlp:cloneCode: ManakaiAtomFeedElement.linkElements.get
3195    
3196     @Attr:
3197     @@Name: publishedElement
3198     @@enDesc:
3199     The <XE::atom|published> child element of the node.
3200     @@Type: AtomPublishedElement
3201     @@Get:
3202     @@@enDesc:
3203     It <kwd:MUST> <I::return a <XE::atom|published> child element>
3204     of the node.
3205     @@@nullCase:
3206     @@@@enDesc:
3207     If the algorithm returns <DOM::null>.
3208     @@@NodeReadOnlyError:
3209     @@@PerlDef:
3210     __CODE{returnChildElement::
3211     $node => $self,
3212     $namespaceURI => {<Q::atom|>},
3213     $localName => 'published',
3214     $r => $r,
3215     }__;
3216    
3217     @Attr:
3218     @@Name: rightsElement
3219     @@enDesc:
3220     The <XE::atom|rights> child element of the node.
3221     @@Type: AtomRightsElement
3222     @@Get:
3223     @@@enDesc:
3224     It <kwd:MUST> <I::return a <XE::atom|rights> child element>
3225     of the node.
3226     @@@nullCase:
3227     @@@@enDesc:
3228     If the algorithm returns <DOM::null>.
3229     @@@NodeReadOnlyError:
3230     @@@disDef:
3231     @@@@dlp:cloneCode: ManakaiAtomFeedElement.rightsElement.get
3232    
3233     @Attr:
3234     @@Name: entryRightsElement
3235     @@enDesc:
3236     The <XE::atom|rights> element for the node.
3237     @@Type: AtomRightsElement
3238     @@Get:
3239     @@@enDesc:
3240     = If the node contains a <XE::atom|rights>
3241     element node in its child node list, then it
3242     <kwd:MUST> return the first such a node in document order.
3243    
3244     = Otherwise, if the <A::Node.parentNode> of the
3245     node is a <XE::atom|feed> element node, then
3246     it <kwd:MUST> return an <IF::AtomRightsElement>
3247     that would be returned by the <A::AtomFeedElement.rightsElement>
3248     attribute of that node, except when it is <DOM::null>.
3249    
3250     {OLI:: Otherwise,
3251    
3252     {OLI:: If the <cfg::cfg|create-child-element> configuration
3253     parameter is set to <DOM::true>,
3254    
3255     = Create an element node <VAR::N> whose element type
3256     is <XE::atom|rights>.
3257    
3258     = Append <VAR::N> to this node as if the <M::Node.appendChild>
3259     method were called for the node with its parameter
3260     set to <VAR::N>. Note that this might throw an exception.
3261    
3262     = Then, <VAR::N> <kwd:MUST> be returned.
3263    
3264     }
3265    
3266     = Otherwise, it <kwd:MUST> return <DOM::null>.
3267     }
3268     @@@nullCase:
3269     @@@@enDesc:
3270     If the algorithm returns <DOM::null>.
3271     @@@NodeReadOnlyError:
3272     @@@PerlDef:
3273     __DEEP{
3274     E: {
3275     no warnings 'uninitialized';
3276     for my $cn (@{$self-><AG::Node.childNodes>}) {
3277     if ($cn-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
3278     $cn-><AG::Node.localName> eq 'rights' and
3279     $cn-><AG::Node.namespaceURI> eq <Q::atom|>) {
3280     $r = $cn;
3281     last E;
3282     }
3283     }
3284    
3285     my $parent = $self-><AG::Node.parentNode>;
3286     if (defined $parent and
3287     $parent-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
3288     $parent-><AG::Node.namespaceURI> eq <Q::atom|> and
3289     $parent-><AG::Node.localName> eq 'feed') {
3290     for my $cn (@{$parent-><AG::Node.childNodes>}) {
3291     if ($cn-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
3292     $cn-><AG::Node.localName> eq 'rights' and
3293     $cn-><AG::Node.namespaceURI> eq <Q::atom|>) {
3294     $r = $cn;
3295     last E;
3296     }
3297     }
3298     }
3299    
3300     my $od = $self-><AG::Node.ownerDocument>;
3301     if ($od-><AG::Document.domConfig>
3302     -><M::CFG.getParameter> (<Q::cfg|create-child-element>)) {
3303     $r = $od-><M::Document.createElementNS> (<Q::atom|>, 'rights');
3304     $self-><M::Node.appendChild> ($r);
3305     }
3306     } # E
3307     }__;
3308    
3309     @@Test:
3310     @@@QName: AtomEntryElement.entryRightsElement.1.test
3311     @@@PerlDef:
3312     my $doc;
3313     __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
3314    
3315     my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'entry');
3316    
3317     $test->id ('no');
3318     my $rights = $el-><AG::AtomEntryElement.entryRightsElement>;
3319     $test->assert_null ($rights);
3320    
3321     $doc-><AG::Document.domConfig>
3322     -><M::CFG.setParameter> (<Q::cfg|create-child-element> => true);
3323    
3324     $rights = $el-><AG::AtomEntryElement.entryRightsElement>;
3325    
3326     $test->id ('created.namespaceURI');
3327     $test->assert_equals ($rights-><AG::Node.namespaceURI>, <Q::atom|>);
3328    
3329     $test->id ('created.localName');
3330     $test->assert_equals ($rights-><AG::Node.localName>, 'rights');
3331    
3332     $test->id ('created.parentNode');
3333     $test->assert_equals ($rights-><AG::Node.parentNode>, $el);
3334    
3335     $test->id ('get');
3336     my $rights2 = $el-><AG::AtomEntryElement.entryRightsElement>;
3337     $test->assert_equals ($rights2, $rights);
3338     @@Test:
3339     @@@QName: AtomEntryElement.entryRightsElement.2.test
3340     @@@PerlDef:
3341     my $doc;
3342     __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
3343    
3344     my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'entry');
3345    
3346     my $feed = $doc-><M::Document.createElementNS> (<Q::atom|>, 'feed');
3347     $feed-><M::Node.appendChild> ($el);
3348     my $rights = $doc-><M::Document.createElementNS> (<Q::atom|>, 'rights');
3349     $feed-><M::Node.appendChild> ($rights);
3350    
3351     $test->id ('get');
3352     my $rights2 = $el-><AG::AtomEntryElement.entryRightsElement>;
3353     $test->assert_equals ($rights2, $rights);
3354    
3355     @Attr:
3356     @@Name: sourceElement
3357     @@enDesc:
3358     The <XE::atom|source> child element of the node.
3359     @@Type: AtomSourceElement
3360     @@Get:
3361     @@@enDesc:
3362     It <kwd:MUST> <I::return a <XE::atom|source> child element>
3363     of the node.
3364     @@@nullCase:
3365     @@@@enDesc:
3366     If the algorithm returns <DOM::null>.
3367     @@@NodeReadOnlyError:
3368     @@@PerlDef:
3369     __CODE{returnChildElement::
3370     $node => $self,
3371     $namespaceURI => {<Q::atom|>},
3372     $localName => 'source',
3373     $r => $r,
3374     }__;
3375    
3376     @Attr:
3377     @@Name: summaryElement
3378     @@enDesc:
3379     The <XE::atom|summary> child element of the node.
3380     @@Type: AtomSummaryElement
3381     @@Get:
3382     @@@enDesc:
3383     It <kwd:MUST> <I::return a <XE::atom|summary> child element>
3384     of the node.
3385     @@@nullCase:
3386     @@@@enDesc:
3387     If the algorithm returns <DOM::null>.
3388     @@@NodeReadOnlyError:
3389     @@@PerlDef:
3390     __CODE{returnChildElement::
3391     $node => $self,
3392     $namespaceURI => {<Q::atom|>},
3393     $localName => 'summary',
3394     $r => $r,
3395     }__;
3396    
3397     @Attr:
3398     @@Name: titleElement
3399     @@enDesc:
3400     The <XE::atom|title> child element of the node.
3401     @@Type: AtomTitleElement
3402     @@Get:
3403     @@@enDesc:
3404     It <kwd:MUST> <I::return a <XE::atom|title> child element>
3405     of the node.
3406     @@@nullCase:
3407     @@@@enDesc:
3408     If the algorithm returns <DOM::null>.
3409     @@@NodeReadOnlyError:
3410     @@@disDef:
3411     @@@@dlp:cloneCode: ManakaiAtomFeedElement.titleElement.get
3412    
3413     @Attr:
3414     @@Name: updatedElement
3415     @@enDesc:
3416     The <XE::atom|updated> child element of the node.
3417     @@Type: AtomUpdatedElement
3418     @@Get:
3419     @@@enDesc:
3420     It <kwd:MUST> <I::return a <XE::atom|updated> child element>
3421     of the node.
3422     @@@nullCase:
3423     @@@@enDesc:
3424     If the algorithm returns <DOM::null>.
3425     @@@NodeReadOnlyError:
3426     @@@disDef:
3427     @@@@dlp:cloneCode: ManakaiAtomFeedElement.updatedElement.get
3428     ##AtomEntryElement
3429    
3430     IFClsETDef:
3431 wakaba 1.7 @IFQName: AtomIdElement
3432     @ETQName: atom|id
3433     @ETRQName: atom|id
3434     @ClsQName: ManakaiAtomIdElement
3435    
3436     @IFISA: AtomElement
3437     @ClsISA: ManakaiAtomElement
3438 wakaba 1.10
3439     @mv:refers: atomCommonAttributes
3440 wakaba 1.9
3441     @cm: atomUriCM
3442 wakaba 1.7 ##AtomIdElement
3443    
3444     IFClsETDef:
3445 wakaba 1.8 @IFQName: AtomIconElement
3446     @ETQName: atom|icon
3447     @ETRQName: atom|icon
3448     @ClsQName: ManakaiAtomIconElement
3449    
3450     @IFISA: AtomElement
3451     @ClsISA: ManakaiAtomElement
3452 wakaba 1.9
3453 wakaba 1.10 @mv:refers: atomCommonAttributes
3454    
3455 wakaba 1.9 @cm: atomUriCM
3456 wakaba 1.8 ##AtomIconElement
3457    
3458     IFClsETDef:
3459 wakaba 1.7 @IFQName: AtomNameElement
3460     @ETQName: atom|name
3461     @ETRQName: atom|name
3462     @ClsQName: ManakaiAtomNameElement
3463    
3464     @IFISA: AtomElement
3465     @ClsISA: ManakaiAtomElement
3466 wakaba 1.9
3467 wakaba 1.10 # no common attribs
3468 wakaba 1.9 @cm: TextCM
3469 wakaba 1.7 ##AtomNameElement
3470    
3471     IFClsETDef:
3472     @IFQName: AtomUriElement
3473     @ETQName: atom|uri
3474     @ETRQName: atom|uri
3475     @ClsQName: ManakaiAtomUriElement
3476    
3477     @IFISA: AtomElement
3478     @ClsISA: ManakaiAtomElement
3479 wakaba 1.9
3480 wakaba 1.10 # no common attribs
3481 wakaba 1.9 @cm: atomUriCM
3482 wakaba 1.7 ##AtomUriElement
3483    
3484     IFClsETDef:
3485     @IFQName: AtomEmailElement
3486     @ETQName: atom|email
3487     @ETRQName: atom|email
3488     @ClsQName: ManakaiAtomEmailElement
3489    
3490     @IFISA: AtomElement
3491     @ClsISA: ManakaiAtomElement
3492 wakaba 1.9
3493 wakaba 1.10 # no common attribs
3494 wakaba 1.9 @cm: atomEmailAddressCM
3495 wakaba 1.7 ##AtomEmailElement
3496    
3497     IFClsETDef:
3498 wakaba 1.8 @IFQName: AtomLogoElement
3499     @ETQName: atom|logo
3500     @ETRQName: atom|logo
3501     @ClsQName: ManakaiAtomLogoElement
3502    
3503     @IFISA: AtomElement
3504     @ClsISA: ManakaiAtomElement
3505 wakaba 1.9
3506 wakaba 1.10 @mv:refers: atomCommonAttributes
3507    
3508 wakaba 1.9 @cm: atomUriCM
3509 wakaba 1.8 ##AtomLogoElement
3510    
3511     IFClsETDef:
3512 wakaba 1.1 @IFQName: AtomContentElement
3513     @ETQName: atom|content
3514 wakaba 1.6 @ETRQName: atom|content
3515 wakaba 1.1 @ClsQName: ManakaiAtomContentElement
3516    
3517     @IFISA: AtomElement
3518     @ClsISA: ManakaiAtomElement
3519    
3520 wakaba 1.10 @mv:refers: atomCommonAttributes
3521    
3522 wakaba 1.9 @cm:
3523     dxm|ANY||ManakaiDOM|all
3524    
3525 wakaba 1.1 @enDesc:
3526     The <XE::atom|content> element either contains or links to
3527     the content of the entry.
3528    
3529     @Attr:
3530     @@Name: type
3531     @@enDesc:
3532     The type of the element.
3533    
3534     It <kwd:MUST> <I::reflect the string value
3535     of the <XA::type> attribute> of the node. It default
3536     value <kwd:MUST> be <CODE::text> if and only if
3537     there is no <XA::src> attribute on the node.
3538     @@Type: DOMString
3539     @@Get:
3540     @@@nullCase:
3541     @@@@enDesc:
3542     If the algorithm returns <DOM::null>.
3543     @@@PerlDef:
3544     __CODE{getReflectAttrStringValue::
3545     $node => $self,
3546     $namespaceURI => {null},
3547     $localName => 'type',
3548     $r => $r,
3549     $defaultValue => {
3550     $self-><M::Element.hasAttributeNS> (null, 'src') ? null : 'text'
3551     },
3552     }__;
3553     @@Set:
3554     @@@nullCase:
3555     @@@@enDesc:
3556     Removes the attribute.
3557     @@@NodeReadOnlyError:
3558     @@@PerlDef:
3559     __CODE{setReflectAttrStringValue::
3560     $node => $self,
3561     $namespaceURI => {null},
3562     $localName => 'type',
3563     $given => $given,
3564     }__;
3565    
3566     @@Test:
3567     @@@QName: AtomContentElement.type.test
3568     @@@PerlDef:
3569     my $doc;
3570     __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
3571    
3572     my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'content');
3573    
3574     $test->id ('default.no.src');
3575     $test->assert_equals ($el-><AG::AtomContentElement.type>, 'text');
3576    
3577     $test->id ('default.src');
3578     $el-><AS::AtomContentElement.src> ('http://atom.example/');
3579     $test->assert_null ($el-><AG::AtomContentElement.type>);
3580    
3581     $test->id ('set.xhtml');
3582     $el-><AS::AtomContentElement.type> ('xhtml');
3583     $test->assert_equals ($el-><AG::AtomContentElement.type>, 'xhtml');
3584    
3585     $test->id ('set.imt');
3586     $el-><AS::AtomContentElement.type> ('application/xml');
3587     $test->assert_equals ($el-><AG::AtomContentElement.type>,
3588     'application/xml');
3589    
3590     $test->id ('remove');
3591     $el-><AS::AtomContentElement.type> (null);
3592     $test->assert_null ($el-><AG::AtomContentElement.type>);
3593    
3594     @Attr:
3595     @@Name: src
3596     @@enDesc:
3597     The source of the remote content of the element.
3598    
3599     It <kwd:MUST> <I::reflect the string value
3600     of the <XA::src> attribute> of the node.
3601     @@Type: DOMString
3602     @@Type: DOMURI
3603     @@Get:
3604     @@@nullCase:
3605     @@@@enDesc:
3606     If the algorithm returns <DOM::null>.
3607     @@@PerlDef:
3608     __CODE{getReflectAttrURIValue::
3609     $node => $self,
3610     $namespaceURI => {null},
3611     $localName => 'src',
3612     $r => $r,
3613     $defaultValue => {null},
3614     }__;
3615     @@Set:
3616     @@@nullCase:
3617     @@@@enDesc:
3618     Removes the attribute.
3619     @@@NodeReadOnlyError:
3620     @@@PerlDef:
3621     __CODE{setReflectAttrURIValue::
3622     $node => $self,
3623     $namespaceURI => {null},
3624     $localName => 'src',
3625     $given => $given,
3626     }__;
3627    
3628     @@Test:
3629     @@@QName: AtomContentElement.src.test
3630     @@@PerlDef:
3631     my $doc;
3632     __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
3633    
3634     my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'content');
3635    
3636     $test->id ('default');
3637     $test->assert_null ($el-><AG::AtomContentElement.src>);
3638    
3639     $test->id ('set');
3640     $el-><AS::AtomContentElement.src> ('http://atom.example/');
3641     $test->assert_equals ($el-><AG::AtomContentElement.src>,
3642     'http://atom.example/');
3643    
3644     $test->id ('set.relative');
3645     $el-><AS::AtomContentElement.src> ('atom');
3646     $test->assert_equals ($el-><AG::AtomContentElement.src>, 'atom');
3647    
3648     $test->id ('set.relative.base');
3649     $el-><M::Element.setAttributeNS> (<Q::xml|>, 'xml:base',
3650     'http://atom.example/');
3651     $test->assert_equals ($el-><AG::AtomContentElement.src>,
3652     'http://atom.example/atom');
3653    
3654     $test->id ('remove');
3655     $el-><AS::AtomContentElement.src> (null);
3656     $test->assert_null ($el-><AG::AtomContentElement.src>);
3657    
3658     @Attr:
3659     @@Name: container
3660     @@enDesc:
3661     The container element that contains the actual content for the node.
3662     @@Type: Element
3663     @@Get:
3664     @@@enDesc:
3665     - If the <A::AtomContentElement.type> is <CODE::xhtml>,
3666     it <kwd:MUST> <I::return the <XE::html|div> child element>.
3667    
3668     - Otherwise, if the <A::AtomContentElement.src> is <DOM::null>,
3669     it <kwd:MUST> return <DOM::null>.
3670    
3671     - Otherwise, it <kwd:MUST> return the node itself.
3672     @@@nullCase:
3673     @@@@enDesc:
3674     If the algorithm returns <DOM::null>.
3675     @@@NodeReadOnlyError:
3676     @@@PerlDef:
3677     __DEEP{
3678     my $type = $self-><AG::AtomContentElement.type>;
3679     if (defined $type and $type eq 'xhtml') {
3680     __UNDEEP{
3681     __CODE{returnChildElement::
3682     $node => $self,
3683     $namespaceURI => {<Q::html|>},
3684     $localName => 'div',
3685     $r => $r,
3686     }__;
3687     }__;
3688     } elsif (not $self-><M::Element.hasAttributeNS> (null, 'src')) {
3689     $r = $self;
3690     }
3691     }__;
3692    
3693     @@Test:
3694     @@@QName: AtomContentElement.container.1.test
3695     @@@PerlDef:
3696     my $doc;
3697     __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
3698    
3699     my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'content');
3700    
3701     $test->id ('no');
3702     $test->assert_equals ($el-><AG::AtomContentElement.container>, $el);
3703    
3704     $test->id ('application/smil');
3705     $el-><AS::AtomContentElement.type> ('application/smil');
3706     $test->assert_equals ($el-><AG::AtomContentElement.container>, $el);
3707    
3708     $test->id ('text');
3709     $el-><AS::AtomContentElement.type> ('text');
3710     $test->assert_equals ($el-><AG::AtomContentElement.container>, $el);
3711    
3712     $test->id ('html');
3713     $el-><AS::AtomContentElement.type> ('html');
3714     $test->assert_equals ($el-><AG::AtomContentElement.container>, $el);
3715    
3716     $test->id ('xhtml');
3717     $el-><AS::AtomContentElement.type> ('xhtml');
3718     $test->assert_null ($el-><AG::AtomContentElement.container>);
3719    
3720     $doc-><AG::Document.domConfig>
3721     -><M::CFG.setParameter> (<Q::cfg|create-child-element> => true);
3722     my $con = $el-><AG::AtomContentElement.container>;
3723    
3724     $test->id ('xhtml.create');
3725     $test->assert_not_equals ($con, $el);
3726    
3727     $test->id ('xhtml.namespaceURI');
3728     $test->assert_equals ($con-><AG::Node.namespaceURI>, <Q::html|>);
3729    
3730     $test->id ('xhtml.localName');
3731     $test->assert_equals ($con-><AG::Node.localName>, 'div');
3732    
3733     $test->id ('xhtml.parentNode');
3734     $test->assert_equals ($con-><AG::Node.parentNode>, $el);
3735    
3736     $test->id ('xhtml.2');
3737     $test->assert_equals ($el-><AG::AtomContentElement.container>, $con);
3738     @@Test:
3739     @@@QName: AtomContentElement.container.2.test
3740     @@@enDesc:
3741     With <XA::src>.
3742     @@@PerlDef:
3743     my $doc;
3744     __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
3745    
3746     my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'content');
3747    
3748     $el-><AS::AtomContentElement.src> ('http://www.example.com/');
3749    
3750     $test->id ('no');
3751     $test->assert_null ($el-><AG::AtomContentElement.container>);
3752    
3753     $test->id ('application/smil');
3754     $el-><AS::AtomContentElement.type> ('application/smil');
3755     $test->assert_null ($el-><AG::AtomContentElement.container>);
3756    
3757     @enImplNote:
3758     @@ddid: base64
3759     @@@:
3760     {TODO::
3761     Access to Base64'ed content is necessary.
3762     }
3763     ##AtomContentElement
3764    
3765     IFClsETDef:
3766     @IFQName: AtomAuthorElement
3767     @ETQName: atom|author
3768 wakaba 1.6 @ETRQName: atom|author
3769 wakaba 1.1 @ClsQName: ManakaiAtomAuthorElement
3770    
3771     @IFISA: AtomPersonConstruct
3772     @ClsISA: ManakaiAtomPersonConstruct
3773 wakaba 1.8 @mv:refers: PersonAG
3774 wakaba 1.7 @mv:elementContentModel: PersonCM
3775 wakaba 1.1
3776     @enDesc:
3777     The <XE::atom|author> element is a Person construct that
3778     indicates the author of the entry or feed.
3779     ##AtomAuthorElement
3780    
3781     IFClsETDef:
3782     @IFQName: AtomCategoryElement
3783     @ETQName: atom|category
3784 wakaba 1.6 @ETRQName: atom|category
3785 wakaba 1.1 @ClsQName: ManakaiAtomCategoryElement
3786    
3787     @IFISA: AtomElement
3788     @ClsISA: ManakaiAtomElement
3789    
3790 wakaba 1.10 @mv:refers: atomCommonAttributes
3791    
3792 wakaba 1.9 @cm: undefinedContent
3793    
3794 wakaba 1.1 @enDesc:
3795     The <XE::atom|category> element conveys information abut
3796     a category associated with an entry or feed.
3797    
3798     @Attr:
3799     @@Name: term
3800     @@enDesc:
3801     The <XA::term> attribute of the element.
3802    
3803     It <kwd:MUST> <I::reflect the string value
3804     of the <XA::term> attribute> of the node.
3805     @@Type: DOMString
3806     @@Get:
3807     @@@nullCase:
3808     @@@@enDesc:
3809     If the algorithm returns <DOM::null>.
3810     @@@PerlDef:
3811     __CODE{getReflectAttrStringValue::
3812     $node => $self,
3813     $namespaceURI => {null},
3814     $localName => 'term',
3815     $r => $r,
3816     $defaultValue => {null},
3817     }__;
3818     @@Set:
3819     @@@nullCase:
3820     @@@@enDesc:
3821     Removes the attribute.
3822     @@@NodeReadOnlyError:
3823     @@@PerlDef:
3824     __CODE{setReflectAttrStringValue::
3825     $node => $self,
3826     $namespaceURI => {null},
3827     $localName => 'term',
3828     $given => $given,
3829     }__;
3830    
3831     @Attr:
3832     @@Name: scheme
3833     @@enDesc:
3834     The categorization scheme of the element.
3835    
3836     It <kwd:MUST> <I::reflect the URI value
3837     of the <XA::scheme> attribute> of the node.
3838     @@Type: DOMString
3839     @@Type: DOMURI
3840     @@Get:
3841     @@@nullCase:
3842     @@@@enDesc:
3843     If the algorithm returns <DOM::null>.
3844     @@@PerlDef:
3845     __CODE{getReflectAttrURIValue::
3846     $node => $self,
3847     $namespaceURI => {null},
3848     $localName => 'scheme',
3849     $r => $r,
3850     $defaultValue => {null},
3851     }__;
3852     @@Set:
3853     @@@nullCase:
3854     @@@@enDesc:
3855     Removes the attribute.
3856     @@@NodeReadOnlyError:
3857     @@@PerlDef:
3858     __CODE{setReflectAttrURIValue::
3859     $node => $self,
3860     $namespaceURI => {null},
3861     $localName => 'scheme',
3862     $given => $given,
3863     }__;
3864    
3865     @Attr:
3866     @@Name: label
3867     @@enDesc:
3868     The <XA::label> attribute of the element.
3869    
3870     It <kwd:MUST> <I::reflect the string value
3871     of the <XA::label> attribute> of the node.
3872     @@Type: DOMString
3873     @@Get:
3874     @@@nullCase:
3875     @@@@enDesc:
3876     If the algorithm returns <DOM::null>.
3877     @@@PerlDef:
3878     __CODE{getReflectAttrStringValue::
3879     $node => $self,
3880     $namespaceURI => {null},
3881     $localName => 'label',
3882     $r => $r,
3883     $defaultValue => {null},
3884     }__;
3885     @@Set:
3886     @@@nullCase:
3887     @@@@enDesc:
3888     Removes the attribute.
3889     @@@NodeReadOnlyError:
3890     @@@PerlDef:
3891     __CODE{setReflectAttrStringValue::
3892     $node => $self,
3893     $namespaceURI => {null},
3894     $localName => 'label',
3895     $given => $given,
3896     }__;
3897     ##AtomCategoryElement
3898    
3899     IFClsETDef:
3900     @IFQName: AtomContributorElement
3901     @ETQName: atom|contributor
3902 wakaba 1.6 @ETRQName: atom|contributor
3903 wakaba 1.1 @ClsQName: ManakaiAtomContributorElement
3904    
3905     @IFISA: AtomPersonConstruct
3906     @ClsISA: ManakaiAtomPersonConstruct
3907 wakaba 1.8 @mv:refers: PersonAG
3908 wakaba 1.7 @mv:elementContentModel: PersonCM
3909 wakaba 1.1
3910     @enDesc:
3911     The <XE::atom|contributor> element is a Person construct that
3912     indicates a person or other entity who contributed to the entry
3913     or feed.
3914     ##AtomContributorElement
3915    
3916     IFClsETDef:
3917     @IFQName: AtomGeneratorElement
3918     @ETQName: atom|generator
3919 wakaba 1.6 @ETRQName: atom|generator
3920 wakaba 1.1 @ClsQName: ManakaiAtomGeneratorElement
3921    
3922     @IFISA: AtomElement
3923     @ClsISA: ManakaiAtomElement
3924    
3925 wakaba 1.10 @mv:refers: atomCommonAttributes
3926    
3927 wakaba 1.9 @cm:
3928     (dxm|PCDATA||ManakaiDOM|all)*
3929    
3930 wakaba 1.1 @enDesc:
3931     The <XE::atom|generator> element identifies the agent used
3932     to generate a feed.
3933    
3934     @Attr:
3935     @@Name: uri
3936     @@enDesc:
3937     The URI attribute of the element.
3938    
3939     It <kwd:MUST> <I::reflect the URI value
3940     of the <XA::uri> attribute> of the node.
3941     @@Type: DOMString
3942     @@Type: DOMURI
3943     @@Get:
3944     @@@nullCase:
3945     @@@@enDesc:
3946     If the algorithm returns <DOM::null>.
3947     @@@PerlDef:
3948     __CODE{getReflectAttrURIValue::
3949     $node => $self,
3950     $namespaceURI => {null},
3951     $localName => 'uri',
3952     $r => $r,
3953     $defaultValue => {null},
3954     }__;
3955     @@Set:
3956     @@@nullCase:
3957     @@@@enDesc:
3958     Removes the attribute.
3959     @@@NodeReadOnlyError:
3960     @@@PerlDef:
3961     __CODE{setReflectAttrURIValue::
3962     $node => $self,
3963     $namespaceURI => {null},
3964     $localName => 'uri',
3965     $given => $given,
3966     }__;
3967    
3968     @Attr:
3969     @@Name: version
3970     @@enDesc:
3971     The <XA::version> attribute of the element.
3972    
3973     It <kwd:MUST> <I::reflect the string value
3974     of the <XA::version> attribute> of the node.
3975     @@Type: DOMString
3976     @@Get:
3977     @@@nullCase:
3978     @@@@enDesc:
3979     If the algorithm returns <DOM::null>.
3980     @@@PerlDef:
3981     __CODE{getReflectAttrStringValue::
3982     $node => $self,
3983     $namespaceURI => {null},
3984     $localName => 'version',
3985     $r => $r,
3986     $defaultValue => {null},
3987     }__;
3988     @@Set:
3989     @@@nullCase:
3990     @@@@enDesc:
3991     Removes the attribute.
3992     @@@NodeReadOnlyError:
3993     @@@PerlDef:
3994     __CODE{setReflectAttrStringValue::
3995     $node => $self,
3996     $namespaceURI => {null},
3997     $localName => 'version',
3998     $given => $given,
3999     }__;
4000     ##AtomGeneratorElement
4001    
4002     IFClsETDef:
4003     @IFQName: AtomLinkElement
4004     @ETQName: atom|link
4005 wakaba 1.6 @ETRQName: atom|link
4006 wakaba 1.1 @ClsQName: ManakaiAtomLinkElement
4007    
4008     @IFISA: AtomElement
4009     @ClsISA: ManakaiAtomElement
4010    
4011 wakaba 1.10 @mv:refers: atomCommonAttributes
4012    
4013 wakaba 1.9 @cm: undefinedContent
4014    
4015 wakaba 1.1 @enDesc:
4016     The <XE::atom|link> element defines a reference from an entry
4017     or feed to a Web resource.
4018    
4019 wakaba 1.6 @ATTR:
4020 wakaba 1.1 @@Name: href
4021     @@enDesc:
4022     The <XA::href> attribute of the element.
4023    
4024     It <kwd:MUST> <I::reflect the URI value
4025     of the <XA::href> attribute> of the node.
4026     @@Type: DOMString
4027 wakaba 1.6 @@actualType: DOMURI
4028 wakaba 1.1 @@Get:
4029     @@@nullCase:
4030     @@@@enDesc:
4031     If the algorithm returns <DOM::null>.
4032     @@@PerlDef:
4033     __CODE{getReflectAttrURIValue::
4034     $node => $self,
4035     $namespaceURI => {null},
4036     $localName => 'href',
4037     $r => $r,
4038     $defaultValue => {null},
4039     }__;
4040     @@Set:
4041     @@@nullCase:
4042     @@@@enDesc:
4043     Removes the attribute.
4044     @@@NodeReadOnlyError:
4045     @@@PerlDef:
4046     __CODE{setReflectAttrURIValue::
4047     $node => $self,
4048     $namespaceURI => {null},
4049     $localName => 'href',
4050     $given => $given,
4051     }__;
4052    
4053 wakaba 1.6 @ATTR:
4054 wakaba 1.1 @@Name: rel
4055     @@enDesc:
4056     The <XA::rel> attribute of the element.
4057    
4058     It <kwd:MUST> <I::reflect the string value
4059     of the <XA::rel> attribute> of the node, with
4060     a few exceptions. The default value <kwd:MUST>
4061     be <URI^DISCore|QName::rel|alternate>.
4062     @@Type: DOMString
4063 wakaba 1.6 @@actualType: DOMURI
4064 wakaba 1.1 @@Get:
4065     @@@enDesc:
4066     If the algorithm returns a string that does not contain
4067     any <CHAR::COLON> character, the string
4068     <URI^DISCore|QName::rel|> <kwd:MUST> be prepended
4069     for the return value of the getter.
4070     @@@PerlDef:
4071     __CODE{getReflectAttrStringValue::
4072     $node => $self,
4073     $namespaceURI => {null},
4074     $localName => 'rel',
4075     $r => $r,
4076     $defaultValue => {<Q::rel|alternate>},
4077     }__;
4078     if (defined $r and index ($r, ':') == -1) {
4079     $r = <Q::rel|> . $r;
4080     }
4081     @@Set:
4082     @@@enDesc:
4083     If the given value starts with <URI^DISCore|QName::rel|> (by
4084     simple character-by-character comparison), such substring
4085     <kwd:MUST> be removed for the purpose of the setter algorithm,
4086     if and only if the result string is not empty and does contain
4087     none of <CHAR::COLON>, <CHAR::SOLIDUS>, <CHAR::QUESTION MARK>,
4088     and <CHAR::NUMBER SIGN>.
4089     @@@nullCase:
4090     @@@@enDesc:
4091     Removes the attribute.
4092     @@@NodeReadOnlyError:
4093     @@@PerlDef:
4094     if (defined $given) {
4095     $given =~ s[\Ahttp://www.iana.org/assignments/relation/([^:/?#]+)\z]
4096     [$1];
4097     }
4098     __CODE{setReflectAttrStringValue::
4099     $node => $self,
4100     $namespaceURI => {null},
4101     $localName => 'rel',
4102     $given => $given,
4103     }__;
4104    
4105     @@Test:
4106     @@@QName: AtomLinkElement.rel.test
4107     @@@PerlDef:
4108     my $doc;
4109     __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
4110    
4111     my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'link');
4112    
4113     $test->id ('default');
4114     $test->assert_equals ($el-><AG::AtomLinkElement.rel>,
4115     <Q::rel|alternate>);
4116    
4117     $test->id ('set');
4118     $el-><AS::AtomLinkElement.rel> ('http://www.example.com/');
4119     $test->assert_equals ($el-><AG::AtomLinkElement.rel>,
4120     'http://www.example.com/');
4121    
4122     $test->id ('set.self');
4123     $el-><AS::AtomLinkElement.rel> ('self');
4124     $test->assert_equals ($el-><AG::AtomLinkElement.rel>,
4125     <Q::rel|self>);
4126    
4127     $test->id ('set.qrelated');
4128     $el-><AS::AtomLinkElement.rel> (<Q::rel|related>);
4129     $test->assert_equals ($el-><AG::AtomLinkElement.rel>,
4130     <Q::rel|related>);
4131    
4132     $test->id ('remove');
4133     $el-><AS::AtomLinkElement.rel> (null);
4134     $test->assert_equals ($el-><AG::AtomLinkElement.rel>,
4135     <Q::rel|alternate>);
4136    
4137 wakaba 1.6 @ATTR:
4138 wakaba 1.1 @@Name: type
4139     @@enDesc:
4140     The <XA::type> attribute of the element.
4141    
4142     It <kwd:MUST> <I::reflect the string value
4143     of the <XA::type> attribute> of the node.
4144     @@Type: DOMString
4145     @@Get:
4146     @@@nullCase:
4147     @@@@enDesc:
4148     If the algorithm returns <DOM::null>.
4149     @@@PerlDef:
4150     __CODE{getReflectAttrStringValue::
4151     $node => $self,
4152     $namespaceURI => {null},
4153     $localName => 'type',
4154     $r => $r,
4155     $defaultValue => {null},
4156     }__;
4157     @@Set:
4158     @@@nullCase:
4159     @@@@enDesc:
4160     Removes the attribute.
4161     @@@NodeReadOnlyError:
4162     @@@PerlDef:
4163     __CODE{setReflectAttrStringValue::
4164     $node => $self,
4165     $namespaceURI => {null},
4166     $localName => 'type',
4167     $given => $given,
4168     }__;
4169    
4170 wakaba 1.6 @ATTR:
4171 wakaba 1.1 @@Name: hreflang
4172     @@enDesc:
4173     The <XA::hreflang> attribute of the element.
4174    
4175     It <kwd:MUST> <I::reflect the string value
4176     of the <XA::hreflang> attribute> of the node.
4177     @@Type: DOMString
4178     @@Get:
4179     @@@nullCase:
4180     @@@@enDesc:
4181     If the algorithm returns <DOM::null>.
4182     @@@PerlDef:
4183     __CODE{getReflectAttrStringValue::
4184     $node => $self,
4185     $namespaceURI => {null},
4186     $localName => 'hreflang',
4187     $r => $r,
4188     $defaultValue => {null},
4189     }__;
4190     @@Set:
4191     @@@nullCase:
4192     @@@@enDesc:
4193     Removes the attribute.
4194     @@@NodeReadOnlyError:
4195     @@@PerlDef:
4196     __CODE{setReflectAttrStringValue::
4197     $node => $self,
4198     $namespaceURI => {null},
4199     $localName => 'hreflang',
4200     $given => $given,
4201     }__;
4202    
4203 wakaba 1.6 @ATTR:
4204 wakaba 1.1 @@Name: title
4205     @@enDesc:
4206     The <XA::title> attribute of the element.
4207    
4208     It <kwd:MUST> <I::reflect the string value
4209     of the <XA::title> attribute> of the node.
4210     @@Type: DOMString
4211     @@Get:
4212     @@@nullCase:
4213     @@@@enDesc:
4214     If the algorithm returns <DOM::null>.
4215     @@@PerlDef:
4216     __CODE{getReflectAttrStringValue::
4217     $node => $self,
4218     $namespaceURI => {null},
4219     $localName => 'title',
4220     $r => $r,
4221     $defaultValue => {null},
4222     }__;
4223     @@Set:
4224     @@@nullCase:
4225     @@@@enDesc:
4226     Removes the attribute.
4227     @@@NodeReadOnlyError:
4228     @@@PerlDef:
4229     __CODE{setReflectAttrStringValue::
4230     $node => $self,
4231     $namespaceURI => {null},
4232     $localName => 'title',
4233     $given => $given,
4234     }__;
4235    
4236 wakaba 1.6 @ATTR:
4237 wakaba 1.1 @@Name: length
4238     @@enDesc:
4239     The <XA::length> attribute of the element.
4240    
4241     It <kwd:MUST> <I::reflect the string value
4242     of the <XA::length> attribute> of the node.
4243     @@Type: DOMString
4244     @@Get:
4245     @@@nullCase:
4246     @@@@enDesc:
4247     If the algorithm returns <DOM::null>.
4248     @@@PerlDef:
4249     __CODE{getReflectAttrStringValue::
4250     $node => $self,
4251     $namespaceURI => {null},
4252     $localName => 'length',
4253     $r => $r,
4254     $defaultValue => {null},
4255     }__;
4256     @@Set:
4257     @@@nullCase:
4258     @@@@enDesc:
4259     Removes the attribute.
4260     @@@NodeReadOnlyError:
4261     @@@PerlDef:
4262     __CODE{setReflectAttrStringValue::
4263     $node => $self,
4264     $namespaceURI => {null},
4265     $localName => 'length',
4266     $given => $given,
4267     }__;
4268     ##AtomLinkElement
4269    
4270     IFClsETDef:
4271     @IFQName: AtomPublishedElement
4272     @ETQName: atom|published
4273 wakaba 1.6 @ETRQName: atom|published
4274 wakaba 1.1 @ClsQName: ManakaiAtomPublishedElement
4275    
4276     @IFISA: AtomDateConstruct
4277     @ClsISA: ManakaiAtomDateConstruct
4278 wakaba 1.8 @mv:refers: DateAG
4279 wakaba 1.7 @mv:elementContentModel: DateCM
4280 wakaba 1.1
4281     @enDesc:
4282     The <XE::atom|published> element is a Date construct
4283     indicating an instant in time associated with an
4284     event early in the life cycle of the entry.
4285    
4286     Typically, <XE::atom|published> will be associated with
4287     the initial creation or first availability of the resouce.
4288     ##AtomPublishedElement
4289    
4290     IFClsETDef:
4291     @IFQName: AtomRightsElement
4292     @ETQName: atom|rights
4293 wakaba 1.6 @ETRQName: atom|rights
4294 wakaba 1.1 @ClsQName: ManakaiAtomRightsElement
4295    
4296     @IFISA: AtomTextConstruct
4297     @ClsISA: ManakaiAtomTextConstruct
4298 wakaba 1.8 @mv:refers: TextAG
4299 wakaba 1.7 @mv:elementContentModel: TextCM
4300 wakaba 1.1
4301     @enDesc:
4302     The <XE::atom|rights> element is a Text construct
4303     that conveys information about rights held in and
4304     over an entry or feed.
4305     ##AtomRightsElement
4306    
4307 wakaba 1.8 ECDef:
4308     @QName: source-prop
4309     @mv:elementTypeClassName: source-prop
4310     @mv:refers: atom|author
4311     @mv:refers: atom|category
4312     @mv:refers: atom|contributor
4313     @mv:refers: atom|generator
4314     @mv:refers: atom|icon
4315     @mv:refers: atom|id
4316     @mv:refers: atom|link
4317     @mv:refers: atom|logo
4318     @mv:refers: atom|rights
4319     @mv:refers: atom|subtitle
4320     @mv:refers: atom|title
4321     @mv:refers: atom|updated
4322     @mv:refers: extensionElements
4323    
4324 wakaba 1.1 IFClsETDef:
4325     @IFQName: AtomSourceElement
4326     @ETQName: atom|source
4327 wakaba 1.6 @ETRQName: atom|source
4328 wakaba 1.1 @ClsQName: ManakaiAtomSourceElement
4329    
4330     @IFISA: AtomElement
4331     @ClsISA: ManakaiAtomElement
4332 wakaba 1.10
4333     @mv:refers: atomCommonAttributes
4334 wakaba 1.1
4335 wakaba 1.9 @cm:
4336     (source-prop*)
4337    
4338 wakaba 1.1 @Attr:
4339     @@Name: authorElements
4340     @@enDesc:
4341     A static list of <XE::atom|author> child elements of the node.
4342     @@Type: StaticNodeList
4343     @@Get:
4344     @@@enDesc:
4345     It <kwd:MUST> <I::return a <XE::atom|author> child element list>
4346     of the node.
4347     @@@disDef:
4348     @@@@dlp:cloneCode: ManakaiAtomFeedElement.authorElements.get
4349    
4350     @Attr:
4351     @@Name: categoryElements
4352     @@enDesc:
4353     A static list of <XE::atom|category> child elements of the node.
4354     @@Type: StaticNodeList
4355     @@Get:
4356     @@@enDesc:
4357     It <kwd:MUST> <I::return a <XE::atom|category> child element list>
4358     of the node.
4359     @@@disDef:
4360     @@@@dlp:cloneCode: ManakaiAtomFeedElement.categoryElements.get
4361    
4362     @Attr:
4363     @@Name: contributorElements
4364     @@enDesc:
4365     A static list of <XE::atom|contributor> child elements of the node.
4366     @@Type: StaticNodeList
4367     @@Get:
4368     @@@enDesc:
4369     It <kwd:MUST> <I::return a <XE::atom|contributor> child element list>
4370     of the node.
4371     @@@disDef:
4372     @@@@dlp:cloneCode: ManakaiAtomFeedElement.contributorElements.get
4373    
4374     @Attr:
4375     @@Name: generatorElement
4376     @@enDesc:
4377     The <XE::atom|generator> child element of the node.
4378     @@Type: AtomGeneratorElement
4379     @@Get:
4380     @@@enDesc:
4381     It <kwd:MUST> <I::return a <XE::atom|generator> child element>
4382     of the node.
4383     @@@nullCase:
4384     @@@@enDesc:
4385     If the algorithm returns <DOM::null>.
4386     @@@NodeReadOnlyError:
4387     @@@disDef:
4388     @@@@dlp:cloneCode: ManakaiAtomFeedElement.generatorElement.get
4389    
4390     @Attr:
4391     @@Name: icon
4392     @@enDesc:
4393     The <XE::atom|icon> value of the node.
4394    
4395     It <kwd:MUST> <I::reflect the URI value
4396     of the <XE::atom|icon> child element> of the node.
4397     @@Type: DOMString
4398     @@actualType: DOMURI
4399     @@Get:
4400     @@@nullCase:
4401     @@@@enDesc:
4402     If the algorithm returns <DOM::null>.
4403     @@@NodeReadOnlyError:
4404     @@@disDef:
4405     @@@@dlp:cloneCode: ManakaiAtomFeedElement.icon.get
4406     @@Set:
4407     @@@nullCase:
4408     @@@@enDesc:
4409     Removes the value.
4410     @@@NodeReadOnlyError:
4411     @@@disDef:
4412     @@@@dlp:cloneCode: ManakaiAtomFeedElement.icon.set
4413    
4414     @Attr:
4415     @@Name: id
4416     @@enDesc:
4417     The <XE::atom|id> value of the node.
4418    
4419     It <kwd:MUST> <I::reflect the string value
4420     of the <XE::atom|id> child element> of the node.
4421     @@Type: DOMString
4422     @@actualType: DOMURI
4423     @@Get:
4424     @@@nullCase:
4425     @@@@enDesc:
4426     If the algorithm returns <DOM::null>.
4427     @@@NodeReadOnlyError:
4428     @@@disDef:
4429     @@@@dlp:cloneCode: ManakaiAtomFeedElement.id.get
4430     @@Set:
4431     @@@nullCase:
4432     @@@@enDesc:
4433     Removes the value.
4434     @@@NodeReadOnlyError:
4435     @@@disDef:
4436     @@@@dlp:cloneCode: ManakaiAtomFeedElement.id.set
4437    
4438     @Attr:
4439     @@Name: linkElements
4440     @@enDesc:
4441     A static list of <XE::atom|link> child elements of the node.
4442     @@Type: StaticNodeList
4443     @@Get:
4444     @@@enDesc:
4445     It <kwd:MUST> <I::return a <XE::atom|link> child element list>
4446     of the node.
4447     @@@disDef:
4448     @@@@dlp:cloneCode: ManakaiAtomFeedElement.linkElements.get
4449    
4450     @Attr:
4451     @@Name: logo
4452     @@enDesc:
4453     The <XE::atom|logo> value of the node.
4454    
4455     It <kwd:MUST> <I::reflect the URI value
4456     of the <XE::atom|logo> child element> of the node.
4457     @@Type: DOMString
4458     @@actualType: DOMURI
4459     @@Get:
4460     @@@nullCase:
4461     @@@@enDesc:
4462     If the algorithm returns <DOM::null>.
4463     @@@NodeReadOnlyError:
4464     @@@disDef:
4465     @@@@dlp:cloneCode: ManakaiAtomFeedElement.logo.get
4466     @@Set:
4467     @@@nullCase:
4468     @@@@enDesc:
4469     Removes the value.
4470     @@@NodeReadOnlyError:
4471     @@@disDef:
4472     @@@@dlp:cloneCode: ManakaiAtomFeedElement.logo.set
4473    
4474     @Attr:
4475     @@Name: rightsElement
4476     @@enDesc:
4477     The <XE::atom|rights> child element of the node.
4478     @@Type: AtomRightsElement
4479     @@Get:
4480     @@@enDesc:
4481     It <kwd:MUST> <I::return a <XE::atom|rights> child element>
4482     of the node.
4483     @@@nullCase:
4484     @@@@enDesc:
4485     If the algorithm returns <DOM::null>.
4486     @@@NodeReadOnlyError:
4487     @@@disDef:
4488     @@@@dlp:cloneCode: ManakaiAtomFeedElement.rightsElement.get
4489    
4490     @Attr:
4491     @@Name: subtitleElement
4492     @@enDesc:
4493     The <XE::atom|subtitle> child element of the node.
4494     @@Type: AtomSubtitleElement
4495     @@Get:
4496     @@@enDesc:
4497     It <kwd:MUST> <I::return a <XE::atom|subtitle> child element>
4498     of the node.
4499     @@@nullCase:
4500     @@@@enDesc:
4501     If the algorithm returns <DOM::null>.
4502     @@@NodeReadOnlyError:
4503     @@@disDef:
4504     @@@@dlp:cloneCode: ManakaiAtomFeedElement.subtitleElement.get
4505    
4506     @Attr:
4507     @@Name: titleElement
4508     @@enDesc:
4509     The <XE::atom|title> child element of the node.
4510     @@Type: AtomTitleElement
4511     @@Get:
4512     @@@enDesc:
4513     It <kwd:MUST> <I::return a <XE::atom|title> child element>
4514     of the node.
4515     @@@nullCase:
4516     @@@@enDesc:
4517     If the algorithm returns <DOM::null>.
4518     @@@NodeReadOnlyError:
4519     @@@disDef:
4520     @@@@dlp:cloneCode: ManakaiAtomFeedElement.titleElement.get
4521    
4522     @Attr:
4523     @@Name: updatedElement
4524     @@enDesc:
4525     The <XE::atom|updated> child element of the node.
4526     @@Type: AtomUpdatedElement
4527     @@Get:
4528     @@@enDesc:
4529     It <kwd:MUST> <I::return a <XE::atom|updated> child element>
4530     of the node.
4531     @@@nullCase:
4532     @@@@enDesc:
4533     If the algorithm returns <DOM::null>.
4534     @@@NodeReadOnlyError:
4535     @@@disDef:
4536     @@@@dlp:cloneCode: ManakaiAtomFeedElement.updatedElement.get
4537     ##AtomSourceElement
4538    
4539     IFClsETDef:
4540     @IFQName: AtomSubtitleElement
4541     @ETQName: atom|subtitle
4542 wakaba 1.6 @ETRQName: atom|subtitle
4543 wakaba 1.1 @ClsQName: ManakaiAtomSubtitleElement
4544    
4545     @IFISA: AtomTextConstruct
4546     @ClsISA: ManakaiAtomTextConstruct
4547 wakaba 1.8 @mv:refers: TextAG
4548 wakaba 1.7 @mv:elementContentModel: TextCM
4549 wakaba 1.1
4550     @enDesc:
4551     The <XE::atom|subtitle> element is a Text construct
4552     that conveys a human-readable description or subtitle for a feed.
4553     ##AtomSubtitleElement
4554    
4555     IFClsETDef:
4556     @IFQName: AtomSummaryElement
4557     @ETQName: atom|summary
4558 wakaba 1.6 @ETRQName: atom|summary
4559 wakaba 1.1 @ClsQName: ManakaiAtomSummaryElement
4560    
4561     @IFISA: AtomTextConstruct
4562     @ClsISA: ManakaiAtomTextConstruct
4563 wakaba 1.8 @mv:refers: TextAG
4564 wakaba 1.7 @mv:elementContentModel: TextCM
4565 wakaba 1.1
4566     @enDesc:
4567     The <XE::atom|summary> element is a Text construct
4568     that conveys a short summary, abstract, or excerpt of an entry.
4569     ##AtomSummaryElement
4570    
4571     IFClsETDef:
4572     @IFQName: AtomTitleElement
4573     @ETQName: atom|title
4574 wakaba 1.6 @ETRQName: atom|title
4575 wakaba 1.1 @ClsQName: ManakaiAtomTitleElement
4576    
4577     @IFISA: AtomTextConstruct
4578     @ClsISA: ManakaiAtomTextConstruct
4579 wakaba 1.8 @mv:refers: TextAG
4580 wakaba 1.7 @mv:elementContentModel: TextCM
4581 wakaba 1.1
4582     @enDesc:
4583     The <XE::atom|title> element is a Text construct
4584     that conveys a human-readable title for an entry or feed.
4585     ##AtomTitleElement
4586    
4587     IFClsETDef:
4588     @IFQName: AtomUpdatedElement
4589     @ETQName: atom|updated
4590 wakaba 1.6 @ETRQName: atom|updated
4591 wakaba 1.1 @ClsQName: ManakaiAtomUpdatedElement
4592    
4593     @IFISA: AtomDateConstruct
4594     @ClsISA: ManakaiAtomDateConstruct
4595 wakaba 1.8 @mv:refers: DateAG
4596 wakaba 1.7 @mv:elementContentModel: DateCM
4597 wakaba 1.1
4598     @enDesc:
4599     The <XE::atom|updated> element is a Date construct
4600     indicating the most recent instant in time when an
4601     entry or feed was modified in a way the publisher considers
4602     significant.
4603     ##AtomPublishedElement
4604    
4605     ElementTypeBinding:
4606     @Name: NodeReadOnlyError
4607     @ElementType:
4608     dx:raises
4609     @ShadowContent:
4610     @@@: MDOMX|NOMOD_THIS
4611     @@Description:
4612     @@@lang:en
4613     @@@@:
4614     If the node or a descendant of it, which
4615     is to be modified, is read-only.
4616    
4617     ## -- Configuration Parameters
4618    
4619     boolCParam:
4620     @QName: cfg|create-child-element
4621     @tc:nodeStemKey:
4622     @@@: ccldel
4623     @@ForCheck: =ManakaiDOM|all
4624     @c:targetType: tc|Document
4625     @IsSupportRequired:1
4626     @TrueCase:
4627     @@c:isSupported:1
4628     @@enDesc:
4629     If the parameter is set to <DOM::true>, some DOM attributes
4630     that returns an element will create a child element
4631     when there is no element that met the condition defined
4632     for that DOM attribute.
4633     @FalseCase:
4634     @@c:isSupported:1
4635     @@IsSupportRequired:1
4636     @@IsDefault:1
4637     @@enDesc:
4638     If the parameter is set to <DOM::true>, some DOM attributes
4639     that returns an element will <EM::not> create a child element
4640     even when there is no element that met the condition defined
4641     for that DOM attribute.
4642     @TestC:
4643     @@QName: cfg.create-child-element.set.test
4644     @@PerlCDef:
4645     my $doc;
4646     __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
4647    
4648     my $cfg = $doc-><AG::Document.domConfig>;
4649     my $cp = <Q::cfg|create-child-element>;
4650    
4651     $test->id ('default');
4652     $test->assert_false ($cfg-><M::CFG.getParameter> ($cp));
4653    
4654     $test->id ('set.f.to.t');
4655     $cfg-><M::CFG.setParameter> ($cp => true);
4656     $test->assert_true ($cfg-><M::CFG.getParameter> ($cp));
4657    
4658     $test->id ('set.t.to.f');
4659     $cfg-><M::CFG.setParameter> ($cp => false);
4660     $test->assert_false ($cfg-><M::CFG.getParameter> ($cp));
4661    
4662     $cfg-><M::CFG.setParameter> ($cp => true);
4663    
4664     $test->id ('reset');
4665     $cfg-><M::CFG.setParameter> ($cp => null);
4666     $test->assert_false ($cfg-><M::CFG.getParameter> ($cp));
4667    
4668     ResourceDef:
4669     @QName: CFG
4670     @AliasFor: c|DOMConfiguration
4671     @For: ManakaiDOM|DOM3
4672    
4673     ElementTypeBinding:
4674     @Name: boolCParam
4675     @ElementType:
4676     dis:ResourceDef
4677     @ShadowContent:
4678     @@DISCore:resourceType:
4679     @@@@: c|DOMConfigurationParameter
4680     @@@For: ManakaiDOM|DOM
4681     @@DISCore:resourceType:
4682     @@@@: DISCore|Property
4683     @@@For: =ManakaiDOM|all
4684     @@For: ManakaiDOM|DOM3
4685     @@For: =ManakaiDOM|all
4686     @@Type: idl|boolean||ManakaiDOM|all
4687 wakaba 1.8
4688     ECDef:
4689     @QName: simpleExtensionElements
4690     @mv:elementTypeClassName: simple.extra
4691     @DISCore:resourceType: mv|ElementTypeAdditionalClass
4692    
4693     ECDef:
4694     @QName: structuredExtensionElements
4695     @mv:elementTypeClassName: structured.extra
4696     @DISCore:resourceType: mv|ElementTypeAdditionalClass
4697    
4698     EMDef:
4699     @QName: extensionElements
4700     @mv:elementTypeClassName: extra
4701     @mv:refers: simpleExtensionElements
4702     @mv:refers: structuredExtensionElements
4703     @DISCore:resourceType: mv|ElementTypeAdditionalClass
4704    
4705     AGDef:
4706     @QName: undefinedAttributes
4707     @mv:attributeTypeGroupName: common.extra
4708    
4709 wakaba 1.9 ResourceDef:
4710     @QName: undefinedContent
4711     @mv:elementContentModelName: undefined
4712     @For: =ManakaiDOM|ManakaiDOMLatest
4713     @DISCore:resourceType: mv|ElementContentModel
4714     @cm: dxm|ANY||ManakaiDOM|all
4715     @enImplNote:
4716     (text | anyForeignElement)*

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24