aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Smedegaard <dr@jones.dk>2025-05-14 21:46:37 +0200
committerJonas Smedegaard <dr@jones.dk>2025-05-14 21:46:37 +0200
commitedbc1440cf9b40d8569efd239dd30d50a337cf2f (patch)
tree05e0dfa5f0e87556bf20d7b2f76895de56b4ea25
parent9c7e8dcebbff4ae1873975852e331c35f03e676e (diff)
add function TableEmpty()
-rw-r--r--_extensions/ruc-play/semantic-markdown/semantic-markdown.lua30
1 files changed, 29 insertions, 1 deletions
diff --git a/_extensions/ruc-play/semantic-markdown/semantic-markdown.lua b/_extensions/ruc-play/semantic-markdown/semantic-markdown.lua
index 42101b5..59195c2 100644
--- a/_extensions/ruc-play/semantic-markdown/semantic-markdown.lua
+++ b/_extensions/ruc-play/semantic-markdown/semantic-markdown.lua
@@ -111,6 +111,16 @@
-- @see <https://pandoc.org/lua-filters.html#common-pitfalls>
os.setlocale 'C'
+-- flag running with older release of Pandoc
+--
+-- Some Pandoc features,
+-- notably pandoc.List:at() introduced wit Pandoc 3.5,
+-- are unavailable in older Pandoc releases still in widespread use
+-- due to complexities of keeping Haskell dependencies in sync.
+-- @see <https://bugs.debian.org/1098377>
+local PANDOC_IS_OLD <const> = PANDOC_VERSION[1] < 3
+ or (PANDOC_VERSION[1] == 3 and PANDOC_VERSION[2] < 5)
+
--- pseudo-enum table to track parser enclosure state
--- @see <https://stackoverflow.com/a/70529481/18619283>
local Enclosure = {
@@ -161,6 +171,22 @@ local CURIE_DEFAULT <const> = ":"
-- TODO: maybe support overriding context with a JSON-LD URI
-- @see <https://www.w3.org/2011/rdfa-context/rdfa-1.1>
+--- TableEmpty - check if Pandoc List contains any elements
+---
+--- Use a workaround for Pandoc releases older than 3.5
+--- where ergonomic function pandoc.List:at() is missing.
+---
+--- @param list Pandoc List to inspect
+--- @return result of inspection as boolean
+local function TableEmpty(list)
+ if PANDOC_IS_OLD then
+ local list_clone = list:clone()
+ return not list_clone:remove()
+ else
+ return list:at(1) == nil
+ end
+end
+
--- Namespaces - process RDF namespace IRI declarations
---
--- Takes as input a list of Para block elements.
@@ -422,7 +448,9 @@ local function Statements (block)
end
-- qualify completed bracketed enclosure
- elems:extend(elems_enclosed)
+ if not TableEmpty(elems_enclosed) then
+ elems:extend(elems_enclosed)
+ end
elems_enclosed = pandoc.List()
elems_unenclosed = pandoc.List()