Forge
csharp3407750f
1namespace AgentForge.Plugin.View.Components.Code;
2
3public static class ForgeViewFileContent
4{
5 public static string Render(
6 string content,
7 string? filePath,
8 int? highlightLine,
9 int? highlightEnd)
10 {
11 var language = ForgeSyntaxHighlighter.LanguageFromPath(filePath);
12 var lines = content.Replace("\r\n", "\n", StringComparison.Ordinal).Replace('\r', '\n').Split('\n');
13 var start = highlightLine is > 0 ? highlightLine.Value : -1;
14 var end = highlightEnd is > 0 ? highlightEnd.Value : start;
15 if (end < start)
16 (start, end) = (end, start);
17
18 var rows = new List<string>(lines.Length);
19 for (var i = 0; i < lines.Length; i++)
20 {
21 var lineNumber = i + 1;
22 var isHighlighted = start > 0 && lineNumber >= start && lineNumber <= end;
23 var rowClass = isHighlighted ? "file-line anchor-line" : "file-line";
24
25 rows.Add(ForgeHtml.Tr(rowClass, $"L{lineNumber}",
26 ForgeHtml.Td("file-num",
27 ForgeHtml.A($"#L{lineNumber}", lineNumber.ToString(), "file-num-link")),
28 ForgeHtml.Td("file-code", ForgeHtml.Raw(ForgeSyntaxHighlighter.HighlightLine(lines[i], language)))));
29 }
30
31 return ForgeHtml.Div("file-view",
32 ForgeHtml.Table("file-table",
33 ForgeHtml.Tbody([.. rows])));
34 }
35}
36
View only · write via MCP/CIDE