public inbox archive for pandoc-discuss@googlegroups.com
 help / color / mirror / Atom feed
From: Bastien DUMONT <bastien.dumont-VwIFZPTo/vqsTnJN9+BGXg@public.gmane.org>
To: pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Subject: Re: Lua Filter: Get to parent of current element?
Date: Wed, 10 May 2023 13:27:52 +0000	[thread overview]
Message-ID: <ZFub2OlhnMQdR4zM@localhost> (raw)
In-Reply-To: <b4305519-9dbf-4254-a3d7-7b9e1dab9d6en-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>

You cannot get directly the parent of an element, but you can use a particular filter on the content of an element. Here is an example that emphasize spans with class 'to-emphasize' in a BlockQuote in a particular way:

```
local spans_in_quote = {
  Span = function(span)
    if span.classes:includes('to-emphasize') then
      local _, pos = span.classes:find('to-emphasize')
      span.classes:remove(pos)
      return pandoc.Underline(span)
    end
  end
}

local function Span(span)
  if span.classes:includes('to-emphasize') then
    return pandoc.Emph(span)
  end
end

local function BlockQuote(quote)
  return quote:walk(spans_in_quote)
end

return {
  { BlockQuote = BlockQuote },
  { Span = Span }
}
```

The function BlockQuote is applied first and calls the filter spans_in_quote on the content of the BlockQuote. This filter transforms the Spans with the class 'to-emphasize' and remove that class so that it is not processed again by the Span function. After the BlockQuote function returns, the Span function is called on all Spans (including those inside the BlockQuote, that's why I removed the class 'to-emphasize'!).

Exemple of use:

pandoc -L test.lua <<< '
Normal [text]{.to-emphasize}.

> [Text]{.to-emphasize} in a quotation.

'
<p>Normal <em><span class="to-emphasize">text</span></em>.</p>
<blockquote>
<p><u><span>Text</span></u> in a quotation.</p>
</blockquote>

Le Wednesday 10 May 2023 à 06:02:18AM, ThomasH a écrit :
> Hi,
> 
> is there a way to get to the parent in the Pandoc AST from the current element
> in a Lua filter?
> I would like to distinguish treatment of elements depending on their context in
> the syntax tree, e.g. handle a 'span' element differently if it is a child of a
> 'cell' element in a table.
> 
> Thanks, T.
> 
> --
> 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 [1]pandoc-discuss+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
> To view this discussion on the web visit [2]https://groups.google.com/d/msgid/
> pandoc-discuss/b4305519-9dbf-4254-a3d7-7b9e1dab9d6en%40googlegroups.com.
> 
> References:
> 
> [1] mailto:pandoc-discuss+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
> [2] https://groups.google.com/d/msgid/pandoc-discuss/b4305519-9dbf-4254-a3d7-7b9e1dab9d6en%40googlegroups.com?utm_medium=email&utm_source=footer

-- 
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/ZFub2OlhnMQdR4zM%40localhost.


  parent reply	other threads:[~2023-05-10 13:27 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-10 13:02 ThomasH
     [not found] ` <b4305519-9dbf-4254-a3d7-7b9e1dab9d6en-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2023-05-10 13:27   ` Bastien DUMONT [this message]
2023-05-10 14:57   ` Albert Krewinkel
     [not found]     ` <87sfc4ql6b.fsf-9EawChwDxG8hFhg+JK9F0w@public.gmane.org>
2023-05-10 16:59       ` ThomasH

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=ZFub2OlhnMQdR4zM@localhost \
    --to=bastien.dumont-vwifzpto/vqstnjn9+bgxg@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).