File: System\ServiceModel\Syndication\FeedUtils.cs
Web Access
Project: src\src\libraries\System.ServiceModel.Syndication\src\System.ServiceModel.Syndication.csproj (System.ServiceModel.Syndication)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Collections.ObjectModel;
using System.Globalization;
using System.Xml;
 
namespace System.ServiceModel.Syndication
{
    internal static class FeedUtils
    {
        public static string AddLineInfo(XmlReader reader, string error)
        {
            IXmlLineInfo lineInfo = reader as IXmlLineInfo;
            if (lineInfo != null && lineInfo.HasLineInfo())
            {
                error = $"{SR.Format(SR.ErrorInLine, lineInfo.LineNumber, lineInfo.LinePosition)} {error}";
            }
            return error;
        }
 
        internal static Collection<SyndicationCategory> CloneCategories(Collection<SyndicationCategory> categories)
        {
            if (categories == null)
            {
                return null;
            }
            Collection<SyndicationCategory> result = new NullNotAllowedCollection<SyndicationCategory>();
            for (int i = 0; i < categories.Count; ++i)
            {
                result.Add(categories[i].Clone());
            }
            return result;
        }
 
        internal static Collection<SyndicationLink> CloneLinks(Collection<SyndicationLink> links)
        {
            if (links == null)
            {
                return null;
            }
            Collection<SyndicationLink> result = new NullNotAllowedCollection<SyndicationLink>();
            for (int i = 0; i < links.Count; ++i)
            {
                result.Add(links[i].Clone());
            }
            return result;
        }
 
        internal static Collection<SyndicationPerson> ClonePersons(Collection<SyndicationPerson> persons)
        {
            if (persons == null)
            {
                return null;
            }
            Collection<SyndicationPerson> result = new NullNotAllowedCollection<SyndicationPerson>();
            for (int i = 0; i < persons.Count; ++i)
            {
                result.Add(persons[i].Clone());
            }
            return result;
        }
 
        internal static TextSyndicationContent CloneTextContent(TextSyndicationContent content)
        {
            if (content == null)
            {
                return null;
            }
            return (TextSyndicationContent)(content.Clone());
        }
 
        internal static Uri CombineXmlBase(Uri rootBase, string newBase)
        {
            if (string.IsNullOrEmpty(newBase))
            {
                return rootBase;
            }
            Uri newBaseUri = new Uri(newBase, UriKind.RelativeOrAbsolute);
            if (rootBase == null || newBaseUri.IsAbsoluteUri)
            {
                return newBaseUri;
            }
            return new Uri(rootBase, newBase);
        }
 
        internal static Uri GetBaseUriToWrite(Uri rootBase, Uri currentBase)
        {
            Uri uriToWrite;
            if (rootBase == currentBase || currentBase == null)
            {
                uriToWrite = null;
            }
            else if (rootBase == null)
            {
                uriToWrite = currentBase;
            }
            else
            {
                // rootBase != currentBase and both are not null
                // Write the relative base if possible
                if (rootBase.IsAbsoluteUri && currentBase.IsAbsoluteUri && rootBase.IsBaseOf(currentBase))
                {
                    uriToWrite = rootBase.MakeRelativeUri(currentBase);
                }
                else
                {
                    uriToWrite = currentBase;
                }
            }
            return uriToWrite;
        }
 
        internal static string GetUriString(Uri uri)
        {
            if (uri == null)
            {
                return null;
            }
            if (uri.IsAbsoluteUri)
            {
                return uri.AbsoluteUri;
            }
            else
            {
                return uri.ToString();
            }
        }
 
        internal static bool IsXmlns(string name, string ns)
        {
            return name == "xmlns" || ns == "http://www.w3.org/2000/xmlns/";
        }
 
        internal static bool IsXmlSchemaType(string name, string ns)
        {
            return name == "type" && ns == "http://www.w3.org/2001/XMLSchema-instance";
        }
    }
}