| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- //-----------------------------------------------------------------------------
- // 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<MonikerHelper.MonikerAttribute, string> 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;
- }
- }
- }
- }
|