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]);
     }
 }
 

Reply via email to