From f5f481d3932c66a1fddcfdc74a5c8bfe253a4a0e Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Fri, 31 May 2019 21:32:12 -0400 Subject: Add utility functions: * indexOfAll * expander * short_version --- source/util.d | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) (limited to 'source/util.d') diff --git a/source/util.d b/source/util.d index a33751e..8f2ad8d 100644 --- a/source/util.d +++ b/source/util.d @@ -1,4 +1,6 @@ module util; +import std.ascii; +import std.array; import std.stdio; import std.string; import std.process; @@ -154,3 +156,50 @@ string pytest_xunit2(string filename) { return result; } + + +ulong[] indexOfAll(string s, char ch) { + ulong[] result; + for (ulong i = 0; i < s.length; i++) { + if (s[i] == ch) { + result ~= i; + } + } + return result; +} + + +string expander(string[string] aa, string name, char delim = '$') { + string s = aa[name].dup; + ulong[] needles = indexOfAll(s, delim); + string[string] found; + + foreach (needle; needles) { + string tmp = ""; + for (ulong i = needle; i < s.length; i++) { + if (s[i] == delim) continue; + else if (s[i] == '{' || s[i] == '}') continue; + else if (!s[i].isAlphaNum && s[i] != '_' ) break; + tmp ~= s[i]; + } + writeln(tmp); + found[tmp] = aa.get(tmp, ""); + } + + foreach (pair; found.byPair) { + s = s.replace(delim ~ pair.key, pair.value) + .replace(format("%c{%s}", delim, pair.key), pair.value); + } + + return s; +} + + +string short_version(string vrs) { + string tmp = vrs.dup; + tmp = tmp.replace(".", ""); + if (tmp.length > 2) { + tmp = tmp[0 .. 2]; + } + return tmp; +} -- cgit