--- messaging/manakai/lib/Message/Markup/Atom.dis 2006/09/10 11:19:24 1.13 +++ messaging/manakai/lib/Message/Markup/Atom.dis 2006/12/30 13:25:34 1.24 @@ -43,22 +43,15 @@ @DISCore:author: DISCore|Wakaba @License: license|Perl+MPL @Date: - $Date: 2006/09/10 11:19:24 $ + $Date: 2006/12/30 13:25:34 $ @Require: @@Module: @@@QName: Markup|common @@Module: @@@QName: MDOM|TreeCore - @@@WithFor: ManakaiDOM|ManakaiDOMLatest - @@Module: - @@@WithFor: ManakaiDOM|ManakaiDOM - @@Module: - @@@WithFor: ManakaiDOM|ManakaiDOMLatest @@Module: @@@QName: DISlib|DISMarkup - @@@WithFor: ManakaiDOM|all - @DefaultFor: ManakaiDOM|ManakaiDOMLatest Namespace: @atom: @@ -77,6 +70,8 @@ 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: @@ -119,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: @@ -140,7 +137,6 @@ dis:ResourceDef @ShadowContent: @@DISCore:resourceType: DISLang|Method - @@ForCheck: !=ManakaiDOM|ManakaiDOM ElementTypeBinding: @Name: Param @@ -162,7 +158,6 @@ dis:ResourceDef @ShadowContent: @@DISCore:resourceType: DISLang|Attribute - @@ForCheck: !=ManakaiDOM|ManakaiDOM ElementTypeBinding: @Name: ATTR @@ -178,7 +173,6 @@ @@DISCore:resourceType: @@@@: mv|AttributeType @@@ForCheck: s|ForML - @@ForCheck: !=ManakaiDOM|ManakaiDOM ElementTypeBinding: @Name: Get @@ -243,7 +237,6 @@ @@resourceFor: ManakaiDOM|ForIF @@resourceFor: ManakaiDOM|ForClass @@resourceFor: s|ForML - @@For: ManakaiDOM|ManakaiDOM @@DISCore:resourceType: @@@@: DISLang|Interface @@ -252,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 @@ -270,8 +260,6 @@ @@@@: s|ElementType @@@ForCheck: s|ForML - @@f:implements: AtomFeature10 - ElementTypeBinding: @Name: IFClsDef @ElementType: @@ -282,7 +270,6 @@ @@@ForCheck: !ManakaiDOM|ForIF !ManakaiDOM|ForClass !s|ForML @@resourceFor: ManakaiDOM|ForIF @@resourceFor: ManakaiDOM|ForClass - @@For: ManakaiDOM|ManakaiDOM @@DISCore:resourceType: @@@@: DISLang|Interface @@ -291,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 @@ -315,7 +297,6 @@ @@resourceFor: ManakaiDOM|ForClass @@resourceFor: mv|ForCM @@resourceFor: mv|ForAG - @@For: ManakaiDOM|ManakaiDOM @@DISCore:resourceType: @@@@: DISLang|Interface @@ -324,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 @@ -341,7 +319,6 @@ @@@@: mv|ElementContentModel @@@ForCheck: mv|ForCM - @@f:implements: AtomFeature10 ElementTypeBinding: @Name: IFQName @@ -449,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 @@ -519,7 +487,7 @@ @@Value: @@@@: 1 @@@ContentType: DISCore|Boolean - @@Type: idl|boolean||ManakaiDOM|all + @@Type: idl|boolean ElementTypeBinding: @Name: FalseCase @@ -531,7 +499,7 @@ @@Value: @@@@: 0 @@@ContentType: DISCore|Boolean - @@Type: idl|boolean||ManakaiDOM|all + @@Type: idl|boolean ## -- Features @@ -541,7 +509,6 @@ dis:ResourceDef @ShadowContent: @@DISCore:resourceType: f|Feature - @@For: =ManakaiDOM|all ElementTypeBinding: @Name: FeatureVerDef @@ -562,12 +529,23 @@ @QName: AtomFeature @FeatureVerDef: @@QName: AtomFeature10 - @@Version: 1.0 + @@f:version: 1.0 @@f:instanceOf: AtomFeature @@f:requires: tx|XMLFeature30 @@enDesc: The Atom DOM, version 1.0. +FeatureDef: + @featureQName: fe|AtomThreading + @QName: AtomThreadingFeature + @FeatureVerDef: + @@QName: AtomThreadingFeature10 + @@f:version: 1.0 + @@f:instanceOf: AtomThreadingFeature + @@f:requires: fe|AtomFeature10 + @@enDesc: + The Atom Threading Extension DOM, version 1.0. + ## -- Modules ModuleSetDef: @@ -658,7 +636,6 @@ @QName: AtomQName @enLN: Qualified Names @mv:id: qname - @For: =ManakaiDOM|ManakaiDOMLatest @DISCore:resourceType: mv|XMLDTDQNameModule @mv:contains: Atom @@ -667,7 +644,6 @@ @QName: Atom10 @enLN: Atom 1.0 @mv:id: atom10 - @For: =ManakaiDOM|ManakaiDOMLatest @DISCore:resourceType: mv|XMLDTDDriver @mv:refers: Atom @@ -684,7 +660,6 @@ dis:ResourceDef @ShadowContent: @@DISCore:resourceType: mv|XMLDTDModuleSet - @@For: =ManakaiDOM|ManakaiDOMLatest ElementTypeBinding: @Name: ModuleDef @@ -692,7 +667,6 @@ dis:ResourceDef @ShadowContent: @@DISCore:resourceType: mv|XMLDTDModule - @@For: =ManakaiDOM|ManakaiDOMLatest ## -- Implementation @@ -700,36 +674,33 @@ @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', }); @@ -739,7 +710,7 @@ @@PerlDef: require Message::Markup::Atom; my $impl = $Message::DOM::ImplementationRegistry - ->get_implementation ({ + ->get_dom_implementation ({ Core => '3.0', => '1.0', }); @@ -750,7 +721,7 @@ @@PerlDef: require Message::Markup::Atom; my $impl = $Message::DOM::ImplementationRegistry - ->get_implementation ({ + ->get_dom_implementation ({ XML => '3.0', => '1.0', }); @@ -786,7 +757,7 @@ The implementation treate as if an empty string is specified. @@Return: - @@@Type: AtomFeedDocument + @@@Type: AtomDocument @@@enDesc: The newly created Atom Feed Document. @@ -969,7 +940,7 @@ The implementation treate as if an empty string is specified. @@Return: - @@@Type: AtomEntryDocument + @@@Type: AtomDocument @@@enDesc: The newly created Atom Entry Document. @@ -1512,113 +1483,130 @@ 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 @@ -1663,7 +1651,7 @@ STCDef: @QName: atomUriCM @mv:elementContentModelName: URI - @cm: (dxm|PCDATA||ManakaiDOM|all)* + @cm: (dxm|PCDATA)* STDef: @QName: atomEmailAddress @@ -1673,7 +1661,7 @@ STCDef: @QName: atomEmailAddressCM @mv:elementContentModelName: EmailAddress - @cm: (dxm|PCDATA||ManakaiDOM|all)* + @cm: (dxm|PCDATA)* ElementTypeBinding: @Name: AGDef @@ -1681,7 +1669,6 @@ dis:ResourceDef @ShadowContent: @@DISCore:resourceType: mv|AttributeTypeGroup - @@For: =ManakaiDOM|ManakaiDOMLatest ElementTypeBinding: @Name: ATDef @@ -1689,7 +1676,6 @@ dis:ResourceDef @ShadowContent: @@DISCore:resourceType: mv|AttributeType - @@For: =ManakaiDOM|ManakaiDOMLatest ElementTypeBinding: @Name: ECDef @@ -1697,7 +1683,6 @@ dis:ResourceDef @ShadowContent: @@DISCore:resourceType: mv|ElementTypeClass - @@For: =ManakaiDOM|ManakaiDOMLatest ElementTypeBinding: @Name: EMDef @@ -1705,7 +1690,6 @@ dis:ResourceDef @ShadowContent: @@DISCore:resourceType: mv|ElementTypeClassMix - @@For: =ManakaiDOM|ManakaiDOMLatest ElementTypeBinding: @Name: STDef @@ -1713,7 +1697,6 @@ dis:ResourceDef @ShadowContent: @@DISCore:resourceType: mv|XMLDTDDatatypeEntity - @@For: =ManakaiDOM|ManakaiDOMLatest ElementTypeBinding: @Name: STCDef @@ -1721,7 +1704,6 @@ dis:ResourceDef @ShadowContent: @@DISCore:resourceType: mv|ElementContentModel - @@For: =ManakaiDOM|ManakaiDOMLatest IFClsDef: @IFQName: AtomElement @@ -1730,7 +1712,8 @@ @IFISA: Element @ClsISA: te|ManakaiDOMElement - @s:elementType: AnyAtomElement||ManakaiDOM|all + @f:implements: AtomFeature10 + @s:elementType: AnyAtomElement @enDesc: The interface provides convenience @@ -1755,7 +1738,6 @@ @@PerlDef: for my $interface ( , - , , , , @@ -1799,15 +1781,16 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: - dxm|ANY||ManakaiDOM|all + dxm|ANY @enImplNote: @@ddid:cm @@@: {TODO:: - (dxm|PCDATA||ManakaiDOM|all | html|div)* + (dxm|PCDATA | html|div)* } @enDesc: @@ -1940,6 +1923,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: @@ -2096,10 +2080,11 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: - (dxm|PCDATA||ManakaiDOM|all)* + (dxm|PCDATA)* @enImplNote: @@ddid: cm @@@: @@ -2203,6 +2188,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: @@ -2926,6 +2912,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: @@ -3103,7 +3090,9 @@ $test->assert_num_equals (actual_value => 0+@$list, expected_value => 0); $test->id ('parent'); + my $parent; for ($doc-> (, 'feed')) { + $parent = $_; $_-> ($doc-> (, 'author')); $_-> @@ -3123,7 +3112,9 @@ my $el = $doc-> (, 'entry'); $test->id ('parent'); + my $parent; for ($doc-> (, 'feed')) { + $parent = $_; $_-> ($doc-> (, 'author')); $_-> @@ -3459,6 +3450,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: atomUriCM @@ -3473,6 +3465,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: atomUriCM @@ -3487,6 +3480,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 # no common attribs @cm: TextCM @@ -3502,6 +3496,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 # no common attribs @cm: atomUriCM @@ -3517,6 +3512,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 # no common attribs @cm: atomEmailAddressCM @@ -3532,6 +3528,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: atomUriCM @@ -3546,10 +3543,11 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: - dxm|ANY||ManakaiDOM|all + dxm|ANY @enDesc: The element either contains or links to @@ -3799,6 +3797,8 @@ @IFISA: AtomPersonConstruct @ClsISA: ManakaiAtomPersonConstruct + + @f:implements: AtomFeature10 @mv:refers: PersonAG @mv:elementContentModel: PersonCM @@ -3816,6 +3816,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: undefinedContent @@ -3933,6 +3934,8 @@ @IFISA: AtomPersonConstruct @ClsISA: ManakaiAtomPersonConstruct + + @f:implements: AtomFeature10 @mv:refers: PersonAG @mv:elementContentModel: PersonCM @@ -3951,10 +3954,11 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: - (dxm|PCDATA||ManakaiDOM|all)* + (dxm|PCDATA)* @enDesc: The element identifies the agent used @@ -4037,6 +4041,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: undefinedContent @@ -4172,6 +4177,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 . @@ -4183,6 +4200,15 @@ $r => $r, $defaultValue => {null}, }__; + + unless (defined $r) { + __DEEP{ + my $rel = $self->; + if (defined $rel and $rel eq ) { + $r = q; + } + }__; + } @@Set: @@@nullCase: @@@@enDesc: @@ -4196,6 +4222,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: @@ -4304,6 +4398,8 @@ @IFISA: AtomDateConstruct @ClsISA: ManakaiAtomDateConstruct + + @f:implements: AtomFeature10 @mv:refers: DateAG @mv:elementContentModel: DateCM @@ -4324,6 +4420,8 @@ @IFISA: AtomTextConstruct @ClsISA: ManakaiAtomTextConstruct + + @f:implements: AtomFeature10 @mv:refers: TextAG @mv:elementContentModel: TextCM @@ -4359,6 +4457,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: @@ -4573,6 +4672,8 @@ @IFISA: AtomTextConstruct @ClsISA: ManakaiAtomTextConstruct + + @f:implements: AtomFeature10 @mv:refers: TextAG @mv:elementContentModel: TextCM @@ -4589,6 +4690,8 @@ @IFISA: AtomTextConstruct @ClsISA: ManakaiAtomTextConstruct + + @f:implements: AtomFeature10 @mv:refers: TextAG @mv:elementContentModel: TextCM @@ -4605,6 +4708,8 @@ @IFISA: AtomTextConstruct @ClsISA: ManakaiAtomTextConstruct + + @f:implements: AtomFeature10 @mv:refers: TextAG @mv:elementContentModel: TextCM @@ -4621,6 +4726,8 @@ @IFISA: AtomDateConstruct @ClsISA: ManakaiAtomDateConstruct + + @f:implements: AtomFeature10 @mv:refers: DateAG @mv:elementContentModel: DateCM @@ -4697,7 +4804,6 @@ ResourceDef: @QName: CFG @AliasFor: c|DOMConfiguration - @For: ManakaiDOM|DOM3 ElementTypeBinding: @Name: boolCParam @@ -4706,13 +4812,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 @@ -4738,8 +4840,449 @@ ResourceDef: @QName: undefinedContent @mv:elementContentModelName: undefined - @For: =ManakaiDOM|ManakaiDOMLatest @DISCore:resourceType: mv|ElementContentModel - @cm: dxm|ANY||ManakaiDOM|all + @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 + }