public static Parse ( string parameter ) : |
||
parameter | string | Parameter string to be parsed. |
return |
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)); }
private static void ParseSeparatorChar(char chr, ref StringBuilder currentTarget, ref bool isInString, ref bool isEscape, StringBuilder currentValue, StringBuilder currentParameter, HeaderParameterCollection parameters) { if (isEscape) { isEscape = false; currentTarget.Append("\\" + chr); } else if (isInString) { currentTarget.Append(chr); } else { if (currentTarget == currentValue) { currentTarget = currentParameter; } else { parameters.Add(HeaderParameter.Parse(currentParameter.ToString().Trim())); currentParameter.Clear(); } } }