aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Smedegaard <dr@jones.dk>2025-06-22 19:20:07 +0200
committerJonas Smedegaard <dr@jones.dk>2025-06-23 00:42:46 +0200
commit48829899b6b2846431d62d31f618901c43b6876a (patch)
tree67b505947c28d186317dbe7c4ee07f8012632189
parent4489116b79d803c573609b9b9b3c55e56979a798 (diff)
cover brace-only block
-rw-r--r--sem-md/sem-md.lua64
1 files changed, 59 insertions, 5 deletions
diff --git a/sem-md/sem-md.lua b/sem-md/sem-md.lua
index 8076da2..aea1422 100644
--- a/sem-md/sem-md.lua
+++ b/sem-md/sem-md.lua
@@ -221,6 +221,7 @@ local function newIffy()
elems = pandoc.List(),
elems_unenclosed = pandoc.List(),
elems_enclosed = pandoc.List(),
+ elems_before = pandoc.List(),
-- strings of pending unenclosed/enclosed chars
chars_unenclosed = "",
@@ -324,6 +325,22 @@ local function newIffy()
self.elems_enclosed = pandoc.List()
end
+ local enclose_as_RawBlock = function()
+ elementize_chars_enclosed()
+ self.chars_unenclosed = ""
+ append_elems(self.elems_before, pandoc.RawBlock(SHORTNAME,
+ pandoc.utils.stringify(self.elems_enclosed)))
+ self.elems_unenclosed = pandoc.List()
+ self.elems_enclosed = pandoc.List()
+ end
+
+ local enclose_as_nil = function()
+ self.chars_enclosed = ""
+ self.chars_unenclosed = ""
+ self.elems_unenclosed = pandoc.List()
+ self.elems_enclosed = pandoc.List()
+ end
+
local disqualify = function()
disclose()
end
@@ -338,6 +355,16 @@ local function newIffy()
self.block_is_mangled = true
end
+ local qualify_enclosed_as_RawBlock = function()
+ enclose_as_RawBlock()
+ self.block_is_mangled = true
+ end
+
+ local qualify_enclosed_as_nil = function()
+ enclose_as_nil()
+ self.block_is_mangled = true
+ end
+
local block_if_mangled = function(block)
if not self.block_is_mangled then
return nil
@@ -346,7 +373,13 @@ local function newIffy()
disclose()
block.content = self.elems
- return block
+ if TableEmpty(self.elems_before) then
+ if TableEmpty(self.elems) then
+ return {}
+ end
+ return block
+ end
+ return self.elems_before, block
end
return {
@@ -357,6 +390,7 @@ local function newIffy()
elementize_chars_disclosed = elementize_chars_disclosed,
elementize_chars_enclosed = elementize_chars_enclosed,
append_chars_unenclosed = append_chars_unenclosed,
+ append_chars_enclosed = append_chars_enclosed,
append_chars_any = append_chars_any,
append_elems_unenclosed = append_elems_unenclosed,
append_elems_enclosed = append_elems_enclosed,
@@ -364,6 +398,8 @@ local function newIffy()
disqualify = disqualify,
qualify_unenclosed = qualify_unenclosed,
qualify_enclosed = qualify_enclosed,
+ qualify_enclosed_as_RawBlock = qualify_enclosed_as_RawBlock,
+ qualify_enclosed_as_nil = qualify_enclosed_as_nil,
block_if_mangled = block_if_mangled
}
end
@@ -645,10 +681,28 @@ local function Statements (block)
-- braced-only enclosure at beginning of block
elseif iffy.has_no_non_brace_content() then
- iffy.append_elems_enclosed(pandoc.RawInline(SHORTNAME,
- str_inside))
- iffy.qualify_enclosed()
- iffy.set_state(BRACED_DONE)
+
+ -- brace-only block
+ if is_last_significant_element(block.content, i)
+ and str_remains:len() == 0
+ then
+
+ -- TODO: filter out conditional to target format instead
+ iffy.append_chars_enclosed(str_inside)
+ if block.t == "Plain" then
+ iffy.qualify_enclosed_as_nil()
+ else
+ iffy.qualify_enclosed_as_RawBlock()
+ end
+ iffy.set_state(BRACED_DONE)
+
+ -- braced-only enclosure at beginning of block
+ else
+ iffy.append_elems_enclosed(pandoc.RawInline(SHORTNAME,
+ str_inside))
+ iffy.qualify_enclosed()
+ iffy.set_state(BRACED_DONE)
+ end
-- braced-only enclosure at end of block
elseif is_last_significant_element(block.content, i)