diff options
| author | Jonas Smedegaard <dr@jones.dk> | 2025-06-22 19:20:07 +0200 |
|---|---|---|
| committer | Jonas Smedegaard <dr@jones.dk> | 2025-06-23 00:42:46 +0200 |
| commit | 48829899b6b2846431d62d31f618901c43b6876a (patch) | |
| tree | 67b505947c28d186317dbe7c4ee07f8012632189 | |
| parent | 4489116b79d803c573609b9b9b3c55e56979a798 (diff) | |
cover brace-only block
| -rw-r--r-- | sem-md/sem-md.lua | 64 |
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) |
