diff options
-rw-r--r-- | data/pandoc.lua | 40 |
1 files changed, 20 insertions, 20 deletions
diff --git a/data/pandoc.lua b/data/pandoc.lua index 670e4a738..44b8b0f1b 100644 --- a/data/pandoc.lua +++ b/data/pandoc.lua @@ -38,13 +38,15 @@ local List = require 'pandoc.List' --- Create a new indexing function. -- @param template function template --- @param indices list of indices, starting with the most significant +-- @param indices list of indices, starting with the most deeply nested -- @return newly created function -- @local function make_indexing_function(template, indices) local loadstring = loadstring or load local bracketed = {} - for i = 1, #indices do bracketed[i] = string.format('[%d]', indices[i]) end + for i = 1, #indices do + bracketed[i] = string.format('[%d]', indices[#indices - i + 1]) + end local fnstr = string.format('return ' .. template, table.concat(bracketed)) return assert(loadstring(fnstr))() end @@ -57,15 +59,12 @@ end local function create_accessor_functions (fn_template, accessors) local res = {} function add_accessors(acc, ...) - local indices = {...} -- ensure a fresh indices table if type(acc) == "string" then - res[acc] = make_indexing_function(fn_template, indices) + res[acc] = make_indexing_function(fn_template, {...}) else - local ind_len = #indices local unpack = table.unpack or unpack for i = 1, #(acc or {}) do - indices[ind_len + 1] = i - add_accessors(acc[i], unpack(indices)) + add_accessors(acc[i], i, ...) end end end @@ -165,6 +164,8 @@ AstElement.__call = function(t, ...) end end +--- Make a new subtype which constructs a new value when called. +-- @local function AstElement:make_subtype(...) local newtype = Type.make_subtype(self, ...) newtype.__call = self.__call @@ -226,27 +227,26 @@ M.MetaValue = AstElement:make_subtype('MetaValue') --- Meta blocks -- @function MetaBlocks -- @tparam {Block,...} blocks blocks +M.MetaBlocks = M.MetaValue:create_constructor( + 'MetaBlocks', + function (content) return List:new(content) end +) --- Meta inlines -- @function MetaInlines -- @tparam {Inline,...} inlines inlines +M.MetaInlines = M.MetaValue:create_constructor( + 'MetaInlines', + function (content) return List:new(content) end +) --- Meta list -- @function MetaList -- @tparam {MetaValue,...} meta_values list of meta values -M.meta_value_list_types = { - "MetaBlocks", - "MetaInlines", - "MetaList", -} -for i = 1, #M.meta_value_list_types do - M[M.meta_value_list_types[i]] = M.MetaValue:create_constructor( - M.meta_value_list_types[i], - function(content) - return List:new(content) - end - ) -end +M.MetaList = M.MetaValue:create_constructor( + 'MetaList', + function (content) return List:new(content) end +) --- Meta map -- @function MetaMap |