From 0b5b8b0be6f3128df6453ea6667db9d35d396f94 Mon Sep 17 00:00:00 2001 From: Kyle Gunger Date: Mon, 5 Dec 2022 00:59:19 -0500 Subject: Path handling --- tnslc/paths.tnsl | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 tnslc/paths.tnsl (limited to 'tnslc/paths.tnsl') diff --git a/tnslc/paths.tnsl b/tnslc/paths.tnsl new file mode 100644 index 0000000..93c14f5 --- /dev/null +++ b/tnslc/paths.tnsl @@ -0,0 +1,80 @@ +# Requires util.tnsl +;struct Path { + {}{}charp dirs, + {}charp file +} + +/; method Path + /; rel_file ({}charp rpath) [Path] + ;{}{}charp spl = split(rpath, '/') + ;Path out = {{}, ""} + + /; loop (int i = 0; i < len (self.dirs)) [i++] + ;out.dirs.append(self.dirs{i}) + ;/ + + /; loop (int i = 0; i < len spl - 1) [i++] + ;out.dirs.append(spl{i}) + ;/ + + ;out.file = spl{len spl - 1} + ;return out + ;/ + + /; full_path [{}charp] + ;{}charp out = join((self.dirs), '/') + ;out.append('/') + ;add_strings(~out, ~(self.file)) + ;return out + ;/ + + /; open_w [tnsl.io.File] + ;return tnsl.io.writeFile(self.full_path()) + ;/ + + /; open_r [tnsl.io.File] + ;return tnsl.io.readFile(self.full_path()) + ;/ + +;/ + +/; split({}charp str, charp c) [{}{}charp] + ;{}{}charp out = {} + ;{}charp tmp = "" + + /; loop (int i = 0; i < len str) [i++] + /; if (str{i} == c) + ;out.append(tmp) + ;{}charp tmp = "" + ;true + ;; else + ;tmp.append(str{i}) + ;/ + ;/ + ;out.append(tmp) + + ;return out +;/ + +/; join ({}{}charp s, charp j) [{}charp] + ;{}charp out = "" + /; loop (int i = 0; i < len s) [i++] + /; loop (int j = 0; j < len s{i}) [j++] + ;out.append(s{i}{j}) + ;/ + /; if (i < len s - 1) + ;out.append(j) + ;/ + ;/ + ;return out +;/ + +/; path_from_str ({}charp f) [Path] + ;{}{}charp spl = split(f, '/') + ;Path out = {{}, ""} + /; loop (int i = 0; i < len spl - 1) [i++] + ;out.dirs.append(spl{i}) + ;/ + ;out.file = spl{len spl - 1} + ;return out +;/ -- cgit v1.2.3