From 4567105f6c3574c94a368df7da34bac5643ba624 Mon Sep 17 00:00:00 2001 From: Albert Krewinkel Date: Mon, 21 Aug 2017 19:00:51 +0200 Subject: doc/lua-filter.md: Add metadata variable replacment example --- doc/lua-filters.md | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) (limited to 'doc') diff --git a/doc/lua-filters.md b/doc/lua-filters.md index 78025fd03..320e983ad 100644 --- a/doc/lua-filters.md +++ b/doc/lua-filters.md @@ -167,3 +167,61 @@ function Doc (blocks, meta) ) end ``` + +### Replacing placeholders with their metadata value + +Lua filter functions are run in the order *Inlines → Blocks → Meta → Pandoc*. +Passing information from a higher level (e.g., metadata) to a lower level (e.g., +inlines) is still possible by using two filters living in the same file: + +``` lua +local vars = {} + +function get_vars (meta) + for k, v in pairs(meta) do + if v.t == 'MetaInlines' then + vars["$" .. k .. "$"] = v + end + end +end + +function replace (el) + if vars[el.text] then + return pandoc.Span(vars[el.text]) + else + return el + end +end + +return {{Meta = get_vars}, {Str = replace}} +``` + +If the contents of file `occupations.md` is + +``` markdown +--- +name: John MacFarlane +occupation: Professor of Philosophy +--- + +Name + +: \$name\$ + +Occupation + +: \$occupation\$ +``` + +then running `pandoc --lua-filter=meta-vars.lua occupations.md` will output: + +``` html +
+
Name
+

John MacFarlane

+
+
Occupation
+

Professor of Philosophy

+
+
+``` -- cgit v1.2.3