r10431 - in /branches/upstream/libxml-csv-perl: ./ current/ current/CHANGES current/CSV.pm current/Data1.csv current/Data2.csv current/MANIFEST current/Makefile.PL current/README current/test.pl
vdanjean at users.alioth.debian.org
vdanjean at users.alioth.debian.org
Sat Dec 1 12:25:51 UTC 2007
Author: vdanjean
Date: Sat Dec 1 12:25:50 2007
New Revision: 10431
URL: http://svn.debian.org/wsvn/?sc=1&rev=10431
Log:
[svn-inject] Installing original source of libxml-csv-perl
Added:
branches/upstream/libxml-csv-perl/
branches/upstream/libxml-csv-perl/current/
branches/upstream/libxml-csv-perl/current/CHANGES
branches/upstream/libxml-csv-perl/current/CSV.pm
branches/upstream/libxml-csv-perl/current/Data1.csv
branches/upstream/libxml-csv-perl/current/Data2.csv
branches/upstream/libxml-csv-perl/current/MANIFEST
branches/upstream/libxml-csv-perl/current/Makefile.PL
branches/upstream/libxml-csv-perl/current/README
branches/upstream/libxml-csv-perl/current/test.pl
Added: branches/upstream/libxml-csv-perl/current/CHANGES
URL: http://svn.debian.org/wsvn/branches/upstream/libxml-csv-perl/current/CHANGES?rev=10431&op=file
==============================================================================
--- branches/upstream/libxml-csv-perl/current/CHANGES (added)
+++ branches/upstream/libxml-csv-perl/current/CHANGES Sat Dec 1 12:25:50 2007
@@ -1,0 +1,23 @@
+Revision history for Perl extension XML::CSV.
+
+0.10 Wednesday Jan 17 13:11:00 2001
+ -Fixed the failed test
+
+0.11 Sunday Mar 18 16:54:00 2001
+ -Added sub_char attribute to parse_doc() to
+ allow to specify a character(s) with which
+ illegal chars will be replaced in tags.
+ -Added file_tag, parent_tag, format to print_xml()
+ to allow setting the xml parent file tag and xml
+ parent record tag, also to allow to specify the
+ character to use to indent child nodes. Space, "\t",
+ or any other character(s) can be used.
+
+0.14 Monday Apr 16 23:30:00 2001
+ -Added declare_xml() and declare_doctype() functions
+ to allow for xml declaration and doctype declarations.
+
+0.15 Tuesday May 15 12:51:00 2001
+ -Fixed documentation (pod) bug.
+ -column headings are now default to <tr$loop_num> instead of <$tag> to conform
+ to XML standard of tag names strting with alphabetic chars or '_'.
Added: branches/upstream/libxml-csv-perl/current/CSV.pm
URL: http://svn.debian.org/wsvn/branches/upstream/libxml-csv-perl/current/CSV.pm?rev=10431&op=file
==============================================================================
--- branches/upstream/libxml-csv-perl/current/CSV.pm (added)
+++ branches/upstream/libxml-csv-perl/current/CSV.pm Sat Dec 1 12:25:50 2007
@@ -1,0 +1,503 @@
+package XML::CSV;
+
+use Text::CSV_XS;
+use Carp;
+
+#use strict;
+BEGIN
+{
+use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
+
+require 5.004;
+require Exporter;
+#require DynaLoader;
+require AutoLoader;
+
+ at ISA = qw(Exporter);# DynaLoader);
+
+ at EXPORT = qw(
+
+);
+$VERSION = '0.14';
+};
+#bootstrap XML::CSV $VERSION;
+
+my $xml_xs_obj; #Declared for global usage
+my $csvxml_error; #Error container
+
+
+sub new($;$)
+{
+
+ my $class = shift;
+ my $attr = shift || {};
+
+ my $self = { 'error_out' => 0,
+ 'column_headings' => 0,
+ 'column_data' => 0,
+ 'csv_xs' => 0,
+ %$attr
+ };
+
+ bless $self, $class;
+
+ if ($attr->{csv_xs}) ### if custom Text::CSV_XS object is provided use it
+ {
+ $xml_xs_obj = $attr->{csv_xs};
+ $attr->{csv_xs} = undef;
+ } else { ### else create our own Text::CSV_XS object with it's defaults
+ $xml_xs_obj = Text::CSV_XS->new();
+ }
+
+
+
+ return $self;
+
+}
+
+sub parse_doc
+{
+ my $class = shift;
+ my $file_name = shift || croak "Usage: parse_doc(file_name, [\%attr])";
+ my $attr = shift; # %attr (headings, sub_char)
+
+ eval {open FILE_CSV, "$file_name";};
+
+ $csvxml_error = "Couldn't open file: $file_name. $@" if $@;
+
+ croak "$csvxml_error" if ($class->{'error_out'} == 1 && $@);
+
+ my @col_headings;
+
+ $attr->{headings} = 0 unless (exists($attr->{headings})); ### default headings to 0
+
+ if ($attr->{headings} == 0) ### No headings to be used from file
+ {
+ if ($class->{column_headings})
+ {
+ @col_headings = @{$class->{column_headings}}; ### if column_heading are provided
+ } ### by user, use them
+
+ }
+
+ my $line; ### declare $line outside of scope to be use later
+
+ if ($attr->{headings} != 0)
+ {
+ $line = <FILE_CSV>;
+ my $cols_returned = $get_header->($line, \@col_headings, defined($attr->{sub_char})? $attr->{sub_char}:undef );
+ $csvxml_error = "There were no columns returned for headers, please check your CSV file" if (!$cols_returned);
+
+ croak "$csvxml_error" if ($class->{'error_out'} == 1);
+
+ return 0 if (!$cols_returned);
+ }
+
+ my @arr_cols_data; ### declare @arr_cols_data to be used for stacking data
+
+ while ($line = <FILE_CSV>)
+ {
+
+ my @cols_data;
+ my $status = $xml_xs_obj->parse($line); ### parse line by line
+ @cols_data = $xml_xs_obj->fields(); ### CSV_XS method returns data array for line passed
+ $escape_char->(\@cols_data);
+ push @arr_cols_data, \@cols_data; ### stack the returned data
+
+ }
+
+ $class->{'column_headings'} = \@col_headings; ### assign reference of @col_headings (xml headers) to object
+ $class->{'column_data'} = \@arr_cols_data; ### assign reference of @arr_cols_data (xml data) to object
+
+ close FILE_CSV;
+
+ return 1;
+}
+
+sub print_xml
+{
+ my $class = shift;
+ my $file_out = shift || 0;
+ my $args = shift || {}; # %attr (file_tag, parent_tag, format)
+
+ $args->{file_tag} = "records" unless $args->{file_tag}; #default {parent_tag} to record if not supplied
+ $args->{parent_tag} = "record" unless $args->{parent_tag};
+ $args->{format} = "\t" unless $args->{format}; #default {format} to tab if not supplied
+
+ $class->{'document_element'} = $args->{file_tag}; ### Used later for declare_doctype() method
+
+ if ($class->{'column_data'} == 0 || ($class->{'column_headings'} == 0 && $class->{'headings'}))
+ {
+ croak "There is no data to print, make sure that you parsed the document before printing";
+ }
+
+ ###Open file $file_out for output or output to STDOUT
+ if ($file_out)
+ {
+ open FILE_OUT, ">$file_out";
+ } else {
+ *FILE_OUT = *STDOUT;
+ }
+
+ print FILE_OUT $class->{'declare_xml'}."\n" if $class->{'declare_xml'};
+ ###This will replace the non-interpolated $class->{'document_element'} inside the $class->{'declare_doctype'} to get the real value
+ ###Should be replace with something more practical in the future...
+ $class->{'declare_doctype'} =~ s/\$class\-\>\{\'document_element\'\}/$class->{'document_element'}/ if $class->{'declare_doctype'};
+
+ print FILE_OUT $class->{'declare_doctype'}."\n" if $class->{'declare_doctype'};
+ print FILE_OUT "<$args->{file_tag}>", "\n"; ### print initial document tag
+
+ ### declare the $tag for <$tag> and $loop_num for headers and data index tracking
+ my $tag;
+ my $loop_num;
+
+ if ($#{$class->{'column_headings'}} > 0) ### if column headings are provided
+ {
+
+ foreach $loop_num (0..$#{$class->{'column_data'}})
+ {
+ print FILE_OUT $args->{format}, "<$args->{parent_tag}>", "\n";
+ foreach $tag (0..$#{$class->{'column_headings'}})
+ {
+ print FILE_OUT $args->{format}, $args->{format}, "<$class->{'column_headings'}[$tag]>$class->{'column_data'}[$loop_num][$tag]</$class->{'column_headings'}[$tag]>\n";
+ }
+ print FILE_OUT $args->{format}, "</$args->{parent_tag}>", "\n";
+ }
+
+ } else { ### if column headings are not provided we default to <tr$loop_num>
+
+ foreach $loop_num (0..$#{$class->{'column_data'}})
+ {
+ print FILE_OUT $args->{format}, "<$args->{parent_tag}>", "\n";
+ foreach $tag (0..$#{$class->{'column_data'}->[$loop_num]})
+ {
+ print FILE_OUT $args->{format}, $args->{format}, "<tr$loop_num>$class->{'column_data'}[$loop_num][$tag]</tr$loop_num>\n";
+ }
+ print FILE_OUT $args->{format}, "</$args->{parent_tag}>", "\n";
+ }
+ }
+
+ print FILE_OUT "</$args->{file_tag}>", "\n"; ### print the final document tag
+
+ close FILE_OUT;
+
+}
+
+
+sub declare_xml
+{
+
+ my $class = shift;
+ my $attr = shift || {};
+
+ ### Attributes: version, encoding, standalone
+
+ if (exists $attr->{'version'})
+ {
+ $class->{'declare_xml'} = "<?xml version=\"$attr->{'version'}\""
+ }
+ else
+ {
+ $csvxml_error = "The version attribute must be specified for declare_xml()\n
+ Usage: declare_xml\({version=>1.0, [encoding=>..., standalone=>yes/no]}\)";
+ croak "$csvxml_error" if ($class->{'error_out'} == 1);
+ }
+
+ $class->{'declare_xml'} .= " encoding=\"$attr->{'encoding'}\"" if exists $attr->{'encoding'};
+ if (exists $attr->{'standalone'} && ($attr->{'standalone'} =~ /[yes|no]/))
+ {
+ $class->{'declare_xml'} .= " standalone=\"$attr->{'standalone'}\"";
+ }
+ elsif (!($attr->{'standalone'} =~ /[yes|no]/))
+ {
+ $csvxml_error = "The standalone attribute must be yes|no for declare_xml()\n
+ Usage: declare_xml\({version=>1.0, [encoding=>..., standalone=>yes/no]}\)";
+ croak "$csvxml_error" if ($class->{'error_out'} == 1);
+ }
+
+ $class->{'declare_xml'} .= "?>";
+
+ return $class->{'declare_xml'};
+
+}
+
+sub declare_doctype
+{
+
+ my $class = shift;
+ my $attr = shift || {};
+
+ ### Attributes: source, location1, location2, subset
+
+ $class->{'declare_doctype'} = '<!DOCTYPE $class->{\'document_element\'}';
+ if ($attr->{source} eq "SYSTEM" || $attr->{source} eq "PUBLIC")
+ {
+ $class->{'declare_doctype'} .= " $attr->{'source'}";
+ }
+ else
+ {
+ $csvxml_error = "The source attribute is not set correctly";
+ croak "$csvxml_error" if ($class->{'error_out'} == 1);
+ }
+
+ if (exists $attr->{location1} && !(exists $attr->{subset}))
+ {
+ $class->{'declare_doctype'} .= " \"$attr->{'location1'}\"";
+ }
+ else
+ {
+ $csvxml_error = "$attr->{'source'} location1 must be specified";
+ croak "$csvxml_error" if ($class->{'error_out'} == 1);
+ }
+
+ $class->{'declare_doctype'} .= " \"$attr->{'location2'}\"" if exists $attr->{'location2'};
+ $class->{'declare_doctype'} .= " [$attr->{'subset'}]" if exists $attr->{'subset'};
+
+
+ $class->{'declare_doctype'} .= ">";
+
+ return $class->{'declare_doctype'};
+
+}
+
+$get_header = sub()
+{
+ my $line = shift;
+ my $ref_col = shift;
+ my $sub_char = shift;
+
+ my $status = $xml_xs_obj->parse($line);
+ @$ref_col = $xml_xs_obj->fields();
+
+ if (defined($sub_char))
+ {
+ map {s/^([^a-zA-Z|_|:]|((x|X)(m|M)(l|L)))/$sub_char/g;} @$ref_col; #convert all beginning \n or \t or \s to '_'
+ map {s/[^a-zA-Z|^-|^.|^0-9|^:]/$sub_char/g;} @$ref_col;
+ }
+
+ #print __LINE__.": $ref_col->[0]\n";
+
+ if ($ref_col) {return $#$ref_col;}else{return 0;}
+};
+
+$escape_char = sub() ### Escape char per XML 1.0 specifications
+{ ### Needs to be optimized for faster processing
+
+ my $arg = shift;
+ if (ref($arg) eq 'ARRAY')
+ {
+ my $arr_index;
+ foreach $arr_index (0..$#{$arg})
+ {
+ @{$arg}[$arr_index] =~ s/\&/\&\;/g;
+ @{$arg}[$arr_index] =~ s/\</\<\;/g;
+ @{$arg}[$arr_index] =~ s/\>/\>\;/g;
+ @{$arg}[$arr_index] =~ s/\'/\&apos\;/g;
+ @{$arg}[$arr_index] =~ s/\"/\"\;/g;
+ }
+ }
+ elsif (ref($arg) eq 'SCALAR')
+ {
+ ${$arg} =~ s/\&/\&\;/g;
+ ${$arg} =~ s/\</\<\;/g;
+ ${$arg} =~ s/\>/\>\;/g;
+ ${$arg} =~ s/\'/\&apos\;/g;
+ ${$arg} =~ s/\"/\"\;/g;
+ ${$arg} =~ s/([\x80-\xFF])/$XmlUtf8Encode->(ord($1))/ge;
+ }
+ else
+ {
+ croak "Usage: $escape_char->(\@cols_data) or $escape_char->(\$foo)\n";
+ }
+
+};
+
+$XmlUtf8Encode = sub() {
+
+ my $n = shift;
+ if ($n < 0x80) {
+ return chr ($n);
+ } elsif ($n < 0x800) {
+ return pack ("CC", (($n >> 6) | 0xc0), (($n & 0x3f) | 0x80));
+ } elsif ($n < 0x10000) {
+ return pack ("CCC", (($n >> 12) | 0xe0), ((($n >> 6) & 0x3f) | 0x80),
+ (($n & 0x3f) | 0x80));
+ } elsif ($n < 0x110000) {
+ return pack ("CCCC", (($n >> 18) | 0xf0), ((($n >> 12) & 0x3f) | 0x80),
+ ((($n >> 6) & 0x3f) | 0x80), (($n & 0x3f) | 0x80));
+ }
+ return $n;
+};
+
+
+# Preloaded methods go here.
+
+# Autoload methods go after =cut, and are processed by the autosplit program.
+
+1;
+__END__
+
+
+=head1 NAME
+
+XML::CSV - Perl extension converting CSV files to XML
+
+=head1 SYNOPSIS
+
+ use XML::CSV;
+ $csv_obj = XML::CSV->new();
+ $csv_obj = XML::CSV->new(\%attr);
+
+ $status = $csv_obj->parse_doc(file_name);
+ $status = $csv_obj->parse_doc(file_name, \%attr);
+
+ $csv_obj->declare_xml(\%attr);
+ $csv_obj->declare_doctype(\%attr);
+
+ $csv_obj->print_xml(file_name, \%attr);
+
+
+
+=head1 DESCRIPTION
+
+XML::CSV is a new module in is going to be upgraded very often as my time permits.
+For the time being it uses CSV_XS module object default values to parse the
+(*.csv) document and then creates a perl data structure with xml tags names and data.
+At this point it does not allow for a write as you parse interface but is
+the first upgrade for the next release. I will also allow more access to the data structures
+and more documentation. I will also put in more support for XML, since currently
+it only allows a simple XML structure. Currently you can modify the tag structure
+to allow for attributes. No DTD support is currently available, but will be
+implemented in a soon coming release. As the module will provide both: object and event interfaces, it will
+be used upon individual needs, system resources, and required performance. Ofcourse the DOM
+implementation takes up more resources and in some instances timing, it's the easiest to use.
+
+=head1 ATTRIBUTES new()
+
+error_out - Turn on the error handling which will die on all errors and assign the error message to
+$XML::CSV::csvxml_error.
+
+column_headings - Specifies the column heading to use. Passed as an array reference. Can be used
+as a supplement to using the first column in the file as the XML tag names. Since XML::CSV does
+not require you to parse the CSV file, you can provide your own data structure to parse.
+
+column_data - Specifies the CSV data in a two dimensional array. Passed as an array reference.
+
+csv_xs - Specifies the CSV_XS object to use. This is used to create custom CSV_XS object and override
+the default one created by XML::CSV.
+
+
+=head1 ATTRIBUTES parse_doc()
+
+headings - Specifies the number of rows to use as tag names. Defaults to 0.
+Ex. {headings => 1} (This will use the first row of data as xml tags)
+
+sub_char - Specifies the character with which the illegal tag characters will be
+replaced with. Defaults to undef meaning no substitution is done. To eliminate
+characters use "" (empty string) or to replace with another see below.
+Ex. {sub_char => "_"} or {sub_char => ""}
+
+
+=head1 ATTRIBUTES declare_xml()
+
+version - Specifies the xml version.
+Ex. {version => '1.0'}
+
+encoding - Specifies the type of encoding. XML standard defaults encoding to 'UTF-8' if notspecifically
+ set.
+Ex. {encoding => 'ISO-8859_1'}
+
+standalone - Specifies the the document as standalone (yes|no). If the document is does not rely on an
+ external DTD, DTD is internal, or the external DTD does not effect the contents of the document,
+ the standalone attribute should be set to 'yes', otherwise 'no' should be used. For more info
+ see XML declaration documentation.
+Ex. {standalone => 'yes'}
+
+=head1 ATTRIBUTES declare_doctype()
+
+source - Specifies the source of the DTD (SYSTEM|PUBLIC)
+Ex. {source => 'SYSTEM'}
+
+location1 - URI to the DTD file. Public ID may be used if source is PUBLIC.
+Ex. {location1 => 'http://www.xmlproj.com/dtd/index_dtd.dtd'} or {location1 => '-//Netscape Communications//DTD RSS 0.90//EN'}
+
+location2 - Optional second URI. Usually used if the location1 public ID is not found by the
+ validating parser.
+Ex. {location2 => 'http://www.xmlproj.com/file.dtd'}
+
+subset - Any other information that proceedes the DTD declaration. Usually includes internal DTD if any.
+Ex. {subset => 'ELEMENT first_name (#PCDATA)>\n<!ELEMENT last_name (#PCDATA)>'}
+You can even enterpolate the string with $obj->{column_headings} to dynamically build the DTD.
+Ex. {subset => "ELEMENT $obj->{columnt_headings}[0] (#PCDATA)>"}
+
+
+=head1 ATTRIBUTES print_xml()
+
+file_tag - Specifies the file parent tag. Defaults to "records".
+Ex. {file_tag => "file_data"} (Do not use < and > when specifying)
+
+parent_tag - Specifies the record parent tag. Defaults to "record".
+Ex. {parent_tag => "record_data"} (Do not use < and > when specifying)
+
+format - Specifies the character to use to indent nodes. Defaults to "\t" (tab).
+Ex. {format => " "} or {format => "\t\t"}
+
+
+=head1 PUBLIC VARIABLES
+
+$csv_obj->{column_headings}
+$csv_obj->{column_data}
+
+=head1 EXAMPLES
+
+
+Example #1:
+
+This is a simple implementation which uses defaults
+
+use XML::CSV;
+$csv_obj = XML::CSV->new();
+$csv_obj->parse_doc("in_file.csv", {headings => 1});
+
+$csv_obj->print_xml("out.xml");
+
+Example #2:
+
+This example uses a passed headings array reference which is used along with the parsed data.
+
+use XML::CSV;
+$csv_obj = XML::CSV->new();
+
+$csv_obj->{column_headings} = \@arr_of_headings;
+
+$csv_obj->parse_doc("in_file.csv");
+$csv_obj->print_xml("out.xml", {format => " ", file_tag = "xml_file", parent_tag => "record"});
+
+
+Example #3:
+
+First it passes a reference to a array with column headings and then a reference to two dimensional array
+of data where the first index represents the row number and the second column number. We also pass a custom
+Text::CSV_XS object to overwrite the default object. This is usefull for creating your own CSV_XS object's args
+before using the parse_doc() method. See 'perldoc Text::CSV_XS' for different new() attributes.
+
+use XML::CSV;
+
+$default_obj_xs = Text::CSV_XS->new({quote_char => '"'});
+$csv_obj = XML::CSV->new({csv_xs => $default_obj_xs});
+$csv_obj->{column_headings} = \@arr_of_headings;
+
+$csv_obj->{column_data} = \@arr_of_data;
+
+$csv_obj->print_xml("out.xml");
+
+
+=head1 AUTHOR
+
+Ilya Sterin, isterin at mail.com
+
+=head1 SEE ALSO
+
+Text::CSV_XS
+
+=cut
Added: branches/upstream/libxml-csv-perl/current/Data1.csv
URL: http://svn.debian.org/wsvn/branches/upstream/libxml-csv-perl/current/Data1.csv?rev=10431&op=file
==============================================================================
--- branches/upstream/libxml-csv-perl/current/Data1.csv (added)
+++ branches/upstream/libxml-csv-perl/current/Data1.csv Sat Dec 1 12:25:50 2007
@@ -1,0 +1,9 @@
+one,two,three,four,five,six,seven,eight,nine,ten,eleven
+AU05,No,124642,DANLY,MULTIPLE,DU4-1000-700-108-72,1956,B82,STAMPING,0,No
+AU05,No,122150,DANLY (1110),MULTIPLE," ""U4-1000-144-90""",1956,B82,STAMPING,0,
+AU05,No,115597,DANLY (1110),MULTIPLE," ""U4-1000-144-84""",1962,B82,STAMPING,0,
+AU05,No,658347,DANLY (1110),MULTIPLE," ""S4-1000-144-90""",1971,B82,STAMPING,0,
+AU05,No,68427,U.S.I. CLEARING (1340),MULTIPLE," ""F-4400-120 x 80""",1967,B86,STAMPING,0,
+AU05,No,116533,CLEARING (1080),MULTIPLE," ""S4 300 84 x 48"," Clearing SA Blanker""",1954,B83,STAMPING,0
+AU05,No,716776,DANLY (1110),MULTIPLE," ""DU4-1250-800-144-96""",1980,B82,STAMPING,0,
+AU05,No,141495,CLEARING (1080),MULTIPLE," ""B4-1000-144-90","1966""",B82,STAMPING,0,
Added: branches/upstream/libxml-csv-perl/current/Data2.csv
URL: http://svn.debian.org/wsvn/branches/upstream/libxml-csv-perl/current/Data2.csv?rev=10431&op=file
==============================================================================
--- branches/upstream/libxml-csv-perl/current/Data2.csv (added)
+++ branches/upstream/libxml-csv-perl/current/Data2.csv Sat Dec 1 12:25:50 2007
@@ -1,0 +1,9 @@
+ one, two, three, four, five, six, seven, eight, nine, ten, eleven
+AU05,No,124642,DANLY,MULTIPLE,DU4-1000-700-108-72,1956,B82,STAMPING,0,No
+AU05,No,122150,DANLY (1110),MULTIPLE," ""U4-1000-144-90""",1956,B82,STAMPING,0,
+AU05,No,115597,DANLY (1110),MUL<>TIPLE," ""U4-1000-144-84""",1&962,B82,STAMPING,0,
+AU05,No,"6583""""""47",DANLY (1110),MULTIPLE," ""S4-1000-144-90""",1971,B82,STAMPING,0,
+AU05,No,68427,U.S.I. CLEARING (1340),MULTIPLE," ""F-4400-120 x 80""",1967,B86,"STAM'""PING",0,
+AU05,No,116533,CLEARING (1080),MULTIPLE," ""S4 300 84 x 48"," Clearing SA Blanker""",1954,B83,STAMPING,0
+AU05,No,71<>6776,DANLY (1110),MULTIPLE," ""DU4-1250-800-144-96""",1980,B82,STAMPING,0,
+AU05,No,141495,CLEARING (1080),MULTIPLE," ""B4-1000-144-90","1966""",B82,STAMPING,0,
Added: branches/upstream/libxml-csv-perl/current/MANIFEST
URL: http://svn.debian.org/wsvn/branches/upstream/libxml-csv-perl/current/MANIFEST?rev=10431&op=file
==============================================================================
--- branches/upstream/libxml-csv-perl/current/MANIFEST (added)
+++ branches/upstream/libxml-csv-perl/current/MANIFEST Sat Dec 1 12:25:50 2007
@@ -1,0 +1,9 @@
+CHANGES
+MANIFEST
+Makefile.PL
+CSV.pm
+test.pl
+Data1.csv
+Data2.csv
+README
+
Added: branches/upstream/libxml-csv-perl/current/Makefile.PL
URL: http://svn.debian.org/wsvn/branches/upstream/libxml-csv-perl/current/Makefile.PL?rev=10431&op=file
==============================================================================
--- branches/upstream/libxml-csv-perl/current/Makefile.PL (added)
+++ branches/upstream/libxml-csv-perl/current/Makefile.PL Sat Dec 1 12:25:50 2007
@@ -1,0 +1,10 @@
+use ExtUtils::MakeMaker;
+# See lib/ExtUtils/MakeMaker.pm for details of how to influence
+# the contents of the Makefile that is written.
+WriteMakefile(
+ 'NAME' => 'XML::CSV',
+ 'VERSION_FROM' => 'CSV.pm', # finds $VERSION
+ 'LIBS' => [''], # e.g., '-lm'
+ 'DEFINE' => '', # e.g., '-DHAVE_SOMETHING'
+ 'INC' => '', # e.g., '-I/usr/include/other'
+);
Added: branches/upstream/libxml-csv-perl/current/README
URL: http://svn.debian.org/wsvn/branches/upstream/libxml-csv-perl/current/README?rev=10431&op=file
==============================================================================
--- branches/upstream/libxml-csv-perl/current/README (added)
+++ branches/upstream/libxml-csv-perl/current/README Sat Dec 1 12:25:50 2007
@@ -1,0 +1,33 @@
+Module: XML::CSV
+
+Description:
+ XML::CSV provides functions to easily transform CSV documents into XML. The module uses Text::CSV_XS to
+ parse csv files and put into perl data structure. The perl data structure is then written into xml data
+ structure.
+ XML::CSV allows to create your own Text::CSV_XS object with defaults that fit your needs or just use defaults.
+ I will enhance it's functionality as time permits. Efficiency is very important in parsing and writting large
+ docs so one of the next enhancements will include an option for creating a data structure or write as you parse.
+ That will eliminate the need for storing a data structure before writting xml. The data structure has it's own
+ benefits, since it allows you to provide your own structure or modify the existing one before you write to xml.
+ Any ideas or requests for enhancements or added functionality are very welcomed, so please feel free to email
+ them to me.
+
+Copying:
+ Copyright (c) 2000 Ilya Sterin. All rights reserved.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the same terms as Perl itself.
+
+Prerequisites:
+ perl 5.002
+ Text::CSV_XS 0.21
+
+Build/Installation:
+ Standard build/installation supported by ExtUtils::MakeMaker(3)...
+ perl Makefile.PL
+ make
+ make test
+ make install
+
+Author:
+ Ilya Sterin <isterin at mail.com>
Added: branches/upstream/libxml-csv-perl/current/test.pl
URL: http://svn.debian.org/wsvn/branches/upstream/libxml-csv-perl/current/test.pl?rev=10431&op=file
==============================================================================
--- branches/upstream/libxml-csv-perl/current/test.pl (added)
+++ branches/upstream/libxml-csv-perl/current/test.pl Sat Dec 1 12:25:50 2007
@@ -1,0 +1,94 @@
+# -*- perl -*-
+
+require 5.004;
+
+
+BEGIN { $| = 1; print "1..4\n"; }
+END {print "Did not pass all tests" unless $loaded;}
+use XML::CSV;
+
+print "Loaded OK\n";
+$loaded = 1;
+
+
+eval{
+my $obj = XML::CSV->new();
+my $num = $obj->parse_doc("Data1.csv", {'headings' => 1});
+$obj->print_xml("out1.xml");
+};
+
+if($@)
+{
+print "not ok 1: $@\n";
+$loaded = 0;
+undef($@);
+} else {
+print "ok 1\n";
+}
+
+
+
+
+##########################################
+
+eval{
+$csv_obj = XML::CSV->new();
+ at arr_of_headings = ('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven');
+$csv_obj->{column_headings} = \@arr_of_headings;
+$csv_obj->parse_doc("Data1.csv");
+$csv_obj->print_xml("out2.xml", {format => " ", file_tag => "file_data", record_tag => "record_data"});
+};
+
+if($@)
+{
+print "not ok 2: $@\n";
+$loaded = 0;
+undef($@);
+} else {
+print "ok 2\n";
+}
+
+
+
+
+##########################################
+
+eval{
+$default_obj_xs = Text::CSV_XS->new({quote_char => '"'});
+$csv_obj = XML::CSV->new({csv_xs => $default_obj_xs});
+$csv_obj->{column_headings} = \@arr_of_headings;
+
+$csv_obj->{column_data} = \@arr_of_data;
+
+$csv_obj->print_xml("out3.xml");
+};
+
+if($@)
+{
+print "not ok 3: $@\n";
+$loaded = 0;
+undef($@);
+} else {
+print "ok 3\n";
+}
+
+
+##########################################
+
+
+eval{
+my $obj = XML::CSV->new();
+my $num = $obj->parse_doc("Data2.csv", {'headings' => 1, 'sub_char' => "_"});
+$obj->declare_xml({version => '1.0', encoding => 'UTF-8', standalone => 'yes'});
+$obj->declare_doctype({source => 'PUBLIC', location1 => '-//Netscape Communications//DTD RSS 0.90//EN', location2 => 'http://my.netscape.com/publish/formats/rss-0.91.dtd'});
+$obj->print_xml("out4.xml");
+};
+
+if($@)
+{
+print "not ok 1: $@\n";
+$loaded = 0;
+undef($@);
+} else {
+print "ok 4\n";
+}
More information about the Pkg-perl-cvs-commits
mailing list