protected override void Write(NormalizeRenderer renderer, CodeBlock obj) { if (obj is FencedCodeBlock fencedCodeBlock) { var opening = new string(fencedCodeBlock.FencedChar, fencedCodeBlock.FencedCharCount); renderer.Write(opening); if (fencedCodeBlock.Info != null) { renderer.Write(fencedCodeBlock.Info); } if (!string.IsNullOrEmpty(fencedCodeBlock.Arguments)) { renderer.Write(" ").Write(fencedCodeBlock.Arguments); } /* TODO do we need this causes a empty space and would render html attributes to markdown. * var attributes = obj.TryGetAttributes(); * if (attributes != null) * { * renderer.Write(" "); * renderer.Write(attributes); * } */ renderer.WriteLine(); renderer.WriteLeafRawLines(obj, true); renderer.Write(opening); } else { renderer.WriteLeafRawLines(obj, false, true); } renderer.FinishBlock(renderer.Options.EmptyLineAfterCodeBlock); }
protected override void Write(NormalizeRenderer renderer, Markdig.Extensions.Tables.Table obj) { foreach (Markdig.Extensions.Tables.TableRow row in obj) { renderer.Write("|"); foreach (Markdig.Extensions.Tables.TableCell cell in row) { foreach (Markdig.Syntax.ParagraphBlock block in cell) { renderer.Write(block.ToMarkdownString().Replace("\n", "")); } renderer.Write("|"); } if (row.IsHeader) { renderer.Write("\n|"); for (int i = 0; i < row.Count; i++) { renderer.Write("---|"); } } renderer.Write("\n"); } renderer.Write("\n"); //renderer.Write("\n\n" + obj.ToMarkdownString() + "\n\n"); //var headingText = obj.Level > 0 && obj.Level <= 6 // ? HeadingTexts[obj.Level - 1] // : new string('#', obj.Level); //renderer.Write(headingText).Write(' '); //renderer.WriteLeafInline(obj); //renderer.FinishBlock(renderer.Options.EmptyLineAfterHeading); }
protected override void Write(NormalizeRenderer renderer, HeadingBlock obj) { var headingText = obj.Level > 0 && obj.Level <= 6 ? HeadingTexts[obj.Level - 1] : new string('#', obj.Level); renderer.Write(headingText).Write(' '); renderer.WriteLeafInline(obj); renderer.FinishBlock(renderer.Options.EmptyLineAfterHeading); }
protected override void Write(NormalizeRenderer renderer, LinkReferenceDefinition linkDef) { renderer.EnsureLine(); renderer.Write('['); renderer.Write(linkDef.Label); renderer.Write("]: "); renderer.Write(linkDef.Url); if (linkDef.Title != null) { renderer.Write(" \""); renderer.Write(linkDef.Title.Replace("\"", "\\\"")); renderer.Write('"'); } renderer.FinishBlock(false); }
protected override void Write(NormalizeRenderer renderer, ListBlock listBlock) { renderer.EnsureLine(); var compact = renderer.CompactParagraph; renderer.CompactParagraph = !listBlock.IsLoose; if (listBlock.IsOrdered) { int index = 0; if (listBlock.OrderedStart != null) { switch (listBlock.BulletType) { case '1': int.TryParse(listBlock.OrderedStart, out index); break; } } for (var i = 0; i < listBlock.Count; i++) { var item = listBlock[i]; var listItem = (ListItemBlock)item; renderer.EnsureLine(); renderer.Write(index.ToString(CultureInfo.InvariantCulture)); renderer.Write(listBlock.OrderedDelimiter); renderer.Write(' '); renderer.PushIndent(new string(' ', IntLog10Fast(index) + 3)); renderer.WriteChildren(listItem); renderer.PopIndent(); switch (listBlock.BulletType) { case '1': index++; break; } if (i + 1 < listBlock.Count && listBlock.IsLoose) { renderer.EnsureLine(); renderer.WriteLine(); } } } else { for (var i = 0; i < listBlock.Count; i++) { var item = listBlock[i]; var listItem = (ListItemBlock)item; renderer.EnsureLine(); renderer.Write(renderer.Options.ListItemCharacter ?? listBlock.BulletType); renderer.Write(' '); renderer.PushIndent(" "); renderer.WriteChildren(listItem); renderer.PopIndent(); if (i + 1 < listBlock.Count && listBlock.IsLoose) { renderer.EnsureLine(); renderer.WriteLine(); } } } renderer.CompactParagraph = compact; renderer.FinishBlock(true); }