summaryrefslogtreecommitdiffstats
path: root/filters/vars.lua
diff options
context:
space:
mode:
Diffstat (limited to 'filters/vars.lua')
-rw-r--r--filters/vars.lua38
1 files changed, 38 insertions, 0 deletions
diff --git a/filters/vars.lua b/filters/vars.lua
new file mode 100644
index 0000000..e60019e
--- /dev/null
+++ b/filters/vars.lua
@@ -0,0 +1,38 @@
1local vars = {}
2
3function string.split(str, sep)
4 sep = sep or '%s'
5
6 local parts = pandoc.List()
7
8 for field, s in str:gmatch("([^" .. sep .. "]*)(" .. sep .. "?)") do
9 parts:insert(field)
10 if s == "" then return parts end
11 end
12end
13
14function meta(meta) vars = meta end
15
16function str(el)
17 local prefix, varref, suffix = el.text:match('^(.*)%%(.*)%%(.*)$')
18
19 if varref then
20 local parts = varref:split(".")
21 local var = vars
22
23 for i = 1, #parts do
24 local part = parts[i]
25 local v = var[part]
26
27 if not v then return el end
28
29 var = v
30 end
31
32 if var then return pandoc.Str(prefix .. var .. suffix) end
33 end
34
35 return el
36end
37
38return { { Meta = meta }, { Str = str } }