protected override void Write(TsxRenderer renderer, CodeBlock obj) { renderer.EnsureLine(); var fencedCodeBlock = obj as FencedCodeBlock; if (renderer.EnableHtmlForBlock) { renderer.Write("<mdx.CodeBlock"); if (fencedCodeBlock?.Info != null) { renderer.Write(" info=").WriteJsString(fencedCodeBlock.Info); } if (fencedCodeBlock?.Arguments != null) { renderer.Write(" args=").WriteJsString(fencedCodeBlock.Arguments); } renderer.WriteProps(obj).Write('>'); } renderer.WriteLeafRawLines(obj, false, true); if (renderer.EnableHtmlForBlock) { renderer.Write("</mdx.CodeBlock>").WriteLine(); } renderer.EnsureLine(); }
protected override void Write(TsxRenderer renderer, ListBlock listBlock) { renderer.EnsureLine(); if (renderer.EnableHtmlForBlock) { if (listBlock.IsOrdered) { renderer.Write("<mdx.Ol"); if (listBlock.BulletType != '1') { renderer.Write(" type=\"").Write(listBlock.BulletType).Write('"'); } if (listBlock.OrderedStart is { } and not "1") { renderer.Write(" start={").Write(listBlock.OrderedStart).Write('}'); } renderer.WriteProps(listBlock); renderer.Write('>').WriteLine().Indent(); } else { renderer.Write("<mdx.Ul"); renderer.WriteProps(listBlock); renderer.Write('>').WriteLine().Indent(); } } foreach (var item in listBlock) { var listItem = (ListItemBlock)item; var previousImplicit = renderer.ImplicitParagraph; renderer.ImplicitParagraph = !listBlock.IsLoose; renderer.EnsureLine(); if (renderer.EnableHtmlForBlock) { renderer.Write("<mdx.Li").WriteProps(listItem).Write('>'); } renderer.WriteChildren(listItem); if (renderer.EnableHtmlForBlock) { renderer.Write("</mdx.Li>").WriteLine(); } renderer.EnsureLine(); renderer.ImplicitParagraph = previousImplicit; } if (renderer.EnableHtmlForBlock) { renderer.Dedent().Write(listBlock.IsOrdered ? "</mdx.Ol>" : "</mdx.Ul>").WriteLine(); } renderer.EnsureLine(); }
protected override void Write(TsxRenderer renderer, FigureCaption obj) { renderer.EnsureLine(); renderer.Write("<mdx.Figcaption").WriteProps(obj).Write('>'); renderer.WriteLeafInline(obj); renderer.Write("</mdx.Figcaption>").WriteLine(); }
protected override void Write(TsxRenderer renderer, QuoteBlock obj) { renderer.EnsureLine(); if (renderer.EnableHtmlForBlock) { renderer.Write("<mdx.BlockQuote").WriteProps(obj).Write(">").WriteLine(); } var savedImplicitParagraph = renderer.ImplicitParagraph; renderer.ImplicitParagraph = false; renderer.WriteChildren(obj); renderer.ImplicitParagraph = savedImplicitParagraph; if (renderer.EnableHtmlForBlock) { renderer.Write("</mdx.BlockQuote>").WriteLine(); } renderer.EnsureLine(); }
protected override void Write(TsxRenderer renderer, FooterBlock footer) { renderer.EnsureLine(); renderer.Write("<mdx.Footer").WriteProps(footer).Write(">"); var implicitParagraph = renderer.ImplicitParagraph; renderer.ImplicitParagraph = true; renderer.WriteChildren(footer); renderer.ImplicitParagraph = implicitParagraph; renderer.Write("</mdx.Footer>").WriteLine(); }
protected override void Write(TsxRenderer renderer, LineBreakInline obj) { if (renderer.EnableHtmlForInline) { if (obj.IsHard) { renderer.Write("{mdx.Br()}"); } } renderer.EnsureLine(); }
protected override void Write(TsxRenderer renderer, ParagraphBlock obj) { if (!renderer.ImplicitParagraph && renderer.EnableHtmlForBlock) { if (!renderer.IsFirstInContainer) { renderer.EnsureLine(); } renderer.Write("<mdx.P").WriteProps(obj).Write(">").Indent(); } renderer.WriteLeafInline(obj); if (!renderer.ImplicitParagraph) { if (renderer.EnableHtmlForBlock) { renderer.Dedent(); renderer.Write("</mdx.P>"); } renderer.EnsureLine(); } }
protected override void Write(TsxRenderer renderer, HeadingBlock obj) { if (renderer.EnableHtmlForBlock) { renderer.Write("<mdx.H level={" + obj.Level + "}").WriteProps(obj).Write('>'); } renderer.WriteLeafInline(obj); if (renderer.EnableHtmlForBlock) { renderer.Write("</mdx.H>").WriteLine(); } renderer.EnsureLine(); }
protected override void Write(TsxRenderer renderer, DefinitionList list) { renderer.EnsureLine(); renderer.Write("<mdx.Dl").WriteProps(list).Write('>').WriteLine(); foreach (var item in list) { var hasOpendd = false; var definitionItem = (DefinitionItem)item; var countdd = 0; var lastWasSimpleParagraph = false; for (var i = 0; i < definitionItem.Count; i++) { var definitionTermOrContent = definitionItem[i]; if (definitionTermOrContent is DefinitionTerm definitionTerm) { if (hasOpendd) { if (!lastWasSimpleParagraph) { renderer.EnsureLine(); } renderer.Write("</mdx.Dd>").WriteLine(); lastWasSimpleParagraph = false; hasOpendd = false; countdd = 0; } renderer.Write("<mdx.Dt").WriteProps(definitionTerm).Write('>'); renderer.WriteLeafInline(definitionTerm); renderer.Write("</mdx.Dt>").WriteLine(); } else { if (!hasOpendd) { renderer.Write("<mdx.Dd").WriteProps(definitionItem).Write('>'); countdd = 0; hasOpendd = true; } var nextTerm = i + 1 < definitionItem.Count ? definitionItem[i + 1] : null; var isSimpleParagraph = (nextTerm is null or DefinitionItem) && countdd == 0 && definitionTermOrContent is ParagraphBlock; var saveImplicitParagraph = renderer.ImplicitParagraph; if (isSimpleParagraph) { renderer.ImplicitParagraph = true; lastWasSimpleParagraph = true; } renderer.Write(definitionTermOrContent); renderer.ImplicitParagraph = saveImplicitParagraph; countdd++; } } if (hasOpendd) { if (!lastWasSimpleParagraph) { renderer.EnsureLine(); } renderer.Write("</mdx.Dd>").WriteLine(); } } renderer.EnsureLine(); renderer.Write("</mdx.Dl>").WriteLine(); }
protected override void Write(TsxRenderer renderer, Table table) { renderer.EnsureLine(); renderer.Write("<mdx.Table").WriteProps(table).Write('>').WriteLine(); var hasBody = false; var hasAlreadyHeader = false; var isHeaderOpen = false; var hasColumnWidth = false; foreach (var tableColumnDefinition in table.ColumnDefinitions) { if (tableColumnDefinition.Width != 0.0f && tableColumnDefinition.Width != 1.0f) { hasColumnWidth = true; break; } } if (hasColumnWidth) { foreach (var tableColumnDefinition in table.ColumnDefinitions) { var width = Math.Round(tableColumnDefinition.Width * 100) / 100; var widthValue = string.Format(CultureInfo.InvariantCulture, "{0:0.##}", width); renderer.Write($"<mdx.Col width=\"{widthValue}%\" />").WriteLine(); } } foreach (var rowObj in table) { var row = (TableRow)rowObj; if (row.IsHeader) { // Allow a single thead if (!hasAlreadyHeader) { renderer.Write("<mdx.Thead>").WriteLine(); isHeaderOpen = true; } hasAlreadyHeader = true; } else if (!hasBody) { if (isHeaderOpen) { renderer.Write("</mdx.Thead>").WriteLine(); isHeaderOpen = false; } renderer.Write("<mdx.Tbody>").WriteLine(); hasBody = true; } renderer.Write("<mdx.Tr").WriteProps(row).Write('>').WriteLine(); for (var i = 0; i < row.Count; i++) { var cellObj = row[i]; var cell = (TableCell)cellObj; renderer.EnsureLine(); renderer.Write(row.IsHeader ? "<mdx.Th" : "<mdx.Td"); if (cell.ColumnSpan != 1) { renderer.Write($" colspan={{{cell.ColumnSpan}}}"); } if (cell.RowSpan != 1) { renderer.Write($" rowspan={{{cell.RowSpan}}}"); } if (table.ColumnDefinitions.Count > 0) { var columnIndex = cell.ColumnIndex < 0 || cell.ColumnIndex >= table.ColumnDefinitions.Count ? i : cell.ColumnIndex; columnIndex = columnIndex >= table.ColumnDefinitions.Count ? table.ColumnDefinitions.Count - 1 : columnIndex; var alignment = table.ColumnDefinitions[columnIndex].Alignment; if (alignment.HasValue) { switch (alignment) { case TableColumnAlign.Center: renderer.Write(" align=\"center\""); break; case TableColumnAlign.Right: renderer.Write(" align=\"right\""); break; case TableColumnAlign.Left: renderer.Write(" align=\"left\""); break; } } } renderer.WriteProps(cell); renderer.Write('>'); var previousImplicitParagraph = renderer.ImplicitParagraph; if (cell.Count == 1) { renderer.ImplicitParagraph = true; } renderer.Write(cell); renderer.ImplicitParagraph = previousImplicitParagraph; renderer.Write(row.IsHeader ? "</mdx.Th>" : "</mdx.Td>").WriteLine(); } renderer.Write("</mdx.Tr>").WriteLine(); } if (hasBody) { renderer.Write("</mdx.Tbody>").WriteLine(); } else if (isHeaderOpen) { renderer.Write("</mdx.Thead>").WriteLine(); } renderer.Write("</mdx.Table>").WriteLine(); }