internal static HeaderValue ParseInternal(string header, string value)
{
if (value == null)
{
throw new ArgumentNullException("value");
}
HeaderParameterCollection parameters = new HeaderParameterCollection();
StringBuilder currentValue = new StringBuilder(64);
StringBuilder currentParameter = new StringBuilder(128);
StringBuilder currentTarget = currentValue;
bool isInString = false;
bool isEscape = false;
foreach (char letter in value)
{
switch (letter)
{
default:
ParseOtherChars(letter, currentTarget, ref isInString, ref isEscape);
break;
case '\\':
ParseEscapeChar(letter, currentTarget, ref isInString, ref isEscape);
break;
case '"':
ParseStringChar(letter, currentTarget, ref isInString, ref isEscape);
break;
case ';':
ParseSeparatorChar(letter, ref currentTarget, ref isInString, ref isEscape, currentValue, currentParameter, parameters);
break;
}
}
if (currentParameter.Length > 0)
{
parameters.Add(HeaderParameter.Parse(currentParameter.ToString().Trim()));
}
return CreateInstance(header, currentValue.ToString(), parameters);
}