Show
Ignore:
Timestamp:
08/28/08 16:32:45 (4 months ago)
Author:
yappo
Message:

TAB CR LF SPACE を使った

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/Acme-Encode-WhiteSpace8/trunk/lib/Acme/Encode/WhiteSpace8.pm

    r18385 r18389  
    1515    and $specials .= quotemeta "!\"#$%&*;<=>@[]^_`{|}"; 
    1616 
    17 my @whitespaces = (' ', "\t"); 
    18 my %whitespaces = do { 
    19     my $i = 0; 
    20     map { $_ => $i++ } @whitespaces; 
    21 }; 
     17my %whitespaces2bit = ( 
     18    "\t" => "00", 
     19    "\r" => "01", 
     20    "\n" => "10", 
     21    " "  => "11", 
     22); 
     23my %bit2whitespaces = map { $whitespaces2bit{$_} => $_ } keys %whitespaces2bit; 
    2224 
    2325sub encode($$;$) { 
     
    2527 
    2628    my $bytes = Encode::encode('utf8', $str); 
    27  
    28     my @spaces = (); 
    29     for my $byte (split //, $bytes) { 
    30         push @spaces, map { 
    31             $whitespaces[$_] 
    32         } split //, unpack('B*', $byte); 
    33     } 
    34  
    35     my $ret = join '', @spaces; 
    36     return '' unless $ret; 
    37  
    38     Encode::encode('utf8', $whitespaces[0]x8 . $ret . $whitespaces[1]x8); 
     29    my $bits = unpack('B*', $bytes); 
     30    $bits =~ s/([01][01])/$bit2whitespaces{$1}/g; 
     31    $bits; 
    3932} 
    4033 
     
    4235    my ($obj, $bytes, $chk) = @_; 
    4336    return '' unless $bytes; 
     37    return $bytes unless $bytes =~ /^[\t\r\n ]{4,}$/; 
    4438 
    45     $bytes = Encode::decode('utf8', $bytes); 
    46     return $bytes unless $bytes =~ /^        ([ \t]{8,})\t\t\t\t\t\t\t\t$/; 
    47     my $body = $1; 
    48  
    49     my @bits = grep { defined $_ } map { 
    50         $whitespaces{$_} 
    51     } split //, $body; 
    52     warn join('', @bits, "\n"); 
     39    my @bits = map { 
     40        $whitespaces2bit{$_} 
     41    } split //, $bytes; 
    5342 
    5443    my $ret = ''; 
    55     while (my @byte = splice @bits, 0, 8) { 
     44    while (my @byte = splice @bits, 0, 4) { 
    5645        $ret .= pack('B8', join '', @byte); 
    5746    }