diff options
author | Albert Krewinkel <albert+github@zeitkraut.de> | 2017-11-20 18:37:40 +0100 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2017-11-20 09:37:40 -0800 |
commit | 849900c516f2aab60c675ae46dc87140165ef1da (patch) | |
tree | e97f2a41003950846dcbe313a4ac52f9a45f33e6 /test | |
parent | 97efed8c23414bd85801538de7df42b9f38d1fe7 (diff) | |
download | pandoc-849900c516f2aab60c675ae46dc87140165ef1da.tar.gz |
data/pandoc.lua: enable table-like behavior of attributes (#4080)
Attribute lists are represented as associative lists in Lua. Pure
associative lists are awkward to work with. A metatable is attached to
attribute lists, allowing to access and use the associative list as if
the attributes were stored in as normal key-value pair in table.
Note that this changes the way `pairs` works on attribute lists. Instead
of producing integer keys and two-element tables, the resulting iterator
function now returns the key and value of those pairs. Use `ipairs` to
get the old behavior.
Warning: the new iteration mechanism only works if pandoc has been
compiled with Lua 5.2 or later (current default: 5.3).
The `pandoc.Attr` function is altered to allow passing attributes as
key-values in a normal table. This is more convenient than having to
construct the associative list which is used internally.
Closes #4071
Diffstat (limited to 'test')
-rw-r--r-- | test/Tests/Lua.hs | 14 | ||||
-rw-r--r-- | test/lua/attr-test.lua | 6 |
2 files changed, 17 insertions, 3 deletions
diff --git a/test/Tests/Lua.hs b/test/Tests/Lua.hs index e380be6bb..8caab694c 100644 --- a/test/Tests/Lua.hs +++ b/test/Tests/Lua.hs @@ -7,9 +7,9 @@ import Test.Tasty (TestTree, localOption) import Test.Tasty.HUnit (Assertion, assertEqual, testCase) import Test.Tasty.QuickCheck (QuickCheckTests (..), ioProperty, testProperty) import Text.Pandoc.Arbitrary () -import Text.Pandoc.Builder (bulletList, doc, doubleQuoted, emph, header, - linebreak, para, plain, rawBlock, singleQuoted, - space, str, strong, (<>)) +import Text.Pandoc.Builder (bulletList, divWith, doc, doubleQuoted, emph, + header, linebreak, para, plain, rawBlock, + singleQuoted, space, str, strong, (<>)) import Text.Pandoc.Class (runIOorExplode) import Text.Pandoc.Definition (Block, Inline, Meta, Pandoc) import Text.Pandoc.Lua @@ -83,6 +83,14 @@ tests = map (localOption (QuickCheckTests 20)) "uppercase-header.lua" (doc $ header 1 "les états-unis" <> para "text") (doc $ header 1 "LES ÉTATS-UNIS" <> para "text") + + , testCase "Attribute lists are convenient to use" $ + let kv_before = [("one", "1"), ("two", "2"), ("three", "3")] + kv_after = [("one", "eins"), ("three", "3"), ("five", "5")] + in assertFilterConversion "Attr doesn't behave as expected" + "attr-test.lua" + (doc $ divWith ("", [], kv_before) (para "nil")) + (doc $ divWith ("", [], kv_after) (para "nil")) ] assertFilterConversion :: String -> FilePath -> Pandoc -> Pandoc -> Assertion diff --git a/test/lua/attr-test.lua b/test/lua/attr-test.lua new file mode 100644 index 000000000..68dc0012d --- /dev/null +++ b/test/lua/attr-test.lua @@ -0,0 +1,6 @@ +function Div (div) + div.attributes.five = ("%d"):format(div.attributes.two + div.attributes.three) + div.attributes.two = nil + div.attributes.one = "eins" + return div +end |