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 skrev: > > Martin Post 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 content 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.