local M = {} local mkutils = require "mkutils" local domfilter = require "make4ht-domfilter" local copied_images = {} local function image_copy(path, parameters, img_dir) if mkutils.is_url(path) then return nil, "External image" end -- get image basename local basename = path:match("([^/]+)$") -- if outdir is empty, keep it empty, otherwise add / separator local outdir = parameters.outdir == "" and "" or parameters.outdir .. "/" if img_dir ~= "" then outdir = outdir .. img_dir .. "/" end -- handle trailing // outdir = outdir:gsub("%/+","/") local output_file = outdir .. basename if outdir == "" then mkutils.cp(path, output_file) else mkutils.copy(path, output_file) end end -- filters support only html formats function M.test(format) current_format = format if format == "odt" then return false end return true end function M.modify_build(make) local ext_settings = get_filter_settings "copy_images" or {} local img_dir = ext_settings.img_dir or "" local img_extensions = ext_settings.extensions or {"jpg", "png", "jpeg", "svg"} local process = domfilter({ function(dom, par) for _, img in ipairs(dom:query_selector("img")) do local src = img:get_attribute("src") if src and not mkutils.is_url(src) then -- remove path specification src = src:match("([^/]+)$") if img_dir ~= "" then src = img_dir .. "/" .. src src = src:gsub("%/+", "/") end img:set_attribute("src", src) end end return dom end }, "copy_images") -- add matcher for all image extensions for _, ext in ipairs(img_extensions) do make:match(ext .. "$", function(path, parameters) image_copy(path, parameters, img_dir) -- prevent further processing of the image return false end) end make:match("html$", process, {img_dir = img_dir}) return make end return M