Skip to content

Commit

Permalink
Add filesystem func to transform a path to a URI
Browse files Browse the repository at this point in the history
  • Loading branch information
tecosaur committed Oct 22, 2023
1 parent f71228d commit 223ee3d
Showing 1 changed file with 18 additions and 0 deletions.
18 changes: 18 additions & 0 deletions base/path.jl
Original file line number Diff line number Diff line change
Expand Up @@ -594,3 +594,21 @@ relpath(path::AbstractString, startpath::AbstractString) =
for f in (:isdirpath, :splitdir, :splitdrive, :splitext, :normpath, :abspath)
@eval $f(path::AbstractString) = $f(String(path))
end

"""
uripath(path::AbstractString)
Encode `path` as a URI as per RFC1738, RFC3986, and the
[Freedesktop File URI spec](https://www.freedesktop.org/wiki/Specifications/file-uri-spec/).
"""
function uripath(path::AbstractString)
percent_escape(s) = '%' * join(map(
b -> uppercase(string(b, base=16)),
Vector{UInt8}(s)), '%')
encode_uri_component(s) = replace(
s, r"[^A-Za-z0-9\-_.~]+" => percent_escape)
string("file://", gethostname(), '/',
join(map(encode_uri_component,
split(path, Filesystem.path_separator, keepempty=false)),
'/'))
end

0 comments on commit 223ee3d

Please sign in to comment.