# HG changeset patch # User Matthew Wild # Date 1599667833 -3600 # Node ID af1e3b7d9ea3e8cd4dc274953b51d6ac663ba9f5 # Parent dd3b1b9d867d3044e1936e69c82f9ad2d8948608 util.interpolation: Add '~' as the opposite of '&' (render sub-block if falsy) One more magic character consumed! diff -r dd3b1b9d867d -r af1e3b7d9ea3 spec/util_interpolation_spec.lua --- a/spec/util_interpolation_spec.lua Tue Sep 08 22:50:43 2020 +0200 +++ b/spec/util_interpolation_spec.lua Wed Sep 09 17:10:33 2020 +0100 @@ -32,7 +32,15 @@ local expect_map = [[ FOO: bar ]] - +local template_not = [[ +{thing~Thing is nil}{thing&Thing is not nil} +]] +local expect_not_true = [[ +Thing is not nil +]] +local expect_not_nil = [[ +Thing is nil +]] describe("util.interpolation", function () it("renders", function () local render = require "util.interpolation".new("%b{}", string.upper, { sort = function (t) table.sort(t) return t end }); @@ -43,5 +51,7 @@ assert.equal(expect_func_pipe, render(template_func_pipe, { foo = { "c", "a", "d", "b", } })); -- assert.equal("", render(template_func_pipe, { foo = nil })); -- FIXME assert.equal(expect_map, render(template_map, { foo = { foo = "bar" } })); + assert.equal(expect_not_true, render(template_not, { thing = true })); + assert.equal(expect_not_nil, render(template_not, { thing = nil })); end); end); diff -r dd3b1b9d867d -r af1e3b7d9ea3 util/interpolation.lua --- a/util/interpolation.lua Tue Sep 08 22:50:43 2020 +0200 +++ b/util/interpolation.lua Wed Sep 09 17:10:33 2020 +0100 @@ -64,6 +64,9 @@ elseif opt == '&' then if not value then return ""; end return render(s_sub(block, e), values); + elseif opt == '~' then + if value then return ""; end + return render(s_sub(block, e), values); elseif opt == '?' and not value then return render(s_sub(block, e), values); elseif value ~= nil then