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);
        }
Ejemplo n.º 2
0
        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")));
        }
Ejemplo n.º 3
0
        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;
                }
            }
        }