public inbox archive for pandoc-discuss@googlegroups.com
 help / color / mirror / Atom feed
From: bapt a <auguieba-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: pandoc-discuss <pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
Subject: Re: Lua filter to automatically tag keywords for TeX indexing
Date: Fri, 4 Nov 2022 14:26:55 -0700 (PDT)	[thread overview]
Message-ID: <23ccfb2a-c458-49e1-a275-dad452f5d2e3n@googlegroups.com> (raw)
In-Reply-To: <ECDE1635-3DD4-4E57-8D66-E546B4742622-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>


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

Thank you both for the helpful replies; I don't fully understand how these 
boolean tables are used in Lua (clearly it works, I just don't fully get 
it), but it seems to be an important concept so I'll read up on it.

Thanks,

baptiste

On Friday, 4 November 2022 at 08:39:29 UTC+13 fiddlosopher wrote:

>
>
> > On Nov 2, 2022, at 6:20 PM, bapt a <augu...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
> > 
> > Hi all,
> > 
> > I've started writing a technical book using Quarto markdown, which uses 
> pandoc with Lua filters under the hood to produce a website as well as the 
> publisher's pdf format (via LaTeX). 
> > I quite like to keep the source document as plain as possible, and I'm 
> wondering if I could avoid the use of [concept]{.index}, which gets turned 
> into \index{concept}, and instead write a Lua filter with my custom list of 
> keywords, and have pandoc automatically match them as they appear in the 
> text. 
> > As a proof of principle I wrote the following code (see below), which 
> matches specific keywords, and reformats them as small-caps. I quickly 
> realised that trailing punctuation, such as "concept, ..." will fail to 
> match, so I'm using gsub to strip such punctuation before matching. It 
> works, but I'm a bit worried:
> > 
> > - what's the overhead of such a filter, in practice? From what I 
> understand, every single string element in the AST will be processed by 
> gsub then tested for a match. Are Lua filters walking down the AST fast 
> enough that I shouldn't worry about it? (as far as I can tell on small 
> examples, it seems fine)
>
> The AST walking is very fast. See the benchmarks at the beginning of 
> https://pandoc.org/lua-filters.html for one example.
>
> > - assuming this idea is reasonable, I might want to do a few similar 
> operations, e.g. reformatting program languages (as in this example code), 
> wrapping keywords in \index{}, etc., and the exact format will often depend 
> on the output target (html vs TeX etc.). Is there a better construct for 
> this than successive if/else statements to look for matches? (I don't know 
> much Lua)
>
> In lua you can do
>
> string.gusb(val, [“(%l*)”], function (word)
> if indexable[word] then
> .. whatever ..
> end
> end)
>
> This will run the function on every group of letters in the matched string.
> Here I’m assuming you have a lua table indexable that maps words to true, 
> e.g.
>
> { cow: true, horse: true }
>
> That will be much faster than iterating through an array as you’re doing 
> here.
>
>

-- 
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/23ccfb2a-c458-49e1-a275-dad452f5d2e3n%40googlegroups.com.

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

      parent reply	other threads:[~2022-11-04 21:26 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-03  1:20 bapt a
     [not found] ` <7f570676-2876-4e29-a8c0-9a765617f141n-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2022-11-03 19:18   ` Bastien DUMONT
2022-11-03 19:39   ` John MacFarlane
     [not found]     ` <ECDE1635-3DD4-4E57-8D66-E546B4742622-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2022-11-04 21:26       ` bapt a [this message]

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=23ccfb2a-c458-49e1-a275-dad452f5d2e3n@googlegroups.com \
    --to=auguieba-re5jqeeqqe8avxtiumwx3w@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).