private static bool TryDocument(string path, out RuleDocument document) { var reader = new MarkdownReader(yamlHeaderOnly: false); var stream = reader.Read(File.ReadAllText(path), path); var lexer = new RuleLexer(); document = lexer.Process(stream); return(document != null); }
private TokenStream GetToken(bool nx) { var reader = new MarkdownReader(yamlHeaderOnly: false); var content = GetMarkdownContent(); if (nx) { content = content.Replace("\r\n", "\n"); } else if (!content.Contains("\r\n")) { content = content.Replace("\n", "\r\n"); } return(reader.Read(content, Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "RuleDocument.md"))); }
private RuleHelpInfo GetHelpInfo(PipelineContext context, string name) { if (string.IsNullOrEmpty(context.Source.File.HelpPath)) { return(null); } var culture = context.Culture; for (var i = 0; i < culture.Length; i++) { var path = Path.Combine(context.Source.File.HelpPath, string.Concat(culture[i], "/", name, ".md")); if (!File.Exists(path)) { continue; } var reader = new MarkdownReader(yamlHeaderOnly: false); var stream = reader.Read(markdown: File.ReadAllText(path: path), path: path); var lexer = new RuleLexer(); var document = lexer.Process(stream: stream); if (document != null) { return(new RuleHelpInfo(name: name, displayName: document.Name ?? name, moduleName: context.Source.File.ModuleName) { Synopsis = document.Synopsis?.Text, Description = document.Description?.Text, Recommendation = document.Recommendation?.Text ?? document.Synopsis?.Text, Notes = document.Notes?.Text, Annotations = document.Annotations?.ToHashtable() }); } } return(null); }
/// <summary> /// Converts the given Markdown stream into an appropriate DocBook 5 XML. /// </summary> /// <param name="markdown"> /// </param> /// <param name="xml"> /// </param> public void ConvertMarkdown( MarkdownReader markdown, XmlWriter xml) { // Ensure our contracts. if (markdown == null) { throw new ArgumentNullException("markdown"); } if (xml == null) { throw new ArgumentNullException("xml"); } // Loop through the Markdown and process each one. while (markdown.Read()) { Console.WriteLine(markdown.ElementType); switch (markdown.ElementType) { case MarkupElementType.BeginDocument: this.WriteBeginDocument(xml); break; case MarkupElementType.EndDocument: xml.WriteEndElement(); xml.WriteEndDocument(); break; case MarkupElementType.BeginMetadata: case MarkupElementType.EndMetadata: case MarkupElementType.BeginContent: case MarkupElementType.EndContent: break; case MarkupElementType.BeginCodeSpan: this.WriteForeignPhrase(markdown, xml); break; case MarkupElementType.BeginBold: this.WriteBold(markdown, xml); break; case MarkupElementType.BeginItalic: this.WriteItalic(markdown, xml); break; case MarkupElementType.EndCodeSpan: case MarkupElementType.EndBold: case MarkupElementType.EndItalic: xml.WriteEndElement(); break; case MarkupElementType.YamlMetadata: this.WriteYamlMetadata(markdown, xml); break; case MarkupElementType.BeginParagraph: xml.WriteStartElement(this.paragraphElement); break; case MarkupElementType.BeginBlockquote: this.WriteBeginBlockquote(markdown, xml); break; case MarkupElementType.EndBlockquote: xml.WriteEndElement(); break; case MarkupElementType.Text: xml.WriteString(markdown.Text); break; case MarkupElementType.EndParagraph: xml.WriteEndElement(); break; case MarkupElementType.BeginHeader: xml.WriteStartElement("bridgehead"); xml.WriteAttributeString( "renderas", "sect" + markdown.HeadingLevel); break; case MarkupElementType.EndHeader: xml.WriteEndElement(); break; case MarkupElementType.HorizontalRule: this.WriteBreak(markdown, xml); break; default: Console.WriteLine( "Cannot process: " + markdown.ElementType); break; } } }