Author: spadkins
Date: Tue May 2 06:44:59 2006
New Revision: 6001
Modified:
p5ee/trunk/App-Context/lib/App/Serializer/OneLine.pm
Log:
worked on this. it still needs more help to be robust enough to handle special
characters (and escaped delimiters)
Modified: p5ee/trunk/App-Context/lib/App/Serializer/OneLine.pm
==============================================================================
--- p5ee/trunk/App-Context/lib/App/Serializer/OneLine.pm (original)
+++ p5ee/trunk/App-Context/lib/App/Serializer/OneLine.pm Tue May 2
06:44:59 2006
@@ -98,40 +98,48 @@
my ($self, $perl) = @_;
my (@perl, $elem, @remove);
# print "\$PERL=($perl)\n";
- $perl =~ s/,/\|/g if ($perl !~ /\|/);
- $perl =~ s/=>?/\|/g;
- @perl = split(/([\|\{\}\[\]])/, $perl);
+ # SPECIAL CHARACTERS: \=,{}[]
+ my %save_esc = (
+ "," => 0x10,
+ "=" => 0x11,
+ "{" => 0x12,
+ "}" => 0x13,
+ "[" => 0x14,
+ "]" => 0x15,
+ );
+ my %restore_esc = (reverse %save_esc);
+ my $saved = $perl =~ s/\\([,\[\]\{\}])/$save_esc{$1}/ge;
+ $perl =~ s/=/,/g;
+ [EMAIL PROTECTED] = grep s/([\x10\x11\x12\x13\x14\x15])/$restore_esc{$1}/e
split(/([,\{\}\[\]])/, $perl);
+ @perl = split(/([,\{\}\[\]])/, $perl);
# print "[EMAIL PROTECTED](", join("-",@perl), ")\n";
for (my $i = $#perl; $i >= 0; $i--) {
$elem = $perl[$i];
- $elem =~ s/^\s+//; # trim leading whitespace
- $elem =~ s/\s+$//; # trim trailing whitespace
- $perl[$i] = $elem;
if ($elem eq "") {
if ($i == 0) {
- if ($perl[$i+1] =~ /^[\{\[]$/) { # match ]}
+ if ($perl[$i+1] =~ /^[\{\[]$/) {
$remove[$i] = 1;
}
}
elsif ($i < $#perl) {
- if (($perl[$i-1] !~ /^[\|\{\[]$/) || # match ]}
- ($perl[$i-1] eq "|" && $perl[$i+1] =~ /^[\{\[]$/)) { #
match ]}
+ if (($perl[$i-1] !~ /^[,\{\[]$/) ||
+ ($perl[$i-1] eq "," && $perl[$i+1] =~ /^[\{\[]$/)) {
$remove[$i] = 1;
}
}
- else { # match [{
- if ($perl[$i-1] =~ /^[\}\]]$/) {
+ else {
+ if ($perl[$i-1] =~ /^[\}\]]$/) {
$remove[$i] = 1;
}
}
}
}
- if ($perl[$#perl] eq "|") {
+ if ($perl[$#perl] eq ",") {
push(@perl, "");
}
for (my $i = $#perl; $i >= 0; $i--) {
$elem = $perl[$i];
- if ($elem eq "|" || $remove[$i]) {
+ if ($elem eq "," || $remove[$i]) {
splice(@perl, $i, 1);
}
}
@@ -140,11 +148,11 @@
if ($#data > 0) {
return([EMAIL PROTECTED]);
}
- elsif ($#data == 0 && !ref($data[0])) {
- return([EMAIL PROTECTED]);
+ elsif ($#data == 0) {
+ return($data[0]);
}
else {
- return($data[0]);
+ return([EMAIL PROTECTED]);
}
}