diff options
| author | Jonas Smedegaard <dr@jones.dk> | 2025-05-15 09:42:46 +0200 |
|---|---|---|
| committer | Jonas Smedegaard <dr@jones.dk> | 2025-05-15 13:09:16 +0200 |
| commit | eb85c598f8e64bb88f534f63b6d953de0c69911c (patch) | |
| tree | 0177117eabf6c4ad4ba94f9056873b7c3c88e3cb /_extensions | |
| parent | 6b190baf6ba20b545e0311282f34c81887526ddd (diff) | |
cover braced-only enclosure
Diffstat (limited to '_extensions')
| -rw-r--r-- | _extensions/ruc-play/semantic-markdown/semantic-markdown.lua | 48 |
1 files changed, 43 insertions, 5 deletions
diff --git a/_extensions/ruc-play/semantic-markdown/semantic-markdown.lua b/_extensions/ruc-play/semantic-markdown/semantic-markdown.lua index 505b296..bcd8f13 100644 --- a/_extensions/ruc-play/semantic-markdown/semantic-markdown.lua +++ b/_extensions/ruc-play/semantic-markdown/semantic-markdown.lua @@ -332,6 +332,7 @@ local function Statements (block) if encl == Enclosure.BRACED_DONE then -- push post-brace string to stack + -- and disqualify brace-only end-of-block enclosure -- TODO: parse chars_unenclosed as Str instead if chars_unenclosed:len() > 0 then elems_unenclosed:insert(pandoc.Str(chars_unenclosed)) @@ -383,21 +384,30 @@ local function Statements (block) -- unenclosed immediately after enclosure if encl == Enclosure.BRACED_DONE then + -- push post-brace string to stack + -- and disqualify brace-only end-of-block enclosure -- TODO: parse chars_unenclosed as Str - + 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 end -- unenclosed -- TODO: accept backslash except immediately before bracket if encl == Enclosure.NONE then - local _, nextpos, s = el.text:find("^([^%[\\]*)") + local _, nextpos, s = el.text:find("^([^%[{\\]*)") pos = nextpos and nextpos + 1 or pos + 1 chars_unenclosed = chars_unenclosed..s - -- entering bracketed enclosure + -- entering bracketed or braced enclosure local t = el.text:sub(pos, pos) - if t == "[" then + if t == "[" or t == "{" then -- qualify unenclosed elements elems:extend(elems_unenclosed) @@ -410,7 +420,11 @@ local function Statements (block) pos = pos + 1 chars_unenclosed = chars_unenclosed..t chars_enclosed = "" - encl = Enclosure.BRACKETED + if t == "[" then + encl = Enclosure.BRACKETED + elseif t == "{" then + encl = Enclosure.BRACED + end end end @@ -477,6 +491,22 @@ local function Statements (block) -- qualify completed bracketed enclosure if not TableEmpty(elems_enclosed) then elems:extend(elems_enclosed) + + -- qualify braced-only enclosure at beginning of block + elseif (TableEmpty(elems_unenclosed) + and (chars_unenclosed:len() == 0 or chars_unenclosed == "{")) + then + elems:extend(elems_enclosed) + + -- postpone braced-only enclosure maybe at end of block + else + chars_unenclosed = chars_unenclosed..el.text:sub(pos, nextpos) + elems_unenclosed:insert(pandoc.Str(chars_unenclosed)) + chars_unenclosed = el.text:sub(nextpos + 1) + chars_enclosed = el.text:sub(nextpos + 1) + encl = Enclosure.BRACED_DONE + + goto continue end elems_enclosed = pandoc.List() @@ -503,6 +533,14 @@ local function Statements (block) ::continue:: end + -- qualify brace-only enclosure at end of block + if encl == Enclosure.BRACED_DONE + and not TableEmpty(elems_enclosed) + then + elems:extend(elems_enclosed) + statement_count = statement_count + 1 + end + -- return altered stack if it contains complete enclosures if statement_count > 0 then |
