xoofx / markdig

A fast, powerful, CommonMark compliant, extensible Markdown processor for .NET
BSD 2-Clause "Simplified" License
4.21k stars 444 forks source link

Apply `foreach` on `class StringLineGroup` got phantom empty line, is it expected? #757

Closed Akarinnnnn closed 7 months ago

Akarinnnnn commented 7 months ago

I' m writing code to dump a FencedCodeBlock, here is the function:

        private static void HandleCodeBlock(FencedCodeBlock codeblock, int level)
        {
            Console.ForegroundColor = ConsoleColor.DarkYellow;
            if (!string.IsNullOrEmpty(codeblock.Info))
            {
                PrintIndent(level);
                Console.WriteLine($"lang: {codeblock.Info}, info args: {codeblock.Arguments}");
            }
            Console.ForegroundColor = ConsoleColor.White;

            foreach (var line in codeblock.Lines)
                Console.WriteLine(line);
        }

Then I see output contains suspicious empty line like this:

  FencedCodeBlock: 36/692-735 @1
 characters.sifeng.voice("c1s1", 3)

And the corresponding markdown is: ``` characters.sifeng.voice("c1s1", 3) ```

After some investigation, I found the enumerator of StringLineGroup returns internal array's enumerator directly. The array contains reserved slot for future item adding, that's the reason why we see phantom empty lines.

Shall we change the GetEnumerator() for StringLineGroup? I can provide some help.

xoofx commented 7 months ago

Shall we change the GetEnumerator() for StringLineGroup? I can provide some help.

Yep most likely, you can make a PR for a fix, thanks!

Akarinnnnn commented 7 months ago

Sorry for using incorrect email address. I will use correct information to commit later.