# @a @b @a @b
# same? range range values values
( 0, 0=>0, 0=>-1, # a !
1, 1=>2, 0=> 1, # b c = b c
0, 3=>2, 2=> 2, # ! d
1, 3=>3, 3=> 3, # e = e
0, 4=>4, 4=> 4, # f ! h
1, 5=>5, 5=> 5, # j = j
0, 6=>5, 6=> 6, # ! k
1, 6=>7, 7=> 8, # l m = l m
0, 8=>9, 9=>11, # n p ! r s t
);
# @a @b @a @b
# start start values values
( 0, 0, # =
0, 0, # a !
1, 0, # b c = b c
3, 2, # ! d
3, 3, # e = e
4, 4, # f ! h
5, 5, # j = j
6, 6, # ! k
6, 7, # l m = l m
8, 9, # n p ! r s t
10, 12, #
);
####
# old loop code
########################################
my $diff= easy( \@a, \@b );
while( @$diff ) {
my( $same, $aMin, $aMax, $bMin, $bMax )=
splice @$diff, 0, 5;
# ...
}
# new loop code
########################################
my $diff= easy( \@a, \@b );
my $same= 0;
while( @$diff ) {
my( $aMin, $bMin, $aMax, $bMax )= @$diff;
--$aMax; --$bMax;
$same= 1 - $same;
splice @$diff, 0, 2;
# ...
}
##
##
my $diff= Algorithm::Diff->new( \@a, \@b );
$diff->base( 1 ); # Return line numbers, not indices
while( $diff->next() ) {
next if $diff->same();
my $sep= '';
if( ! $diff->bRange() ) {
sprintf "%d,%dd%d\n",
$diff->get(qw( aMin aMax bMax ));
} elsif( ! $diff->aRange() ) {
sprint "%da%d,%d\n",
$diff->get(qw( aMax bMin bMax ));
} else {
$sep= "---\n";
sprintf "%d,%dc%d%d\n",
$diff->get(qw( aMin aMax bMin bMax ));
}
print "< $_" for $diff->aRange();
print $sep;
print "> $_" for $diff->bRange();
}