public inbox archive for pandoc-discuss@googlegroups.com
 help / color / mirror / Atom feed
* Help with Lua filter for markdown to LaTeX with Pandoc
@ 2023-03-25 12:42 Pa Sc
       [not found] ` <79ac7814-9558-4d49-a682-cf31f970d27dn-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
  0 siblings, 1 reply; 10+ messages in thread
From: Pa Sc @ 2023-03-25 12:42 UTC (permalink / raw)
  To: pandoc-discuss


[-- Attachment #1.1: Type: text/plain, Size: 4844 bytes --]

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 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/79ac7814-9558-4d49-a682-cf31f970d27dn%40googlegroups.com.

[-- Attachment #1.2: Type: text/html, Size: 6005 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2023-03-26 18:51 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-25 12:42 Help with Lua filter for markdown to LaTeX with Pandoc 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
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

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).