* Lua Filter: Get to parent of current element?
@ 2023-05-10 13:02 ThomasH
[not found] ` <b4305519-9dbf-4254-a3d7-7b9e1dab9d6en-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
0 siblings, 1 reply; 4+ messages in thread
From: ThomasH @ 2023-05-10 13:02 UTC (permalink / raw)
To: pandoc-discuss
[-- Attachment #1.1: Type: text/plain, Size: 714 bytes --]
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 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/b4305519-9dbf-4254-a3d7-7b9e1dab9d6en%40googlegroups.com.
[-- Attachment #1.2: Type: text/html, Size: 1081 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Lua Filter: Get to parent of current element?
[not found] ` <b4305519-9dbf-4254-a3d7-7b9e1dab9d6en-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
@ 2023-05-10 13:27 ` Bastien DUMONT
2023-05-10 14:57 ` Albert Krewinkel
1 sibling, 0 replies; 4+ messages in thread
From: Bastien DUMONT @ 2023-05-10 13:27 UTC (permalink / raw)
To: pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw
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.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Lua Filter: Get to parent of current element?
[not found] ` <b4305519-9dbf-4254-a3d7-7b9e1dab9d6en-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2023-05-10 13:27 ` Bastien DUMONT
@ 2023-05-10 14:57 ` Albert Krewinkel
[not found] ` <87sfc4ql6b.fsf-9EawChwDxG8hFhg+JK9F0w@public.gmane.org>
1 sibling, 1 reply; 4+ messages in thread
From: Albert Krewinkel @ 2023-05-10 14:57 UTC (permalink / raw)
To: pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw
ThomasH <therch-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> writes:
> 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.
This is currently not supported in Lua; panflute (Python) filters do
enable that though.
What Lua does support though is to change the order in which elements
are traversed, as well as the option to stop processing of a subtree.
See https://pandoc.org/lua-filters.html#traversal-order
E.g., to handle all Spans in a table differently you'd use
traverse = 'topdown'
function Table (tbl)
return tbl:walk(my_filter_for_table_spans), false
end
function Span (span)
-- default span processing
return span
end
It's a bit of a brain-twister (and can be slower than normal filters)
but it enables most of the actions that one would otherwise use the
parent element for.
--
Albert Krewinkel
GPG: 8eed e3e2 e8c5 6f18 81fe e836 388d c0b2 1f63 1124
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Lua Filter: Get to parent of current element?
[not found] ` <87sfc4ql6b.fsf-9EawChwDxG8hFhg+JK9F0w@public.gmane.org>
@ 2023-05-10 16:59 ` ThomasH
0 siblings, 0 replies; 4+ messages in thread
From: ThomasH @ 2023-05-10 16:59 UTC (permalink / raw)
To: pandoc-discuss
[-- Attachment #1.1: Type: text/plain, Size: 1769 bytes --]
Great, thanks both of you, I get the idea, will try that.
T.
On Wednesday, May 10, 2023 at 5:08:06 PM UTC+2 Albert Krewinkel wrote:
>
> ThomasH <the...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> writes:
>
> > 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.
>
> This is currently not supported in Lua; panflute (Python) filters do
> enable that though.
>
> What Lua does support though is to change the order in which elements
> are traversed, as well as the option to stop processing of a subtree.
> See https://pandoc.org/lua-filters.html#traversal-order
>
> E.g., to handle all Spans in a table differently you'd use
>
> traverse = 'topdown'
>
> function Table (tbl)
> return tbl:walk(my_filter_for_table_spans), false
> end
>
> function Span (span)
> -- default span processing
> return span
> end
>
> It's a bit of a brain-twister (and can be slower than normal filters)
> but it enables most of the actions that one would otherwise use the
> parent element for.
>
>
> --
> Albert Krewinkel
> GPG: 8eed e3e2 e8c5 6f18 81fe e836 388d c0b2 1f63 1124
>
--
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/eb2115c3-ee11-4f82-bb49-6fd423d9365fn%40googlegroups.com.
[-- Attachment #1.2: Type: text/html, Size: 2813 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-05-10 16:59 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-10 13:02 Lua Filter: Get to parent of current element? ThomasH
[not found] ` <b4305519-9dbf-4254-a3d7-7b9e1dab9d6en-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2023-05-10 13:27 ` Bastien DUMONT
2023-05-10 14:57 ` Albert Krewinkel
[not found] ` <87sfc4ql6b.fsf-9EawChwDxG8hFhg+JK9F0w@public.gmane.org>
2023-05-10 16:59 ` ThomasH
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).