48 [ $wordsBefore, $wordsBeforeStripped ] = $this->split( $linesBefore );
49 [ $wordsAfter, $wordsAfterStripped ] = $this->split( $linesAfter );
52 parent::__construct( $wordsBeforeStripped, $wordsAfterStripped );
55 $this->edits = [
new DiffOpChange( $linesBefore, $linesAfter ) ];
59 $editCount = count( $this->edits );
60 for ( $i = 0; $i < $editCount; $i++ ) {
61 $orig = &$this->edits[$i]->orig;
62 if ( is_array( $orig ) ) {
63 $orig = array_slice( $wordsBefore, $xi, count( $orig ) );
64 $xi += count( $orig );
67 $closing = &$this->edits[$i]->closing;
68 if ( is_array( $closing ) ) {
69 $closing = array_slice( $wordsAfter, $yi, count( $closing ) );
70 $yi += count( $closing );
80 private function split(
$lines ) {
84 foreach (
$lines as $line ) {
92 if ( preg_match_all(
'/ ( [^\S\n]+ | [0-9_A-Za-z\x80-\xff]+ | . ) (?: (?!< \n) [^\S\n])? /xs',
94 foreach ( $m[0] as $word ) {
97 foreach ( $m[1] as $stripped_word ) {
98 $stripped[] = $stripped_word;
103 return [ $words, $stripped ];
112 foreach ( $this->edits as $edit ) {
113 if ( $edit->type ==
'copy' ) {
115 } elseif ( $edit->orig ) {
116 $orig->addWords( $edit->orig,
'del' );
119 $lines = $orig->getLines();
130 foreach ( $this->edits as $edit ) {
131 if ( $edit->type ==
'copy' ) {
132 $closing->
addWords( $edit->closing );
133 } elseif ( $edit->closing ) {
134 $closing->addWords( $edit->closing,
'ins' );
137 $lines = $closing->getLines();
145 class_alias( WordLevelDiff::class,
'WordLevelDiff' );
if(!file_exists( $CREDITS)) $lines