From 4567105f6c3574c94a368df7da34bac5643ba624 Mon Sep 17 00:00:00 2001
From: Albert Krewinkel <albert@zeitkraut.de>
Date: Mon, 21 Aug 2017 19:00:51 +0200
Subject: [PATCH] doc/lua-filter.md: Add metadata variable replacment example

---
 doc/lua-filters.md | 58 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 58 insertions(+)

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
+<dl>
+<dt>Name</dt>
+<dd><p><span>John MacFarlane</span></p>
+</dd>
+<dt>Occupation</dt>
+<dd><p><span>Professor of Philosophy</span></p>
+</dd>
+</dl>
+```