diff options
Diffstat (limited to 'support/make4ht/extensions')
-rw-r--r-- | support/make4ht/extensions/make4ht-ext-common_domfilters.lua | 2 | ||||
-rw-r--r-- | support/make4ht/extensions/make4ht-ext-detect_engine.lua | 91 |
2 files changed, 92 insertions, 1 deletions
diff --git a/support/make4ht/extensions/make4ht-ext-common_domfilters.lua b/support/make4ht/extensions/make4ht-ext-common_domfilters.lua index ec687cd042..63232b22ce 100644 --- a/support/make4ht/extensions/make4ht-ext-common_domfilters.lua +++ b/support/make4ht/extensions/make4ht-ext-common_domfilters.lua @@ -26,7 +26,7 @@ function M.modify_build(make) make:match("4om$", process, {charclasses= charclasses}) count = 2 else - local process = filter {"fixinlines", "idcolons", "joincharacters", "mathmlfixes", "tablerows"} + local process = filter {"fixinlines", "idcolons", "joincharacters", "mathmlfixes", "tablerows","booktabs"} make:match("html$", process) count = 1 end diff --git a/support/make4ht/extensions/make4ht-ext-detect_engine.lua b/support/make4ht/extensions/make4ht-ext-detect_engine.lua new file mode 100644 index 0000000000..8bb91d3a69 --- /dev/null +++ b/support/make4ht/extensions/make4ht-ext-detect_engine.lua @@ -0,0 +1,91 @@ +-- support magic comments used by TeXShop and TeXWorks to detect used engine and format +-- +local M = {} +local log = logging.new("detect engine") +local htlatex = require "make4ht-htlatex" + +-- we must change build sequence when Plain TeX is requested +local change_table = { + tex = { + htlatex = "etex", + command = htlatex.httex + }, + pdftex = { + htlatex = "etex", + command = htlatex.httex + }, + etex = { + htlatex = "etex", + command = htlatex.httex + }, + luatex = { + htlatex = "dviluatex", + command = htlatex.httex + }, + xetex = { + htlatex = "xetex -no-pdf", + command = htlatex.httex + }, + xelatex = { + htlatex = "xelatex -no-pdf", + }, + lualatex = { + htlatex = "dvilualatex", + }, + pdflatex = { + htlatex = "latex" + } + +} + +local function find_magic_program(filename) + -- find the magic line containing program name + local get_comment = function(line) + return line:match("%s*%%%s*(.+)") + end + local empty_line = function(line) return line:match("^%s*$") end + for line in io.lines(filename) do + local comment = get_comment(line) + -- read line after line from the file, break the processing after first non comment or non empty line + if not comment and not empty_line(line) then return nil, "Cannot find program name" end + comment = comment or "" -- comment is nil for empty lines + local program = comment:match("!%s*[Tt][Ee][Xx].-program%s*=%s*([^%s]+)") + if program then return program:lower() end + end +end + +-- update htlatex entries with detected program +local function update_build_sequence(program, build_seq) + -- handle Plain TeX + local replaces = change_table[program] or {} + local is_xetex = program:match("xe") -- we must handle xetex in tex4ht + for pos, entry in ipairs(build_seq) do + if entry.name == "htlatex" then + -- handle httex + entry.command = replaces.command or entry.command + local params = entry.params or {} + params.htlatex = replaces.htlatex or params.htlatex + entry.params = params + elseif is_xetex and entry.name == "tex4ht" then + -- tex4ht must process .xdv file if the TeX file was compiled by XeTeX + entry.params.tex4ht_par = entry.params.tex4ht_par .. " -.xdv" + end + end +end + + +function M.modify_build(make) + -- find magic comments in the TeX file + local build_seq = make.build_seq + local tex_file = make.params.tex_file + local program, msg = find_magic_program(tex_file) + if program then + log:info("Found program name", program) + update_build_sequence(program, build_seq) + else + log:warning("Cannot find magic line with the program name") + end + return make +end + +return M |