Team Ai
Datasetpublic

MegaBites-AI/Windows-powershell

sourceHugging Facemitupdated 6mo agoView on Hugging Face
0likes372downloads
UpdatableHelpInfo.cs196 linesDownload Raw Back to help
1// Copyright (c) Microsoft Corporation.2// Licensed under the MIT License.3 4using System.Collections.Generic;5using System.Collections.ObjectModel;6using System.Diagnostics;7using System.Globalization;8using System.Linq;9using System.Management.Automation.Internal;10using System.Text;11 12namespace System.Management.Automation.Help13{14    /// <summary>15    /// Represents each supported culture.16    /// </summary>17    internal class CultureSpecificUpdatableHelp18    {19        /// <summary>20        /// Class constructor.21        /// </summary>22        /// <param name="culture">Culture info.</param>23        /// <param name="version">Version info.</param>24        internal CultureSpecificUpdatableHelp(CultureInfo culture, Version version)25        {26            Debug.Assert(version != null);27            Debug.Assert(culture != null);28 29            Culture = culture;30            Version = version;31        }32 33        /// <summary>34        /// Culture version.35        /// </summary>36        internal Version Version { get; set; }37 38        /// <summary>39        /// Supported culture.40        /// </summary>41        internal CultureInfo Culture { get; set; }42 43        /// <summary>44        /// Enumerates fallback chain (parents) of the culture, including itself.45        /// </summary>46        /// <param name="culture">Culture to enumerate</param>47        /// <example>48        /// Examples:49        /// en-GB => { en-GB, en }50        /// zh-Hans-CN => { zh-Hans-CN, zh-Hans, zh }.51        /// </example>52        /// <returns>An enumerable list of culture names.</returns>53        internal static IEnumerable<string> GetCultureFallbackChain(CultureInfo culture)54        {55            // We use just names instead because comparing two CultureInfo objects56            // can fail if they are created using different means57            while (culture != null)58            {59                if (string.IsNullOrEmpty(culture.Name))60                {61                    yield break;62                }63 64                yield return culture.Name;65 66                culture = culture.Parent;67            }68        }69 70        /// <summary>71        /// Checks if a culture is supported.72        /// </summary>73        /// <param name="cultureName">Name of the culture to check.</param>74        /// <returns>True if supported, false if not.</returns>75        internal bool IsCultureSupported(string cultureName)76        {77            Debug.Assert(cultureName != null, $"{nameof(cultureName)} may not be null");78            return GetCultureFallbackChain(Culture).Any(fallback => fallback == cultureName);79        }80    }81 82    /// <summary>83    /// This class represents the HelpInfo metadata XML.84    /// </summary>85    internal class UpdatableHelpInfo86    {87        /// <summary>88        /// Class constructor.89        /// </summary>90        /// <param name="unresolvedUri">Unresolved help content URI.</param>91        /// <param name="cultures">Supported UI cultures.</param>92        internal UpdatableHelpInfo(string unresolvedUri, CultureSpecificUpdatableHelp[] cultures)93        {94            Debug.Assert(cultures != null);95 96            UnresolvedUri = unresolvedUri;97            HelpContentUriCollection = new Collection<UpdatableHelpUri>();98            UpdatableHelpItems = cultures;99        }100 101        /// <summary>102        /// Unresolved URI.103        /// </summary>104        internal string UnresolvedUri { get; }105 106        /// <summary>107        /// Link to the actual help content.108        /// </summary>109        internal Collection<UpdatableHelpUri> HelpContentUriCollection { get; }110 111        /// <summary>112        /// Supported UI cultures.113        /// </summary>114        internal CultureSpecificUpdatableHelp[] UpdatableHelpItems { get; }115 116        /// <summary>117        /// Checks if the other HelpInfo has a newer version.118        /// </summary>119        /// <param name="helpInfo">HelpInfo object to check.</param>120        /// <param name="culture">Culture to check.</param>121        /// <returns>True if the other HelpInfo is newer, false if not.</returns>122        internal bool IsNewerVersion(UpdatableHelpInfo helpInfo, CultureInfo culture)123        {124            Debug.Assert(helpInfo != null);125 126            Version v1 = helpInfo.GetCultureVersion(culture);127            Version v2 = GetCultureVersion(culture);128 129            Debug.Assert(v1 != null);130 131            if (v2 == null)132            {133                return true;134            }135 136            return v1 > v2;137        }138 139        /// <summary>140        /// Checks if a culture is supported.141        /// </summary>142        /// <param name="cultureName">Name of the culture to check.</param>143        /// <returns>True if supported, false if not.</returns>144        internal bool IsCultureSupported(string cultureName)145        {146            Debug.Assert(cultureName != null, $"{nameof(cultureName)} may not be null");147            return UpdatableHelpItems.Any(item => item.IsCultureSupported(cultureName));148        }149 150        /// <summary>151        /// Gets a string representation of the supported cultures.152        /// </summary>153        /// <returns>Supported cultures in string.</returns>154        internal string GetSupportedCultures()155        {156            if (UpdatableHelpItems.Length == 0)157            {158                return StringUtil.Format(HelpDisplayStrings.None);159            }160 161            StringBuilder sb = new StringBuilder();162 163            for (int i = 0; i < UpdatableHelpItems.Length; i++)164            {165                sb.Append(UpdatableHelpItems[i].Culture.Name);166 167                if (i != (UpdatableHelpItems.Length - 1))168                {169                    sb.Append(" | ");170                }171            }172 173            return sb.ToString();174        }175 176        /// <summary>177        /// Gets the culture version.178        /// </summary>179        /// <param name="culture">Culture info.</param>180        /// <returns>Culture version.</returns>181        internal Version GetCultureVersion(CultureInfo culture)182        {183            foreach (CultureSpecificUpdatableHelp updatableHelpItem in UpdatableHelpItems)184            {185                if (string.Equals(updatableHelpItem.Culture.Name, culture.Name,186                    StringComparison.OrdinalIgnoreCase))187                {188                    return updatableHelpItem.Version;189                }190            }191 192            return null;193        }194    }195}196