aboutsummaryrefslogtreecommitdiff
path: root/_extensions
diff options
context:
space:
mode:
authorJonas Smedegaard <dr@jones.dk>2025-05-15 07:44:58 +0200
committerJonas Smedegaard <dr@jones.dk>2025-05-15 08:05:59 +0200
commitac039402ae08dc7754dac388227be45f82a75792 (patch)
treea1a73379c125981a1f0fe19d2e7693750d353ef5 /_extensions
parentedbc1440cf9b40d8569efd239dd30d50a337cf2f (diff)
add Enclosure state BRACED_DONE
Diffstat (limited to '_extensions')
-rw-r--r--_extensions/ruc-play/semantic-markdown/semantic-markdown.lua34
1 files changed, 28 insertions, 6 deletions
diff --git a/_extensions/ruc-play/semantic-markdown/semantic-markdown.lua b/_extensions/ruc-play/semantic-markdown/semantic-markdown.lua
index 59195c2..492c933 100644
--- a/_extensions/ruc-play/semantic-markdown/semantic-markdown.lua
+++ b/_extensions/ruc-play/semantic-markdown/semantic-markdown.lua
@@ -128,6 +128,7 @@ local Enclosure = {
BRACKETED = "1",
BRACKETED_DONE = "2",
BRACED = "3",
+ BRACED_DONE = "4",
}
-- element types representing content enclosure in Markdown
@@ -328,6 +329,23 @@ local function Statements (block)
if el.t ~= 'Str' then
elems_unenclosed:insert(el)
+ if encl == Enclosure.BRACED_DONE then
+
+ -- push post-brace string to stack
+ -- TODO: parse chars_unenclosed as Str instead
+ if chars_unenclosed:len() > 0 then
+ elems_unenclosed:insert(pandoc.Str(chars_unenclosed))
+ end
+ chars_unenclosed = ""
+ chars_enclosed = ""
+ elems:extend(elems_unenclosed)
+ elems_unenclosed = pandoc.List()
+ elems_enclosed = pandoc.List()
+ encl = Enclosure.NONE
+
+ -- fall through to parse element as unenclosed
+ end
+
if encl == Enclosure.BRACED then
elems_enclosed:insert(el)
@@ -362,6 +380,14 @@ local function Statements (block)
goto continue
end
+ -- unenclosed immediately after enclosure
+ if encl == Enclosure.BRACED_DONE then
+
+ -- TODO: parse chars_unenclosed as Str
+
+ encl = Enclosure.NONE
+ end
+
-- unenclosed
-- TODO: accept backslash except immediately before bracket
if encl == Enclosure.NONE then
@@ -455,14 +481,10 @@ local function Statements (block)
elems_enclosed = pandoc.List()
elems_unenclosed = pandoc.List()
chars_enclosed = ""
- chars_unenclosed = ""
- encl = Enclosure.NONE
+ chars_unenclosed = el.text:sub(nextpos + 1)
+ encl = Enclosure.BRACED_DONE
statement_count = statement_count + 1
- pos = nextpos + 1
-
- -- TODO: instead recursively parse remains of Str
- chars_unenclosed = chars_unenclosed..el.text:sub(pos)
end
end