Skip to content

Commit

Permalink
fix inline source spans calculation
Browse files Browse the repository at this point in the history
  • Loading branch information
Benni committed Aug 22, 2023
1 parent 5e3416f commit d26822b
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 5 deletions.
18 changes: 15 additions & 3 deletions src/Markdig.Tests/MiscTests.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using System.Text.RegularExpressions;

using Markdig.Extensions.AutoLinks;

using Markdig.Syntax;
using NUnit.Framework;

namespace Markdig.Tests;
Expand Down Expand Up @@ -198,9 +198,9 @@ public void VisualizeMathExpressions()
<div class=""math"">
\begin{align}
\sqrt{37} & = \sqrt{\frac{73^2-1}{12^2}} \\
& = \sqrt{\frac{73^2}{12^2}\cdot\frac{73^2-1}{73^2}} \\
& = \sqrt{\frac{73^2}{12^2}\cdot\frac{73^2-1}{73^2}} \\
& = \sqrt{\frac{73^2}{12^2}}\sqrt{\frac{73^2-1}{73^2}} \\
& = \frac{73}{12}\sqrt{1 - \frac{1}{73^2}} \\
& = \frac{73}{12}\sqrt{1 - \frac{1}{73^2}} \\
& \approx \frac{73}{12}\left(1 - \frac{1}{2\cdot73^2}\right)
\end{align}
</div>
Expand Down Expand Up @@ -291,4 +291,16 @@ public void CanUseHttpsPrefixForWWWAutoLinks()
TestParser.TestSpec("www.foo.bar", "<p><a href=\"http:https://www.foo.bar\">www.foo.bar</a></p>", pipeline);
TestParser.TestSpec("www.foo.bar", "<p><a href=\"https://www.foo.bar\">www.foo.bar</a></p>", httpsPipeline);
}

[Test]
public void RootInlineHasCorrectSourceSpan()
{
var pipeline = new MarkdownPipelineBuilder().UsePreciseSourceLocation().Build();
pipeline.TrackTrivia = true;

var document = Markdown.Parse("0123456789\n", pipeline);

var expectedSourceSpan = new SourceSpan(0, 10);
Assert.That(((LeafBlock)document.LastChild).Inline.Span == expectedSourceSpan);
}
}
25 changes: 24 additions & 1 deletion src/Markdig.Tests/TestSourcePosition.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,28 @@ public void TestParagraph2()
");
}

[Test]
public void TestParagraphWithEndNewLine()
{
Check("0123456789\n", @"
paragraph ( 0, 0) 0-10
literal ( 0, 0) 0-9
linebreak ( 0,10) 10-10
", trackTrivia: true);

Check("0123456789\r", @"
paragraph ( 0, 0) 0-10
literal ( 0, 0) 0-9
linebreak ( 0,10) 10-10
", trackTrivia: true);

Check("0123456789\r\n", @"
paragraph ( 0, 0) 0-11
literal ( 0, 0) 0-9
linebreak ( 0,10) 10-11
", trackTrivia: true);
}

[Test]
public void TestEmphasis()
{
Expand Down Expand Up @@ -825,9 +847,10 @@ public void TestDocument()
");
}

private static void Check(string text, string expectedResult, string extensions = null)
private static void Check(string text, string expectedResult, string extensions = null, bool trackTrivia = false)
{
var pipelineBuilder = new MarkdownPipelineBuilder().UsePreciseSourceLocation();
pipelineBuilder.TrackTrivia = trackTrivia;
if (extensions != null)
{
pipelineBuilder.Configure(extensions);
Expand Down
11 changes: 10 additions & 1 deletion src/Markdig/Parsers/InlineProcessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,7 @@ public void ProcessInlineLeaf(LeafBlock leafBlock)
previousLineIndexForSliceOffset = 0;
lineOffsets.Clear();
var text = leafBlock.Lines.ToSlice(lineOffsets);
var textEnd = text.Length;
leafBlock.Lines.Release();
int previousStart = -1;

Expand Down Expand Up @@ -319,7 +320,8 @@ public void ProcessInlineLeaf(LeafBlock leafBlock)
var newLine = leafBlock.NewLine;
if (newLine != NewLine.None)
{
leafBlock.Inline.AppendChild(new LineBreakInline { NewLine = newLine });
var position = GetSourcePosition(textEnd, out int line, out int column);
leafBlock.Inline.AppendChild(new LineBreakInline { NewLine = newLine, Line = line, Column = column, Span = { Start = position, End = position + (newLine == NewLine.CarriageReturnLineFeed ? 1 : 0) } });
}
}
}
Expand All @@ -342,6 +344,13 @@ public void ProcessInlineLeaf(LeafBlock leafBlock)
// DebugLog.WriteLine("** Dump after Emphasis:");
// leafBlock.Inline.DumpTo(DebugLog);
//}

if (leafBlock.Inline.LastChild is not null)
{
leafBlock.Inline.Span.End = leafBlock.Inline.LastChild.Span.End;
}

leafBlock.UpdateSpanEnd(leafBlock.Inline.Span.End);
}

public void PostProcessInlines(int startingIndex, Inline? root, Inline? lastChild, bool isFinalProcessing)
Expand Down

0 comments on commit d26822b

Please sign in to comment.