diff options
Diffstat (limited to 'Master/texmf-dist/scripts/make4ht/mkutils.lua')
-rwxr-xr-x | Master/texmf-dist/scripts/make4ht/mkutils.lua | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/Master/texmf-dist/scripts/make4ht/mkutils.lua b/Master/texmf-dist/scripts/make4ht/mkutils.lua index 88b456fe9da..7dab423bc9b 100755 --- a/Master/texmf-dist/scripts/make4ht/mkutils.lua +++ b/Master/texmf-dist/scripts/make4ht/mkutils.lua @@ -22,6 +22,19 @@ getmetatable("").__add = addProperty --print( "${name} is ${value}" % {name = "foo", value = "bar"} ) -- Outputs "foo is bar" + +-- merge two tables recursively +function merge(t1, t2) + for k, v in pairs(t2) do + if (type(v) == "table") and (type(t1[k] or false) == "table") then + merge(t1[k], t2[k]) + else + t1[k] = v + end + end + return t1 +end + function string:split(sep) local sep, fields = sep or ":", {} local pattern = string.format("([^%s]+)", sep) @@ -157,7 +170,7 @@ function mkdirectories(dirs) if type(dirs) ~="table" then return false, "mkdirectories: dirs is not table" end - for _,d in pairs(dirs) do + for _,d in ipairs(dirs) do local stat,msg = lfs.mkdir(d) if not stat then return false, "makedirectories error: "..msg end lfs.chdir(d) @@ -269,10 +282,7 @@ function env.filter_settings(name) local filters = settings.filter or {} local filter_options = filters[name] or {} return function(par) - for k,v in pairs(par) do - filter_options[k] = v - end - filters[name] = filter_options + filters[name] = merge(filter_options, par) settings.filter = filters end end @@ -458,13 +468,19 @@ end function load_extensions(extensions, format) local module_names = {} local extension_table = {} + local extension_sequence = {} -- process the extension table. it contains type field, which can enable or -- diable the extension for _, v in ipairs(extensions) do local enable = v.type == "+" and true or nil - module_names[v.name] = enable + -- don't load extensions multiple times + if not module_names[v.name] then + module_names[v.name] = enable + -- load extenisons in a correct order + table.insert(extension_sequence, v.name) + end end - for name, _ in pairs(module_names) do + for _, name in ipairs(extension_sequence) do local extension = load_extension(name,format) if extension then table.insert(extension_table, extension) |