diff options
Diffstat (limited to 'Lib/dos_8x3/macurl2p.py')
-rwxr-xr-x | Lib/dos_8x3/macurl2p.py | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/Lib/dos_8x3/macurl2p.py b/Lib/dos_8x3/macurl2p.py new file mode 100755 index 0000000..65afe69 --- /dev/null +++ b/Lib/dos_8x3/macurl2p.py @@ -0,0 +1,76 @@ +"""Mac specific module for conversion between pathnames and URLs.""" + +import string +import urllib +import os + +def url2pathname(pathname): + "Convert /-delimited pathname to mac pathname" + # + # XXXX The .. handling should be fixed... + # + tp = urllib.splittype(pathname)[0] + if tp and tp <> 'file': + raise RuntimeError, 'Cannot convert non-local URL to pathname' + components = string.split(pathname, '/') + # Remove . and embedded .. + i = 0 + while i < len(components): + if components[i] == '.': + del components[i] + elif components[i] == '..' and i > 0 and \ + components[i-1] not in ('', '..'): + del components[i-1:i+1] + i = i-1 + elif components[i] == '' and i > 0 and components[i-1] <> '': + del components[i] + else: + i = i+1 + if not components[0]: + # Absolute unix path, don't start with colon + return string.join(components[1:], ':') + else: + # relative unix path, start with colon. First replace + # leading .. by empty strings (giving ::file) + i = 0 + while i < len(components) and components[i] == '..': + components[i] = '' + i = i + 1 + return ':' + string.join(components, ':') + +def pathname2url(pathname): + "convert mac pathname to /-delimited pathname" + if '/' in pathname: + raise RuntimeError, "Cannot convert pathname containing slashes" + components = string.split(pathname, ':') + # Replace empty string ('::') by .. (will result in '/../' later) + for i in range(1, len(components)): + if components[i] == '': + components[i] = '..' + # Truncate names longer than 31 bytes + components = map(lambda x: x[:31], components) + + if os.path.isabs(pathname): + return '/' + string.join(components, '/') + else: + return string.join(components, '/') + +def test(): + for url in ["index.html", + "bar/index.html", + "/foo/bar/index.html", + "/foo/bar/", + "/"]: + print `url`, '->', `url2pathname(url)` + for path in ["drive:", + "drive:dir:", + "drive:dir:file", + "drive:file", + "file", + ":file", + ":dir:", + ":dir:file"]: + print `path`, '->', `pathname2url(path)` + +if __name__ == '__main__': + test() |