ENHANCEMENT Optional HTML escaping in Diff::compareHTML() (tested implicitly in DataDifferencerTest for sapphire) (AIR-56)

This commit is contained in:
Ingo Schommer 2011-09-09 16:39:05 +02:00
parent d5755d3501
commit 8eb153dc3b

View File

@ -693,11 +693,17 @@ class Diff
return $content;
}
static function compareHTML($from, $to) {
/**
* @param String
* @param String
* @param Boolean
* @return String
*/
static function compareHTML($from, $to, $escape = false) {
// First split up the content into words and tags
$set1 = self::getHTMLChunks($from);
$set2 = self::getHTMLChunks($to);
// Diff that
$diff = new Diff($set1, $set2);
@ -755,22 +761,25 @@ class Diff
$diff = new Diff($rechunked[1], $rechunked[2]);
$content = '';
foreach($diff->edits as $edit) {
$orig = ($escape) ? Convert::raw2xml($edit->orig) : $edit->orig;
$final = ($escape) ? Convert::raw2xml($edit->final) : $edit->final;
switch($edit->type) {
case 'copy':
$content .= " " . implode(" ", $edit->orig) . " ";
$content .= " " . implode(" ", $orig) . " ";
break;
case 'change':
$content .= " <ins>" . implode(" ", $edit->final) . "</ins> ";
$content .= " <del>" . implode(" ", $edit->orig) . "</del> ";
$content .= " <ins>" . implode(" ", $final) . "</ins> ";
$content .= " <del>" . implode(" ", $orig) . "</del> ";
break;
case 'add':
$content .= " <ins>" . implode(" ", $edit->final) . "</ins> ";
$content .= " <ins>" . implode(" ", $final) . "</ins> ";
break;
case 'delete':
$content .= " <del>" . implode(" ", $edit->orig) . "</del> ";
$content .= " <del>" . implode(" ", $orig) . "</del> ";
break;
}
}