/// <summary> /// Read recommendation. /// </summary> private bool Recommendation(TokenStream stream, RuleDocument doc) { if (!IsHeading(stream.Current, RULE_ENTRIES_HEADING_LEVEL, DocumentStrings.Recommendation)) { return(false); } doc.Recommendation = TextBlock(stream); stream.SkipUntilHeader(); return(true); }
/// <summary> /// Read synopsis. /// </summary> private bool Synopsis(TokenStream stream, RuleDocument doc) { if (!IsHeading(stream.Current, RULE_ENTRIES_HEADING_LEVEL, DocumentStrings.Synopsis)) { return(false); } doc.Synopsis = TextBlock(stream); stream.SkipUntilHeader(); return(true); }
private bool RelatedLinks(TokenStream stream, RuleDocument doc) { if (!IsHeading(stream.Current, RULE_ENTRIES_HEADING_LEVEL, DocumentStrings.Links)) { return(false); } List <Link> links = new List <Link>(); stream.Next(); while (stream.IsTokenType(MarkdownTokenType.Link, MarkdownTokenType.LinkReference, MarkdownTokenType.LineBreak)) { if (stream.IsTokenType(MarkdownTokenType.LineBreak)) { stream.Next(); continue; } var link = new Link { Name = stream.Current.Meta, Uri = stream.Current.Text }; // Update link to point to resolved target if (stream.IsTokenType(MarkdownTokenType.LinkReference)) { var target = stream.ResolveLinkTarget(link.Uri); link.Uri = target.Text; } links.Add(link); stream.Next(); } stream.SkipUntilHeader(); doc.Links = links.ToArray(); return(true); }
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); }