RuntimeIdentifierPropertyAttribute.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Base / System / Windows / Markup / RuntimeIdentifierPropertyAttribute.cs / 2 / RuntimeIdentifierPropertyAttribute.cs

                            //---------------------------------------------------------------------------- 
//
// File: RuntimeNamePropertyAttribute.cs
//
// Description: 
//   This attribute is placed on a class to identify the property that will
//   function as an Name for the given class 
// 
// History:
//    1/26/05:    [....]        Created 
//
// Copyright (C) 2005 by Microsoft Corporation.  All rights reserved.
//
//--------------------------------------------------------------------------- 

using System; 
using System.Globalization; 

#if PBTCOMPILER 
namespace MS.Internal.Markup
#else
using MS.Internal.WindowsBase;     // FriendAccessAllowed
 
namespace System.Windows.Markup
#endif 
{ 
#if !PBTCOMPILER
    ///  
    /// This attribute is placed on a class to identify the property that will
    /// function as an Name for the given class
    /// 
    [AttributeUsage(AttributeTargets.Class)] 
    public sealed class RuntimeNamePropertyAttribute: Attribute
    { 
        ///  
        public RuntimeNamePropertyAttribute(string name)
        { 
            _name = name;
        }

        ///  
        /// The Name of the property in the class that will contain the ID of
        /// the class, this property needs to be of type string and have 
        /// both get and set access 
        /// 
        public string Name 
        {
            get
            {
                return _name; 
            }
        } 
 
        private string _name = null;
    } 
#endif

    /// 
    ///     The string used in RuntimeNameProperty is expected to follow certain 
    /// rules.  IsValidIdentifierName checks the given string against the rules.
    /// NameValidationCallback extends to all object types and is in the right 
    /// format to be used as a DependencyProperty ValidateValueCallback 
    /// 
    internal static class NameValidationHelper 
    {
        // When a name string comes in programatically, validate it against the
        //  same rules used by the XAML parser.  In XAML scenarios this is
        //  technically redundant since the parser has already checked it against 
        //  the same rules, but the parser is able to give a better error message
        //  when it happens. 
#if !PBTCOMPILER 
        [FriendAccessAllowed] // Built into Base, used by Core and Framework.
        internal static bool NameValidationCallback(object candidateName) 
        {
            string name = candidateName as string;

            if( name != null ) 
            {
                // Non-null string, ask the XAML validation code for blessing. 
                return IsValidIdentifierName(name); 
            }
            else if( candidateName == null ) 
            {
                // Null string is allowed
                return true;
            } 
            else
            { 
                // candiateName is not a string object. 
                return false;
            } 
        }
#endif

        ///  
        /// Validates the name to follow Naming guidelines
        ///  
        /// string to validate 
#if !PBTCOMPILER
        [FriendAccessAllowed] // Built into Base, used by Core and Framework. 
#endif
        internal static bool IsValidIdentifierName(string name)
        {
            // Grammar: 
            //  ::=  (  |  )*
            //  ::= [{Lu}{Ll}{Lt}{Lo}{Nl}('_')] 
            //  ::= [{Mn}{Mc}{Lm}{Nd}] 
            UnicodeCategory uc;
            for (int i = 0; i < name.Length; i++) 
            {
                uc = Char.GetUnicodeCategory(name[i]);
                bool idStart = (uc == UnicodeCategory.UppercaseLetter || // (Lu)
                             uc == UnicodeCategory.LowercaseLetter || // (Ll) 
                             uc == UnicodeCategory.TitlecaseLetter || // (Lt)
                             uc == UnicodeCategory.OtherLetter || // (Lo) 
                             uc == UnicodeCategory.LetterNumber || // (Nl) 
                             name[i] == '_');
                bool idExtend = (uc == UnicodeCategory.NonSpacingMark || // (Mn) 
                              uc == UnicodeCategory.SpacingCombiningMark || // (Mc)
                              uc == UnicodeCategory.ModifierLetter || // (Lm)
                              uc == UnicodeCategory.DecimalDigitNumber); // (Nd)
                if (i == 0) 
                {
                    if (!idStart) 
                    { 
                        return false;
                    } 
                }
                else if (!(idStart || idExtend))
                {
                    return false; 
                }
            } 
            return true; 
        }
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK