Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
CRAP | |
0.00% |
0 / 52 |
WordLevelDiff | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
210 | |
0.00% |
0 / 52 |
__construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
_split | |
0.00% |
0 / 1 |
30 | |
0.00% |
0 / 24 |
|||
orig | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 12 |
|||
closing | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 12 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Component\Diff\WordLevelDiff. | |
*/ | |
namespace Drupal\Component\Diff; | |
use Drupal\Component\Diff\Engine\HWLDFWordAccumulator; | |
use Drupal\Component\Utility\Unicode; | |
/** | |
* @todo document | |
* @private | |
* @subpackage DifferenceEngine | |
*/ | |
class WordLevelDiff extends MappedDiff { | |
const MAX_LINE_LENGTH = 10000; | |
public function __construct($orig_lines, $closing_lines) { | |
list($orig_words, $orig_stripped) = $this->_split($orig_lines); | |
list($closing_words, $closing_stripped) = $this->_split($closing_lines); | |
parent::__construct($orig_words, $closing_words, $orig_stripped, $closing_stripped); | |
} | |
protected function _split($lines) { | |
$words = array(); | |
$stripped = array(); | |
$first = TRUE; | |
foreach ($lines as $line) { | |
// If the line is too long, just pretend the entire line is one big word | |
// This prevents resource exhaustion problems | |
if ( $first ) { | |
$first = FALSE; | |
} | |
else { | |
$words[] = "\n"; | |
$stripped[] = "\n"; | |
} | |
if (Unicode::strlen($line) > $this::MAX_LINE_LENGTH) { | |
$words[] = $line; | |
$stripped[] = $line; | |
} | |
else { | |
if (preg_match_all('/ ( [^\S\n]+ | [0-9_A-Za-z\x80-\xff]+ | . ) (?: (?!< \n) [^\S\n])? /xs', $line, $m)) { | |
$words = array_merge($words, $m[0]); | |
$stripped = array_merge($stripped, $m[1]); | |
} | |
} | |
} | |
return array($words, $stripped); | |
} | |
public function orig() { | |
$orig = new HWLDFWordAccumulator(); | |
foreach ($this->edits as $edit) { | |
if ($edit->type == 'copy') { | |
$orig->addWords($edit->orig); | |
} | |
elseif ($edit->orig) { | |
$orig->addWords($edit->orig, 'mark'); | |
} | |
} | |
$lines = $orig->getLines(); | |
return $lines; | |
} | |
public function closing() { | |
$closing = new HWLDFWordAccumulator(); | |
foreach ($this->edits as $edit) { | |
if ($edit->type == 'copy') { | |
$closing->addWords($edit->closing); | |
} | |
elseif ($edit->closing) { | |
$closing->addWords($edit->closing, 'mark'); | |
} | |
} | |
$lines = $closing->getLines(); | |
return $lines; | |
} | |
} |