コード例 #1
0
        public object Parse(string value, object argument)
        {
            var headers = new List <HeaderField>();

            using (var sr = new StringReader(value)) {
                using (var sw = new StringWriter()) {
                    while (true)
                    {
                        var line = sr.ReadLine();

                        // end of block reached, no more headers
                        if (string.IsNullOrEmpty(line))
                        {
                            break;
                        }

                        sw.Write(line);
                        while (true)
                        {
                            var next = sr.Peek();

                            var isContinuation = next == Characters.Space || next == Characters.Tabulator;
                            if (isContinuation)
                            {
                                var continuation = sr.ReadLine();
                                if (string.IsNullOrEmpty(continuation))
                                {
                                    break;
                                }
                                sw.Write(continuation.Trim());
                            }
                            else
                            {
                                break;
                            }
                        }

                        var literals = sw.ToString();
                        if (!string.IsNullOrEmpty(literals))
                        {
                            var header = new HeaderField();
                            sw.Clear();
                            header.Deserialize(literals);
                            headers.Add(header);
                        }
                    }
                }
            }

            return(headers);
        }
コード例 #2
0
        public object Parse(string value, object argument)
        {
            var headers = new List<HeaderField>();

            using (var sr = new StringReader(value)) {
                using (var sw = new StringWriter()) {
                    while (true) {
                        var line = sr.ReadLine();

                        // end of block reached, no more headers
                        if (string.IsNullOrEmpty(line)) {
                            break;
                        }

                        sw.Write(line);
                        while (true) {
                            var next = sr.Peek();

                            var isContinuation = next == Characters.Space || next == Characters.Tabulator;
                            if (isContinuation) {
                                var continuation = sr.ReadLine();
                                if (string.IsNullOrEmpty(continuation)) {
                                    break;
                                }
                                sw.Write(continuation.Trim());
                            } else {
                                break;
                            }
                        }

                        var literals = sw.ToString();
                        if (!string.IsNullOrEmpty(literals)) {
                            var header = new HeaderField();
                            sw.Clear();
                            header.Deserialize(literals);
                            headers.Add(header);
                        }
                    }
                }
            }

            return headers;
        }