#!/usr/bin/perl # # Copyright (c) 2001,2002 Florent Villard (warly@laposte.net) # Published under the GPL license. # use strict; my $version = "0.1.0"; @ARGV == 2 or usage(); open my $DIFF, "diff -u $ARGV[0] $ARGV[1]|"; open my $F1, $ARGV[0]; open my $F2, $ARGV[1]; while (<$F2>){ print; // and last; } my ($file_orig,$file_new,$para1,$para2); my $wait = 1; ($para1,$para2) = (0,0); while (<$DIFF>){ /^---/ || /^\+\+\+/ and next; s/<((?:sub)?title)>.*<\/\1>//g; if (/^@@ -(\d+),(\d+) \+(\d+),(\d+) @@/){ $wait = 0 if $1 > 48; next if $wait; wdiff_para( $file_orig, $file_new, $para1, $para2); ($file_orig, $file_new, $para1, $para2) = ('','',0,0); next } next if $wait; $_ or next; if (/^[- ]/){ my $t = $_; $t =~ s/^[- ]//; while ($t =~ /<\/para>/g) { $para1-- } while ($t =~ /]*>/g) { $para1++ } $file_orig .= $t } if (s/^[+ ]//) { my $t = $_; while ($t =~ /<\/para>/g) { $para2-- } while ($t =~ /]*>/g) { $para2++ } $file_new .= $t } } wdiff_para($file_orig, $file_new, $para1, $para2); print " \n"; exit; sub clean_para{ my ($f,$para) = @_; $$f =~ s/(<.?body[^>]*>|<.?vie[^>]*>|<.?part[^>]*>|<.?chapter[^>]*>)//g; $$f =~ s,<.?img[^>]*>,,g; $$f =~ s,<(day|title|subtitle|src|caption|index|label|scale)[^>]*>.+,,g; $$f !~ /^\s*]*>/ and $para++; $$f =~ s/^\s*(]*>\s*)*//; if ($para > 0) { $$f =~ s,(\s*)*$,,} } sub get_day { my ($f,$sent,$day) = @_; while (<$f>){ if (m,]*>(.+),){ $day = $1; } return $day if /\Q$sent/ } 0 } sub wdiff_para { my ($file_orig, $file_new, $para1, $para2) = @_; my ($new, $old, $it); clean_para(\$file_orig,$para1); clean_para(\$file_new,$para2); open my $A, '>viediff-1.tmp'; print $A $file_orig; open my $B, '>viediff-2.tmp'; print $B $file_new; open my $C, "wdiff -y '' -z '' -1 viediff-1.tmp viediff-2.tmp|"; while (<$C>){ if (/<(para|day)([^>]*)>/ && $it) { $it -= s/<(para|day)([^>]*)>/<$1>/g } while (/<\/i>/g) { $it-- } while (//g) { $it++ } s/<(para|day)([^>]*)>/<$1$2>/g; s/<\/(para|day)><\/i>/<\/i><\/$1>/g; if (/<\/(para|day)>/ && $it) { s/<\/(para|day)>/<\/i><\/$1>/g } $old .= $_ } $it = 0; close $C; open my $C, "wdiff -w '' -x '' -2 viediff-1.tmp viediff-2.tmp|"; while (<$C>){ if (/<(para|day)([^>]*)>/ && $it) { $it -= s/<(para|day)([^>]*)>/<$1>/g } while (/<\/b>/g) { $it-- } while (//g) { $it++ } s/<(para|day)([^>]*)>/<$1$2>/g; s/<\/(para|day)><\/b>/<\/b><\/$1>/g; if (/<\/(para|day)>/ && $it) { s/<\/(para|day)>/<\/b><\/$1>/g } $new .= $_ } print " ------ Ancien texte ------------------------ $old ------ Nouveau texte ----------------------- $new\n" } sub usage { print "viediff version $version usage: viediff \n\n"; exit }