From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- support/cluttex/src/texrunner/recovery.lua | 86 ++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 support/cluttex/src/texrunner/recovery.lua (limited to 'support/cluttex/src/texrunner/recovery.lua') diff --git a/support/cluttex/src/texrunner/recovery.lua b/support/cluttex/src/texrunner/recovery.lua new file mode 100644 index 0000000000..db33b8fb52 --- /dev/null +++ b/support/cluttex/src/texrunner/recovery.lua @@ -0,0 +1,86 @@ +--[[ + Copyright 2018 ARATA Mizuki + + This file is part of ClutTeX. + + ClutTeX is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + ClutTeX is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with ClutTeX. If not, see . +]] + +local io = io +local string = string +local parse_aux_file = require "texrunner.auxfile".parse_aux_file +local pathutil = require "texrunner.pathutil" +local fsutil = require "texrunner.fsutil" +local shellutil = require "texrunner.shellutil" +local message = require "texrunner.message" + +local function create_missing_directories(args) + if string.find(args.execlog, "I can't write on file", 1, true) then + -- There is a possibility that there are some subfiles under subdirectories. + -- Directories for sub-auxfiles are not created automatically, so we need to provide them. + local report = parse_aux_file(args.auxfile, args.options.output_directory) + if report.made_new_directory then + if CLUTTEX_VERBOSITY >= 1 then + message.info("Created missing directories.") + end + return true + end + end + return false +end + +local function run_epstopdf(args) + local run = false + if args.options.shell_escape ~= false then -- (possibly restricted) \write18 enabled + for outfile, infile in string.gmatch(args.execlog, "%(epstopdf%)%s*Command: ") do + local infile_abs = pathutil.abspath(infile, args.original_wd) + if fsutil.isfile(infile_abs) then -- input file exists + local outfile_abs = pathutil.abspath(outfile, args.options.output_directory) + if CLUTTEX_VERBOSITY >= 1 then + message.info("Running epstopdf on ", infile, ".") + end + local outdir = pathutil.dirname(outfile_abs) + if not fsutil.isdir(outdir) then + assert(fsutil.mkdir_rec(outdir)) + end + local command = string.format("epstopdf --outfile=%s %s", shellutil.escape(outfile_abs), shellutil.escape(infile_abs)) + message.exec(command) + local success = os.execute(command) + if type(success) == "number" then -- Lua 5.1 or LuaTeX + success = success == 0 + end + run = run or success + end + end + end + return run +end + +local function check_minted(args) + return string.find(args.execlog, "Package minted Error: Missing Pygments output; \\inputminted was") ~= nil +end + +local function try_recovery(args) + local recovered = false + recovered = create_missing_directories(args) + recovered = run_epstopdf(args) or recovered + recovered = check_minted(args) or recovered + return recovered +end + +return { + create_missing_directories = create_missing_directories, + run_epstopdf = run_epstopdf, + try_recovery = try_recovery, +} -- cgit v1.2.3