| File: System\Xaml\Parser\XamlQualifiedName.cs | Web Access |
| Project: src\wpf\src\Microsoft.DotNet.Wpf\src\System.Xaml\System.Xaml.csproj (System.Xaml) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #nullable disable namespace MS.Internal.Xaml.Parser { internal class XamlQualifiedName : XamlName { public XamlQualifiedName(string prefix, string name) : base(prefix, name) { } public override string ScopedName { get { return string.IsNullOrEmpty(Prefix) ? Name : $"{Prefix}:{Name}"; } } internal static bool IsNameValid(string name) { if (name.Length == 0) { return false; } if (!IsValidNameStartChar(name[0])) { return false; } for (int i = 1; i < name.Length; i++) { if (!IsValidQualifiedNameChar(name[i])) { return false; } } return true; } internal static bool IsNameValid_WithPlus(string name) { if (name.Length == 0) { return false; } if (!IsValidNameStartChar(name[0])) { return false; } for (int i = 1; i < name.Length; i++) { if (!IsValidQualifiedNameCharPlus(name[i])) { return false; } } return true; } public static bool Parse(string longName, out string prefix, out string name) { int start = 0; int colonIdx = longName.IndexOf(':'); prefix = string.Empty; name = string.Empty; if (colonIdx != -1) { prefix = longName.Substring(start, colonIdx); if (string.IsNullOrEmpty(prefix) || !IsNameValid(prefix)) { return false; } start = colonIdx + 1; } name = (start==0) ? longName : longName.Substring(start); // we allow Internal type name (ie. Foo+Bar) on "trival" ie. "non-generic" type names. // This is back compat with 3.0. // Don't want to allow it in any of the new type name syntax. (including trival typeArgs) if (string.IsNullOrEmpty(name) || !IsNameValid_WithPlus(name)) { return false; } return true; } } }