You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
@ -0,0 +1,148 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user