Index: lang/perl/Acme-Encode-WhiteSpace8/trunk/lib/Acme/Encode/WhiteSpace8.pm
===================================================================
--- lang/perl/Acme-Encode-WhiteSpace8/trunk/lib/Acme/Encode/WhiteSpace8.pm (revision 18385)
+++ lang/perl/Acme-Encode-WhiteSpace8/trunk/lib/Acme/Encode/WhiteSpace8.pm (revision 18389)
@@ -15,9 +15,11 @@
     and $specials .= quotemeta "!\"#$%&*;<=>@[]^_`{|}";
 
-my @whitespaces = (' ', "\t");
-my %whitespaces = do {
-    my $i = 0;
-    map { $_ => $i++ } @whitespaces;
-};
+my %whitespaces2bit = (
+    "\t" => "00",
+    "\r" => "01",
+    "\n" => "10",
+    " "  => "11",
+);
+my %bit2whitespaces = map { $whitespaces2bit{$_} => $_ } keys %whitespaces2bit;
 
 sub encode($$;$) {
@@ -25,16 +27,7 @@
 
     my $bytes = Encode::encode('utf8', $str);
-
-    my @spaces = ();
-    for my $byte (split //, $bytes) {
-	push @spaces, map {
-            $whitespaces[$_]
-        } split //, unpack('B*', $byte);
-    }
-
-    my $ret = join '', @spaces;
-    return '' unless $ret;
-
-    Encode::encode('utf8', $whitespaces[0]x8 . $ret . $whitespaces[1]x8);
+    my $bits = unpack('B*', $bytes);
+    $bits =~ s/([01][01])/$bit2whitespaces{$1}/g;
+    $bits;
 }
 
@@ -42,16 +35,12 @@
     my ($obj, $bytes, $chk) = @_;
     return '' unless $bytes;
+    return $bytes unless $bytes =~ /^[\t\r\n ]{4,}$/;
 
-    $bytes = Encode::decode('utf8', $bytes);
-    return $bytes unless $bytes =~ /^        ([ \t]{8,})\t\t\t\t\t\t\t\t$/;
-    my $body = $1;
-
-    my @bits = grep { defined $_ } map {
-        $whitespaces{$_}
-    } split //, $body;
-    warn join('', @bits, "\n");
+    my @bits = map {
+        $whitespaces2bit{$_}
+    } split //, $bytes;
 
     my $ret = '';
-    while (my @byte = splice @bits, 0, 8) {
+    while (my @byte = splice @bits, 0, 4) {
 	$ret .= pack('B8', join '', @byte);
     }
