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: Help with Lua filter for markdown to LaTeX with Pandoc
Date: Sat, 25 Mar 2023 22:40:45 +0000	[thread overview]
Message-ID: <ZB94bf//ef6J/nsc@localhost> (raw)
In-Reply-To: <bb3c6fab-dee9-48c4-81e4-7db67bc6931an-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>

It works for me. Could you provide a minimal test case, your filters and the command?

Le Saturday 25 March 2023 à 03:01:10PM, Pa Sc a écrit :
> 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: [[1]https://gist.github.com/tarleb/
>     > a0646da1834318d4f71a780edaf9f870]([2]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][3]https://groups.google.com/
>     d/msgid/
>     > pandoc-discuss/79ac7814-9558-4d49-a682-cf31f970d27dn%[4]
>     40googlegroups.com.
>     >
>     > References:
>     >
>     > [1] mailto:pandoc-discus...-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
>     > [2] [5]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 [6]pandoc-discuss+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
> To view this discussion on the web visit [7]https://groups.google.com/d/msgid/
> pandoc-discuss/bb3c6fab-dee9-48c4-81e4-7db67bc6931an%40googlegroups.com.
> 
> References:
> 
> [1] https://gist.github.com/tarleb/
> [2] https://gist.github.com/tarleb/
> [3] https://groups.google.com/d/msgid/
> [4] http://40googlegroups.com/
> [5] https://groups.google.com/d/msgid/pandoc-discuss/79ac7814-9558-4d49-a682-cf31f970d27dn%40googlegroups.com?utm_medium=email&utm_source=footer
> [6] mailto:pandoc-discuss+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
> [7] https://groups.google.com/d/msgid/pandoc-discuss/bb3c6fab-dee9-48c4-81e4-7db67bc6931an%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/ZB94bf//ef6J/nsc%40localhost.


  parent reply	other threads:[~2023-03-25 22:40 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
     [not found]       ` <bb3c6fab-dee9-48c4-81e4-7db67bc6931an-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2023-03-25 22:40         ` Bastien DUMONT [this message]
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=ZB94bf//ef6J/nsc@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).