Skip to content

Commit 7d27151

Browse files
authored
refactor: Dedupe some logic in LlmBlockRenderers (#1577)
* refactor: Dedupe some logic in LlmBlockRenderers * Cleanup * Cleanup
1 parent ee2f23d commit 7d27151

File tree

2 files changed

+35
-47
lines changed

2 files changed

+35
-47
lines changed

src/Elastic.Markdown/Helpers/DocumentationObjectPoolProvider.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
using Elastic.Markdown.Myst;
99
using Elastic.Markdown.Myst.Renderers.LlmMarkdown;
1010
using Markdig.Renderers;
11-
using Markdig.Syntax;
1211
using Microsoft.Extensions.ObjectPool;
1312

1413
namespace Elastic.Markdown.Helpers;

src/Elastic.Markdown/Myst/Renderers/LlmMarkdown/LlmBlockRenderers.cs

Lines changed: 35 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -279,25 +279,7 @@ protected override void Write(LlmMarkdownRenderer renderer, Table table)
279279
// Render table header
280280
if (table.Count > 0 && table[0] is TableRow headerRow)
281281
{
282-
renderer.Writer.Write("|");
283-
var cellIndex = 0;
284-
foreach (var cell in headerRow.Cast<TableCell>())
285-
{
286-
renderer.Writer.Write(" ");
287-
288-
// Capture cell content
289-
var content = DocumentationObjectPoolProvider.UseLlmMarkdownRenderer(renderer.BuildContext, cell.Descendants().OfType<Inline>(), static (tmpRenderer, obj) =>
290-
{
291-
foreach (var inline in obj)
292-
tmpRenderer.Write(inline);
293-
});
294-
// Write padded content
295-
renderer.Writer.Write(content.PadRight(columnWidths[cellIndex]));
296-
renderer.Writer.Write(" |");
297-
cellIndex++;
298-
}
299-
300-
renderer.WriteLine();
282+
RenderTableRowCells(renderer, headerRow, columnWidths);
301283

302284
// Render separator row with proper alignment
303285
renderer.Writer.Write("|");
@@ -313,27 +295,26 @@ protected override void Write(LlmMarkdownRenderer renderer, Table table)
313295
// Render table body with aligned columns
314296
foreach (var row in table.Skip(1).Cast<TableRow>())
315297
{
316-
renderer.Writer.Write("|");
317-
var cellIndex = 0;
318-
foreach (var cell in row.Cast<TableCell>())
319-
{
320-
renderer.Writer.Write(" ");
321-
322-
// Capture cell content
323-
var content = DocumentationObjectPoolProvider.UseLlmMarkdownRenderer(renderer.BuildContext, cell.Descendants().OfType<Inline>(), static (tmpRenderer, obj) =>
324-
{
325-
foreach (var inline in obj)
326-
tmpRenderer.Write(inline);
327-
});
328-
329-
// Write padded content
330-
renderer.Writer.Write(content.PadRight(columnWidths[cellIndex]));
331-
renderer.Writer.Write(" |");
332-
cellIndex++;
333-
}
298+
RenderTableRowCells(renderer, row, columnWidths);
299+
}
300+
}
334301

335-
renderer.WriteLine();
302+
/// <summary>
303+
/// Renders a table row with proper cell alignment and padding
304+
/// </summary>
305+
private static void RenderTableRowCells(LlmMarkdownRenderer renderer, TableRow row, int[] columnWidths)
306+
{
307+
renderer.Writer.Write("|");
308+
var cellIndex = 0;
309+
foreach (var cell in row.Cast<TableCell>())
310+
{
311+
renderer.Writer.Write(" ");
312+
var content = RenderTableCellContent(renderer, cell);
313+
renderer.Writer.Write(content.PadRight(columnWidths[cellIndex]));
314+
renderer.Writer.Write(" |");
315+
cellIndex++;
336316
}
317+
renderer.WriteLine();
337318
}
338319

339320
/// <summary>
@@ -352,24 +333,32 @@ private static int[] CalculateColumnWidths(LlmMarkdownRenderer renderer, Table t
352333
// Process all rows to find maximum width for each column
353334
foreach (var row in table.Cast<TableRow>())
354335
{
355-
var cellIndex = 0;
356-
foreach (var cell in row.Cast<TableCell>())
336+
for (var cellIndex = 0; cellIndex < row.Count; cellIndex++)
357337
{
338+
var cell = row[cellIndex] as TableCell;
358339
// Capture cell content
359-
var content = DocumentationObjectPoolProvider.UseLlmMarkdownRenderer(renderer.BuildContext, cell.Descendants().OfType<Inline>(), static (tmpRenderer, obj) =>
360-
{
361-
foreach (var inline in obj)
362-
tmpRenderer.Write(inline);
363-
});
340+
var content = RenderTableCellContent(renderer, cell!);
364341

365342
// Update width if this cell is wider
366343
widths[cellIndex] = Math.Max(widths[cellIndex], content.Length);
367-
cellIndex++;
368344
}
369345
}
370346

371347
return widths;
372348
}
349+
350+
/// <summary>
351+
/// Renders the inline content of a table cell to plain text
352+
/// </summary>
353+
private static string RenderTableCellContent(LlmMarkdownRenderer renderer, TableCell cell) =>
354+
DocumentationObjectPoolProvider.UseLlmMarkdownRenderer(
355+
renderer.BuildContext,
356+
cell.Descendants().OfType<Inline>(),
357+
static (tmpRenderer, obj) =>
358+
{
359+
foreach (var inline in obj)
360+
tmpRenderer.Write(inline);
361+
});
373362
}
374363

375364
public class LlmDirectiveRenderer : MarkdownObjectRenderer<LlmMarkdownRenderer, DirectiveBlock>

0 commit comments

Comments
 (0)