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; | |
| } | |
| } |