diff options
-rw-r--r-- | data/pandoc.lua | 5 | ||||
-rw-r--r-- | test/lua/module/pandoc.lua | 6 |
2 files changed, 10 insertions, 1 deletions
diff --git a/data/pandoc.lua b/data/pandoc.lua index 8a45a39e9..859ecedc4 100644 --- a/data/pandoc.lua +++ b/data/pandoc.lua @@ -846,7 +846,10 @@ local AttributeList = { __newindex = function (t, k, v) local cur, idx = List.find_if(t, assoc_key_equals(k)) - if v == nil then + if v == nil and not cur then + -- deleted key does not exists in list + return + elseif v == nil then table.remove(t, idx) elseif cur then cur[2] = v diff --git a/test/lua/module/pandoc.lua b/test/lua/module/pandoc.lua index 0bb4af9aa..1ecd1f609 100644 --- a/test/lua/module/pandoc.lua +++ b/test/lua/module/pandoc.lua @@ -62,6 +62,12 @@ return { local assoc_list = setmetatable(attributes, nil) assert.are_same(assoc_list, {{'b', '2'}}) end), + test('remains unchanged if deleted key did not exist', function () + local assoc_list = pandoc.List:new {{'alpha', 'x'}, {'beta', 'y'}} + local attributes = pandoc.Attr('', {}, assoc_list:clone()).attributes + attributes.a = nil + assert.are_same(pandoc.List:new(attributes), assoc_list) + end), test('gives key-value pairs when iterated-over', function () local attributes = {width = '11', height = '22', name = 'test'} local attr = pandoc.Attr('', {}, attributes) |