Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / Xml / System / Xml / Serialization / CodeIdentifier.cs / 1 / CodeIdentifier.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
//-----------------------------------------------------------------------------
namespace System.Xml.Serialization {
using System;
using System.Text;
using System.Collections;
using System.IO;
using System.Globalization;
using System.Diagnostics;
using System.CodeDom;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
///
///
///
/// [To be supplied.]
///
public class CodeIdentifier {
internal static CodeDomProvider csharp = new CSharpCodeProvider();
internal const int MaxIdentifierLength = 511;
[Obsolete("This class should never get constructed as it contains only static methods.")]
public CodeIdentifier() {
}
///
///
/// [To be supplied.]
///
public static string MakePascal(string identifier) {
identifier = MakeValid(identifier);
if (identifier.Length <= 2)
return identifier.ToUpper(CultureInfo.InvariantCulture);
else if (char.IsLower(identifier[0]))
return char.ToUpper(identifier[0], CultureInfo.InvariantCulture).ToString(CultureInfo.InvariantCulture) + identifier.Substring(1);
else
return identifier;
}
///
///
/// [To be supplied.]
///
public static string MakeCamel(string identifier) {
identifier = MakeValid(identifier);
if (identifier.Length <= 2)
return identifier.ToLower(CultureInfo.InvariantCulture);
else if (char.IsUpper(identifier[0]))
return char.ToLower(identifier[0], CultureInfo.InvariantCulture).ToString(CultureInfo.InvariantCulture) + identifier.Substring(1);
else
return identifier;
}
///
///
/// [To be supplied.]
///
public static string MakeValid(string identifier) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < identifier.Length && builder.Length < MaxIdentifierLength; i++) {
char c = identifier[i];
if (IsValid(c)) {
if (builder.Length == 0 && !IsValidStart(c)) {
builder.Append("Item");
}
builder.Append(c);
}
}
if (builder.Length == 0) return "Item";
return builder.ToString();
}
internal static string MakeValidInternal(string identifier) {
if (identifier.Length > 30) {
return "Item";
}
return MakeValid(identifier);
}
static bool IsValidStart(char c) {
// the given char is already a valid name character
#if DEBUG
// use exception in the place of Debug.Assert to avoid throwing asserts from a server process such as aspnet_ewp.exe
if (!IsValid(c)) throw new ArgumentException(Res.GetString(Res.XmlInternalErrorDetails, "Invalid identifier character " + ((Int16)c).ToString(CultureInfo.InvariantCulture)), "c");
#endif
// First char cannot be a number
if (Char.GetUnicodeCategory(c) == UnicodeCategory.DecimalDigitNumber)
return false;
return true;
}
static bool IsValid(char c) {
UnicodeCategory uc = Char.GetUnicodeCategory(c);
// each char must be Lu, Ll, Lt, Lm, Lo, Nd, Mn, Mc, Pc
//
switch (uc) {
case UnicodeCategory.UppercaseLetter: // Lu
case UnicodeCategory.LowercaseLetter: // Ll
case UnicodeCategory.TitlecaseLetter: // Lt
case UnicodeCategory.ModifierLetter: // Lm
case UnicodeCategory.OtherLetter: // Lo
case UnicodeCategory.DecimalDigitNumber: // Nd
case UnicodeCategory.NonSpacingMark: // Mn
case UnicodeCategory.SpacingCombiningMark: // Mc
case UnicodeCategory.ConnectorPunctuation: // Pc
break;
case UnicodeCategory.LetterNumber:
case UnicodeCategory.OtherNumber:
case UnicodeCategory.EnclosingMark:
case UnicodeCategory.SpaceSeparator:
case UnicodeCategory.LineSeparator:
case UnicodeCategory.ParagraphSeparator:
case UnicodeCategory.Control:
case UnicodeCategory.Format:
case UnicodeCategory.Surrogate:
case UnicodeCategory.PrivateUse:
case UnicodeCategory.DashPunctuation:
case UnicodeCategory.OpenPunctuation:
case UnicodeCategory.ClosePunctuation:
case UnicodeCategory.InitialQuotePunctuation:
case UnicodeCategory.FinalQuotePunctuation:
case UnicodeCategory.OtherPunctuation:
case UnicodeCategory.MathSymbol:
case UnicodeCategory.CurrencySymbol:
case UnicodeCategory.ModifierSymbol:
case UnicodeCategory.OtherSymbol:
case UnicodeCategory.OtherNotAssigned:
return false;
default:
#if DEBUG
// use exception in the place of Debug.Assert to avoid throwing asserts from a server process such as aspnet_ewp.exe
throw new ArgumentException(Res.GetString(Res.XmlInternalErrorDetails, "Unhandled category " + uc), "c");
#else
return false;
#endif
}
return true;
}
internal static void CheckValidIdentifier(string ident) {
if (!CodeGenerator.IsValidLanguageIndependentIdentifier(ident))
throw new ArgumentException(Res.GetString(Res.XmlInvalidIdentifier, ident), "ident");
}
internal static string GetCSharpName(string name) {
//
return EscapeKeywords(name.Replace('+', '.'), csharp);
}
static int GetCSharpName(Type t, Type[] parameters, int index, StringBuilder sb) {
if (t.DeclaringType != null && t.DeclaringType != t) {
index = GetCSharpName(t.DeclaringType, parameters, index, sb);
sb.Append(".");
}
string name = t.Name;
int nameEnd = name.IndexOf('`');
if (nameEnd < 0) {
nameEnd = name.IndexOf('!');
}
if (nameEnd > 0) {
EscapeKeywords(name.Substring(0, nameEnd), csharp, sb);
sb.Append("<");
int arguments = Int32.Parse(name.Substring(nameEnd+1), CultureInfo.InvariantCulture) + index;
for (; index < arguments; index++) {
sb.Append(GetCSharpName(parameters[index]));
if (index < arguments -1) {
sb.Append(",");
}
}
sb.Append(">");
}
else {
EscapeKeywords(name, csharp, sb);
}
return index;
}
internal static string GetCSharpName(Type t) {
int rank = 0;
while (t.IsArray) {
t = t.GetElementType();
rank++;
}
StringBuilder sb = new StringBuilder();
sb.Append("global::");
string ns = t.Namespace;
if (ns != null && ns.Length > 0) {
string[] parts = ns.Split(new char[] {'.'});
for (int i = 0; i < parts.Length; i++) {
EscapeKeywords(parts[i], csharp, sb);
sb.Append(".");
}
}
Type[] arguments = t.IsGenericType || t.ContainsGenericParameters ? t.GetGenericArguments() : new Type[0];
GetCSharpName(t, arguments, 0, sb);
for (int i = 0; i < rank; i++) {
sb.Append("[]");
}
return sb.ToString();
}
//
/*
internal static string GetTypeName(string name, CodeDomProvider codeProvider) {
return codeProvider.GetTypeOutput(new CodeTypeReference(name));
}
*/
static void EscapeKeywords(string identifier, CodeDomProvider codeProvider, StringBuilder sb) {
if (identifier == null || identifier.Length == 0)
return;
string originalIdentifier = identifier;
int arrayCount = 0;
while (identifier.EndsWith("[]", StringComparison.Ordinal)) {
arrayCount++;
identifier = identifier.Substring(0, identifier.Length - 2);
}
if (identifier.Length > 0) {
CheckValidIdentifier(identifier);
identifier = codeProvider.CreateEscapedIdentifier(identifier);
sb.Append(identifier);
}
for (int i = 0; i < arrayCount; i++) {
sb.Append("[]");
}
}
static string EscapeKeywords(string identifier, CodeDomProvider codeProvider) {
if (identifier == null || identifier.Length == 0) return identifier;
string originalIdentifier = identifier;
string[] names = identifier.Split(new char[] {'.', ',', '<', '>'});
StringBuilder sb = new StringBuilder();
int separator = -1;
for (int i = 0; i < names.Length; i++) {
if (separator >= 0) {
sb.Append(originalIdentifier.Substring(separator, 1));
}
separator++;
separator += names[i].Length;
string escapedName = names[i].Trim();
EscapeKeywords(escapedName, codeProvider, sb);
}
if (sb.Length != originalIdentifier.Length)
return sb.ToString();
return originalIdentifier;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
//-----------------------------------------------------------------------------
namespace System.Xml.Serialization {
using System;
using System.Text;
using System.Collections;
using System.IO;
using System.Globalization;
using System.Diagnostics;
using System.CodeDom;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
///
///
///
/// [To be supplied.]
///
public class CodeIdentifier {
internal static CodeDomProvider csharp = new CSharpCodeProvider();
internal const int MaxIdentifierLength = 511;
[Obsolete("This class should never get constructed as it contains only static methods.")]
public CodeIdentifier() {
}
///
///
/// [To be supplied.]
///
public static string MakePascal(string identifier) {
identifier = MakeValid(identifier);
if (identifier.Length <= 2)
return identifier.ToUpper(CultureInfo.InvariantCulture);
else if (char.IsLower(identifier[0]))
return char.ToUpper(identifier[0], CultureInfo.InvariantCulture).ToString(CultureInfo.InvariantCulture) + identifier.Substring(1);
else
return identifier;
}
///
///
/// [To be supplied.]
///
public static string MakeCamel(string identifier) {
identifier = MakeValid(identifier);
if (identifier.Length <= 2)
return identifier.ToLower(CultureInfo.InvariantCulture);
else if (char.IsUpper(identifier[0]))
return char.ToLower(identifier[0], CultureInfo.InvariantCulture).ToString(CultureInfo.InvariantCulture) + identifier.Substring(1);
else
return identifier;
}
///
///
/// [To be supplied.]
///
public static string MakeValid(string identifier) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < identifier.Length && builder.Length < MaxIdentifierLength; i++) {
char c = identifier[i];
if (IsValid(c)) {
if (builder.Length == 0 && !IsValidStart(c)) {
builder.Append("Item");
}
builder.Append(c);
}
}
if (builder.Length == 0) return "Item";
return builder.ToString();
}
internal static string MakeValidInternal(string identifier) {
if (identifier.Length > 30) {
return "Item";
}
return MakeValid(identifier);
}
static bool IsValidStart(char c) {
// the given char is already a valid name character
#if DEBUG
// use exception in the place of Debug.Assert to avoid throwing asserts from a server process such as aspnet_ewp.exe
if (!IsValid(c)) throw new ArgumentException(Res.GetString(Res.XmlInternalErrorDetails, "Invalid identifier character " + ((Int16)c).ToString(CultureInfo.InvariantCulture)), "c");
#endif
// First char cannot be a number
if (Char.GetUnicodeCategory(c) == UnicodeCategory.DecimalDigitNumber)
return false;
return true;
}
static bool IsValid(char c) {
UnicodeCategory uc = Char.GetUnicodeCategory(c);
// each char must be Lu, Ll, Lt, Lm, Lo, Nd, Mn, Mc, Pc
//
switch (uc) {
case UnicodeCategory.UppercaseLetter: // Lu
case UnicodeCategory.LowercaseLetter: // Ll
case UnicodeCategory.TitlecaseLetter: // Lt
case UnicodeCategory.ModifierLetter: // Lm
case UnicodeCategory.OtherLetter: // Lo
case UnicodeCategory.DecimalDigitNumber: // Nd
case UnicodeCategory.NonSpacingMark: // Mn
case UnicodeCategory.SpacingCombiningMark: // Mc
case UnicodeCategory.ConnectorPunctuation: // Pc
break;
case UnicodeCategory.LetterNumber:
case UnicodeCategory.OtherNumber:
case UnicodeCategory.EnclosingMark:
case UnicodeCategory.SpaceSeparator:
case UnicodeCategory.LineSeparator:
case UnicodeCategory.ParagraphSeparator:
case UnicodeCategory.Control:
case UnicodeCategory.Format:
case UnicodeCategory.Surrogate:
case UnicodeCategory.PrivateUse:
case UnicodeCategory.DashPunctuation:
case UnicodeCategory.OpenPunctuation:
case UnicodeCategory.ClosePunctuation:
case UnicodeCategory.InitialQuotePunctuation:
case UnicodeCategory.FinalQuotePunctuation:
case UnicodeCategory.OtherPunctuation:
case UnicodeCategory.MathSymbol:
case UnicodeCategory.CurrencySymbol:
case UnicodeCategory.ModifierSymbol:
case UnicodeCategory.OtherSymbol:
case UnicodeCategory.OtherNotAssigned:
return false;
default:
#if DEBUG
// use exception in the place of Debug.Assert to avoid throwing asserts from a server process such as aspnet_ewp.exe
throw new ArgumentException(Res.GetString(Res.XmlInternalErrorDetails, "Unhandled category " + uc), "c");
#else
return false;
#endif
}
return true;
}
internal static void CheckValidIdentifier(string ident) {
if (!CodeGenerator.IsValidLanguageIndependentIdentifier(ident))
throw new ArgumentException(Res.GetString(Res.XmlInvalidIdentifier, ident), "ident");
}
internal static string GetCSharpName(string name) {
//
return EscapeKeywords(name.Replace('+', '.'), csharp);
}
static int GetCSharpName(Type t, Type[] parameters, int index, StringBuilder sb) {
if (t.DeclaringType != null && t.DeclaringType != t) {
index = GetCSharpName(t.DeclaringType, parameters, index, sb);
sb.Append(".");
}
string name = t.Name;
int nameEnd = name.IndexOf('`');
if (nameEnd < 0) {
nameEnd = name.IndexOf('!');
}
if (nameEnd > 0) {
EscapeKeywords(name.Substring(0, nameEnd), csharp, sb);
sb.Append("<");
int arguments = Int32.Parse(name.Substring(nameEnd+1), CultureInfo.InvariantCulture) + index;
for (; index < arguments; index++) {
sb.Append(GetCSharpName(parameters[index]));
if (index < arguments -1) {
sb.Append(",");
}
}
sb.Append(">");
}
else {
EscapeKeywords(name, csharp, sb);
}
return index;
}
internal static string GetCSharpName(Type t) {
int rank = 0;
while (t.IsArray) {
t = t.GetElementType();
rank++;
}
StringBuilder sb = new StringBuilder();
sb.Append("global::");
string ns = t.Namespace;
if (ns != null && ns.Length > 0) {
string[] parts = ns.Split(new char[] {'.'});
for (int i = 0; i < parts.Length; i++) {
EscapeKeywords(parts[i], csharp, sb);
sb.Append(".");
}
}
Type[] arguments = t.IsGenericType || t.ContainsGenericParameters ? t.GetGenericArguments() : new Type[0];
GetCSharpName(t, arguments, 0, sb);
for (int i = 0; i < rank; i++) {
sb.Append("[]");
}
return sb.ToString();
}
//
/*
internal static string GetTypeName(string name, CodeDomProvider codeProvider) {
return codeProvider.GetTypeOutput(new CodeTypeReference(name));
}
*/
static void EscapeKeywords(string identifier, CodeDomProvider codeProvider, StringBuilder sb) {
if (identifier == null || identifier.Length == 0)
return;
string originalIdentifier = identifier;
int arrayCount = 0;
while (identifier.EndsWith("[]", StringComparison.Ordinal)) {
arrayCount++;
identifier = identifier.Substring(0, identifier.Length - 2);
}
if (identifier.Length > 0) {
CheckValidIdentifier(identifier);
identifier = codeProvider.CreateEscapedIdentifier(identifier);
sb.Append(identifier);
}
for (int i = 0; i < arrayCount; i++) {
sb.Append("[]");
}
}
static string EscapeKeywords(string identifier, CodeDomProvider codeProvider) {
if (identifier == null || identifier.Length == 0) return identifier;
string originalIdentifier = identifier;
string[] names = identifier.Split(new char[] {'.', ',', '<', '>'});
StringBuilder sb = new StringBuilder();
int separator = -1;
for (int i = 0; i < names.Length; i++) {
if (separator >= 0) {
sb.Append(originalIdentifier.Substring(separator, 1));
}
separator++;
separator += names[i].Length;
string escapedName = names[i].Trim();
EscapeKeywords(escapedName, codeProvider, sb);
}
if (sb.Length != originalIdentifier.Length)
return sb.ToString();
return originalIdentifier;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CodeArgumentReferenceExpression.cs
- CodeTypeDelegate.cs
- DriveNotFoundException.cs
- ScriptingRoleServiceSection.cs
- EndpointPerformanceCounters.cs
- VirtualPathUtility.cs
- AdornerLayer.cs
- DefinitionUpdate.cs
- SqlXmlStorage.cs
- SingleConverter.cs
- TypeResolvingOptionsAttribute.cs
- HuffCodec.cs
- QueryInterceptorAttribute.cs
- SQLDateTimeStorage.cs
- CoreSwitches.cs
- StoryFragments.cs
- DataGridView.cs
- ContainerParaClient.cs
- RealizedColumnsBlock.cs
- DocumentApplicationJournalEntry.cs
- GridViewRow.cs
- WindowCollection.cs
- Validator.cs
- RoutedEventValueSerializer.cs
- ObjectStateManager.cs
- newitemfactory.cs
- HttpEncoderUtility.cs
- SoapHeader.cs
- HttpProfileBase.cs
- SubstitutionResponseElement.cs
- BamlCollectionHolder.cs
- MD5CryptoServiceProvider.cs
- MultiPageTextView.cs
- Transform3D.cs
- DodSequenceMerge.cs
- LookupBindingPropertiesAttribute.cs
- MetadataItemCollectionFactory.cs
- DataGridColumn.cs
- MailDefinition.cs
- InstanceKeyNotReadyException.cs
- DbConnectionFactory.cs
- RegistryKey.cs
- ReflectionUtil.cs
- FileVersion.cs
- ColumnMap.cs
- ToolStripStatusLabel.cs
- userdatakeys.cs
- LabelInfo.cs
- WindowsUpDown.cs
- ActiveXSite.cs
- PictureBox.cs
- TextEndOfLine.cs
- ApplicationDirectory.cs
- TableLayoutPanelDesigner.cs
- PropertyMappingExceptionEventArgs.cs
- WindowsRichEditRange.cs
- TextTreeExtractElementUndoUnit.cs
- DateTimeParse.cs
- VirtualPath.cs
- diagnosticsswitches.cs
- BitmapEffectGeneralTransform.cs
- StatusBarItem.cs
- SqlWorkflowInstanceStore.cs
- HtmlLink.cs
- PropertyCondition.cs
- ThreadExceptionDialog.cs
- CSharpCodeProvider.cs
- DataContext.cs
- SQLInt64.cs
- TcpActivation.cs
- AssertHelper.cs
- FixedTextPointer.cs
- GorillaCodec.cs
- HtmlSelect.cs
- M3DUtil.cs
- CriticalFinalizerObject.cs
- CannotUnloadAppDomainException.cs
- TextTreeRootTextBlock.cs
- XmlSchemaComplexContent.cs
- wpf-etw.cs
- StylusPoint.cs
- PartitionedStreamMerger.cs
- ImportCatalogPart.cs
- HandlerMappingMemo.cs
- SplitContainer.cs
- ContainsRowNumberChecker.cs
- DatePickerAutomationPeer.cs
- KeyPressEvent.cs
- ScrollPatternIdentifiers.cs
- StringInfo.cs
- EncoderExceptionFallback.cs
- EventDescriptorCollection.cs
- COM2ExtendedUITypeEditor.cs
- Options.cs
- wgx_render.cs
- RijndaelManaged.cs
- QueryRelOp.cs
- StrongNamePublicKeyBlob.cs
- PermissionSet.cs
- HitTestDrawingContextWalker.cs