e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
138 lines
4.9 KiB
C#
138 lines
4.9 KiB
C#
//------------------------------------------------------------
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//------------------------------------------------------------
|
|
|
|
namespace System.ServiceModel.Syndication
|
|
{
|
|
using System.Collections.ObjectModel;
|
|
using System.Collections.Generic;
|
|
using System.Runtime.Serialization;
|
|
using System.Xml.Serialization;
|
|
using System.Xml;
|
|
|
|
// NOTE: This class implements Clone so if you add any members, please update the copy ctor
|
|
struct ExtensibleSyndicationObject : IExtensibleSyndicationObject
|
|
{
|
|
Dictionary<XmlQualifiedName, string> attributeExtensions;
|
|
SyndicationElementExtensionCollection elementExtensions;
|
|
|
|
ExtensibleSyndicationObject(ExtensibleSyndicationObject source)
|
|
{
|
|
if (source.attributeExtensions != null)
|
|
{
|
|
this.attributeExtensions = new Dictionary<XmlQualifiedName, string>();
|
|
foreach (XmlQualifiedName key in source.attributeExtensions.Keys)
|
|
{
|
|
this.attributeExtensions.Add(key, source.attributeExtensions[key]);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.attributeExtensions = null;
|
|
}
|
|
if (source.elementExtensions != null)
|
|
{
|
|
this.elementExtensions = new SyndicationElementExtensionCollection(source.elementExtensions);
|
|
}
|
|
else
|
|
{
|
|
this.elementExtensions = null;
|
|
}
|
|
}
|
|
|
|
public Dictionary<XmlQualifiedName, string> AttributeExtensions
|
|
{
|
|
get
|
|
{
|
|
if (this.attributeExtensions == null)
|
|
{
|
|
this.attributeExtensions = new Dictionary<XmlQualifiedName, string>();
|
|
}
|
|
return this.attributeExtensions;
|
|
}
|
|
}
|
|
|
|
public SyndicationElementExtensionCollection ElementExtensions
|
|
{
|
|
get
|
|
{
|
|
if (this.elementExtensions == null)
|
|
{
|
|
this.elementExtensions = new SyndicationElementExtensionCollection();
|
|
}
|
|
return this.elementExtensions;
|
|
}
|
|
}
|
|
|
|
static XmlBuffer CreateXmlBuffer(XmlDictionaryReader unparsedExtensionsReader, int maxExtensionSize)
|
|
{
|
|
XmlBuffer buffer = new XmlBuffer(maxExtensionSize);
|
|
using (XmlDictionaryWriter writer = buffer.OpenSection(unparsedExtensionsReader.Quotas))
|
|
{
|
|
writer.WriteStartElement(Rss20Constants.ExtensionWrapperTag);
|
|
while (unparsedExtensionsReader.IsStartElement())
|
|
{
|
|
writer.WriteNode(unparsedExtensionsReader, false);
|
|
}
|
|
writer.WriteEndElement();
|
|
}
|
|
buffer.CloseSection();
|
|
buffer.Close();
|
|
return buffer;
|
|
}
|
|
|
|
internal void LoadElementExtensions(XmlReader readerOverUnparsedExtensions, int maxExtensionSize)
|
|
{
|
|
if (readerOverUnparsedExtensions == null)
|
|
{
|
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("readerOverUnparsedExtensions");
|
|
}
|
|
if (maxExtensionSize < 0)
|
|
{
|
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("maxExtensionSize"));
|
|
}
|
|
XmlDictionaryReader r = XmlDictionaryReader.CreateDictionaryReader(readerOverUnparsedExtensions);
|
|
this.elementExtensions = new SyndicationElementExtensionCollection(CreateXmlBuffer(r, maxExtensionSize));
|
|
}
|
|
|
|
|
|
internal void LoadElementExtensions(XmlBuffer buffer)
|
|
{
|
|
this.elementExtensions = new SyndicationElementExtensionCollection(buffer);
|
|
}
|
|
|
|
internal void WriteAttributeExtensions(XmlWriter writer)
|
|
{
|
|
if (writer == null)
|
|
{
|
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("writer");
|
|
}
|
|
if (this.attributeExtensions != null)
|
|
{
|
|
foreach (XmlQualifiedName qname in this.attributeExtensions.Keys)
|
|
{
|
|
string value = this.attributeExtensions[qname];
|
|
writer.WriteAttributeString(qname.Name, qname.Namespace, value);
|
|
}
|
|
}
|
|
}
|
|
|
|
internal void WriteElementExtensions(XmlWriter writer)
|
|
{
|
|
if (writer == null)
|
|
{
|
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("writer");
|
|
}
|
|
if (this.elementExtensions != null)
|
|
{
|
|
this.elementExtensions.WriteTo(writer);
|
|
}
|
|
}
|
|
|
|
public ExtensibleSyndicationObject Clone()
|
|
{
|
|
return new ExtensibleSyndicationObject(this);
|
|
}
|
|
}
|
|
}
|