class WordLevelDiff
@todo document @private @subpackage DifferenceEngine
Hierarchy
- class \Drupal\Component\Diff\Diff- class \Drupal\Component\Diff\MappedDiff extends \Drupal\Component\Diff\Diff- class \Drupal\Component\Diff\WordLevelDiff extends \Drupal\Component\Diff\MappedDiff
 
 
- class \Drupal\Component\Diff\MappedDiff extends \Drupal\Component\Diff\Diff
Expanded class hierarchy of WordLevelDiff
1 file declares its use of WordLevelDiff
- DiffFormatter.php in core/lib/ Drupal/ Core/ Diff/ DiffFormatter.php 
File
- 
              core/lib/ Drupal/ Component/ Diff/ WordLevelDiff.php, line 12 
Namespace
Drupal\Component\DiffView source
class WordLevelDiff extends MappedDiff {
  const MAX_LINE_LENGTH = 10000;
  public function __construct($orig_lines, $closing_lines) {
    [$orig_words, $orig_stripped] = $this->_split($orig_lines);
    [$closing_words, $closing_stripped] = $this->_split($closing_lines);
    parent::__construct($orig_words, $closing_words, $orig_stripped, $closing_stripped);
  }
  protected function _split($lines) {
    $words = [];
    $stripped = [];
    $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 (mb_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 [
      $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;
  }
}Members
| Title Sort descending | Modifiers | Object type | Summary | Overriden Title | 
|---|---|---|---|---|
| Diff::$edits | protected | property | The list of differences as an array of diff operations. | |
| Diff::check | public | function | Check a Diff for validity. | |
| Diff::getEdits | public | function | Gets the list of differences as an array of diff operations. | |
| Diff::isEmpty | public | function | Check for empty diff. | |
| Diff::lcs | public | function | Compute the length of the Longest Common Subsequence (LCS). | |
| Diff::reverse | public | function | Compute reversed Diff. | |
| WordLevelDiff::closing | public | function | Gets the closing set of lines. | Overrides Diff::closing | 
| WordLevelDiff::MAX_LINE_LENGTH | constant | |||
| WordLevelDiff::orig | public | function | Gets the original set of lines. | Overrides Diff::orig | 
| WordLevelDiff::_split | protected | function | ||
| WordLevelDiff::__construct | public | function | Constructor. | Overrides MappedDiff::__construct | 
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.
