From 310a55c724c44a9302a7aa06b0770222817989a9 Mon Sep 17 00:00:00 2001 From: Alexandre Mutel Date: Wed, 30 Oct 2024 19:08:35 +0100 Subject: [PATCH 1/8] Update readme.md --- readme.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/readme.md b/readme.md index 1ae79f16..713d9240 100644 --- a/readme.md +++ b/readme.md @@ -144,12 +144,12 @@ AMD Ryzen 9 5950X, 1 CPU, 32 logical and 16 physical cores - Markdig is roughly **x100 times faster than MarkdownSharp** - **20% faster than the reference cmark C implementation** +## Sponsors -## Donate +Supports this project with a monthly donation and help me continue improving it. \[[Become a sponsor](https://github.com/sponsors/xoofx)\] -If you are using this library and find it useful for your project, please consider a donation for it! - -[![Donate](https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=FRGHXBTP442JL) +[lilith](https://github.com/lilith) Lilith River, author of [Imageflow Server, an easy on-demand +image editing, optimization, and delivery server](https://github.com/imazen/imageflow-server) ## Credits From 49cf59b819a53d3a1d356ce0dfdce014a48fd91f Mon Sep 17 00:00:00 2001 From: snnz Date: Sun, 24 Nov 2024 13:51:56 +0300 Subject: [PATCH 2/8] Fix extra line feeds in link title (#826) * Fix extra line feeds in link title * Test added. --- src/Markdig.Tests/TestLinkHelper.cs | 8 ++++++++ src/Markdig/Helpers/LinkHelper.cs | 2 ++ 2 files changed, 10 insertions(+) diff --git a/src/Markdig.Tests/TestLinkHelper.cs b/src/Markdig.Tests/TestLinkHelper.cs index 33edb465..75acbb19 100644 --- a/src/Markdig.Tests/TestLinkHelper.cs +++ b/src/Markdig.Tests/TestLinkHelper.cs @@ -81,6 +81,14 @@ public void TestTitleSimpleAlternate() Assert.AreEqual(' ', text.CurrentChar); } + [Test] + public void TestTitleMultiline() + { + var text = new StringSlice("'this\ris\r\na\ntitle'"); + Assert.True(LinkHelper.TryParseTitle(ref text, out string title, out _)); + Assert.AreEqual("this\ris\r\na\ntitle", title); + } + [Test] public void TestUrlAndTitle() { diff --git a/src/Markdig/Helpers/LinkHelper.cs b/src/Markdig/Helpers/LinkHelper.cs index a7d2ae55..48581e1e 100644 --- a/src/Markdig/Helpers/LinkHelper.cs +++ b/src/Markdig/Helpers/LinkHelper.cs @@ -567,6 +567,7 @@ public static bool TryParseTitle(ref T text, out string? title, out char encl if (c == '\r' && text.PeekChar() == '\n') { buffer.Append('\n'); + text.SkipChar(); } continue; } @@ -663,6 +664,7 @@ public static bool TryParseTitleTrivia(ref T text, out string? title, out cha if (c == '\r' && text.PeekChar() == '\n') { buffer.Append('\n'); + text.SkipChar(); } continue; } From 98a060f2a340bc7a6e2dd9e0f32eac00ffefe170 Mon Sep 17 00:00:00 2001 From: Miha Zupan Date: Fri, 29 Nov 2024 19:06:58 +0100 Subject: [PATCH 3/8] Add .NET 9 target, drop .NET 6 --- .github/workflows/ci.yml | 2 +- src/Markdig.Tests/Markdig.Tests.csproj | 9 +++++---- src/Markdig.Tests/TestContainerBlocks.cs | 2 +- src/Markdig.Tests/TestFastStringWriter.cs | 4 +++- src/Markdig.Tests/TestYamlFrontMatterExtension.cs | 2 +- src/Markdig/Helpers/FastStringWriter.cs | 2 +- src/Markdig/Markdig.targets | 2 +- src/global.json | 2 +- 8 files changed, 14 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9738b508..da15d160 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,6 +13,6 @@ jobs: build: uses: xoofx/.github/.github/workflows/dotnet.yml@main with: - dotnet-version: '6.0 8.0' + dotnet-version: '6.0 8.0 9.0' secrets: NUGET_TOKEN: ${{ secrets.NUGET_TOKEN }} \ No newline at end of file diff --git a/src/Markdig.Tests/Markdig.Tests.csproj b/src/Markdig.Tests/Markdig.Tests.csproj index 49c875fc..5d33dc8d 100644 --- a/src/Markdig.Tests/Markdig.Tests.csproj +++ b/src/Markdig.Tests/Markdig.Tests.csproj @@ -1,10 +1,11 @@ - net8.0 + net462;net6.0;net8.0;net9.0 Exe false enable + 13.0 Markdig.Tests.Program $(MSBuildProjectDirectory)\..\SpecFileGen\bin\$(Configuration)\net8.0\SpecFileGen.dll $(MSBuildProjectDirectory)\..\SpecFileGen\bin\$(Configuration)\net8.0\SpecFileGen.timestamp @@ -18,14 +19,14 @@ - - + + @@ -37,7 +38,7 @@ - + diff --git a/src/Markdig.Tests/TestContainerBlocks.cs b/src/Markdig.Tests/TestContainerBlocks.cs index abffe84f..c5e0440b 100644 --- a/src/Markdig.Tests/TestContainerBlocks.cs +++ b/src/Markdig.Tests/TestContainerBlocks.cs @@ -172,7 +172,7 @@ public void CopyTo() Assert.NotNull(destination[2]); Assert.Null(destination[3]); - Array.Clear(destination); + Array.Clear(destination, 0, destination.Length); container.Add(new ParagraphBlock()); container.CopyTo(destination, 1); diff --git a/src/Markdig.Tests/TestFastStringWriter.cs b/src/Markdig.Tests/TestFastStringWriter.cs index e28b0a60..b5cbf663 100644 --- a/src/Markdig.Tests/TestFastStringWriter.cs +++ b/src/Markdig.Tests/TestFastStringWriter.cs @@ -1,7 +1,8 @@ using System.Text; - using Markdig.Helpers; +#if NET6_0_OR_GREATER + namespace Markdig.Tests; [TestFixture] @@ -184,3 +185,4 @@ public async Task Write_StringBuilder() AssertToString("foobar\nbazfoo\nfoo" + new string('a', 1050)); } } +#endif \ No newline at end of file diff --git a/src/Markdig.Tests/TestYamlFrontMatterExtension.cs b/src/Markdig.Tests/TestYamlFrontMatterExtension.cs index 3b38e4f0..a98b5793 100644 --- a/src/Markdig.Tests/TestYamlFrontMatterExtension.cs +++ b/src/Markdig.Tests/TestYamlFrontMatterExtension.cs @@ -107,7 +107,7 @@ public void FrontMatterBlockLinesCharIterator(string value) } } - Assert.Pass("No exception parsing and iterating through YAML front matter block lines"); + // No exception parsing and iterating through YAML front matter block lines } } diff --git a/src/Markdig/Helpers/FastStringWriter.cs b/src/Markdig/Helpers/FastStringWriter.cs index e0995f74..213134d7 100644 --- a/src/Markdig/Helpers/FastStringWriter.cs +++ b/src/Markdig/Helpers/FastStringWriter.cs @@ -30,7 +30,7 @@ public FastStringWriter() public override string NewLine { get => _newLine; - set => _newLine = value ?? Environment.NewLine; + set => base.NewLine = _newLine = value ?? Environment.NewLine; } [MethodImpl(MethodImplOptions.AggressiveInlining)] diff --git a/src/Markdig/Markdig.targets b/src/Markdig/Markdig.targets index 43babbd0..a6abba36 100644 --- a/src/Markdig/Markdig.targets +++ b/src/Markdig/Markdig.targets @@ -5,7 +5,7 @@ Alexandre Mutel en-US Alexandre Mutel - net462;netstandard2.0;netstandard2.1;net6.0;net8.0 + net462;netstandard2.0;netstandard2.1;net8.0;net9.0 false Markdown CommonMark md html md2html https://github.com/lunet-io/markdig/blob/master/changelog.md diff --git a/src/global.json b/src/global.json index 72d38cd2..30094e81 100644 --- a/src/global.json +++ b/src/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "8.0.100", + "version": "9.0.100", "rollForward": "latestMajor", "allowPrerelease": false } From 455f8f333d995eeb8267678a92754e4104204d18 Mon Sep 17 00:00:00 2001 From: Miha Zupan Date: Fri, 29 Nov 2024 20:22:40 +0100 Subject: [PATCH 4/8] Fix dotnet-versions format --- .github/workflows/ci.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index da15d160..bc547cc4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,6 +13,9 @@ jobs: build: uses: xoofx/.github/.github/workflows/dotnet.yml@main with: - dotnet-version: '6.0 8.0 9.0' + dotnet-version: | + 6.0 + 8.0 + 9.0 secrets: NUGET_TOKEN: ${{ secrets.NUGET_TOKEN }} \ No newline at end of file From 40781737c35c6c12c02969a4771376ce334c4691 Mon Sep 17 00:00:00 2001 From: Miha Zupan Date: Sat, 30 Nov 2024 03:03:26 +0100 Subject: [PATCH 5/8] Tweak SpecFileGen paths --- src/Markdig.Tests/Markdig.Tests.csproj | 14 +++++++------- src/Markdig.Tests/TestContainerBlocks.cs | 2 +- src/Markdig.Tests/TestFastStringWriter.cs | 4 +--- src/SpecFileGen/SpecFileGen.csproj | 2 +- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/Markdig.Tests/Markdig.Tests.csproj b/src/Markdig.Tests/Markdig.Tests.csproj index 5d33dc8d..1726b8f4 100644 --- a/src/Markdig.Tests/Markdig.Tests.csproj +++ b/src/Markdig.Tests/Markdig.Tests.csproj @@ -1,14 +1,14 @@ - + - net462;net6.0;net8.0;net9.0 + net6.0;net8.0;net9.0 Exe false enable 13.0 Markdig.Tests.Program - $(MSBuildProjectDirectory)\..\SpecFileGen\bin\$(Configuration)\net8.0\SpecFileGen.dll - $(MSBuildProjectDirectory)\..\SpecFileGen\bin\$(Configuration)\net8.0\SpecFileGen.timestamp + $(MSBuildProjectDirectory)\..\SpecFileGen\bin\$(Configuration)\$(TargetFramework)\SpecFileGen.dll + $(MSBuildProjectDirectory)\..\SpecFileGen\bin\$(Configuration)\$(TargetFramework)\SpecFileGen.timestamp @@ -19,14 +19,14 @@ + - - + @@ -38,7 +38,7 @@ - + diff --git a/src/Markdig.Tests/TestContainerBlocks.cs b/src/Markdig.Tests/TestContainerBlocks.cs index c5e0440b..abffe84f 100644 --- a/src/Markdig.Tests/TestContainerBlocks.cs +++ b/src/Markdig.Tests/TestContainerBlocks.cs @@ -172,7 +172,7 @@ public void CopyTo() Assert.NotNull(destination[2]); Assert.Null(destination[3]); - Array.Clear(destination, 0, destination.Length); + Array.Clear(destination); container.Add(new ParagraphBlock()); container.CopyTo(destination, 1); diff --git a/src/Markdig.Tests/TestFastStringWriter.cs b/src/Markdig.Tests/TestFastStringWriter.cs index b5cbf663..e28b0a60 100644 --- a/src/Markdig.Tests/TestFastStringWriter.cs +++ b/src/Markdig.Tests/TestFastStringWriter.cs @@ -1,7 +1,6 @@ using System.Text; -using Markdig.Helpers; -#if NET6_0_OR_GREATER +using Markdig.Helpers; namespace Markdig.Tests; @@ -185,4 +184,3 @@ public async Task Write_StringBuilder() AssertToString("foobar\nbazfoo\nfoo" + new string('a', 1050)); } } -#endif \ No newline at end of file diff --git a/src/SpecFileGen/SpecFileGen.csproj b/src/SpecFileGen/SpecFileGen.csproj index 0ad72b08..0c28b463 100644 --- a/src/SpecFileGen/SpecFileGen.csproj +++ b/src/SpecFileGen/SpecFileGen.csproj @@ -2,7 +2,7 @@ Exe - net8.0 + net6.0;net8.0;net9.0 enable false From a11899a350d8cdccc746361183342ae5c56f7148 Mon Sep 17 00:00:00 2001 From: Sergey Nozhenko Date: Mon, 9 Dec 2024 22:20:32 +0300 Subject: [PATCH 6/8] Fixes emphasis span calculation. A test is added. --- src/Markdig.Tests/TestSourcePosition.cs | 11 +++++++++++ src/Markdig/Parsers/Inlines/EmphasisInlineParser.cs | 9 ++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/Markdig.Tests/TestSourcePosition.cs b/src/Markdig.Tests/TestSourcePosition.cs index 3cd0e97e..746694eb 100644 --- a/src/Markdig.Tests/TestSourcePosition.cs +++ b/src/Markdig.Tests/TestSourcePosition.cs @@ -160,6 +160,17 @@ public void TestEmphasis3() "); } + [Test] + public void TestEmphasis4() + { + Check("**foo*", @" +paragraph ( 0, 0) 0-5 +literal ( 0, 0) 0-0 +emphasis ( 0, 1) 1-5 +literal ( 0, 2) 2-4 +"); + } + [Test] public void TestEmphasisFalse() { diff --git a/src/Markdig/Parsers/Inlines/EmphasisInlineParser.cs b/src/Markdig/Parsers/Inlines/EmphasisInlineParser.cs index 4fc6268c..440a878b 100644 --- a/src/Markdig/Parsers/Inlines/EmphasisInlineParser.cs +++ b/src/Markdig/Parsers/Inlines/EmphasisInlineParser.cs @@ -302,14 +302,13 @@ private void ProcessEmphasis(InlineProcessor processor, List Date: Sun, 15 Dec 2024 19:49:56 +0300 Subject: [PATCH 7/8] Set delimiter in the CustomContainer instance. --- .../Extensions/CustomContainers/CustomContainerExtension.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Markdig/Extensions/CustomContainers/CustomContainerExtension.cs b/src/Markdig/Extensions/CustomContainers/CustomContainerExtension.cs index d07d4a4c..1a38013e 100644 --- a/src/Markdig/Extensions/CustomContainers/CustomContainerExtension.cs +++ b/src/Markdig/Extensions/CustomContainers/CustomContainerExtension.cs @@ -30,7 +30,11 @@ public void Setup(MarkdownPipelineBuilder pipeline) { if (delimiterCount == 2 && emphasisChar == ':') { - return new CustomContainerInline(); + return new CustomContainerInline + { + DelimiterChar = ':', + DelimiterCount = 2 + }; } return null; }); From eb28f76588b9a6fd2f25720e2975e81e9ea56c2a Mon Sep 17 00:00:00 2001 From: Sergey Nozhenko Date: Sun, 15 Dec 2024 20:13:35 +0300 Subject: [PATCH 8/8] Set the correct source location to the Footnote and FootnoteLinkReferenceDefinition. --- src/Markdig/Extensions/Footnotes/FootnoteParser.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Markdig/Extensions/Footnotes/FootnoteParser.cs b/src/Markdig/Extensions/Footnotes/FootnoteParser.cs index 6d184bde..52c8c2c7 100644 --- a/src/Markdig/Extensions/Footnotes/FootnoteParser.cs +++ b/src/Markdig/Extensions/Footnotes/FootnoteParser.cs @@ -57,6 +57,8 @@ private BlockState TryOpen(BlockProcessor processor, bool isContinue) { Label = label, LabelSpan = labelSpan, + Column = processor.Column, + Span = new SourceSpan(processor.Start, processor.Line.End), }; // Maintain a list of all footnotes at document level @@ -74,6 +76,7 @@ private BlockState TryOpen(BlockProcessor processor, bool isContinue) { CreateLinkInline = CreateLinkToFootnote, Line = processor.LineIndex, + Column = saved, Span = new SourceSpan(start, processor.Start - 2), // account for ]: LabelSpan = labelSpan, Label = label