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); }