On Jul 30, 11 02:06, Lars T. Kyllingstad wrote:
Here's a new update based on your comments and requests. Code and docs
are in the usual place,
https://github.com/kyllingstad/phobos/blob/std-path/std/path.d
http://www.kyllingen.net/code/std-path/phobos-prerelease/std_path.html
Here are the highlights:
* UNC paths, i.e. \\server\share\..., are now (hopefully) handled
correctly on Windows. See the baseName(), dirName(), rootName(),
driveName(), pathSplitter(), etc. docs for examples.
* Support for //foo/bar paths on POSIX has been removed.
* rootName() is new.
* pathSplitter() now returns a bidirectional range.
* pathCharMatch() and fcmp() have been replaced by improved functions
filenameCharCmp() and filenameCmp(), respectively, with optional case
sensitivity.
* joinPath() has been renamed to buildPath().
* Added a function buildNormalizedPath(), which performs normalization
while joining the segments.
* Redefined normalize() in terms of buildNormalizedPath().
I am still unsure of the extent to which long UNC paths (i.e. \\?\...)
should be supported, if at all. If anyone has anything to say on the
matter, please do. :)
-Lars
Thanks for the nice work!
Comments:
- pathSplitter: empty, front, back could be const. Also, make the struct
'static struct'.
- hasDrive, isDriveRoot: the path
"#:\x"
should not pass hasDrive. In Windows only /[a-zA-Z]/ are supported drive
letters. '#:' may work but is not officially supported.
- Bug 6390 (= 6337) has been fixed. Some CTFE tests can be enabled.
- baseName, dirName "TODO: @safe pure nothrow": Mention which bugs are
preventing this (std.conv.to and std.string.chomp?).
- buildPath, More than two path components: looks like a perfect
candidate for std.algorithm.reduce. And this should probably accept a
range, but I'm not sure.
- CaseSensitive.osDefault: As I mentioned before, version(OSX) should
set this to 'no'.
- globMatch: only UTF-8 is supported?
- extension: Note that the DDoc text of 'extension' is highlighted.