Algorithm-Diff-HTMLTable

 view release on metacpan or  search on metacpan

lib/Algorithm/Diff/HTMLTable.pm  view on Meta::CPAN

package Algorithm::Diff::HTMLTable;

# ABSTRACT: Show differences of a file as a HTML table

use strict;
use warnings;

use Algorithm::Diff;
use Carp;
use HTML::Entities;
use Time::Piece;

our $VERSION = '0.05';

sub new {
    my ($class, @param) = @_;

    return bless {@param}, $class;
}

sub diff {
    my $self = shift;

    croak "need two filenames" if @_ != 2;

    my %files;

    @files{qw/a b/} = @_;

    NAME:
    for my $name ( qw/a b/ ) {

        croak 'Need either filename or array reference' if ref $files{$name} && ref $files{$name} ne 'ARRAY';
        next NAME if ref $files{$name};

        croak $files{$name} . " is not a file" if !-f $files{$name};
        croak $files{$name} . " is not a readable file" if !-r $files{$name};
    }

    my $html = $self->_start_table( %files );
    $html   .= $self->_build_table( %files );
    $html   .= $self->_end_table( %files );

    return $html;
}

sub _start_table {
    my $self = shift;
    my %files = @_;

    my $old = $self->_file_info( $files{a}, 'old' );
    my $new = $self->_file_info( $files{b}, 'new' );
    
    my $id = defined $self->{id} ? qq~id="$self->{id}"~ : '';

    return qq~
        <table $id style="border: 1px solid;">
            <thead>
                <tr>
                    <th colspan="2"><span id="diff_old_info">$old</span></th>
                    <th colspan="2"><span id="diff_new_info">$new</span></th>
                </tr>
            </thead>
            <tbody>
    ~;
}

sub _build_table {
    my $self = shift;

    my %files = @_;

    my @seq_a = $self->_read_file( $files{a} );
    my @seq_b = $self->_read_file( $files{b} );

    my $diff = Algorithm::Diff->new( \@seq_a, \@seq_b );

    $diff->Base(1);



( run in 0.912 second using v1.01-cache-2.11-cpan-39bf76dae61 )