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; } } }
private static void WriteCode(CodeBlock code) { foreach (StringLine line in code.Lines) { MarkdownConsole.WriteCode(GetTextFromSlice(line.Slice)); } SysConsole.WriteLine(); }
public static void WriteHtml(HtmlBlock html) { if (html.Type != HtmlBlockType.InterruptingBlock && html.Type != HtmlBlockType.NonInterruptingBlock) { return; } MarkdownConsole.WriteHtml(GetTextFromInlineContainer(html.Inline)); }
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; } } }
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; } }