introduce the stringAsChars ans replaceChars functions.
svn path=/nixpkgs/trunk/; revision=17670
This commit is contained in:
parent
bbb4ce1dd7
commit
915fa6a08f
|
@ -70,15 +70,36 @@ rec {
|
||||||
else [(substring 0 1 s)] ++ stringToCharacters (substring 1 (builtins.sub l 1) s);
|
else [(substring 0 1 s)] ++ stringToCharacters (substring 1 (builtins.sub l 1) s);
|
||||||
|
|
||||||
|
|
||||||
|
# Manipulate a string charcater by character and replace them by strings
|
||||||
|
# before concatenating the results.
|
||||||
|
stringAsChars = f: s:
|
||||||
|
concatStrings (
|
||||||
|
map f (stringToCharacters s)
|
||||||
|
);
|
||||||
|
|
||||||
# same as vim escape function.
|
# same as vim escape function.
|
||||||
# Each character contained in list is prefixed by "\"
|
# Each character contained in list is prefixed by "\"
|
||||||
escape = list : string :
|
escape = list : string :
|
||||||
lib.concatStrings (map (c: if lib.elem c list then "\\${c}" else c) (stringToCharacters string));
|
stringAsChars (c: if lib.elem c list then "\\${c}" else c) string;
|
||||||
|
|
||||||
# still ugly slow. But more correct now
|
# still ugly slow. But more correct now
|
||||||
# [] for zsh
|
# [] for zsh
|
||||||
escapeShellArg = lib.escape (stringToCharacters "\\ ';$`()|<>\t*[]");
|
escapeShellArg = lib.escape (stringToCharacters "\\ ';$`()|<>\t*[]");
|
||||||
|
|
||||||
|
# replace characters by their substitutes. This function is equivalent to
|
||||||
|
# the `tr' command except that one character can be replace by multiple
|
||||||
|
# ones. e.g.,
|
||||||
|
# replaceChars ["<" ">"] ["<" ">"] "<foo>" returns "<foo>".
|
||||||
|
replaceChars = del: new: s:
|
||||||
|
let
|
||||||
|
subst = c:
|
||||||
|
(lib.fold
|
||||||
|
(sub: res: if sub.fst == c then sub else res)
|
||||||
|
{fst = c; snd = c;} (lib.zipLists del new)
|
||||||
|
).snd;
|
||||||
|
in
|
||||||
|
stringAsChars subst s;
|
||||||
|
|
||||||
# Compares strings not requiring context equality
|
# Compares strings not requiring context equality
|
||||||
# Obviously, a workaround but works on all Nix versions
|
# Obviously, a workaround but works on all Nix versions
|
||||||
eqStrings = a: b: (a+(substring 0 0 b)) == ((substring 0 0 a)+b);
|
eqStrings = a: b: (a+(substring 0 0 b)) == ((substring 0 0 a)+b);
|
||||||
|
|
Loading…
Reference in New Issue