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 72d5423ac5
commit 03db2894db

View File

@ -696,11 +696,17 @@ class Diff
return $content; 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 // First split up the content into words and tags
$set1 = self::getHTMLChunks($from); $set1 = self::getHTMLChunks($from);
$set2 = self::getHTMLChunks($to); $set2 = self::getHTMLChunks($to);
// Diff that // Diff that
$diff = new Diff($set1, $set2); $diff = new Diff($set1, $set2);
@ -758,22 +764,25 @@ class Diff
$diff = new Diff($rechunked[1], $rechunked[2]); $diff = new Diff($rechunked[1], $rechunked[2]);
$content = ''; $content = '';
foreach($diff->edits as $edit) { foreach($diff->edits as $edit) {
$orig = ($escape) ? Convert::raw2xml($edit->orig) : $edit->orig;
$final = ($escape) ? Convert::raw2xml($edit->final) : $edit->final;
switch($edit->type) { switch($edit->type) {
case 'copy': case 'copy':
$content .= " " . implode(" ", $edit->orig) . " "; $content .= " " . implode(" ", $orig) . " ";
break; break;
case 'change': case 'change':
$content .= " <ins>" . implode(" ", $edit->final) . "</ins> "; $content .= " <ins>" . implode(" ", $final) . "</ins> ";
$content .= " <del>" . implode(" ", $edit->orig) . "</del> "; $content .= " <del>" . implode(" ", $orig) . "</del> ";
break; break;
case 'add': case 'add':
$content .= " <ins>" . implode(" ", $edit->final) . "</ins> "; $content .= " <ins>" . implode(" ", $final) . "</ins> ";
break; break;
case 'delete': case 'delete':
$content .= " <del>" . implode(" ", $edit->orig) . "</del> "; $content .= " <del>" . implode(" ", $orig) . "</del> ";
break; break;
} }
} }