public inbox archive for pandoc-discuss@googlegroups.com
 help / color / mirror / Atom feed
From: BPJ <melroch-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: pandoc-discuss <pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
Subject: Markdown in JSON (was: Parse metadata in defaults files as Markdown?)
Date: Sun, 1 Oct 2023 12:50:08 +0200	[thread overview]
Message-ID: <CADAJKhC6T=UHG49Rtd40nYsQFgfMxuiwyjqK3A+9CQ0QwjYXzQ@mail.gmail.com> (raw)
In-Reply-To: <87r0mgof6d.fsf-9EawChwDxG8hFhg+JK9F0w@public.gmane.org>

[-- Attachment #1: Type: text/plain, Size: 4241 bytes --]

This reminds me of a thing I ran into with a filter a while ago. The docs
say that by default (or at least when the second argument is true)
`pandoc.json.decode()` will parse strings as Markdown (or at least that was
how I understood it) so I thought that in a tree leaves would be parsed as
MD much as in metadata if the second argument is true or missing. Obviously
this is not the case. No big deal since this was in a filter ("variable"
expansion BTW, what else? :-) I could just use `pandoc.read()` but it did
leave me wondering: how and when does `pandoc.json.decode()` parse its
argument into AST elements?

FWIW I also came up with another solution: look for the metadata keys
`var-data` and `var-trees` as well as for `vars` so I can have this in
in-document metadata:

``````yaml
---
vars:
  foo: '*foo*'
...
``````

this in a defaults file:

``````yaml
metadata:
  var-trees:
    - this
    - that
``````

and these in three different metadata files:

``````yaml
var-data:
  bar: '**bar**'
this:
  this: '*this*'
that:
  that: '*that*'
``````

I hope you get the idea!

BTW I've come up with a quite effective way to merge values which are
iterable with `pairs()` regardless of whether they are actual tables or
`Attr.attributes` objects or the like, and just "ignore" non-iterable
values, be they nil or whatever:

``````lua
local function merge_maps(...)
  local tab = table.pack(...)
  local merged = { }
  for i = 1, tab.n do
    pcall(function()
      for k, v in pairs(tab[i]) do
        merged[k] = v
      end
    end)
  end
  return merged
end
``````

Thanks to the `pcall` the loop will just go on to the next item in `tab` if
the current item isn't iterable, without any need for code which tries to
inspect the type or tag or whatever of the current item: if `pairs` lives
the item is merged, and if `pairs` dies it is just "skipped", so all the
"validation" is offloaded to `pairs`.

/bpj




Den fre 29 sep. 2023 23:15Albert Krewinkel <albert+pandoc-9EawChwDxG8hFhg+JK9F0w@public.gmane.org>
skrev:

>
> Martin Post <martinpostberlin-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> writes:
>
> > In a Pandoc document’s YAML metadata block, or in a Pandoc metadata
> file, I can do this:
> >
> > variable1: __content__
> >
> > …and it will be rendered as <strong>content</strong> for HTML.
> >
> > Doing this in a Pandoc DEFAULTS file:
> >
> > metadata:
> >   variable1: __content__
> >
> > …will render $variable1$ as “__content__”
> >
> > So – is it possible to have metadata in a defaults file interpreted as
> Markdown?
>
> I think the only way would be to write a Lua filter that convert strings
> to Inlines.
>
> E.g.:
>
>
>     local strings2md
>     strings2md = function (meta)
>       for key, value in pairs(meta) do
>         if pandoc.utils.type(value) == 'string' then
>           -- Convert strings to Markdown
>           local blocks = pandoc.read(value).blocks
>           meta[key] = pandoc.utils.blocks_to_inlines(blocks)
>         elseif pandoc.utils.type(value) == 'List' then
>           -- Recurse on lists
>           meta[key] = strings2md(value)
>         end
>       end
>
>       return meta
>     end
>
>     Meta = strings2md
>
>
> --
> 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/87r0mgof6d.fsf%40zeitkraut.de
> .
>

-- 
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/CADAJKhC6T%3DUHG49Rtd40nYsQFgfMxuiwyjqK3A%2B9CQ0QwjYXzQ%40mail.gmail.com.

[-- Attachment #2: Type: text/html, Size: 6649 bytes --]

  parent reply	other threads:[~2023-10-01 10:50 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-28 16:20 Parse metadata in defaults files as Markdown? Martin Post
     [not found] ` <a4843b38-f508-4d55-8dd0-35136f401bd1n-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2023-09-29 18:37   ` Albert Krewinkel
     [not found]     ` <87r0mgof6d.fsf-9EawChwDxG8hFhg+JK9F0w@public.gmane.org>
2023-09-30  9:03       ` Martin Post
2023-10-01 10:50       ` BPJ [this message]
     [not found]         ` <CADAJKhC6T=UHG49Rtd40nYsQFgfMxuiwyjqK3A+9CQ0QwjYXzQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2023-10-02 19:08           ` Markdown in JSON (was: Parse metadata in defaults files as Markdown?) Albert Krewinkel
     [not found]             ` <87edicolz7.fsf-9EawChwDxG8hFhg+JK9F0w@public.gmane.org>
2023-10-05 10:14               ` BPJ

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='CADAJKhC6T=UHG49Rtd40nYsQFgfMxuiwyjqK3A+9CQ0QwjYXzQ@mail.gmail.com' \
    --to=melroch-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).