1 """riscos specific module for conversion between pathnames and URLs.
3 Do not import directly, use urllib instead."""
9 __all__
= ["url2pathname","pathname2url"]
11 __slash_dot
= string
.maketrans("/.", "./")
13 def url2pathname(url
):
14 "Convert URL to a RISC OS path."
15 tp
= urllib
.splittype(url
)[0]
16 if tp
and tp
<> 'file':
17 raise RuntimeError, 'Cannot convert non-local URL to pathname'
18 # Turn starting /// into /, an empty hostname means current host
22 raise RuntimeError, 'Cannot convert non-local URL to pathname'
23 components
= string
.split(url
, '/')
29 # Remove . and embedded ..
31 while i
< len(components
):
32 if components
[i
] == '.':
34 elif components
[i
] == '..' and i
> 0 and \
35 components
[i
-1] not in ('', '..'):
36 del components
[i
-1:i
+1]
38 elif components
[i
] == '..':
41 elif components
[i
] == '' and i
> 0 and components
[i
-1] <> '':
45 components
= map(lambda x
: urllib
.unquote(x
).translate(__slash_dot
), components
)
46 return '.'.join(components
)
48 def pathname2url(pathname
):
49 "Convert a RISC OS path name to a file url."
50 return urllib
.quote('///' + pathname
.translate(__slash_dot
), "/$:")
53 for url
in ["index.html",
54 "/SCSI::SCSI4/$/Anwendung/Comm/Apps/!Fresco/Welcome",
55 "/SCSI::SCSI4/$/Anwendung/Comm/Apps/../!Fresco/Welcome",
58 "/foo/bar/index.html",
61 print `url`
, '->', `
url2pathname(url
)`
62 print "*******************************************************"
63 for path
in ["SCSI::SCSI4.$.Anwendung",
65 "PythonApp:Lib.rourl2path/py"]:
66 print `path`
, '->', `
pathname2url(path
)`
68 if __name__
== '__main__':