From: Pa Sc <ideas-and-peanutbutter-zqRNUXuvxA0b1SvskN2V4Q@public.gmane.org>
To: pandoc-discuss <pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
Subject: Re: Help with Lua filter for markdown to LaTeX with Pandoc
Date: Sat, 25 Mar 2023 15:01:10 -0700 (PDT) [thread overview]
Message-ID: <bb3c6fab-dee9-48c4-81e4-7db67bc6931an@googlegroups.com> (raw)
In-Reply-To: <ZB8HbxE9qj++aouD@localhost>
[-- Attachment #1.1: Type: text/plain, Size: 7174 bytes --]
I followed that, thanks! But I'm still getting `\emph{\hl{abc}` as the
output, any other ideas?
Bastien DUMONT schrieb am Samstag, 25. März 2023 um 15:38:47 UTC+1:
> First, you need to replace `\\hl{` with `\\colorbox{declared-color}{`
> (mind the double backslash). Then Span.lua can be replaced with the
> following filter acting on emphasized (italicized) pieces of text:
>
> in-red.lua:
> ```
> function Emph (emph)
> local content = emph.content
> if #content == 1
> and content[1].t == 'Span'
> and content[1].classes:includes 'mark-red' then
> return {
> pandoc.RawInline('latex', '\\colorbox{lightred}{'),
> content[1],
> pandoc.RawInline('latex', '}')
> }
> end
> end
> ```
>
> Here, I replaced "mark" with "mark-red" as you suggested because I don't
> remove the Span element, in case it contains other classes or attributes
> that should be processed by other filters or by Pandoc itself. If the Span
> was kept with the "mark" class, Pandoc would wrap it in the \hl macro
> afterwards.
>
> Le Saturday 25 March 2023 à 05:42:45AM, Pa Sc a écrit :
> > In markdown (written in Obsidian.md) I use a plugin/theme so that
> `*==text==*`
> > is rendered as red instead of italic and highlighted.
> >
> > I use this lua-filter to convert regular `==highlighting==` to LaTeX `\hl
> > {highlighting}` which works perfectly: (I somehow require these two
> files, I
> > can't remember why)
> >
> > **highlight.lua**:
> > ```
> > --[[
> > Add support for a custom inline syntax.
> > This pandoc Lua filter allows to add a custom markup syntax
> > extension. It is designed to be adjustable; it should not be
> > necessary to modify the code below the separator line.
> > The example here allows to add highlighted text by enclosing the
> > text with `==` on each side. Pandoc supports this for HTML output
> > out of the box. Other outputs will need additional filters.
> > Copyright: © 2022 Albert Krewinkel
> > License: MIT
> > ]]
> >
> > -- Lua pattern matching the opening markup string.
> > local opening = [[==]]
> >
> > -- Lua pattern matching the closing markup string.
> > local closing = [[==]]
> >
> > -- Toggle whether the opening markup may be followed by whitespace.
> > local nospace = true
> >
> > -- Function converting the enclosed inlines to their internal pandoc
> > -- representation.
> > local function markup_inlines (inlines)
> > return pandoc.Span(inlines, {class="mark"})
> > end
> >
> >
> ------------------------------------------------------------------------
> >
> > local function is_space (inline)
> > return inline and
> > (inline.t == 'Space' or
> > inline.t == 'LineBreak' or
> > inline.t == 'SoftBreak')
> > end
> >
> > function Inlines (inlines)
> > local result = pandoc.Inlines{}
> > local markup = nil
> > local start = nil
> > for i, inline in ipairs(inlines) do
> > if inline.tag == 'Str' then
> > if not markup then
> > local first = inline.text:match('^' .. opening .. '(.*)')
> > if first then
> > start = inline -- keep element around in case the
> > -- markup is not closed. Check if the
> > -- closing pattern is already in this
> > -- string.
> > local selfclosing = first:match('(.*)' .. closing .. '$')
> > if selfclosing then
> > result:insert(markup_inlines{pandoc.Str(selfclosing)})
> > elseif nospace and first == '' and is_space(inlines[i+1])
> then
> > -- the opening pattern is followed by a space, but the
> > -- config disallows this.
> > result:insert(inline)
> > else
> > markup = pandoc.Inlines{pandoc.Str(first)}
> > end
> > else
> > result:insert(inline)
> > end
> > else
> > local last = inline.text:match('(.*)' .. closing .. '$')
> > if last then
> > markup:insert(pandoc.Str(last))
> > result:insert(markup_inlines(markup))
> > markup = nil
> > else
> > markup:insert(inline)
> > end
> > end
> > else
> > local acc = markup or result
> > acc:insert(inline)
> > end
> > end
> >
> > -- keep unterminated markup
> > if markup then
> > markup:remove(1) -- the stripped-down first element
> > result:insert(start)
> > result:extend(markup)
> > end
> > return result
> > end
> >
> > local function markup_inlines (inlines) return
> {pandoc.RawInline('tex', '
> > \\hl{')} .. inlines .. {pandoc.RawInline('tex', '}')} end
> > ```
> >
> > **Span.lua**:
> > ```
> > function Span (span)
> > if span.classes:includes 'mark' then
> > return {pandoc.RawInline('latex', '\\hl{')} ..
> > span.content ..
> > {pandoc.RawInline('latex', '}')}
> > end
> > end
> > ```
> > This works great, I got this here: [https://gist.github.com/tarleb/
> > a0646da1834318d4f71a780edaf9f870](https://gist.github.com/tarleb/
> > a0646da1834318d4f71a780edaf9f870)
> >
> > However, for my other usecase I'd like it to be able to render `*==this
> kind of
> > highlighting==*` as `\colorbox{lightred}{this new kind of highlighting}`
> >
> > I've tried replacing the `\\hl{` with `\colorbox{declared-color}{` but
> that
> > didn't work.
> >
> > I was wondering if it had something to do with the class? But renaming
> that
> > class from `mark` to `mark-red` didn't work either.
> >
> > Any advice or ideas? Thanks!
> >
> > --
> > 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-discus...-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
> > To view this discussion on the web visit [2]
> https://groups.google.com/d/msgid/
> > pandoc-discuss/79ac7814-9558-4d49-a682-cf31f970d27dn%40googlegroups.com.
> >
> > References:
> >
> > [1] mailto:pandoc-discus...-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
> > [2]
> https://groups.google.com/d/msgid/pandoc-discuss/79ac7814-9558-4d49-a682-cf31f970d27dn%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/bb3c6fab-dee9-48c4-81e4-7db67bc6931an%40googlegroups.com.
[-- Attachment #1.2: Type: text/html, Size: 10593 bytes --]
next prev parent reply other threads:[~2023-03-25 22:01 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-25 12:42 Pa Sc
[not found] ` <79ac7814-9558-4d49-a682-cf31f970d27dn-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2023-03-25 14:38 ` Bastien DUMONT
2023-03-25 22:01 ` Pa Sc [this message]
[not found] ` <bb3c6fab-dee9-48c4-81e4-7db67bc6931an-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2023-03-25 22:40 ` Bastien DUMONT
2023-03-25 22:44 ` Pa Sc
[not found] ` <6a7dabf5-1fda-4825-9d21-193b63363937n-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2023-03-25 23:08 ` Bastien DUMONT
2023-03-26 9:42 ` Pa Sc
[not found] ` <aded6fcf-0720-4fea-a873-af2cacfb8281n-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2023-03-26 9:53 ` Bastien DUMONT
2023-03-26 10:33 ` Pa Sc
[not found] ` <39893365-8248-4286-ae04-560895d69212n-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2023-03-26 18:51 ` Bastien DUMONT
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=bb3c6fab-dee9-48c4-81e4-7db67bc6931an@googlegroups.com \
--to=ideas-and-peanutbutter-zqrnuxuvxa0b1svskn2v4q@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).