with unintended identation
+ // when there is no preceeding text node.
+ // Prepend a text node with the same indentation to force .
+ node.ReplaceWith($"\n{indent}", new XElement("pre", code));
+ }
+ else
+ {
+ node.ReplaceWith(new XElement("pre", code));
+ }
}
}
diff --git a/src/Docfx.Dotnet/Parsers/XmlCommentTransformer.cs b/src/Docfx.Dotnet/Parsers/XmlCommentTransformer.cs
index 1ba4d4ae170..40a21f10b6d 100644
--- a/src/Docfx.Dotnet/Parsers/XmlCommentTransformer.cs
+++ b/src/Docfx.Dotnet/Parsers/XmlCommentTransformer.cs
@@ -10,7 +10,7 @@
namespace Docfx.Dotnet;
-internal static class XmlCommentTransformer
+static class XmlCommentTransformer
{
private static readonly XslCompiledTransform _transform;
@@ -25,13 +25,12 @@ static XmlCommentTransformer()
_transform.Load(reader, xsltSettings, new XmlUrlResolver());
}
- public static XDocument Transform(string xml)
+ public static string Transform(string xml)
{
- using var ms = new MemoryStream();
- using var writer = new XHtmlWriter(new StreamWriter(ms));
+ using var ms = new StringWriter();
+ using var writer = new XHtmlWriter(ms);
XDocument doc = XDocument.Parse(xml, LoadOptions.PreserveWhitespace);
_transform.Transform(doc.CreateNavigator(), writer);
- ms.Seek(0, SeekOrigin.Begin);
- return XDocument.Load(ms, LoadOptions.PreserveWhitespace | LoadOptions.SetLineInfo);
+ return ms.ToString();
}
}
diff --git a/test/Docfx.Dotnet.Tests/XmlCommentUnitTest.cs b/test/Docfx.Dotnet.Tests/XmlCommentUnitTest.cs
index 3ddc6820594..08a40e9ce7e 100644
--- a/test/Docfx.Dotnet.Tests/XmlCommentUnitTest.cs
+++ b/test/Docfx.Dotnet.Tests/XmlCommentUnitTest.cs
@@ -22,6 +22,25 @@ public static void SeeLangword()
Verify(" ", "undefined-langword");
}
+ [Fact]
+ public static void ParaNewLine()
+ {
+ Assert.Equal(
+ """
+ a
+ b
+ c
+ """,
+ XmlComment.Parse("""
+
+ a
+ b
+ c
+
+ """).Summary,
+ ignoreLineEndingDifferences: true);
+ }
+
[Fact]
public static void Issue8122()
{
@@ -152,6 +171,35 @@ public void ExternalCodeBlockXaml()
ignoreLineEndingDifferences: true);
}
+ [Theory]
+ [InlineData(" ")]
+ [InlineData("""
+
+
+
+ """)]
+ public void Issue9462(string input)
+ {
+ var commentModel = XmlComment.Parse(input, new()
+ {
+ ResolveCode = _ =>
+ """
+ #region SDK_CustomProcessor
+
+ using System;
+ using System.Collections.Generic;
+ #endregion
+ """
+ });
+ Assert.Equal(
+ """
+ using System;
+ using System.Collections.Generic;
+ """,
+ commentModel.Examples.Single(),
+ ignoreLineEndingDifferences: true);
+ }
+
[Fact]
public static void MarkdownCodeBlock()
{