diff --git a/.phpunit.result.cache b/.phpunit.result.cache new file mode 100644 index 0000000..6d8a6fe --- /dev/null +++ b/.phpunit.result.cache @@ -0,0 +1 @@ +{"version":1,"defects":{"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"nbsp-spaces-added.html\"":3},"times":{"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"ICC-5136.html\"":0.013,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"first-and-last.html\"":0.009,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"issue-28-link-changes.html\"":0.005,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"keep-newlines-test.html\"":0.003,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"multibyte.html\"":0.001,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"multiline-tag.html\"":0,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"new-paragraph-and-list.html\"":0.071,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"override-2.html\"":0.008,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"override-3.html\"":0.026,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"override-4.html\"":0.026,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"override-5.html\"":0.059,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"override-6.html\"":0.031,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"override-8.html\"":0.016,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"override-9.html\"":0.005,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"simple-list.html\"":0.018,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"space-inside-isolated-tag.html\"":0.003,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"spaces-added.html\"":0.001,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"spaces-removed-inside-tag.html\"":0.003,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"table-whitespace-issue.html\"":0.011,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"nbsp-spaces-added.html\"":0.002,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"nbsp-spaces-default-behavior.html\"":0.001,"Caxy\\Tests\\HtmlDiff\\Functional\\HTMLPurifierConfigTest::testHtmlDiffConfigTraditional":0.026,"Caxy\\Tests\\HtmlDiff\\Functional\\HTMLPurifierConfigTest::testHtmlDiffConfigStatic":0.005}} \ No newline at end of file diff --git a/lib/Caxy/HtmlDiff/AbstractDiff.php b/lib/Caxy/HtmlDiff/AbstractDiff.php index ac4fff9..b6179e3 100644 --- a/lib/Caxy/HtmlDiff/AbstractDiff.php +++ b/lib/Caxy/HtmlDiff/AbstractDiff.php @@ -430,8 +430,10 @@ protected function convertHtmlToListOfWords(string $text) : array $specialCharacters .= '\\' . $char; } - // Normalize no-break-spaces to regular spaces - $text = str_replace("\xc2\xa0", ' ', $text); + // Normalize no-break-spaces to regular spaces (unless space matching is enabled) + if (!$this->config->isSpaceMatching()) { + $text = str_replace("\xc2\xa0", ' ', $text); + } preg_match_all('/<.+?>|[^<]+/mus', $text, $sentencesAndTags, PREG_SPLIT_NO_EMPTY); @@ -480,7 +482,12 @@ protected function normalizeWhitespaceInHtmlSentence(string $sentence) : string return $sentence; } - $sentence = preg_replace('/\s\s+|\r+|\n+|\r\n+/', ' ', $sentence); + // When space matching is enabled, preserve multiple spaces + if ($this->config->isSpaceMatching()) { + $sentence = preg_replace('/\r+|\n+|\r\n+/', ' ', $sentence); + } else { + $sentence = preg_replace('/\s\s+|\r+|\n+|\r\n+/', ' ', $sentence); + } $sentenceLength = $this->stringUtil->strlen($sentence); diff --git a/tests/fixtures/HtmlDiff/nbsp-spaces-added.html b/tests/fixtures/HtmlDiff/nbsp-spaces-added.html new file mode 100644 index 0000000..54d3263 --- /dev/null +++ b/tests/fixtures/HtmlDiff/nbsp-spaces-added.html @@ -0,0 +1,6 @@ + + +

Just a simple text   

+

Just a simple text         

+

Just a simple text         

diff --git a/tests/fixtures/HtmlDiff/nbsp-spaces-default-behavior.html b/tests/fixtures/HtmlDiff/nbsp-spaces-default-behavior.html new file mode 100644 index 0000000..2827299 --- /dev/null +++ b/tests/fixtures/HtmlDiff/nbsp-spaces-default-behavior.html @@ -0,0 +1,5 @@ + + +

Just a simple text   

+

Just a simple text         

+

Just a simple text