MonikerUtility.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / ComIntegration / MonikerUtility.cs / 1 / MonikerUtility.cs

                            //------------------------------------------------------------------------------ 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------------------------
namespace System.ServiceModel.ComIntegration
{ 
     using System;
     using System.Collections.Generic; 
     using System.Threading; 
     using System.Text;
 
     internal static class MonikerUtility
     {
          internal static string Getkeyword (string moniker, out MonikerHelper.MonikerAttribute keyword)
          { 
               moniker = moniker.TrimStart ();
               int indexOfEqualSign = moniker.IndexOf("=", StringComparison.Ordinal); 
               if (indexOfEqualSign == -1) 
                   throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MonikerSyntaxException(SR.GetString(SR.NoEqualSignFound, moniker)));
 
               int indexOfComma= moniker.IndexOf(",", StringComparison.Ordinal);

              if(indexOfComma != -1 && indexOfComma < indexOfEqualSign)
                  throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MonikerSyntaxException(SR.GetString(SR.NoEqualSignFound, moniker))); 

               string suspectedKeyword = moniker.Substring (0, indexOfEqualSign).Trim(); 
               suspectedKeyword = suspectedKeyword.ToLower (System.Globalization.CultureInfo.InvariantCulture); 

               foreach (MonikerHelper.KeywordInfo keywordInfo in MonikerHelper.KeywordInfo.KeywordCollection) 
               {
                    if (suspectedKeyword == keywordInfo.Name )
                    {
                         keyword = keywordInfo.Attrib; 
                         moniker = moniker.Substring (indexOfEqualSign + 1).TrimStart();
                         return moniker; 
                    } 
               }
               throw DiagnosticUtility.ExceptionUtility.ThrowHelperError (new MonikerSyntaxException (SR.GetString (SR.UnknownMonikerKeyword, suspectedKeyword))); 
          }
          internal static string GetValue (string moniker, out string val)
          {
               StringBuilder value = new StringBuilder (); 
               int index = 0;
               moniker = moniker.Trim (); 
              if(string.IsNullOrEmpty(moniker)) 
                  throw DiagnosticUtility.ExceptionUtility.ThrowHelperError (new MonikerSyntaxException (SR.GetString(SR.KewordMissingValue)));
               switch  (moniker[index] ) 
               {
                    case '"':
                    case '\'':
                    { 
                        char quoteToCompare = moniker [index];
                        index++; 
 
                        for (;index < moniker.Length ; index++)
                        { 

                             if (moniker[index] == quoteToCompare)
                             {
 
                                if ((index < (moniker.Length - 1)) && (moniker[index+1] == quoteToCompare))
                                { 
                                   value.Append (quoteToCompare ); 
                                   index++;
                                } 
                                else
                                {
                                   break;
                                } 
                             }
                             else 
                                value.Append (moniker [index]); 

                        } 
                        if (index < moniker.Length )
                        {
                              index++;
                              if (index < moniker.Length ) 
                              {
                                   moniker = moniker.Substring (index); 
                                   moniker = moniker.Trim(); 

                                   if (!String.IsNullOrEmpty(moniker)) 
                                   {
                                        if (moniker[0] == ',')
                                        {
                                             moniker = moniker.Substring (1); 
                                             moniker = moniker.Trim ();
                                        } 
                                        else 
                                             throw DiagnosticUtility.ExceptionUtility.ThrowHelperError (new MonikerSyntaxException (SR.GetString (SR.BadlyTerminatedValue, value.ToString())));
                                   } 


                              }
                              else 
                                   moniker = "";
 
 
                        }
                        else 
                              throw DiagnosticUtility.ExceptionUtility.ThrowHelperError (new MonikerSyntaxException (SR.GetString(SR.MissingQuote ,value.ToString())));

                        break;
                     } 
                     default:
                     { 
                         for (; (index < moniker.Length ) && (moniker[index] != ','); index++) 
                              value.Append (moniker[index]);
                         if (index < moniker.Length ) 
                         {
                              index++;
                              if (index < moniker.Length )
                              { 
                                   moniker = moniker.Substring (index);
                                   moniker = moniker.Trim(); 
                              } 

                         } 
                         else
                              moniker = "";

                         break; 
                     }
              } 
              val = value.ToString().Trim (); 
              return moniker;
          } 
          internal static void Parse (string displayName, ref Dictionary  propertyTable)
          {
               int indexOfMonikerData = displayName.IndexOf(":", StringComparison.Ordinal);
               if (indexOfMonikerData == -1) 
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError (new MonikerSyntaxException (SR.GetString (SR.MonikerMissingColon)));
               string monikerParams = displayName.Substring (indexOfMonikerData + 1).Trim(); 
               MonikerHelper.MonikerAttribute keyword ; 
               string value;
 
               while (!string.IsNullOrEmpty(monikerParams))
               {
                    monikerParams = Getkeyword (monikerParams, out keyword);
                    propertyTable.TryGetValue (keyword, out value); 
                    if (!String.IsNullOrEmpty(value))
                         throw DiagnosticUtility.ExceptionUtility.ThrowHelperError (new MonikerSyntaxException (SR.GetString (SR.RepeatedKeyword))); 
                    monikerParams = GetValue   (monikerParams, out value); 
                    propertyTable [keyword] = value;
               } 
         }
    }
}

// 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