public static IEnumerable <AcceptLanguageHeader> ParseMany(string headerValue) { if (headerValue == null || !Regex.IsMatch(headerValue, _elementsRegexPattern)) { yield break; } string[] elements = headerValue.SplitElements(); foreach (string element in elements) { string[] semicolonSplitParts = element.SplitSemicolons(); decimal? qvalue = null; if (semicolonSplitParts.Length == 2) { string[] equalSignSplitParts = semicolonSplitParts[1].SplitEqualSign(); QvalueValidity qvalueValidity = equalSignSplitParts.ValidateQvalue(); if (qvalueValidity != QvalueValidity.Valid) { continue; } qvalue = Decimal.Parse(equalSignSplitParts[1], NumberStyles.AllowDecimalPoint); } string languagePrefix; string language; GetLanguageParts(semicolonSplitParts[0], out languagePrefix, out language); yield return(new AcceptLanguageHeader(languagePrefix, language, qvalue)); } }
public static IEnumerable <AcceptHeader> ParseMany(string headerValue) { if (headerValue == null || !Regex.IsMatch(headerValue, _elementsRegexPattern)) { yield break; } string[] elements = headerValue.SplitElements(); foreach (string element in elements) { string[] semicolonSplitParts = element.SplitSemicolons(); string[] typeParts = semicolonSplitParts[0].Split('/'); string type = typeParts[0]; string subtype = typeParts[1]; var parameters = new HashSet <Parameter>(); decimal? qvalue = null; var extensions = new HashSet <Parameter>(); bool cancel = false; for (int i = 1; i < semicolonSplitParts.Length; i++) { string[] equalSignSplitParts = semicolonSplitParts[i].SplitEqualSign(); QvalueValidity qvalueValidity = equalSignSplitParts.ValidateQvalue(); if (qvalueValidity == QvalueValidity.Invalid) { cancel = true; break; } if (qvalueValidity == QvalueValidity.Valid) { qvalue = Decimal.Parse(equalSignSplitParts[1], NumberStyles.AllowDecimalPoint); } else if (qvalue == null) { parameters.Add(new Parameter(equalSignSplitParts[0], equalSignSplitParts[1])); } else { extensions.Add(new Parameter(equalSignSplitParts[0], equalSignSplitParts[1])); } } if (!cancel) { yield return(new AcceptHeader(type, subtype, parameters, qvalue, extensions)); } } }
public static IEnumerable <TeHeader> ParseMany(string headerValue) { if (headerValue == null || !Regex.IsMatch(headerValue, _elementsRegexPattern)) { yield break; } string[] elements = headerValue.SplitElements(); foreach (string element in elements) { decimal? qvalue = null; string[] semicolonSplitParts = element.SplitSemicolons(); bool cancel = false; string tCoding = semicolonSplitParts[0]; var parameters = new HashSet <Parameter>(); for (int i = 1; i < semicolonSplitParts.Length; i++) { string semicolonSplitPart = semicolonSplitParts[i]; string[] equalSignSplitParts = semicolonSplitPart.SplitEqualSign(); QvalueValidity qvalueValidity = equalSignSplitParts.ValidateQvalue(); string name; string value; semicolonSplitPart.GetParameterParts(out name, out value, true); if (qvalueValidity == QvalueValidity.Valid) { qvalue = Decimal.Parse(value); } else if (qvalueValidity == QvalueValidity.Invalid) { cancel = true; break; } else { parameters.Add(new Parameter(name, value ?? "")); } } if (!cancel) { yield return(new TeHeader(tCoding, qvalue, parameters)); } } }