Example #1
0
        public RuleDocument Process(TokenStream stream)
        {
            stream.MoveTo(0);

            // Look for yaml header
            var metadata = YamlHeader(stream);

            RuleDocument doc = null;

            // Process sections
            while (!stream.EOF)
            {
                if (IsHeading(stream.Current, RULE_NAME_HEADING_LEVEL))
                {
                    doc = new RuleDocument(stream.Current.Text)
                    {
                        Annotations = TagSet.FromDictionary(metadata)
                    };
                }
                else if (doc != null && IsHeading(stream.Current, RULE_ENTRIES_HEADING_LEVEL))
                {
                    var matching = Synopsis(stream, doc) ||
                                   Description(stream, doc) ||
                                   Recommendation(stream, doc) ||
                                   Notes(stream, doc) ||
                                   RelatedLinks(stream, doc);

                    if (matching)
                    {
                        continue;
                    }
                }

                // Skip the current token
                stream.Next();
            }

            return(doc);
        }