PHP-FineDiff icon indicating copy to clipboard operation
PHP-FineDiff copied to clipboard

Reverse diff opcode

Open max13fr opened this issue 10 years ago • 2 comments

Hello, a very good feature would be to get reverse diff opcodes. I would like to log all changes in my forum (on subject or responses). But I don't keep the old version, only the newer. So I would like to compute old versions from the last version, not the opposite.

I try to switch arguments when calling FineDiff::getDiffOpcodes($from, $to) :

$firstVersion = "Test 123 - Heloa";
$newVersion = "Test 124 - Hello";
$opdiff = FineDiff::getDiffOpcodes($newVersion, $firstVersion)

But when I display, the difference (FineDiff::renderDiffToHTMLFromOpcodes), the modification are reversed (ins & del). So I tried something like :

$result = FineDiff::renderDiffToHTMLFromOpcodes($text, $opdiff);
// Replace ins by del & del by ins
$result = strtr($result, array('<del>' => '<ins>', '</del>' => '</ins>', '<ins>' => '<del>', '</ins>' => '</del>'));
// Swap ins & del
$result = preg_replace('#(<ins>.+?</ins>)(\s*)(<del>.+?</del>)#s', '$3$2$1', $result);

But, it's very ugly... Could you do function FineDiff::getReverseDiffOpcodes for this case?

Thanks in advance, Best Regards, Max

max13fr avatar Jun 09 '14 09:06 max13fr

Why not just CSS-restyle <ins> and <del> to each other style? The <ins> and <del> are semantically correct even when you "reverse" the diff, you just want a different visual it seems.

gorhill avatar Jun 09 '14 12:06 gorhill

https://gist.github.com/asleepwalker/fb46883e88a3a44af786 Maybe it will be helpful for someone.

asleepwalker avatar Jul 21 '14 16:07 asleepwalker