On 06/21/2023 11:36 AM, BPJ wrote: > 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. > Thank you, it seems both your and mf's suggestion are similar so I should be all set. -- 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/70f542f6-e44d-c423-fa0e-22d486d998e0%40meddatainc.com.