"""riscos specific module for conversion between pathnames and URLs.
Based on macurl2path.
Do not import directly, use urllib instead."""

import string
import urllib

__all__ = ["url2pathname","pathname2url"]

__slash_dot = string.maketrans("/.", "./")

def url2pathname(url):
    """OS-specific conversion from a relative URL of the 'file' scheme
    to a file system path; not recommended for general use."""
    tp = urllib.splittype(url)[0]
    if tp and tp <> 'file':
        raise RuntimeError, 'Cannot convert non-local URL to pathname'
    # Turn starting /// into /, an empty hostname means current host
    if url[:3] == '///':
        url = url[2:]
    elif url[:2] == '//':
        raise RuntimeError, 'Cannot convert non-local URL to pathname'
    components = string.split(url, '/')
    if not components[0]:
        if '$' in components:
            del components[0]
        else:
            components[0] = '$'
    # 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 -= 1
        elif components[i] == '..':
            components[i] = '^'
            i += 1
        elif components[i] == '' and i > 0 and components[i-1] <> '':
            del components[i]
        else:
            i += 1
    components = map(lambda x: urllib.unquote(x).translate(__slash_dot), components)
    return '.'.join(components)

def pathname2url(pathname):
    """OS-specific conversion from a file system path to a relative URL
    of the 'file' scheme; not recommended for general use."""
    return urllib.quote('///' + pathname.translate(__slash_dot), "/$:")

def test():
    for url in ["index.html",
                "/SCSI::SCSI4/$/Anwendung/Comm/Apps/!Fresco/Welcome",
                "/SCSI::SCSI4/$/Anwendung/Comm/Apps/../!Fresco/Welcome",
                "../index.html",
                "bar/index.html",
                "/foo/bar/index.html",
                "/foo/bar/",
                "/"]:
        print '%r -> %r' % (url, url2pathname(url))
    print "*******************************************************"
    for path in ["SCSI::SCSI4.$.Anwendung",
                 "PythonApp:Lib",
                 "PythonApp:Lib.rourl2path/py"]:
        print '%r -> %r' % (path, pathname2url(path))

if __name__ == '__main__':
    test()
