/[pub]/suikawiki/script/WalWiki/lib/Yuki/DiffText.pm
Suika

Contents of /suikawiki/script/WalWiki/lib/Yuki/DiffText.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations) (download)
Sun Jun 2 04:26:23 2002 UTC (22 years, 10 months ago) by wakaba
Branch: MAIN
Branch point for: walwiki
Initial revision

1 wakaba 1.1 package Yuki::DiffText;
2     use strict;
3     use Algorithm::Diff qw(traverse_sequences);
4     use vars qw($VERSION @EXPORT_OK @ISA);
5     use vars qw($diff_text $diff_msgrefA $diff_msgrefB @diff_deleted @diff_added);
6     require Exporter;
7     @ISA = qw(Exporter);
8     @EXPORT_OK = qw(difftext);
9     $VERSION = '0.1';
10    
11     =head1 NAME
12    
13     Yuki::DiffText - A wrapper of Algorithm::Diff for YukiWiki.
14    
15     =head1 SYNOPSIS
16    
17     use strict;
18     use Yuki::DiffText qw(difftext);
19    
20     my @array1 = ( "Alice", "Bobby", "Chris", );
21     my @array2 = ( "Alice", "Chris", "Diana", );
22     my $difftext = difftext(\@array1, \@array2);
23     print $difftext;
24    
25     # Result:
26     # =Alice
27     # -Bobby
28     # =Chris
29     # +Diana
30    
31     =head1 SEE ALSO
32    
33     =over 4
34    
35     =item L<Algorithm::Diff>
36    
37     =back
38    
39     =head1 AUTHOR
40    
41     Hiroshi Yuki <hyuki@hyuki.com> http://www.hyuki.com/
42    
43     =head1 LICENSE
44    
45     Copyright (C) 2002 by Hiroshi Yuki.
46    
47     This program is free software; you can redistribute it and/or
48     modify it under the same terms as Perl itself.
49    
50     =cut
51    
52     sub difftext {
53     ($diff_msgrefA, $diff_msgrefB) = @_;
54     undef $diff_text;
55     undef @diff_deleted;
56     undef @diff_added;
57     traverse_sequences(
58     $diff_msgrefA, $diff_msgrefB,
59     {
60     MATCH => \&df_match,
61     DISCARD_A => \&df_delete,
62     DISCARD_B => \&df_add,
63     }
64     );
65     &diff_flush;
66     return $diff_text;
67     }
68    
69     sub diff_flush {
70     $diff_text .= join('', map { "-$_\n" } splice(@diff_deleted));
71     $diff_text .= join('', map { "+$_\n" } splice(@diff_added));
72     }
73    
74     sub df_match {
75     my ($a, $b) = @_;
76     &diff_flush;
77     $diff_text .= "=$diff_msgrefA->[$a]\n";
78     }
79    
80     sub df_delete {
81     my ($a, $b) = @_;
82     push(@diff_deleted, $diff_msgrefA->[$a]);
83     }
84    
85     sub df_add {
86     my ($a, $b) = @_;
87     push(@diff_added, $diff_msgrefB->[$b]);
88     }
89    
90     1;

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24