public inbox archive for pandoc-discuss@googlegroups.com
 help / color / mirror / Atom feed
From: BPJ <melroch-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: pandoc-discuss <pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
Subject: Re: Wrapping sections of existing document in <div></div>
Date: Wed, 21 Jun 2023 17:36:48 +0200	[thread overview]
Message-ID: <CADAJKhBZGdihMMgb=2_9rT04RsobJyu+48HxtO5755ADPcnZBQ@mail.gmail.com> (raw)
In-Reply-To: <AC708553-331A-45D3-A618-EAA8BB7784A5-FcZObrvlYduBUy7/sJONFg@public.gmane.org>

[-- Attachment #1: Type: text/plain, Size: 3927 bytes --]

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 <agents-FcZObrvlYduBUy7/sJONFg@public.gmane.org> skrev:

> On June 19, 2023 6:11:35 PM EDT, H <agents-FcZObrvlYduBUy7/sJONFg@public.gmane.org> wrote:
> >What is the "best" way of wrapping parts of an existing document in
> ><div></div> 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,
> >'<div>') and pandoc.RawInLine('html', '</div>').
> >
> >- 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 <div></div>, 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.

[-- Attachment #2: Type: text/html, Size: 6071 bytes --]

  parent reply	other threads:[~2023-06-21 15:36 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-19 22:11 H
     [not found] ` <e3258495-d762-2f54-cff3-a2607261bcf7-FcZObrvlYduBUy7/sJONFg@public.gmane.org>
2023-06-20  0:14   ` H
     [not found]     ` <AC708553-331A-45D3-A618-EAA8BB7784A5-FcZObrvlYduBUy7/sJONFg@public.gmane.org>
2023-06-20 10:37       ` mf
     [not found]         ` <e42adc8d-f75c-4b91-7777-cc162e157c64-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2023-06-21  0:21           ` H
2023-06-21 15:36       ` BPJ [this message]
     [not found]         ` <CADAJKhBZGdihMMgb=2_9rT04RsobJyu+48HxtO5755ADPcnZBQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2023-06-21 22:58           ` H

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CADAJKhBZGdihMMgb=2_9rT04RsobJyu+48HxtO5755ADPcnZBQ@mail.gmail.com' \
    --to=melroch-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
    --cc=pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).