diff options
Diffstat (limited to 'filters/vars.lua')
-rw-r--r-- | filters/vars.lua | 38 |
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 @@ | |||
1 | local vars = {} | ||
2 | |||
3 | function 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 | ||
12 | end | ||
13 | |||
14 | function meta(meta) vars = meta end | ||
15 | |||
16 | function 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 | ||
36 | end | ||
37 | |||
38 | return { { Meta = meta }, { Str = str } } | ||