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.

Reply via email to