| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- //------------------------------------------------------------
- // 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);
- }
- }
- }
|