From 2647605a32f36033ea567a2831dbe332978fd95b Mon Sep 17 00:00:00 2001 From: tv Date: Sat, 16 Feb 2019 15:39:17 +0100 Subject: lib.warnOldVersion: init --- lib/default.nix | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'lib') diff --git a/lib/default.nix b/lib/default.nix index 347830e..75086f8 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -145,6 +145,11 @@ let in filter (x: x != []) ([acc.chunk] ++ acc.chunks); + warnOldVersion = oldName: newName: + if compareVersions oldName newName != -1 then + trace "Upstream `${oldName}' gets overridden by `${newName}'." newName + else + newName; }; in -- cgit v1.2.3 From fe08236da659ff27eda98c6170fabbf981455c80 Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 20 Mar 2015 10:36:12 +0100 Subject: lib.xml: init --- lib/default.nix | 1 + lib/xml.nix | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 lib/xml.nix (limited to 'lib') diff --git a/lib/default.nix b/lib/default.nix index 75086f8..8ba55b5 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -9,6 +9,7 @@ let krops = import ../submodules/krops/lib; shell = import ./shell.nix { inherit lib; }; types = nixpkgs-lib.types // import ./types.nix { inherit lib; }; + xml = import ./xml.nix { inherit lib; }; eq = x: y: x == y; ne = x: y: x != y; diff --git a/lib/xml.nix b/lib/xml.nix new file mode 100644 index 0000000..92f5521 --- /dev/null +++ b/lib/xml.nix @@ -0,0 +1,84 @@ +{ lib }: +with lib; +with builtins; +rec { + + # Use `term` to construct XML. + # + # Examples: + # + # (term "bool" null null) + # (term "cool" null []) + # (term "fool" { hurr = "durr"; } null) + # (term "hool" null [ + # (term "tool" null null) + # ]) + # + # See `render` for how these get transformed into actuall XML documents. + # + term = name: attrs: content: { + inherit name attrs content; + }; + + empty = term null null null; + + # Ref http://www.w3.org/TR/xml/#syntax + # + # Example: + # + # (quote "") #===> <cheez!> + # + quote = let + sub = { + "&" = "&"; + "<" = "<"; + ">" = ">"; + "'" = "'"; + "\"" = """; + }; + in + stringAsChars (c: sub.${c} or c); + + # Turn an XML element to an XML document string. + doc = t: + "${render t}"; + + # Render an XML element to a string. + # + # Rendering `empty` yields the empty string. + # + # Examples: + # + # (term "bool" null null) #===> + # (term "cool" null []) #===> + # (term "fool" { hurr = "durr"; } null) #===> + # (term "hool" null [ + # (term "tool" null null) + # ]) #===> + # + render = let + render-attrs = attrs: + getAttr (typeOf attrs) { + null = ""; + set = concatStrings (mapAttrsToList (n: v: " ${n}=\"${v}\"") attrs); + }; + + render-content = content: + getAttr (typeOf content) { + bool = toJSON content; + int = toJSON content; + list = concatMapStrings render content; + string = content; + }; + in + { name, attrs, content }: + if name == null + then "" + else let + attrs' = render-attrs attrs; + content' = render-content content; + in + if content == null + then "<${name}${attrs'}/>" + else "<${name}${attrs'}>${content'}"; +} -- cgit v1.2.3 From 3a25fe69295e477ea103ab7010e2a43e37191c62 Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 20 Mar 2015 10:58:11 +0100 Subject: lib.xml.render-term: quote strings --- lib/xml.nix | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/xml.nix b/lib/xml.nix index 92f5521..1605244 100644 --- a/lib/xml.nix +++ b/lib/xml.nix @@ -68,12 +68,16 @@ rec { bool = toJSON content; int = toJSON content; list = concatMapStrings render content; - string = content; + string = quote content; }; in { name, attrs, content }: + # XXX we're currently encoding too much information with `null`.. if name == null - then "" + then + if content == null + then "" + else content else let attrs' = render-attrs attrs; content' = render-content content; -- cgit v1.2.3 From a2ebc2cb456e9ad3ece900ac88be69c250dff073 Mon Sep 17 00:00:00 2001 From: tv Date: Sat, 16 Feb 2019 19:18:04 +0100 Subject: lib.types.filename.check: remove unnecessary () --- lib/types.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/types.nix b/lib/types.nix index 17c1688..45c0098 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -539,7 +539,7 @@ rec { # POSIX.1‐2013, 3.278 Portable Filename Character Set filename = mkOptionType { name = "POSIX filename"; - check = test "([0-9A-Za-z._])[0-9A-Za-z._-]*"; + check = test "[0-9A-Za-z._][0-9A-Za-z._-]*"; merge = mergeOneOption; }; -- cgit v1.2.3