function DiffRenderSource($in, $out, $which) { global $WordDiffFunction, $EnableDiffInline; if (!IsEnabled($EnableDiffInline, 1)) { $a = $which ? $out : $in; return str_replace("\n", "<br />", PHSC(join("\n", $a))); } $countdifflines = abs(count($in) - count($out)); $lines = $cnt = $x2 = $y2 = array(); foreach ($in as $line) { $tmp = $countdifflines > 20 ? array($line) : DiffPrepareInline($line); if (!$which) { $cnt[] = array(count($x2), count($tmp)); } $x2 = array_merge($x2, $tmp); } foreach ($out as $line) { $tmp = $countdifflines > 20 ? array($line) : DiffPrepareInline($line); if ($which) { $cnt[] = array(count($y2), count($tmp)); } $y2 = array_merge($y2, $tmp); } $z = $WordDiffFunction(implode("\n", $x2), implode("\n", $y2)); $z2 = array_map('PHSC', $which ? $y2 : $x2); array_unshift($z2, ''); foreach (explode("\n", $z) as $zz) { if (preg_match('/^(\\d+)(,(\\d+))?([adc])(\\d+)(,(\\d+))?/', $zz, $m)) { $a1 = $a2 = $m[1]; if ($m[3]) { $a2 = $m[3]; } $b1 = $b2 = $m[5]; if ($m[7]) { $b2 = $m[7]; } if (!$which && ($m[4] == 'c' || $m[4] == 'd')) { $z2[$a1] = '<del>' . $z2[$a1]; $z2[$a2] .= '</del>'; } if ($which && ($m[4] == 'c' || $m[4] == 'a')) { $z2[$b1] = '<ins>' . $z2[$b1]; $z2[$b2] .= '</ins>'; } } } $line = array_shift($z2); $z2[0] = $line . $z2[0]; foreach ($cnt as $a) { $lines[] = implode('', array_slice($z2, $a[0], $a[1])); } $ret = implode("\n", $lines); $ret = str_replace(array('</del> <del>', '</ins> <ins>'), ' ', $ret); $ret = preg_replace('/(<(ins|del)>|^) /', '$1 ', $ret); return str_replace(array(" ", "\n ", "\n"), array(" ", "<br /> ", "<br />"), $ret); }
function DiffRenderSource($in, $out, $which) { global $WordDiffFunction, $EnableDiffInline; if (!IsEnabled($EnableDiffInline, 1)) { $a = $which? $out : $in; return str_replace("\n","<br />",htmlspecialchars(join("\n",$a))); } $countdifflines = abs(count($in)-count($out)); $lines = $cnt = $x2 = $y2 = array(); foreach($in as $line) { $tmp = $countdifflines>20 ? array($line) : DiffPrepareInline($line); if(!$which) $cnt[] = array(count($x2), count($tmp)); $x2 = array_merge($x2, $tmp); } foreach($out as $line) { $tmp = $countdifflines>20 ? array($line) : DiffPrepareInline($line); if($which) $cnt[] = array(count($y2), count($tmp)); $y2 = array_merge($y2, $tmp); } $z = $WordDiffFunction(implode("\n", $x2), implode("\n", $y2)); $z2 = array_map('htmlspecialchars', ($which? $y2 : $x2)); array_unshift($z2, ''); foreach (explode("\n", $z) as $zz) { if (preg_match('/^(\\d+)(,(\\d+))?([adc])(\\d+)(,(\\d+))?/',$zz,$m)) { $a1 = $a2 = $m[1]; if ($m[3]) $a2=$m[3]; $b1 = $b2 = $m[5]; if ($m[7]) $b2=$m[7]; if (!$which && ($m[4]=='c'||$m[4]=='d')) { $z2[$a1] = '<del>'. $z2[$a1]; $z2[$a2] .= '</del>'; } if ($which && ($m[4]=='c'||$m[4]=='a')) { $z2[$b1] = '<ins>'.$z2[$b1]; $z2[$b2] .= '</ins>'; } } } $line = array_shift($z2); $z2[0] = $line.$z2[0]; foreach ($cnt as $a) $lines[] = implode('', array_slice($z2, $a[0], $a[1])); $ret = trim(implode("\n", $lines)); $ret = preg_replace('!</(del|ins)> <\1>!', ' ', $ret); return str_replace("\n","<br />",$ret); }
function DiffRenderInline($in, $out, $which) { global $DiffFunction; $linesx = $linesy = array(); for($i=0; $i<max(count($in), count($out)); $i++) { $x = DiffPrepareInline($in[$i]); $y = DiffPrepareInline($out[$i]); $z = $DiffFunction($x, $y); $x2 = split("\n", htmlspecialchars("\n$x")); $y2 = split("\n", htmlspecialchars("\n$y")); foreach (split("\n", $z) as $zz) { if (preg_match('/^(\\d+)(,(\\d+))?([adc])(\\d+)(,(\\d+))?/',$zz,$m)) { $a1 = $a2 = $m[1]; if ($m[3]) $a2=$m[3]; $b1 = $b2 = $m[5]; if ($m[7]) $b2=$m[7]; if($m[4]=='c'||$m[4]=='d') { $x2[$a1] = '<del>'. $x2[$a1]; $x2[$a2] .= '</del>'; } if($m[4]=='c'||$m[4]=='a') { $y2[$b1] = '<ins>'.$y2[$b1]; $y2[$b2] .= '</ins>'; } } } $linesx[] = implode('', $x2); $linesy[] = implode('', $y2); } $ret = trim(implode("\n", ($which? $linesy : $linesx))); return str_replace("\n","<br />",$ret); }