1. You have two lists, the original/old one and the new one. 2. Push elements from the old list onto the new list until you get to the first element which should go into the new nested div. 3. Create a third list and push elements from the old list onto that list until you get to the last element which should go into the div. 4. Create a div from the third list. 5. Push the div onto the new list. 6. Either repeat steps 2–5 or resume pushing elements from the old list onto the new list until you get to the last element. ``````lua function Pandoc(doc) local old = doc.blocks local new = pandoc.Blocks({ }) local div = false local i = 0 local elem = nil while i < #old do i = i + 1 elem = old[i] if test_div_start_condition(elem) then div = pandoc.Blocks({ elem }) elseif test_div_end_condition(elem) then if div then div[#div + 1] = elem new[#new + 1] = pandoc.Div(div, { class = 'foo', bar = 'baz' }) div = nil -- -- If this is the only div -- while i < #old do -- i = i + 1 -- new[#new + 1] = = old[i] -- end else new[#new + 1] = elem end elseif div then div[#div + 1] = elem else new[#new + 1] = elem end end doc.blocks = new return doc end `````` Den tis 20 juni 2023 02:16H skrev: > On June 19, 2023 6:11:35 PM EDT, H wrote: > >What is the "best" way of wrapping parts of an existing document in > >
in a filter? > > > >Using insert.table(existingtable, pandoc.Div(existingtextblocks)) does > >not work since the existing text blocks get duplicated in the output. > > > >I see two options but there might be others: > > > >- Surround existing text blocks with pandoc.RawInline(1, 'html, > >'
') and pandoc.RawInLine('html', '
'). > > > >- Create a new table and use insert.table(newtable, > >pandoc.Div(existingtextblock)) and also insert the rest of the > >document. > > > >Are there other options? > > Replying to my own question, it seems the most "elegant" way of > accomplishing this requires this to be done be in two stages: > > - First, delete the blocks in question from the block list table, eg > doc.blocks. > - Second, insert them into the same table using pandoc.Div(). > > Unfortunately it seems table.delete() does not accept a list of blocks, > only one block at a time, pandoc.Div, on the other hand, accepts a table. > Here is a code example when I was trying it out: > > local temp = {} > for i = 3, 1, -1 do > table.insert(temp, table.remove(doc.blocks, 5)) > end > > table.insert(doc.blocks, 2, pandoc.Div(temp)) > > The above code removes blocks 5 through 7 from doc.blocks, then inserts > them, in the same order but surrounded by
, in position 2. > > If there is a better way of accomplishing this, I would appreciate hearing > it. > > -- > You received this message because you are subscribed to the Google Groups > "pandoc-discuss" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to pandoc-discuss+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To view this discussion on the web visit > https://groups.google.com/d/msgid/pandoc-discuss/AC708553-331A-45D3-A618-EAA8BB7784A5%40meddatainc.com > . > -- You received this message because you are subscribed to the Google Groups "pandoc-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to pandoc-discuss+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To view this discussion on the web visit https://groups.google.com/d/msgid/pandoc-discuss/CADAJKhBZGdihMMgb%3D2_9rT04RsobJyu%2B48HxtO5755ADPcnZBQ%40mail.gmail.com.