• Модуль: wiki
  • Путь к файлу: ~/bitrix/modules/wiki/lib/diff.php
  • Класс: BitrixWikiDiff
  • Вызов: Diff::getDiffHtml
public function getDiffHtml($a, $b)
{
	preg_match_all("/(<.*?>s*|s+)([^s<]*)/", " ".$a, $matchA);
	preg_match_all("/(<.*?>s*|s+)([^s<]*)/", " ".$b, $matchB);

	$diffScript = $this->getDiffScript($matchA[2], $matchB[2]);
	if(count($diffScript) == 0)
	{
		// no difference found
		return $a;
	}

	$positionA = 0;

	$result = '';
	foreach($diffScript as $diffItem)
	{
		while($positionA < $diffItem['startA'])
		{
			$result .= $matchA[0][$positionA];
			$positionA++;
		}

		//deleted items
		if($diffItem['deletedA'] > 0)
		{
			$result .= $matchA[1][$positionA] . '' . $matchA[2][$positionA];
			for($i = 1; $i < $diffItem['deletedA']; $i++)
				$result .= $matchA[0][$positionA + $i];

			$result .= '';
			$positionA = $positionA + $diffItem['deletedA'];
		}

		if($diffItem['insertedB'] > 0)
		{
			$result .= $matchB[1][$diffItem['startB']] . '' . $matchB[2][$diffItem['startB']];
			for($i = 1; $i < $diffItem['insertedB']; $i++)
				$result .= $matchB[0][$diffItem['startB'] + $i];

			$result .= '';
		}
	}

	while($positionA < count($matchA[0]))
	{
		$result .= $matchA[0][$positionA];
		$positionA++;
	}

	return $result;
}