aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/pandoc.lua5
-rw-r--r--test/lua/module/pandoc.lua6
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)