Changeset 25674

Show
Ignore:
Timestamp:
12/02/08 14:01:59 (5 weeks ago)
Author:
mattn
Message:

handle "c:\foo\bar.txt" as "file:///c:/foo/bar.txt"
handle "\\machine\share\bar.txt as "file://///machine/share/bar.txt"

Location:
lang/perl/Path-Class-URI/trunk/lib/Path/Class
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/Path-Class-URI/trunk/lib/Path/Class/URI.pm

    r25665 r25674  
    2323sub Path::Class::Entity::uri { 
    2424    my $self = shift; 
     25    my $path = $self->stringify; 
     26    if ($^O eq "MSWin32") { 
     27        # can't use backslash as separator 
     28        $path =~ tr!\\!/!; 
     29        # make "file:///x:/foo/bar/" if path is absolute 
     30        $path = "/$path" if $self->is_absolute && $path !~ /^\//; 
     31    } 
    2532    if ($self->is_absolute) { 
    26         return URI->new("file://" . $self->as_foreign('Unix')); 
     33        return URI->new("file://$path"); 
    2734    } else { 
    28         return URI->new("file:" . $self->as_foreign('Unix')); 
     35        return URI->new("file:$path"); 
    2936    } 
    3037} 
  • lang/perl/Path-Class-URI/trunk/lib/Path/Class/Unicode.pm

    r25665 r25674  
    2323sub ufile_from_uri { 
    2424    my $uri = shift; 
    25     $uri = URI->new($uri) unless blessed $uri; 
    26     ufile(Encode::decode_utf8($uri->file('unix'))); 
     25    if ($^O eq "MSWin32") { 
     26        $uri =~ s!^file:///!file://!g; # remove leading slash for absolute 
     27        $uri = URI->new($uri) unless blessed $uri; 
     28        ufile(Encode::decode_utf8($uri->file('win32'))); 
     29    } else { 
     30        $uri = URI->new($uri) unless blessed $uri; 
     31        ufile(Encode::decode_utf8($uri->file('unix'))); 
     32    } 
    2733} 
    2834 
    2935sub udir_from_uri { 
    3036    my $uri = shift; 
    31     $uri = URI->new($uri) unless blessed $uri; 
    32     udir(Encode::decode_utf8($uri->file('unix'))); 
     37    if ($^O eq "MSWin32") { 
     38        $uri =~ s!^file:///!file://!g; # remove leading slash for absolute 
     39        $uri = URI->new($uri) unless blessed $uri; 
     40        udir(Encode::decode_utf8($uri->file('win32'))); 
     41    } else { 
     42        $uri = URI->new($uri) unless blessed $uri; 
     43        udir(Encode::decode_utf8($uri->file('unix'))); 
     44    } 
    3345} 
    3446 
     
    4052sub uri { 
    4153    my $self = shift; 
    42     my $path = Encode::encode_utf8($self->{path}->as_foreign('Unix')->stringify); 
     54    my $path = Encode::encode_utf8($self->{path}->stringify); 
     55    if ($^O eq "MSWin32") { 
     56        $path =~ tr!\\!/!; # can't use backslash as separator 
     57        $path = "/$path" if $self->is_absolute; # make "file:///x:/foo/bar/" 
     58    } 
    4359    if ($self->is_absolute) { 
    4460        return URI->new("file://$path");