--- messaging/manakai/lib/Message/Markup/Atom.dis 2006/05/28 06:34:59 1.8 +++ messaging/manakai/lib/Message/Markup/Atom.dis 2006/12/30 12:00:41 1.23 @@ -43,19 +43,15 @@ @DISCore:author: DISCore|Wakaba @License: license|Perl+MPL @Date: - $Date: 2006/05/28 06:34:59 $ + $Date: 2006/12/30 12:00:41 $ @Require: @@Module: @@@QName: Markup|common @@Module: @@@QName: MDOM|TreeCore - @@@WithFor: ManakaiDOM|ManakaiDOMLatest @@Module: - @@@WithFor: ManakaiDOM|ManakaiDOM - @@Module: - @@@WithFor: ManakaiDOM|ManakaiDOMLatest - @DefaultFor: ManakaiDOM|ManakaiDOMLatest + @@@QName: DISlib|DISMarkup Namespace: @atom: @@ -64,18 +60,22 @@ http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core# @cfg: http://suika.fam.cx/www/2006/dom-config/ + @DISlib: + http://suika.fam.cx/~wakaba/archive/2004/dis/ @dis: http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis-- @dlp: http://suika.fam.cx/~wakaba/archive/2004/dis/Perl# - @doc: - http://suika.fam.cx/~wakaba/archive/2005/7/tutorial# @d: http://suika.fam.cx/~wakaba/archive/2004/dom/xdt# @DOMMain: http://suika.fam.cx/~wakaba/archive/2004/dom/main# + @domperl: + http://suika.fam.cx/~wakaba/archive/2006/dom/perl/ @dx: http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/DOMException# + @dxm: + http://suika.fam.cx/~wakaba/archive/2004/dis/XML# @ecore: http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/Core/ @f: @@ -92,14 +92,10 @@ http://suika.fam.cx/~wakaba/archive/2004/8/18/lang# @license: http://suika.fam.cx/~wakaba/archive/2004/8/18/license# - @m12n: - http://suika.fam.cx/www/2006/05/m12n/ @ManakaiDOM: http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom# @Markup: http://suika.fam.cx/~wakaba/archive/2005/manakai/Markup# - @mat: - http://suika.fam.cx/~wakaba/archive/2005/manakai/Markup/Atom/ @MDOM: http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom#ManakaiDOM. @MDOMX: @@ -118,6 +114,8 @@ http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/Element/ @test: http://suika.fam.cx/~wakaba/archive/2004/dis/Test# + @thr: + http://purl.org/syndication/thread/1.0 @tx: http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/XML/ @urigen: @@ -139,7 +137,6 @@ dis:ResourceDef @ShadowContent: @@DISCore:resourceType: DISLang|Method - @@ForCheck: !=ManakaiDOM|ManakaiDOM ElementTypeBinding: @Name: Param @@ -161,7 +158,6 @@ dis:ResourceDef @ShadowContent: @@DISCore:resourceType: DISLang|Attribute - @@ForCheck: !=ManakaiDOM|ManakaiDOM ElementTypeBinding: @Name: ATTR @@ -177,7 +173,6 @@ @@DISCore:resourceType: @@@@: mv|AttributeType @@@ForCheck: s|ForML - @@ForCheck: !=ManakaiDOM|ManakaiDOM ElementTypeBinding: @Name: Get @@ -242,7 +237,6 @@ @@resourceFor: ManakaiDOM|ForIF @@resourceFor: ManakaiDOM|ForClass @@resourceFor: s|ForML - @@For: ManakaiDOM|ManakaiDOM @@DISCore:resourceType: @@@@: DISLang|Interface @@ -251,14 +245,11 @@ @@DISCore:resourceType: @@@@: DISLang|Class @@@ForCheck: ManakaiDOM|ForClass + @@Implement: - @@@@: ||ManakaiDOM|ManakaiDOM||ManakaiDOM|ForIF - @@@ContentType: DISCore|TFPQNames - @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOM - @@Implement: - @@@@: ||ManakaiDOM|ManakaiDOMLatest||ManakaiDOM|ForIF + @@@@: ||+||ManakaiDOM|ForIF @@@ContentType: DISCore|TFPQNames - @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOMLatest + @@@ForCheck: ManakaiDOM|ForClass @@s:elementType: @@@@: ||+||s|ForML @@ -269,8 +260,6 @@ @@@@: s|ElementType @@@ForCheck: s|ForML - @@f:implements: AtomFeature10 - ElementTypeBinding: @Name: IFClsDef @ElementType: @@ -281,7 +270,6 @@ @@@ForCheck: !ManakaiDOM|ForIF !ManakaiDOM|ForClass !s|ForML @@resourceFor: ManakaiDOM|ForIF @@resourceFor: ManakaiDOM|ForClass - @@For: ManakaiDOM|ManakaiDOM @@DISCore:resourceType: @@@@: DISLang|Interface @@ -290,16 +278,11 @@ @@DISCore:resourceType: @@@@: DISLang|Class @@@ForCheck: ManakaiDOM|ForClass + @@Implement: - @@@@: ||ManakaiDOM|ManakaiDOM||ManakaiDOM|ForIF - @@@ContentType: DISCore|TFPQNames - @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOM - @@Implement: - @@@@: ||ManakaiDOM|ManakaiDOMLatest||ManakaiDOM|ForIF + @@@@: ||+||ManakaiDOM|ForIF @@@ContentType: DISCore|TFPQNames - @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOMLatest - - @@f:implements: AtomFeature10 + @@@ForCheck: ManakaiDOM|ForClass ElementTypeBinding: @Name: IFClsConstructDef @@ -314,7 +297,6 @@ @@resourceFor: ManakaiDOM|ForClass @@resourceFor: mv|ForCM @@resourceFor: mv|ForAG - @@For: ManakaiDOM|ManakaiDOM @@DISCore:resourceType: @@@@: DISLang|Interface @@ -323,14 +305,11 @@ @@DISCore:resourceType: @@@@: DISLang|Class @@@ForCheck: ManakaiDOM|ForClass + @@Implement: - @@@@: ||ManakaiDOM|ManakaiDOM||ManakaiDOM|ForIF - @@@ContentType: DISCore|TFPQNames - @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOM - @@Implement: - @@@@: ||ManakaiDOM|ManakaiDOMLatest||ManakaiDOM|ForIF + @@@@: ||+||ManakaiDOM|ForIF @@@ContentType: DISCore|TFPQNames - @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOMLatest + @@@ForCheck: ManakaiDOM|ForClass @@DISCore:resourceType: @@@@: mv|AttributeTypeGroup @@ -340,7 +319,6 @@ @@@@: mv|ElementContentModel @@@ForCheck: mv|ForCM - @@f:implements: AtomFeature10 ElementTypeBinding: @Name: IFQName @@ -448,51 +426,42 @@ ResourceDef: @QName: Document @AliasFor: td|Document - @For: ManakaiDOM|DOM ResourceDef: @QName: Element @AliasFor: te|Element - @For: ManakaiDOM|DOM ResourceDef: @QName: Attr @AliasFor: te|Attr - @For: ManakaiDOM|DOM ResourceDef: @QName: DOMString @AliasFor: DOMMain|DOMString - @For: ManakaiDOM|DOM ResourceDef: @QName: DOMURI @AliasFor: ManakaiDOM|ManakaiDOMURI - @For: ManakaiDOM|DOM3 ResourceDef: @QName: DOMTimeStamp @AliasFor: DOMMain|DOMTimeStamp - @For: ManakaiDOM|DOM2 ResourceDef: @QName: boolean - @AliasFor: idl|boolean||ManakaiDOM|all + @AliasFor: idl|boolean ResourceDef: @QName: Node @AliasFor: tc|Node - @For: ManakaiDOM|ManakaiDOM ResourceDef: @QName: NodeList @AliasFor: tc|NodeList - @For: ManakaiDOM|ManakaiDOM ResourceDef: @QName: StaticNodeList @AliasFor: tc|StaticNodeList - @For: ManakaiDOM|ManakaiDOM ElementTypeBinding: @Name: enDesc @@ -518,7 +487,7 @@ @@Value: @@@@: 1 @@@ContentType: DISCore|Boolean - @@Type: idl|boolean||ManakaiDOM|all + @@Type: idl|boolean ElementTypeBinding: @Name: FalseCase @@ -530,7 +499,7 @@ @@Value: @@@@: 0 @@@ContentType: DISCore|Boolean - @@Type: idl|boolean||ManakaiDOM|all + @@Type: idl|boolean ## -- Features @@ -540,7 +509,6 @@ dis:ResourceDef @ShadowContent: @@DISCore:resourceType: f|Feature - @@For: =ManakaiDOM|all ElementTypeBinding: @Name: FeatureVerDef @@ -567,18 +535,32 @@ @@enDesc: The Atom DOM, version 1.0. +FeatureDef: + @featureQName: fe|AtomThreading + @QName: AtomThreadingFeature + @FeatureVerDef: + @@QName: AtomThreadingFeature10 + @@Version: 1.0 + @@f:instanceOf: AtomThreadingFeature + @@f:requires: fe|AtomFeature10 + @@enDesc: + The Atom Threading Extension DOM, version 1.0. + ## -- Modules ModuleSetDef: @QName: Atom - @mv:id: atom - @mv:vid: 10 @enLN: Atom @mv:version: 1.0 @mv:contains: AtomDatatypes @mv:contains: AtomProperties @mv:contains: AtomEntry @mv:contains: AtomFeed + @mv:contains: AtomQName + + @mv:targetNamespace: atom| + @mv:defaultNamespacePrefix: atom + @mv:systemIdentifierBaseURI: \ ModuleDef: @QName: AtomFeed @@ -625,9 +607,12 @@ @mv:contains: atomMediaType @mv:contains: atomLanguageTag @mv:contains: atomUri + @mv:contains: atomUriCM @mv:contains: atomEmailAddress + @mv:contains: atomEmailAddressCM @mv:contains: undefinedAttributes + @mv:contains: undefinedContent @mv:contains: atomCommonAttributes @mv:contains: simpleExtensionElements @@ -646,6 +631,28 @@ @mv:contains: DateAG @mv:contains: DateCM + +ResourceDef: + @QName: AtomQName + @enLN: Qualified Names + @mv:id: qname + @DISCore:resourceType: mv|XMLDTDQNameModule + + @mv:contains: Atom + +ResourceDef: + @QName: Atom10 + @enLN: Atom 1.0 + @mv:id: atom10 + @DISCore:resourceType: mv|XMLDTDDriver + + @mv:refers: Atom + + @mv:refers: AtomQName + @mv:refers: AtomDatatypes + @mv:refers: AtomProperties + @mv:refers: AtomEntry + @mv:refers: AtomFeed ElementTypeBinding: @Name: ModuleSetDef @@ -653,7 +660,6 @@ dis:ResourceDef @ShadowContent: @@DISCore:resourceType: mv|XMLDTDModuleSet - @@For: =ManakaiDOM|ManakaiDOMLatest ElementTypeBinding: @Name: ModuleDef @@ -661,7 +667,6 @@ dis:ResourceDef @ShadowContent: @@DISCore:resourceType: mv|XMLDTDModule - @@For: =ManakaiDOM|ManakaiDOMLatest ## -- Implementation @@ -669,36 +674,34 @@ @IFQName: AtomImplementation @ClsQName: ManakaiAtomImplementation - @IFISA: c|DOMImplementation - @ClsISA: c|ManakaiDOMImplementation + @domperl:implementedByObjectsOf: c|DOMImplementation + @domperl:classImplementedByObjectsOf: c|ManakaiDOMImplementation @enDesc: The interface provides convenience methods to create Atom documents. @f:provides: AtomFeature10 + @f:implements: AtomFeature10 @Test: @@QName: AtomImplementation.interface.test @@PerlDef: for my $interface ( , - , , - , - , , ) { $test->id ($interface); $test->assert_true - (->isa ($interface)); + (->isa ($interface)); } @Test: @@QName: ImplementationRegistry.AtomImplementation.1.test @@PerlDef: require Message::Markup::Atom; my $impl = $Message::DOM::ImplementationRegistry - ->get_implementation ({ + ->get_dom_implementation ({ => '1.0', }); @@ -708,7 +711,7 @@ @@PerlDef: require Message::Markup::Atom; my $impl = $Message::DOM::ImplementationRegistry - ->get_implementation ({ + ->get_dom_implementation ({ Core => '3.0', => '1.0', }); @@ -719,7 +722,7 @@ @@PerlDef: require Message::Markup::Atom; my $impl = $Message::DOM::ImplementationRegistry - ->get_implementation ({ + ->get_dom_implementation ({ XML => '3.0', => '1.0', }); @@ -755,7 +758,7 @@ The implementation treate as if an empty string is specified. @@Return: - @@@Type: AtomFeedDocument + @@@Type: AtomDocument @@@enDesc: The newly created Atom Feed Document. @@ -938,7 +941,7 @@ The implementation treate as if an empty string is specified. @@Return: - @@@Type: AtomEntryDocument + @@@Type: AtomDocument @@@enDesc: The newly created Atom Entry Document. @@ -1481,118 +1484,137 @@ attribute should be provided for published and created? } -##AtomImplementation -IFClsDef: - @IFQName: AtomDocument - @ClsQName: ManakaiAtomDocument + @CODE: + @@QName: getReflectAttrNonNegativeIntegerValue + @@enDesc: + {P:: If a DOM attribute is defined to attribute> + of the node , the getter of the attribute + return the value defined by the algorithm: + + {OLI:: If the contains an attribute node whose name + is : + + = If the of the is + one or more sequence of digits (, + , ..., ) optionally + preceding by a , then + the attribute getter return a value + by interpreting the of the + as a decimal number. - @IFISA: Document - @ClsISA: td|ManakaiDOMDocument + } - @s:rootElementType: AnyAtomElement||ManakaiDOM|all + = If a default value is explicitly defined + where this algorithm is referenced, it + return the default value. - @enDesc: - If the feature version - is supported, a object whose 's - , if any, is at least - at the time of creation also - implement the interface. Other - objects also implement - the interface. + = Otherwise, it return a binding-specific + default value, if it is defined by the specification + of the binding, or . - @Test: - @@QName: createDocument.AtomDocument.test - @@PerlDef: - my $impl; - __CODE{tc|createImplForTest:: $impl => $impl}__; - - my $doc = $impl-> - (, 'unknown'); + } - $test->id ('interface'); - $test->assert_isa ($doc, ); -##AtomDocument + {NOTE:: + In Atom Threading Extension , + the and leading s + are prohibitted. + } + @@PerlDef: + __DEEP{ + E: { + $r = $node-> ($namespaceURI, $localName); + if (defined $r) { + if ($r =~ /\A\+?([0-9]+)\z/) { + $r = 0+$1; + last E; + } + } -IFClsDef: - @IFQName: AtomFeedDocument - @ClsQName: ManakaiFeedEntryDocument + $r = $defaultValue; + $r = -1 unless defined $r; + } # E + }__; - @IFISA: AtomDocument - @ClsISA: ManakaiAtomDocument + @CODE: + @@QName: setReflectAttrNonNegativeIntegerValue + @@enDesc: + {P:: If a DOM attribute is defined to attribute> of the node , + the setter of the attribute modify the node as + defined by the algorithm: - @s:rootElementType: - @@@: atom|feed - @@DISCore:stopISARecursive: 1 + = If the given value is or one of binding-specific + default values, if any, as defined by the specification + of the binding, it + remove the attribute node, if any, + from the list of attribute nodes of . - @enDesc: - The interface provides convenience - methods and attributes for an Atom - Feed Document, i.e. representation of an Atom feed. + = Otherwise, it set the + attribute node value to a string representation + of the given value as if + the method were invoked. + The string representation be a decimal + number consist of one or more sequence of digits + (, , ..., ) + any leading . + The be omitted. - If the feature version - is supported, a object whose 's - element type, if any, is at least at - the time of creation also - implement the interface. Other - objects also implement - the interface. + } - @Test: - @@QName: createDocument.AtomFeedDocument.test + {NOTE:: + It might throw an exception. + } @@PerlDef: - my $impl; - __CODE{tc|createImplForTest:: $impl => $impl}__; - - my $doc = $impl-> - (, 'feed'); - - $test->id ('interface'); - $test->assert_isa ($doc, ); -##AtomFeedDocument + __DEEP{ + if (defined $given and $given >= 0) { + $node-> + ($namespaceURI, $localName, 0+$given); + } else { + $node-> ($namespaceURI, $localName); + } + }__; +##AtomImplementation IFClsDef: - @IFQName: AtomEntryDocument - @ClsQName: ManakaiAtomEntryDocument + @IFQName: AtomDocument + @ClsQName: ManakaiAtomDocument - @IFISA: AtomDocument - @ClsISA: ManakaiAtomDocument + @domperl:implementedByObjectsOf: Document + @domperl:classImplementedByObjectsOf: td|ManakaiDOMDocument - @s:rootElementType: - @@@: atom|entry - @@DISCore:stopISARecursive: 1 + @f:implements: AtomFeature10 @enDesc: - The interface provides convenience - methods and attributes for an Atom - Entry Document, i.e. exactly one Atom entry, outside - of the context of an Atom feed. - If the feature version is supported, a object whose 's - element type, if any, is at least at - the time of the creation also - implement the interface. Other - objects also implement - the interface. + , if any, is at least + at the time of creation also + implement the interface. Other + objects also implement + the interface. @Test: - @@QName: createDocument.AtomEntryDocument.test + @@QName: createDocument.AtomDocument.test @@PerlDef: my $impl; __CODE{tc|createImplForTest:: $impl => $impl}__; my $doc = $impl-> - (, 'entry'); + (, 'unknown'); $test->id ('interface'); - $test->assert_isa ($doc, ); -##AtomEntryDocument + $test->assert_isa ($doc, ); +##AtomDocument AGDef: @QName: atomCommonAttributes @enFN: common attributes @mv:attributeTypeGroupName: common + + @mv:refers: Atom @ATDef: @@mv:attributeTypeName: xml|base @@ -1627,12 +1649,20 @@ @QName: atomUri @mv:datatypeEntityName: URI #aliasfor text +STCDef: + @QName: atomUriCM + @mv:elementContentModelName: URI + @cm: (dxm|PCDATA)* STDef: @QName: atomEmailAddress @mv:datatypeEntityName: EmailAddress #subsetOf xsd|string #pattern +STCDef: + @QName: atomEmailAddressCM + @mv:elementContentModelName: EmailAddress + @cm: (dxm|PCDATA)* ElementTypeBinding: @Name: AGDef @@ -1640,7 +1670,6 @@ dis:ResourceDef @ShadowContent: @@DISCore:resourceType: mv|AttributeTypeGroup - @@For: =ManakaiDOM|ManakaiDOMLatest ElementTypeBinding: @Name: ATDef @@ -1648,7 +1677,6 @@ dis:ResourceDef @ShadowContent: @@DISCore:resourceType: mv|AttributeType - @@For: =ManakaiDOM|ManakaiDOMLatest ElementTypeBinding: @Name: ECDef @@ -1656,7 +1684,6 @@ dis:ResourceDef @ShadowContent: @@DISCore:resourceType: mv|ElementTypeClass - @@For: =ManakaiDOM|ManakaiDOMLatest ElementTypeBinding: @Name: EMDef @@ -1664,7 +1691,6 @@ dis:ResourceDef @ShadowContent: @@DISCore:resourceType: mv|ElementTypeClassMix - @@For: =ManakaiDOM|ManakaiDOMLatest ElementTypeBinding: @Name: STDef @@ -1672,7 +1698,13 @@ dis:ResourceDef @ShadowContent: @@DISCore:resourceType: mv|XMLDTDDatatypeEntity - @@For: =ManakaiDOM|ManakaiDOMLatest + +ElementTypeBinding: + @Name: STCDef + @ElementType: + dis:ResourceDef + @ShadowContent: + @@DISCore:resourceType: mv|ElementContentModel IFClsDef: @IFQName: AtomElement @@ -1681,7 +1713,8 @@ @IFISA: Element @ClsISA: te|ManakaiDOMElement - @s:elementType: AnyAtomElement||ManakaiDOM|all + @f:implements: AtomFeature10 + @s:elementType: AnyAtomElement @enDesc: The interface provides convenience @@ -1706,7 +1739,6 @@ @@PerlDef: for my $interface ( , - , , , , @@ -1732,6 +1764,13 @@ @@ContentType: DISCore|QName @ForCheck: =ManakaiDOM|all +ElementTypeBinding: + @Name: cm + @ElementType: + mv:elementContentModel + @ShadowContent: + @@ContentType: lang|dcmodel + IFClsConstructDef: @IFQName: AtomTextConstruct @ClsQName: ManakaiAtomTextConstruct @@ -1743,6 +1782,18 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 + @mv:refers: atomCommonAttributes + + @cm: + dxm|ANY + @enImplNote: + @@ddid:cm + @@@: + {TODO:: + (dxm|PCDATA | html|div)* + } + @enDesc: The interface provides convenience methods and attributes for nodes @@ -1873,6 +1924,12 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 + @mv:refers: atomCommonAttributes + + @cm: + (person-prop+) + @enDesc: The interface provides convenience methods and attributes for nodes @@ -2024,6 +2081,18 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 + @mv:refers: atomCommonAttributes + + @cm: + (dxm|PCDATA)* + @enImplNote: + @@ddid: cm + @@@: + {TODO:: + xsd|dateTime + } + @enDesc: The interface provides convenience methods and attributes for nodes @@ -2120,6 +2189,12 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 + @mv:refers: atomCommonAttributes + + @cm: + (feed-prop+, atom|entry*) + @enDesc: The element is the document element of an Atom Feed Document. @@ -2723,6 +2798,8 @@ (, 'updated'); $updatede-> (scalar time); $r-> ($updatede); + + $self-> ($r); }__; @@Test: @@ -2789,6 +2866,9 @@ $test->assert_num_not_equals (actual_value => $updated->, expected_value => 0); + + $test->id ('parent'); + $test->assert_equals ($ent->, $feed); @@Test: @@@QName: AtomFeedElement.addNewEntry.2.test @@@enDesc: @@ -2833,6 +2913,12 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 + @mv:refers: atomCommonAttributes + + @cm: + (entry-prop+) + @enDesc: The element represents an individual entry, acting as a container for metadata and data @@ -3005,7 +3091,9 @@ $test->assert_num_equals (actual_value => 0+@$list, expected_value => 0); $test->id ('parent'); + my $parent; for ($doc-> (, 'feed')) { + $parent = $_; $_-> ($doc-> (, 'author')); $_-> @@ -3025,7 +3113,9 @@ my $el = $doc-> (, 'entry'); $test->id ('parent'); + my $parent; for ($doc-> (, 'feed')) { + $parent = $_; $_-> ($doc-> (, 'author')); $_-> @@ -3360,6 +3450,11 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + + @f:implements: AtomFeature10 + @mv:refers: atomCommonAttributes + + @cm: atomUriCM ##AtomIdElement IFClsETDef: @@ -3370,6 +3465,11 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + + @f:implements: AtomFeature10 + @mv:refers: atomCommonAttributes + + @cm: atomUriCM ##AtomIconElement IFClsETDef: @@ -3380,6 +3480,12 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + + @f:implements: AtomFeature10 + # no common attribs + @cm: TextCM + + @mv:refers: Atom ##AtomNameElement IFClsETDef: @@ -3390,6 +3496,12 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + + @f:implements: AtomFeature10 + # no common attribs + @cm: atomUriCM + + @mv:refers: Atom ##AtomUriElement IFClsETDef: @@ -3400,6 +3512,12 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + + @f:implements: AtomFeature10 + # no common attribs + @cm: atomEmailAddressCM + + @mv:refers: Atom ##AtomEmailElement IFClsETDef: @@ -3410,6 +3528,11 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + + @f:implements: AtomFeature10 + @mv:refers: atomCommonAttributes + + @cm: atomUriCM ##AtomLogoElement IFClsETDef: @@ -3421,11 +3544,17 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 + @mv:refers: atomCommonAttributes + + @cm: + dxm|ANY + @enDesc: The element either contains or links to the content of the entry. - @Attr: + @ATTR: @@Name: type @@enDesc: The type of the element. @@ -3490,7 +3619,7 @@ $el-> (null); $test->assert_null ($el->); - @Attr: + @ATTR: @@Name: src @@enDesc: The source of the remote content of the element. @@ -3669,6 +3798,8 @@ @IFISA: AtomPersonConstruct @ClsISA: ManakaiAtomPersonConstruct + + @f:implements: AtomFeature10 @mv:refers: PersonAG @mv:elementContentModel: PersonCM @@ -3686,6 +3817,11 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 + @mv:refers: atomCommonAttributes + + @cm: undefinedContent + @enDesc: The element conveys information abut a category associated with an entry or feed. @@ -3799,6 +3935,8 @@ @IFISA: AtomPersonConstruct @ClsISA: ManakaiAtomPersonConstruct + + @f:implements: AtomFeature10 @mv:refers: PersonAG @mv:elementContentModel: PersonCM @@ -3817,6 +3955,12 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 + @mv:refers: atomCommonAttributes + + @cm: + (dxm|PCDATA)* + @enDesc: The element identifies the agent used to generate a feed. @@ -3898,6 +4042,11 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 + @mv:refers: atomCommonAttributes + + @cm: undefinedContent + @enDesc: The element defines a reference from an entry or feed to a Web resource. @@ -4029,6 +4178,18 @@ of the attribute> of the node. @@Type: DOMString @@Get: + @@@enDesc: + {P:: If the feature + is supported, the attribute getter return + the string when both of the + following conditions are met: + + - The attribute getter would otherwise return . + + - The attribute contains + a string value of . + + } @@@nullCase: @@@@enDesc: If the algorithm returns . @@ -4040,6 +4201,15 @@ $r => $r, $defaultValue => {null}, }__; + + unless (defined $r) { + __DEEP{ + my $rel = $self->; + if (defined $rel and $rel eq ) { + $r = q; + } + }__; + } @@Set: @@@nullCase: @@@@enDesc: @@ -4053,6 +4223,74 @@ $given => $given, }__; + @@Test: + @@@QName: AtomLinkElement.type.!rel.test + @@@PerlDef: + my $doc; + __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__; + + my $el = $doc-> (, 'link'); + + $test->id ('implied'); + my $type0 = $el->; + $test->assert_null ($type0); + + $test->id ('explicit'); + $el-> ('application/atom+xml'); + my $type1 = $el->; + $test->assert_equals ($type1, q); + + $test->id ('different'); + $el-> ('application/xhtml+xml'); + my $type2 = $el->; + $test->assert_equals ($type2, q); + @@Test: + @@@QName: AtomLinkElement.type.rel!=replies.test + @@@PerlDef: + my $doc; + __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__; + + my $el = $doc-> (, 'link'); + + $el-> (); + + $test->id ('implied'); + my $type0 = $el->; + $test->assert_null ($type0); + + $test->id ('explicit'); + $el-> ('application/atom+xml'); + my $type1 = $el->; + $test->assert_equals ($type1, q); + + $test->id ('different'); + $el-> ('application/xhtml+xml'); + my $type2 = $el->; + $test->assert_equals ($type2, q); + @@Test: + @@@QName: AtomLinkElement.type.rel=replies.test + @@@PerlDef: + my $doc; + __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__; + + my $el = $doc-> (, 'link'); + + $el-> (); + + $test->id ('implied'); + my $type0 = $el->; + $test->assert_equals ($type0, q); + + $test->id ('explicit'); + $el-> ('application/atom+xml'); + my $type1 = $el->; + $test->assert_equals ($type1, q); + + $test->id ('different'); + $el-> ('application/xhtml+xml'); + my $type2 = $el->; + $test->assert_equals ($type2, q); + @ATTR: @@Name: hreflang @@enDesc: @@ -4161,6 +4399,8 @@ @IFISA: AtomDateConstruct @ClsISA: ManakaiAtomDateConstruct + + @f:implements: AtomFeature10 @mv:refers: DateAG @mv:elementContentModel: DateCM @@ -4181,6 +4421,8 @@ @IFISA: AtomTextConstruct @ClsISA: ManakaiAtomTextConstruct + + @f:implements: AtomFeature10 @mv:refers: TextAG @mv:elementContentModel: TextCM @@ -4216,6 +4458,12 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 + @mv:refers: atomCommonAttributes + + @cm: + (source-prop*) + @Attr: @@Name: authorElements @@enDesc: @@ -4425,6 +4673,8 @@ @IFISA: AtomTextConstruct @ClsISA: ManakaiAtomTextConstruct + + @f:implements: AtomFeature10 @mv:refers: TextAG @mv:elementContentModel: TextCM @@ -4441,6 +4691,8 @@ @IFISA: AtomTextConstruct @ClsISA: ManakaiAtomTextConstruct + + @f:implements: AtomFeature10 @mv:refers: TextAG @mv:elementContentModel: TextCM @@ -4457,6 +4709,8 @@ @IFISA: AtomTextConstruct @ClsISA: ManakaiAtomTextConstruct + + @f:implements: AtomFeature10 @mv:refers: TextAG @mv:elementContentModel: TextCM @@ -4473,6 +4727,8 @@ @IFISA: AtomDateConstruct @ClsISA: ManakaiAtomDateConstruct + + @f:implements: AtomFeature10 @mv:refers: DateAG @mv:elementContentModel: DateCM @@ -4549,7 +4805,6 @@ ResourceDef: @QName: CFG @AliasFor: c|DOMConfiguration - @For: ManakaiDOM|DOM3 ElementTypeBinding: @Name: boolCParam @@ -4558,13 +4813,9 @@ @ShadowContent: @@DISCore:resourceType: @@@@: c|DOMConfigurationParameter - @@@For: ManakaiDOM|DOM @@DISCore:resourceType: @@@@: DISCore|Property - @@@For: =ManakaiDOM|all - @@For: ManakaiDOM|DOM3 - @@For: =ManakaiDOM|all - @@Type: idl|boolean||ManakaiDOM|all + @@Type: idl|boolean ECDef: @QName: simpleExtensionElements @@ -4587,3 +4838,452 @@ @QName: undefinedAttributes @mv:attributeTypeGroupName: common.extra +ResourceDef: + @QName: undefinedContent + @mv:elementContentModelName: undefined + @DISCore:resourceType: mv|ElementContentModel + @cm: dxm|ANY + @enImplNote: + (text | anyForeignElement)* + +## -- Atom Threading Extension [RFC 4685] + +IFClsDef: + @IFQName: AtomEntryElementThread + @ClsQName: ManakaiAtomEntryElementThread + + @ClsISA: ManakaiAtomEntryElement + + @f:implements: AtomThreadingFeature10 + + @enDesc: + If the feature + is supported, any whose element type + is implement the + interface in addition to other appropriate interfaces. + + @Test: + @@QName: AtomEntryElementThread.1.test + @@PerlDef: + my $doc; + __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__; + + my $el = $doc->create_element_ns (, 'entry'); + + $test->id ('interface'); + $test->assert_isa ($el, ); + + $test->id ('feature'); + $test->assert_true ($el->is_supported ( => '1.0')); + + @Attr: + @@Name: threadInReplyToElements + @@enDesc: + A static list of child elements of the node. + @@Type: StaticNodeList + @@Get: + @@@enDesc: + It child element list> + of the node. + @@@PerlDef: + __CODE{returnChildElementList:: + $node => $self, + $namespaceURI => {}, + $localName => 'in-reply-to', + $r => $r, + }__; +##AtomEntryElementThread + +IFClsETDef: + @IFQName: AtomThreadInReplyToElement + @ETQName: thr|in-reply-to + @ETRQName: thr|in-reply-to + @ClsQName: ManakaiAtomThreadInReplyToElement + + @IFISA: AtomDateConstruct + @ClsISA: ManakaiAtomDateConstruct + + @f:implements: AtomThreadingFeature10 + @mv:refers: atomCommonAttributes + + @cm: undefinedContent + + @enDesc: + The element is used to indicate + that an entry is a response to another resource. + + If the entry is a response to multiple resources, + additional element + be used. + + RFC 4685 assigns no significance to the order in which + multiple element appear within + an entry. + + @Test: + @@QName: AtomThreadInReplyToElement.1.test + @@PerlDef: + my $doc; + __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__; + + my $el = $doc->create_element_ns (, 'in-reply-to'); + + $test->id ('interface'); + $test->assert_isa ($el, ); + + $test->id ('feature'); + $test->assert_true ($el->is_supported ( => '1.0')); + + @ATTR: + @@Name: ref + @@enDesc: + The attribute of the element. + + It attribute> of the node. + + The attribute specifies the persistent, + universally unique identifier of the resource being + responded to. The value conform to + the same construction and comparison rules as the + value of the element. Though the IRI + might use a dereferenceable scheme, processors + assume that it can be dereferenced. + + The element contain + a attribute identifying the resource that + is being respnoded to. + + If the resource being responded to does not have a persistent, + universally unique identifier, the publisher assign an + identifier that satisfies all the considerations in Section 4.2.6 of + RFC 4287 for use as the value of the attribute. + In that case, if a representation of the resource can be retrieved + from an IRI that can be used as a valid atom:id value, then this IRI + be used as the value of both the and + attributes. + @@Type: DOMString + @@actualType: DOMURI + @@Get: + @@@nullCase: + @@@@enDesc: + If the algorithm returns . + @@@PerlDef: + __CODE{getReflectAttrURIValue:: + $node => $self, + $namespaceURI => {null}, + $localName => 'ref', + $r => $r, + $defaultValue => {null}, + }__; + @@Set: + @@@nullCase: + @@@@enDesc: + Removes the attribute. + @@@NodeReadOnlyError: + @@@PerlDef: + __CODE{setReflectAttrURIValue:: + $node => $self, + $namespaceURI => {null}, + $localName => 'ref', + $given => $given, + }__; + + @ATTR: + @@Name: source + @@enDesc: + The attribute of the element. + + It attribute> of the node. + + The attribute be used to specify the IRI + of an Atom Feed or Entry Document containing an + with an value equal to the + value of the attribute. The IRI specified + be dereferenceable. + @@Type: DOMString + @@actualType: DOMURI + @@Get: + @@@nullCase: + @@@@enDesc: + If the algorithm returns . + @@@PerlDef: + __CODE{getReflectAttrURIValue:: + $node => $self, + $namespaceURI => {null}, + $localName => 'source', + $r => $r, + $defaultValue => {null}, + }__; + @@Set: + @@@nullCase: + @@@@enDesc: + Removes the attribute. + @@@NodeReadOnlyError: + @@@PerlDef: + __CODE{setReflectAttrURIValue:: + $node => $self, + $namespaceURI => {null}, + $localName => 'source', + $given => $given, + }__; + + @ATTR: + @@Name: href + @@enDesc: + The attribute of the element. + + It attribute> of the node. + + The attribute specifies an IRI that may be used + to retrieve a representation of the resource being + responded to. The IRI specified be + dereferenceable. + @@Type: DOMString + @@actualType: DOMURI + @@Get: + @@@nullCase: + @@@@enDesc: + If the algorithm returns . + @@@PerlDef: + __CODE{getReflectAttrURIValue:: + $node => $self, + $namespaceURI => {null}, + $localName => 'href', + $r => $r, + $defaultValue => {null}, + }__; + @@Set: + @@@nullCase: + @@@@enDesc: + Removes the attribute. + @@@NodeReadOnlyError: + @@@PerlDef: + __CODE{setReflectAttrURIValue:: + $node => $self, + $namespaceURI => {null}, + $localName => 'href', + $given => $given, + }__; + + @ATTR: + @@Name: type + @@enDesc: + The attribute of the element. + + It attribute> of the node. + + The attribute be used to provide + a hint to the client about the media type of the + resource identified by the attribute. + The attribute is only meaningful if a + corresponding attribute is also provided. + @@Type: DOMString + @@Get: + @@@nullCase: + @@@@enDesc: + If the algorithm returns . + @@@PerlDef: + __CODE{getReflectAttrStringValue:: + $node => $self, + $namespaceURI => {null}, + $localName => 'type', + $r => $r, + $defaultValue => {null}, + }__; + @@Set: + @@@nullCase: + @@@@enDesc: + Removes the attribute. + @@@NodeReadOnlyError: + @@@PerlDef: + __CODE{setReflectAttrStringValue:: + $node => $self, + $namespaceURI => {null}, + $localName => 'type', + $given => $given, + }__; +##AtomThreadInReplyToElement + +IFClsDef: + @IFQName: AtomLinkElementThread + @ClsQName: ManakaiAtomLinkElementThread + + @ClsISA: ManakaiAtomLinkElement + + @f:implements: AtomThreadingFeature10 + + @enDesc: + An element with a attribute value of + may be used to reference a resource where responses + to an entry may be found. If the attribute of the + is omitted, its value is assumed to be + . + + A link appearing as a child of the + or element indicates that the referenced + resource likely contains responses to any of that + feed's entries. A + link appearing as a child of an element + indicates that the linked resource likely contains responses + specific to that entry. + + If the feature + is supported, any whose element type + is implement the + interface in addition to other appropriate interfaces. + + @Test: + @@QName: AtomLinkElementThread.1.test + @@PerlDef: + my $doc; + __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__; + + my $el = $doc->create_element_ns (, 'link'); + + $test->id ('interface'); + $test->assert_isa ($el, ); + + $test->id ('feature'); + $test->assert_true ($el->is_supported ( => '1.0')); + + @ATTR: + @@Name: threadCount + @@enDesc: + The attribute of the element. + + It attribute> of the node. + + An element using the + attribute value contain + a attribute whose value is a + non-negative integer that provides a hint to clients + as to the total number of replies contained by the + linked resource. The value is advisory and + may not accurately reflect the actual number of replies. + @@Type: idl|long + @@Get: + @@@PerlDef: + __CODE{getReflectAttrNonNegativeIntegerValue:: + $node => $self, + $namespaceURI => {}, + $localName => 'count', + $r => $r, + $defaultValue => {null}, + }__; + @@Set: + @@@NodeReadOnlyError: + @@@PerlDef: + __CODE{setReflectAttrNonNegativeIntegerValue:: + $node => $self, + $namespaceURI => {}, + $localName => 'count', + $given => $given, + }__; + + @@Test: + @@@QName: AtomLinkElementThread.threadCount.1.test + @@@PerlDef: + my $doc; + __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__; + + my $link = $doc->create_element_ns (, 'link'); + + $test->id ('default'); + $test->assert_num_equals + (expected_value => -1, + actual_value => + $link->); + + $test->id ('zero'); + $link-> (0); + $test->assert_num_equals + (expected_value => 0, + actual_value => + $link->); + $test->id ('zero.attr'); + $test->assert_equals ($link->get_attribute_ns (, 'count'), '0'); + + $test->id ('one'); + $link-> (1); + $test->assert_num_equals + (expected_value => 1, + actual_value => + $link->); + $test->id ('one.attr'); + $test->assert_equals ($link->get_attribute_ns (, 'count'), '1'); + + $test->id ('10000'); + $link-> (10000); + $test->assert_num_equals + (expected_value => 10000, + actual_value => + $link->); + $test->id ('10000.attr'); + $test->assert_equals ($link->get_attribute_ns (, 'count'), + '10000'); + + $test->id ('+10000'); + $link->set_attribute_ns (, 'thr:count', '+10000'); + $test->assert_num_equals + (expected_value => 10000, + actual_value => + $link->); + + $test->id ('010000'); + $link->set_attribute_ns (, 'thr:count', '010000'); + $test->assert_num_equals + (expected_value => 10000, + actual_value => + $link->); + + $test->id ('-100'); + $link-> (-100); + $test->assert_num_equals + (expected_value => -1, + actual_value => + $link->); + $test->id ('-100.attr'); + $test->assert_false ($link->has_attribute_ns (, 'count')); + + $test->id ('120a'); + $link->set_attribute_ns (, 'thr:count', '120a'); + $test->assert_num_equals + (expected_value => -1, + actual_value => + $link->); + + $test->id ('-1'); + $link-> (-1); + $test->assert_num_equals + (expected_value => -1, + actual_value => + $link->); + $test->id ('-1.attr'); + $test->assert_false ($link->has_attribute_ns (, 'count')); + + @enImplNote: + @@ddid: updated + @@@: + {TODO:: + attribute + } +##AtomLinkElementThread + +enImplNote: + @@ddid: total + @@@: + {TODO:: + + } + +enImplNote: + @@ddid: threaddtd + @@@: + {TODO:: + DTD impl for threading + }