Skip to content

Commit fba7bd8

Browse files
author
Christoph Singer
committed
faster implementation for removeWhitespace
1 parent ace8250 commit fba7bd8

File tree

1 file changed

+6
-23
lines changed

1 file changed

+6
-23
lines changed

PrettyMin.php

+6-23
Original file line numberDiff line numberDiff line change
@@ -247,38 +247,21 @@ protected function removeWhitespace() {
247247
foreach($nodeList as $node) {
248248
/** @var \DOMNode $node */
249249

250-
// keep white space inside special elements
251-
if (in_array($node->parentNode->nodeName, $this->options['keep_whitespace_in'])) continue;
252-
253250
if (in_array($node->parentNode->nodeName, $this->options['keep_whitespace_in'])) {
254-
// $node->nodeValue = trim($node->nodeValue);
255251
continue;
256252
};
257253

258-
// 1. "Trim" each text node by removing its leading and trailing spaces and newlines.
259-
// Modified by CS: keep whitespace around inline elements
260-
if (in_array($node->parentNode->nodeName, $this->options['keep_whitespace_around'])) {
261-
$replacement = ' ';
262-
} else {
263-
$replacement = '';
264-
}
254+
$node->nodeValue = str_replace(["\r", "\n", "\t"], ' ', $node->nodeValue);
255+
$node->nodeValue = preg_replace('/\s{2,}/', ' ', $node->nodeValue);
265256

266-
$r_replacement = $replacement;
267-
if ($node->previousSibling && in_array($node->previousSibling->nodeName, $this->options['keep_whitespace_around'])) {
268-
$r_replacement = ' ';
257+
if (!($node->previousSibling && in_array($node->previousSibling->nodeName, $this->options['keep_whitespace_around']))) {
258+
$node->nodeValue = ltrim($node->nodeValue);
269259
}
270-
$node->nodeValue = preg_replace('/^[\s\r\n]+/', $r_replacement, $node->nodeValue);
271260

272-
$l_replacement = $replacement;
273-
if ($node->nextSibling && in_array($node->nextSibling->nodeName, $this->options['keep_whitespace_around'])) {
274-
$l_replacement = ' ';
261+
if (!($node->nextSibling && in_array($node->nextSibling->nodeName, $this->options['keep_whitespace_around']))) {
262+
$node->nodeValue = rtrim($node->nodeValue);
275263
}
276-
$node->nodeValue = preg_replace('/[\s\r\n]+$/', $l_replacement, $node->nodeValue);
277-
278-
$node->nodeValue = preg_replace('/[\s]+/', ' ', $node->nodeValue);
279-
280264

281-
// 2. Resulting text node may have become "empty" (zero length nodeValue) after trim. If so, remove it from the dom.
282265
if((strlen($node->nodeValue) == 0)) {
283266
$node->parentNode->removeChild($node);
284267
}

0 commit comments

Comments
 (0)