fix block nodes

This commit is contained in:
Ruud Poutsma
2020-09-25 17:58:58 +02:00
parent f78b5c83cd
commit 0d86a93200
8 changed files with 58 additions and 8 deletions

View File

@@ -106,6 +106,13 @@ namespace Markdig.Tests
[TestCase(" p\n\n p ")]
[TestCase("p \n\n p ")]
[TestCase(" p \n\n p ")]
// special cases
[TestCase(" p \n\n\n\n p \n\n")]
[TestCase("\np")]
[TestCase("\n\np")]
[TestCase("p\n")]
[TestCase("p\n\n")]
public void TestParagraph(string value)
{
RoundTrip(value);
@@ -128,11 +135,19 @@ namespace Markdig.Tests
[TestCase("- i1\n- i2")]
[TestCase("- i1\n - i2")]
[TestCase("- i1\n - i1.1\n - i1.2")]
public void TestList(string value)
public void TestUnorederedList(string value)
{
RoundTrip(value);
}
[TestCase("1. i")]
[TestCase("1. i")]
[TestCase("1. i ")]
[TestCase("1. i ")]
public void TestOrderedList(string value)
{
RoundTrip(value);
}
[Test]
public void TestImage()
@@ -158,7 +173,7 @@ namespace Markdig.Tests
[TestCase(" - > q")]
[TestCase(" - > q")]
[TestCase(" - > q1\n - > q2")]
public void TestListItem_BlockQuote(string value)
public void TestUnorderedListItem_BlockQuote(string value)
{
RoundTrip(value);
}
@@ -172,6 +187,16 @@ namespace Markdig.Tests
RoundTrip(value);
}
[TestCase("\n> q")]
[TestCase("\n> q\n")]
[TestCase("\n> q\n\n")]
[TestCase("> q\n\np")]
[TestCase("p\n\n> q\n\n# h")]
public void TestBlockQuote_Paragraph(string value)
{
RoundTrip(value);
}
[Test]
public void TestBlockQuote()
{
@@ -362,5 +387,19 @@ namespace Markdig.Tests
{
RoundTrip(value);
}
[TestCase("```\nc\n```")]
[TestCase("\n```\nc\n```")]
[TestCase("\n\n```\nc\n```")]
[TestCase("```\nc\n```\n")]
[TestCase("```\nc\n```\n\n")]
[TestCase("\n```\nc\n```\n")]
[TestCase("\n```\nc\n```\n\n")]
[TestCase("\n\n```\nc\n```\n")]
[TestCase("\n\n```\nc\n```\n\n")]
public void TestCodeBlock(string value)
{
RoundTrip(value);
}
}
}

View File

@@ -26,7 +26,11 @@ namespace Markdig.Parsers
protected override FencedCodeBlock CreateFencedBlock(BlockProcessor processor)
{
return new FencedCodeBlock(this) {IndentCount = processor.Indent};
return new FencedCodeBlock(this)
{
IndentCount = processor.Indent,
LinesBefore = processor.UseLinesBefore(),
};
}
public override BlockState TryContinue(BlockProcessor processor, Block block)

View File

@@ -40,6 +40,7 @@ namespace Markdig.Parsers
{
startChar = endChar;
}
state.NextChar();
c = state.NextChar();
countDigit++;
}

View File

@@ -37,6 +37,7 @@ namespace Markdig.Parsers
{
if (delimiter == orderedDelimiter)
{
state.NextChar();
state.NextChar();
return true;
}

View File

@@ -103,7 +103,7 @@ namespace Markdig.Parsers
Level = level,
Lines = paragraph.Lines,
BeforeWhitespace = state.PopBeforeWhitespace(state.Column),
LinesBefore = state.UseLinesBefore()
LinesBefore = state.UseLinesBefore(),
};
//heading.Lines.Trim();

View File

@@ -51,6 +51,7 @@ namespace Markdig.Parsers
Span = new SourceSpan(sourcePosition, processor.Line.End),
BeforeWhitespace = processor.PopBeforeWhitespace(column),
HasSpaceAfterQuoteChar = hasSpaceAfterQuoteChar,
LinesBefore = processor.UseLinesBefore()
});
processor.WhitespaceStart += whitespaceToAdd;
return BlockState.Continue;

View File

@@ -18,6 +18,7 @@ namespace Markdig.Renderers.Normalize
{
if (obj is FencedCodeBlock fencedCodeBlock)
{
renderer.RenderLinesBefore(obj);
var opening = new string(fencedCodeBlock.FencedChar, fencedCodeBlock.FencedCharCount);
renderer.Write(opening);
@@ -55,6 +56,7 @@ namespace Markdig.Renderers.Normalize
renderer.WriteLeafRawLines(obj, true);
renderer.Write(opening);
renderer.RenderLinesAfter(obj);
}
else
{

View File

@@ -12,17 +12,19 @@ namespace Markdig.Renderers.Normalize
/// <seealso cref="NormalizeObjectRenderer{QuoteBlock}" />
public class QuoteBlockRenderer : NormalizeObjectRenderer<QuoteBlock>
{
protected override void Write(NormalizeRenderer renderer, QuoteBlock obj)
protected override void Write(NormalizeRenderer renderer, QuoteBlock quoteBlock)
{
renderer.Write(obj.BeforeWhitespace);
renderer.RenderLinesBefore(quoteBlock);
renderer.Write(quoteBlock.BeforeWhitespace);
var quoteIndent = obj.HasSpaceAfterQuoteChar ? obj.QuoteChar + " " : obj.QuoteChar.ToString();
var quoteIndent = quoteBlock.HasSpaceAfterQuoteChar ? quoteBlock.QuoteChar + " " : quoteBlock.QuoteChar.ToString();
//renderer.PushIndent(quoteIndent);
renderer.Write(quoteIndent);
renderer.WriteChildren(obj);
renderer.WriteChildren(quoteBlock);
//renderer.PopIndent();
renderer.FinishBlock();
renderer.RenderLinesAfter(quoteBlock);
}
}
}