Пример #1
0
        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));
            }
        }
Пример #2
0
        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));
                }
            }
        }
Пример #3
0
        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));
                }
            }
        }