コード例 #1
0
        private static void WriteList(ListBlock list, int intentLevel = 1)
        {
            int.TryParse(list.OrderedStart, out int index);
            intentLevel = Math.Max(intentLevel, 1);
            bool needNewLine = false;

            foreach (Block item in list)
            {
                if (needNewLine)
                {
                    SysConsole.WriteLine();
                }

                switch (item)
                {
                case ListItemBlock listItem:
                    MarkdownConsole.WriteListItemBullet(
                        list.IsOrdered
                                ? $"{index++}{list.OrderedDelimiter}"
                                : GetListItemBullet(intentLevel),
                        intentLevel);
                    WriteBlockContainer(listItem);
                    needNewLine = true;
                    break;

                case ListBlock childList:
                    WriteList(childList, intentLevel + 1);
                    needNewLine = true;
                    break;
                }
            }
        }
コード例 #2
0
 private static void WriteCode(CodeBlock code)
 {
     foreach (StringLine line in code.Lines)
     {
         MarkdownConsole.WriteCode(GetTextFromSlice(line.Slice));
     }
     SysConsole.WriteLine();
 }
コード例 #3
0
        public static void WriteHtml(HtmlBlock html)
        {
            if (html.Type != HtmlBlockType.InterruptingBlock &&
                html.Type != HtmlBlockType.NonInterruptingBlock)
            {
                return;
            }

            MarkdownConsole.WriteHtml(GetTextFromInlineContainer(html.Inline));
        }
コード例 #4
0
        private static void WriteBlockContainer(ContainerBlock container)
        {
            bool needNewLine = false;

            foreach (Block block in container)
            {
                if (needNewLine)
                {
                    SysConsole.WriteLine();
                }

                switch (block)
                {
                case HeadingBlock heading:
                    MarkdownConsole.WriteHeader(GetTextFromInlineContainer(heading.Inline), heading.Level);
                    needNewLine = true;
                    break;

                case CodeBlock code:
                    WriteCode(code);
                    break;

                case QuoteBlock quote:
                    MarkdownConsole.WriteQuote(GetTextFromBlockContainer(quote));
                    break;

                case ThematicBreakBlock horizontalLine:
                    SysConsole.WriteLine();
                    MarkdownConsole.WriteHorizontalBreak();
                    SysConsole.WriteLine();
                    break;

                case ParagraphBlock paragraph:
                    WriteLeafBlock(paragraph);
                    break;

                case ListBlock list:
                    WriteList(list);
                    break;

                case HtmlBlock html:
                    WriteHtml(html);
                    break;
                }
            }
        }
コード例 #5
0
        private static void WriteInline(IInline inline)
        {
            switch (inline)
            {
            case LiteralInline literal:
                SysConsole.Write(GetTextFromLiteral(literal));
                return;

            case LinkInline link:
                MarkdownConsole.WriteLink(GetUrlFromLink(link), link.Title);
                return;

            case AutolinkInline autoLink:
                MarkdownConsole.WriteLink(autoLink.Url);
                return;

            case CodeInline code:
                MarkdownConsole.WriteCode(code.Content);
                return;

            case EmphasisInline emphasis:
                string text = GetTextFromInlineContainer(emphasis);
                if (emphasis.IsDouble)
                {
                    MarkdownConsole.WriteBold(text);
                }
                else
                {
                    MarkdownConsole.WriteItalic(text);
                }
                return;

            case HtmlInline html:
                MarkdownConsole.WriteHtml(html.Tag);
                return;

            case HtmlEntityInline htmlEntity:
                MarkdownConsole.WriteHtml(htmlEntity.Transcoded.Text);
                return;

            case LineBreakInline lineBreak:
                SysConsole.WriteLine();
                return;
            }
        }