1
0
mirror of https://github.com/erusev/parsedown.git synced 2023-08-10 21:13:06 +03:00

Track whitespace left on blank lines to match CommonMark

Test changes copy pasted to match CommonMark reference parser
This commit is contained in:
Aidan Woods
2019-01-28 19:13:57 +00:00
parent 49dd8b113d
commit f47ba7aa34
17 changed files with 106 additions and 59 deletions

View File

@@ -10,20 +10,24 @@ final class Lines
/** @var bool */
private $containsBlankLines;
/** @var string */
private $trailingBlankLinesText;
/** @var int */
private $trailingBlankLines;
/**
* @param Context[] $Contexts
* @param int $trailingBlankLines
* @param string $trailingBlankLinesText
*/
private function __construct($Contexts, $trailingBlankLines)
private function __construct($Contexts, $trailingBlankLinesText)
{
$this->Contexts = $Contexts;
$this->trailingBlankLines = $trailingBlankLines;
$this->trailingBlankLinesText = $trailingBlankLinesText;
$this->trailingBlankLines = \substr_count($trailingBlankLinesText, "\n");
$this->containsBlankLines = (
($trailingBlankLines > 0)
($this->trailingBlankLines > 0)
|| \array_reduce(
$Contexts,
/**
@@ -42,7 +46,7 @@ final class Lines
/** @return self */
public static function none()
{
return new self([], 0);
return new self([], '');
}
/**
@@ -56,23 +60,23 @@ final class Lines
$text = \str_replace(["\r\n", "\r"], "\n", $text);
$Contexts = [];
$sequentialBreaks = 0;
$sequentialLines = '';
foreach (\explode("\n", $text) as $line) {
if (\chop($line) === '') {
$sequentialBreaks += 1;
$sequentialLines .= $line . "\n";
continue;
}
$Contexts[] = new Context(
new Line($line, $indentOffset),
$sequentialBreaks
$sequentialLines
);
$sequentialBreaks = 0;
$sequentialLines = '';
}
return new self($Contexts, $sequentialBreaks);
return new self($Contexts, $sequentialLines);
}
/** @return bool */
@@ -116,6 +120,7 @@ final class Lines
}
$Lines = clone($this);
$Lines->trailingBlankLinesText .= \str_repeat("\n", $count);
$Lines->trailingBlankLines += $count;
$Lines->containsBlankLines = $Lines->containsBlankLines || ($count > 0);
@@ -135,6 +140,7 @@ final class Lines
if (\count($NextLines->Contexts) === 0) {
$Lines->trailingBlankLines += $NextLines->trailingBlankLines;
$Lines->trailingBlankLinesText .= $NextLines->trailingBlankLinesText;
$Lines->containsBlankLines = $Lines->containsBlankLines
|| ($Lines->trailingBlankLines > 0)
@@ -145,12 +151,13 @@ final class Lines
$NextLines->Contexts[0] = new Context(
$NextLines->Contexts[0]->line(),
$NextLines->Contexts[0]->previousEmptyLines() + $Lines->trailingBlankLines
$NextLines->Contexts[0]->previousEmptyLinesText() . $Lines->trailingBlankLinesText
);
$Lines->Contexts = \array_merge($Lines->Contexts, $NextLines->Contexts);
$Lines->trailingBlankLines = $NextLines->trailingBlankLines;
$Lines->trailingBlankLinesText = $NextLines->trailingBlankLinesText;
$Lines->containsBlankLines = $Lines->containsBlankLines
|| $NextLines->containsBlankLines
@@ -166,7 +173,7 @@ final class Lines
$Context = new Context(
$Context->line(),
$Context->previousEmptyLines() + $Lines->trailingBlankLines
$Context->previousEmptyLinesText() . $Lines->trailingBlankLinesText
);
if ($Context->previousEmptyLines() > 0) {
@@ -174,6 +181,7 @@ final class Lines
}
$Lines->trailingBlankLines = 0;
$Lines->trailingBlankLinesText = '';
$Lines->Contexts[] = $Context;