Esempio n. 1
0
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&nbsp;', $ret);
    return str_replace(array("  ", "\n ", "\n"), array("&nbsp; ", "<br />&nbsp;", "<br />"), $ret);
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
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);
}