diff --git a/src/Elastic.Markdown/Helpers/DocumentationObjectPoolProvider.cs b/src/Elastic.Markdown/Helpers/DocumentationObjectPoolProvider.cs index af823e89b..8a25e7c2c 100644 --- a/src/Elastic.Markdown/Helpers/DocumentationObjectPoolProvider.cs +++ b/src/Elastic.Markdown/Helpers/DocumentationObjectPoolProvider.cs @@ -8,7 +8,6 @@ using Elastic.Markdown.Myst; using Elastic.Markdown.Myst.Renderers.LlmMarkdown; using Markdig.Renderers; -using Markdig.Syntax; using Microsoft.Extensions.ObjectPool; namespace Elastic.Markdown.Helpers; diff --git a/src/Elastic.Markdown/Myst/Renderers/LlmMarkdown/LlmBlockRenderers.cs b/src/Elastic.Markdown/Myst/Renderers/LlmMarkdown/LlmBlockRenderers.cs index a5210f24a..2fca4e4b7 100644 --- a/src/Elastic.Markdown/Myst/Renderers/LlmMarkdown/LlmBlockRenderers.cs +++ b/src/Elastic.Markdown/Myst/Renderers/LlmMarkdown/LlmBlockRenderers.cs @@ -279,25 +279,7 @@ protected override void Write(LlmMarkdownRenderer renderer, Table table) // Render table header if (table.Count > 0 && table[0] is TableRow headerRow) { - renderer.Writer.Write("|"); - var cellIndex = 0; - foreach (var cell in headerRow.Cast()) - { - renderer.Writer.Write(" "); - - // Capture cell content - var content = DocumentationObjectPoolProvider.UseLlmMarkdownRenderer(renderer.BuildContext, cell.Descendants().OfType(), static (tmpRenderer, obj) => - { - foreach (var inline in obj) - tmpRenderer.Write(inline); - }); - // Write padded content - renderer.Writer.Write(content.PadRight(columnWidths[cellIndex])); - renderer.Writer.Write(" |"); - cellIndex++; - } - - renderer.WriteLine(); + RenderTableRowCells(renderer, headerRow, columnWidths); // Render separator row with proper alignment renderer.Writer.Write("|"); @@ -313,27 +295,26 @@ protected override void Write(LlmMarkdownRenderer renderer, Table table) // Render table body with aligned columns foreach (var row in table.Skip(1).Cast()) { - renderer.Writer.Write("|"); - var cellIndex = 0; - foreach (var cell in row.Cast()) - { - renderer.Writer.Write(" "); - - // Capture cell content - var content = DocumentationObjectPoolProvider.UseLlmMarkdownRenderer(renderer.BuildContext, cell.Descendants().OfType(), static (tmpRenderer, obj) => - { - foreach (var inline in obj) - tmpRenderer.Write(inline); - }); - - // Write padded content - renderer.Writer.Write(content.PadRight(columnWidths[cellIndex])); - renderer.Writer.Write(" |"); - cellIndex++; - } + RenderTableRowCells(renderer, row, columnWidths); + } + } - renderer.WriteLine(); + /// + /// Renders a table row with proper cell alignment and padding + /// + private static void RenderTableRowCells(LlmMarkdownRenderer renderer, TableRow row, int[] columnWidths) + { + renderer.Writer.Write("|"); + var cellIndex = 0; + foreach (var cell in row.Cast()) + { + renderer.Writer.Write(" "); + var content = RenderTableCellContent(renderer, cell); + renderer.Writer.Write(content.PadRight(columnWidths[cellIndex])); + renderer.Writer.Write(" |"); + cellIndex++; } + renderer.WriteLine(); } /// @@ -352,24 +333,32 @@ private static int[] CalculateColumnWidths(LlmMarkdownRenderer renderer, Table t // Process all rows to find maximum width for each column foreach (var row in table.Cast()) { - var cellIndex = 0; - foreach (var cell in row.Cast()) + for (var cellIndex = 0; cellIndex < row.Count; cellIndex++) { + var cell = row[cellIndex] as TableCell; // Capture cell content - var content = DocumentationObjectPoolProvider.UseLlmMarkdownRenderer(renderer.BuildContext, cell.Descendants().OfType(), static (tmpRenderer, obj) => - { - foreach (var inline in obj) - tmpRenderer.Write(inline); - }); + var content = RenderTableCellContent(renderer, cell!); // Update width if this cell is wider widths[cellIndex] = Math.Max(widths[cellIndex], content.Length); - cellIndex++; } } return widths; } + + /// + /// Renders the inline content of a table cell to plain text + /// + private static string RenderTableCellContent(LlmMarkdownRenderer renderer, TableCell cell) => + DocumentationObjectPoolProvider.UseLlmMarkdownRenderer( + renderer.BuildContext, + cell.Descendants().OfType(), + static (tmpRenderer, obj) => + { + foreach (var inline in obj) + tmpRenderer.Write(inline); + }); } public class LlmDirectiveRenderer : MarkdownObjectRenderer