1 /++ 2 $(H2 Scriptlike $(SCRIPTLIKE_VERSION)) 3 4 Wrappers for $(MODULE_STD_PATH) that add support for Scriptlike's 5 $(API_PATH_EXTR Path) and command echoing features. 6 7 Copyright: Copyright (C) 2014-2015 Nick Sabalausky 8 License: zlib/libpng 9 Authors: Nick Sabalausky 10 +/ 11 module scriptlike.path.wrappers; 12 13 import std.algorithm; 14 import std.conv; 15 import std.datetime; 16 import std.file; 17 import std.process; 18 import std.range; 19 import std.stdio; 20 import std.string; 21 import std.traits; 22 import std.typecons; 23 import std.typetuple; 24 25 static import std.path; 26 public import std.path : dirSeparator, pathSeparator, isDirSeparator, 27 CaseSensitive, osDefaultCaseSensitivity, buildPath, buildNormalizedPath; 28 29 import scriptlike.path.extras; 30 31 /// Like $(FULL_STD_PATH baseName), but operates on Path. 32 Path baseName(Path path) 33 @trusted pure 34 { 35 return Path( std.path.baseName(path.toRawString()) ); 36 } 37 38 ///ditto 39 Path baseName(CaseSensitive cs = CaseSensitive.osDefault) 40 (Path path, in string suffix) 41 @safe pure 42 { 43 return Path( std.path.baseName!cs(path.toRawString(), suffix) ); 44 } 45 /// Like $(FULL_STD_PATH dirName), but operates on Path. 46 Path dirName(Path path) 47 { 48 return Path( std.path.dirName(path.toRawString()) ); 49 } 50 51 /// Like $(FULL_STD_PATH rootName), but operates on Path. 52 Path rootName(Path path) @safe pure nothrow 53 { 54 return Path( std.path.rootName(path.toRawString()) ); 55 } 56 57 /// Like $(FULL_STD_PATH driveName), but operates on Path. 58 Path driveName(Path path) @safe pure nothrow 59 { 60 return Path( std.path.driveName(path.toRawString()) ); 61 } 62 63 /// Like $(FULL_STD_PATH stripDrive), but operates on Path. 64 Path stripDrive(Path path) @safe pure nothrow 65 { 66 return Path( std.path.stripDrive(path.toRawString()) ); 67 } 68 69 /// Like $(FULL_STD_PATH extension), but takes a Path and returns an Ext. 70 Ext extension(in Path path) @safe pure nothrow 71 { 72 return Ext( std.path.extension(path.toRawString()) ); 73 } 74 75 /// Like $(FULL_STD_PATH stripExtension), but operates on Path. 76 Path stripExtension(Path path) @safe pure nothrow 77 { 78 return Path( std.path.stripExtension(path.toRawString()) ); 79 } 80 81 /// Like $(FULL_STD_PATH setExtension), but operates on Path. 82 Path setExtension(Path path, string ext) 83 @trusted pure nothrow 84 { 85 return Path( std.path.setExtension(path.toRawString(), ext) ); 86 } 87 88 ///ditto 89 Path setExtension(Path path, Ext ext) 90 @trusted pure nothrow 91 { 92 return path.setExtension(ext.toString()); 93 } 94 95 /// Like $(FULL_STD_PATH defaultExtension), but operates on Path and optionally Ext. 96 Path defaultExtension(Path path, in string ext) 97 @trusted pure 98 { 99 return Path( std.path.defaultExtension(path.toRawString(), ext) ); 100 } 101 102 ///ditto 103 Path defaultExtension(Path path, Ext ext) 104 @trusted pure 105 { 106 return path.defaultExtension(ext.toString()); 107 } 108 109 /// Like $(FULL_STD_PATH pathSplitter). Note this returns a range of strings, 110 /// not a range of Path. 111 auto pathSplitter(Path path) @safe pure nothrow 112 { 113 return std.path.pathSplitter(path.toRawString()); 114 } 115 116 /// Like $(FULL_STD_PATH isRooted), but operates on Path. 117 bool isRooted(in Path path) @safe pure nothrow 118 { 119 return std.path.isRooted(path.toRawString()); 120 } 121 122 /// Like $(FULL_STD_PATH isAbsolute), but operates on Path. 123 bool isAbsolute(in Path path) @safe pure nothrow 124 { 125 return std.path.isAbsolute(path.toRawString()); 126 } 127 128 /// Like $(FULL_STD_PATH absolutePath), but operates on Path. 129 Path absolutePath(Path path, lazy string base = getcwd()) 130 @safe pure 131 { 132 return Path( std.path.absolutePath(path.toRawString(), base) ); 133 } 134 135 ///ditto 136 Path absolutePath(Path path, Path base) 137 @safe pure 138 { 139 return Path( std.path.absolutePath(path.toRawString(), base.toRawString().to!string()) ); 140 } 141 142 /// Like $(FULL_STD_PATH relativePath), but operates on Path. 143 Path relativePath(CaseSensitive cs = CaseSensitive.osDefault) 144 (Path path, lazy string base = getcwd()) 145 { 146 return Path( std.path.relativePath!cs(path.toRawString(), base) ); 147 } 148 149 ///ditto 150 Path relativePath(CaseSensitive cs = CaseSensitive.osDefault) 151 (Path path, Path base) 152 { 153 return Path( std.path.relativePath!cs(path.toRawString(), base.toRawString().to!string()) ); 154 } 155 156 /// Like $(FULL_STD_PATH filenameCmp), but operates on Path. 157 int filenameCmp(CaseSensitive cs = CaseSensitive.osDefault) 158 (Path path, Path filename2) 159 @safe pure 160 { 161 return std.path.filenameCmp(path.toRawString(), filename2.toRawString()); 162 } 163 164 ///ditto 165 int filenameCmp(CaseSensitive cs = CaseSensitive.osDefault) 166 (Path path, string filename2) 167 @safe pure 168 { 169 return std.path.filenameCmp(path.toRawString(), filename2); 170 } 171 172 ///ditto 173 int filenameCmp(CaseSensitive cs = CaseSensitive.osDefault) 174 (string path, Path filename2) 175 @safe pure 176 { 177 return std.path.filenameCmp(path, filename2.toRawString()); 178 } 179 180 /// Like $(FULL_STD_PATH globMatch), but operates on Path. 181 bool globMatch(CaseSensitive cs = CaseSensitive.osDefault) 182 (Path path, string pattern) 183 @safe pure nothrow 184 { 185 return std.path.globMatch!cs(path.toRawString(), pattern); 186 } 187 188 /// Like $(FULL_STD_PATH isValidFilename), but operates on Path. 189 bool isValidFilename(in Path path) @safe pure nothrow 190 { 191 return std.path.isValidFilename(path.toRawString()); 192 } 193 194 /// Like $(FULL_STD_PATH isValidPath), but operates on Path. 195 bool isValidPath(in Path path) @safe pure nothrow 196 { 197 return std.path.isValidPath(path.toRawString()); 198 } 199 200 /// Like $(FULL_STD_PATH expandTilde), but operates on Path. 201 Path expandTilde(Path path) 202 { 203 return Path( std.path.expandTilde(path.toRawString()) ); 204 }