diff options
author | Albert Krewinkel <albert@zeitkraut.de> | 2021-11-02 16:49:50 +0100 |
---|---|---|
committer | Albert Krewinkel <albert@zeitkraut.de> | 2021-11-02 16:49:50 +0100 |
commit | 210e4c98b0d09dd8e25c108dda14fdb17ba90192 (patch) | |
tree | 9c0fc244c6761a23f8c13406a8c3f3790151af84 | |
parent | 3a0ac52f7b23b555a7eeb9e3df10536b809f95ac (diff) | |
download | pandoc-210e4c98b0d09dd8e25c108dda14fdb17ba90192.tar.gz |
Lua: allow to compare, show Citation values
Comparisons of Citation values are performed in Haskell; values are
equal if they represent the same Haskell value. Converting a Citation
value to a string now yields its native Haskell string representation.
-rw-r--r-- | src/Text/Pandoc/Lua/Marshaling/AST.hs | 13 | ||||
-rw-r--r-- | test/lua/module/pandoc.lua | 16 |
2 files changed, 28 insertions, 1 deletions
diff --git a/src/Text/Pandoc/Lua/Marshaling/AST.hs b/src/Text/Pandoc/Lua/Marshaling/AST.hs index 883a6dce2..469dd4285 100644 --- a/src/Text/Pandoc/Lua/Marshaling/AST.hs +++ b/src/Text/Pandoc/Lua/Marshaling/AST.hs @@ -111,7 +111,18 @@ instance Pushable Block where push = pushBlock typeCitation :: LuaError e => DocumentedType e Citation -typeCitation = deftype "Citation" [] +typeCitation = deftype "Citation" + [ operation Eq $ lambda + ### liftPure2 (==) + <#> parameter (optional . peekCitation) "Citation" "a" "" + <#> parameter (optional . peekCitation) "Citation" "b" "" + =#> functionResult pushBool "boolean" "true iff the citations are equal" + + , operation Tostring $ lambda + ### liftPure show + <#> parameter peekCitation "Citation" "citation" "" + =#> functionResult pushString "string" "native Haskell representation" + ] [ property "id" "citation ID / key" (pushText, citationId) (peekText, \citation cid -> citation{ citationId = cid }) diff --git a/test/lua/module/pandoc.lua b/test/lua/module/pandoc.lua index a0b888c74..4792e0949 100644 --- a/test/lua/module/pandoc.lua +++ b/test/lua/module/pandoc.lua @@ -481,6 +481,22 @@ return { end) }, group 'Other types' { + group 'Citation' { + test('checks equality by comparing Haskell values', function() + assert.are_equal( + pandoc.Citation('a', pandoc.NormalCitation), + pandoc.Citation('a', pandoc.NormalCitation) + ) + assert.is_falsy( + pandoc.Citation('a', pandoc.NormalCitation) == + pandoc.Citation('a', pandoc.AuthorInText) + ) + assert.is_falsy( + pandoc.Citation('a', pandoc.NormalCitation) == + pandoc.Citation('b', pandoc.NormalCitation) + ) + end), + }, group 'SimpleTable' { test('can access properties', function () local spc = pandoc.Space() |