diff options
author | github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> | 2022-10-21 00:05:50 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-21 00:05:50 +0000 |
commit | c43416535429396cc99bccf16e7fbe4c0adea4cf (patch) | |
tree | 7ff62b70be50a592d302fe76f007f94c5043751a /lib | |
parent | e674dd40b315eec88ac24691145387c202983eb6 (diff) | |
parent | dd2351ee2f2671d2f2216dd843e4997060eb9576 (diff) | |
download | nixlib-c43416535429396cc99bccf16e7fbe4c0adea4cf.tar nixlib-c43416535429396cc99bccf16e7fbe4c0adea4cf.tar.gz nixlib-c43416535429396cc99bccf16e7fbe4c0adea4cf.tar.bz2 nixlib-c43416535429396cc99bccf16e7fbe4c0adea4cf.tar.lz nixlib-c43416535429396cc99bccf16e7fbe4c0adea4cf.tar.xz nixlib-c43416535429396cc99bccf16e7fbe4c0adea4cf.tar.zst nixlib-c43416535429396cc99bccf16e7fbe4c0adea4cf.zip |
Merge master into staging-next
Diffstat (limited to 'lib')
-rw-r--r-- | lib/ascii-table.nix | 96 | ||||
-rw-r--r-- | lib/strings.nix | 38 | ||||
-rw-r--r-- | lib/tests/misc.nix | 15 |
3 files changed, 149 insertions, 0 deletions
diff --git a/lib/ascii-table.nix b/lib/ascii-table.nix new file mode 100644 index 000000000000..c564e12bcc6f --- /dev/null +++ b/lib/ascii-table.nix @@ -0,0 +1,96 @@ +{ " " = 32; + "!" = 33; + "\"" = 34; + "#" = 35; + "$" = 36; + "%" = 37; + "&" = 38; + "'" = 39; + "(" = 40; + ")" = 41; + "*" = 42; + "+" = 43; + "," = 44; + "-" = 45; + "." = 46; + "/" = 47; + "0" = 48; + "1" = 49; + "2" = 50; + "3" = 51; + "4" = 52; + "5" = 53; + "6" = 54; + "7" = 55; + "8" = 56; + "9" = 57; + ":" = 58; + ";" = 59; + "<" = 60; + "=" = 61; + ">" = 62; + "?" = 63; + "@" = 64; + "A" = 65; + "B" = 66; + "C" = 67; + "D" = 68; + "E" = 69; + "F" = 70; + "G" = 71; + "H" = 72; + "I" = 73; + "J" = 74; + "K" = 75; + "L" = 76; + "M" = 77; + "N" = 78; + "O" = 79; + "P" = 80; + "Q" = 81; + "R" = 82; + "S" = 83; + "T" = 84; + "U" = 85; + "V" = 86; + "W" = 87; + "X" = 88; + "Y" = 89; + "Z" = 90; + "[" = 91; + "\\" = 92; + "]" = 93; + "^" = 94; + "_" = 95; + "`" = 96; + "a" = 97; + "b" = 98; + "c" = 99; + "d" = 100; + "e" = 101; + "f" = 102; + "g" = 103; + "h" = 104; + "i" = 105; + "j" = 106; + "k" = 107; + "l" = 108; + "m" = 109; + "n" = 110; + "o" = 111; + "p" = 112; + "q" = 113; + "r" = 114; + "s" = 115; + "t" = 116; + "u" = 117; + "v" = 118; + "w" = 119; + "x" = 120; + "y" = 121; + "z" = 122; + "{" = 123; + "|" = 124; + "}" = 125; + "~" = 126; +} diff --git a/lib/strings.nix b/lib/strings.nix index 295d98900e99..be217cb06469 100644 --- a/lib/strings.nix +++ b/lib/strings.nix @@ -185,6 +185,16 @@ rec { */ makeBinPath = makeSearchPathOutput "bin" "bin"; + /* Normalize path, removing extranous /s + + Type: normalizePath :: string -> string + + Example: + normalizePath "/a//b///c/" + => "/a/b/c/" + */ + normalizePath = s: (builtins.foldl' (x: y: if y == "/" && hasSuffix "/" x then x else x+y) "" (splitString "" s)); + /* Depending on the boolean `cond', return either the given string or the empty string. Useful to concatenate against a bigger string. @@ -294,6 +304,21 @@ rec { map f (stringToCharacters s) ); + /* Convert char to ascii value, must be in printable range + + Type: charToInt :: string -> int + + Example: + charToInt "A" + => 65 + charToInt "(" + => 40 + + */ + charToInt = let + table = import ./ascii-table.nix; + in c: builtins.getAttr c table; + /* Escape occurrence of the elements of `list` in `string` by prefixing it with a backslash. @@ -305,6 +330,19 @@ rec { */ escape = list: replaceChars list (map (c: "\\${c}") list); + /* Escape occurence of the element of `list` in `string` by + converting to its ASCII value and prefixing it with \\x. + Only works for printable ascii characters. + + Type: escapeC = [string] -> string -> string + + Example: + escapeC [" "] "foo bar" + => "foo\\x20bar" + + */ + escapeC = list: replaceChars list (map (c: "\\x${ toLower (lib.toHexString (charToInt c))}") list); + /* Quote string to be used safely within the Bourne shell. Type: escapeShellArg :: string -> string diff --git a/lib/tests/misc.nix b/lib/tests/misc.nix index 74020bc7c8e5..8e0cf1f45bb6 100644 --- a/lib/tests/misc.nix +++ b/lib/tests/misc.nix @@ -312,6 +312,21 @@ runTests { expected = true; }; + testNormalizePath = { + expr = strings.normalizePath "//a/b//c////d/"; + expected = "/a/b/c/d/"; + }; + + testCharToInt = { + expr = strings.charToInt "A"; + expected = 65; + }; + + testEscapeC = { + expr = strings.escapeC [ " " ] "Hello World"; + expected = "Hello\\x20World"; + }; + # LISTS testFilter = { |