summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/scripts/make4ht/mkutils.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/scripts/make4ht/mkutils.lua')
-rwxr-xr-xMaster/texmf-dist/scripts/make4ht/mkutils.lua30
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)