/usr/local/CPAN/htpl/HTML/HTPL/CSV.pm


package HTML::HTPL::CSV;

use HTML::HTPL::Result;
use Text::ParseWords;
use HTML::HTPL::Txt;
use strict;
use vars qw(@ISA);
use Symbol;

@ISA = qw(HTML::HTPL::Txt);

sub parse ($$) {
    my ($delim, $line) = @_;
    if ($delim eq 'BLANK') {
        return split(/\s+/, $line);
    }
    parse_line($delim, undef, $line);
}
 
sub opencsv {
    my ($filename, $delimiter, @fields) = @_;

    my ($phrase, @values);

    my ($rowdel, $coldel, $savedel);
    $rowdel = "\n";

    if (UNIVERSAL::isa($delimiter, 'ARRAY')) {
        ($coldel, $rowdel) = @$delimiter;
        $delimiter = $coldel;
    }

    $delimiter ||= ',';
    $delimiter =~ s/^'(.*)'$/$1/;
    $delimiter = quotemeta($delimiter);

    my $hnd = &gensym;

    my $savedel = $/;
    $/ = $rowdel;
 
    &HTML::HTPL::Lib'opendoc($hnd, $filename);

    unless (@fields) {
        my $header = <$hnd>;
        chop $header;
        @fields = &parse($delimiter, $header);
    }

    $/ = $savedel;

    my $orig = new HTML::HTPL::CSV($hnd, $delimiter, $rowdel);
    my $result = new HTML::HTPL::Result($orig, @fields);


    $result;
}

sub readln {
    my ($self, $line) = @_;
    my $delimiter = $self->{'delimiter'};
    my @values = &parse($delimiter, $line);
    \@values;
}

sub new {
    my ($class, $hnd, $delimiter, $linedel) = @_;
    my $self = $class->SUPER::new($hnd, $linedel);
    $self->{'delimiter'} = $delimiter;
    $self;
}

1;