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

import string
import urllib
import os

__all__ = ["url2pathname","pathname2url"]

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

def url2pathname(url):
    "Convert URL to a RISC OS path."
    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):
    "Convert a RISC OS path name to a file url."
    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 `url`, '->', `url2pathname(url)`
    print "*******************************************************"
    for path in ["SCSI::SCSI4.$.Anwendung",
                 "PythonApp:Lib",
                 "PythonApp:Lib.rourl2path/py"]:
        print `path`, '->', `pathname2url(path)`

if __name__ == '__main__':
    test()
