forked from pool/texlive
20f7a93061
OBS-URL: https://build.opensuse.org/package/show/Publishing:TeXLive/texlive?expand=0&rev=223
1246 lines
35 KiB
Plaintext
1246 lines
35 KiB
Plaintext
---
|
|
texk/texlive/linked_scripts/diadia/diadia.lua | 298 ++++++
|
|
texk/texlive/linked_scripts/glossaries/makeglossaries-lite.lua | 471 ++++++++++
|
|
texk/texlive/linked_scripts/make4ht/make4ht | 62 +
|
|
texk/texlive/linked_scripts/pdfbook2/pdfbook2 | 237 +++++
|
|
texk/texlive/linked_scripts/tex4ebook/tex4ebook | 154 +++
|
|
5 files changed, 1222 insertions(+)
|
|
|
|
--- texk/texlive/linked_scripts/diadia/diadia.lua
|
|
+++ texk/texlive/linked_scripts/diadia/diadia.lua 2016-01-29 11:39:38.599088869 +0000
|
|
@@ -0,0 +1,298 @@
|
|
+#!/usr/bin/env texlua
|
|
+--
|
|
+-- diadia [options]
|
|
+--
|
|
+-- loads and processes a diadia data file
|
|
+--
|
|
+-- License: LPPL
|
|
+--
|
|
+local version = "v1.0 (2015/05/15)"
|
|
+
|
|
+local infile = ""
|
|
+local outfile = ""
|
|
+local mode = "*"
|
|
+local startdate = ""
|
|
+local enddate = ""
|
|
+local columns = ""
|
|
+local data = {}
|
|
+function pversion()
|
|
+ print("diadia.lua " .. version)
|
|
+ print("(C) Josef Kleber 2015 License: LPPL")
|
|
+ os.exit(0)
|
|
+end
|
|
+function phelp()
|
|
+ print([[
|
|
+diadia.lua [options]
|
|
+
|
|
+ allows you to
|
|
+
|
|
+ - cut a chunk out of the data file
|
|
+ e.g.: -i in.dat -o out.dat -s YYYY-MM-DD -e YYYY-MM-DD
|
|
+
|
|
+ - compose a new data file based on given columns of an
|
|
+ existing data file
|
|
+ e.g.: -i in.dat -o out.dat -c 1,2
|
|
+
|
|
+ - create a new data file with date and value (1st and
|
|
+ 2nd column of existing file) and added value average
|
|
+ columns of the last 7, 14, 30, 60 and 90 days
|
|
+ e.g.: -i in.dat -o out.dat [-s YYYY-MM-DD -e YYYY-MM-DD]
|
|
+
|
|
+ Options:
|
|
+
|
|
+ -m specify the mode (cut|compose|average)
|
|
+
|
|
+ -i specify the input file
|
|
+
|
|
+ -o specify the output file
|
|
+
|
|
+ -c specify the columns for compose mode
|
|
+
|
|
+ -s specify the start date (YYYY-MM-DD) in
|
|
+ cut and average mode
|
|
+
|
|
+ -e specify the end date
|
|
+
|
|
+ -v prints version information
|
|
+
|
|
+ -h prints help information
|
|
+
|
|
+]])
|
|
+ pversion()
|
|
+end
|
|
+function check_date(date)
|
|
+ if string.find(date, "(%d%d%d%d)-(%d%d)-(%d%d)") == nil
|
|
+ then
|
|
+ io.stderr:write ("Error 21: wrong date format (YYYY-MM-DD)\n")
|
|
+ os.exit(11)
|
|
+ end
|
|
+end
|
|
+function parse_date(date)
|
|
+ return string.match(date, "(%d%d%d%d)%-(%d%d)%-(%d%d)")
|
|
+end
|
|
+function parse_dateinline(line)
|
|
+ return string.match(line, "(%d%d%d%d%-%d%d%-%d%d)")
|
|
+end
|
|
+function daystring(unixtime)
|
|
+ return os.date("%Y-%m-%d", unixtime)
|
|
+end
|
|
+function unixtime(year,month,day)
|
|
+ return os.time{year=year, month=month, day=day}
|
|
+end
|
|
+function round(number)
|
|
+ return math.floor(number+0.5)
|
|
+end
|
|
+function ptd(value)
|
|
+ local val = tostring(value)
|
|
+ local slen = string.len(val)
|
|
+ if slen == 3
|
|
+ then
|
|
+ return val
|
|
+ else
|
|
+ return val .. " "
|
|
+ end
|
|
+end
|
|
+function calc_avg(data,date,days)
|
|
+ local sum = 0
|
|
+ local wdays = 0
|
|
+ local wday
|
|
+ local endday = unixtime(parse_date(date))
|
|
+ local startday = endday - 60*60*24*(days-1)
|
|
+ while startday <= endday
|
|
+ do
|
|
+ wday = daystring(startday)
|
|
+ if data[wday] ~= nil
|
|
+ then
|
|
+ sum = sum + data[wday]
|
|
+ wdays = wdays + 1
|
|
+ end
|
|
+ startday = startday + 60*60*24
|
|
+ end
|
|
+ if wdays == 0
|
|
+ then
|
|
+ return "nan"
|
|
+ else
|
|
+ return tostring(round(sum/wdays))
|
|
+ end
|
|
+end
|
|
+function read_data(file)
|
|
+ local data = {}
|
|
+ local date
|
|
+ local startdate
|
|
+ local enddate
|
|
+ local dat
|
|
+ local firstline = true
|
|
+ for line in io.lines(file)
|
|
+ do
|
|
+ if string.match(line, "date")
|
|
+ then
|
|
+ else
|
|
+ date, dat = string.match(line, "(%d%d%d%d%-%d%d%-%d%d)%s+(%S+)")
|
|
+ if firstline == true
|
|
+ then
|
|
+ startdate = date
|
|
+ firstline = false
|
|
+ end
|
|
+ if dat ~= "nan" and dat ~= "{}" and dat ~= ""
|
|
+ then
|
|
+ data[date] = dat
|
|
+ end
|
|
+ end
|
|
+ end
|
|
+ enddate = date
|
|
+ return data,startdate,enddate
|
|
+end
|
|
+function write_avg_file(data,file,startdate,enddate)
|
|
+ local sdate
|
|
+ local edate
|
|
+ local wday
|
|
+ sdate = unixtime(parse_date(startdate))
|
|
+ edate = unixtime(parse_date(enddate))
|
|
+ outfile = assert(io.open(file, "w"))
|
|
+ outfile:write("date value avg07 avg14 avg30 avg60 avg90")
|
|
+ while sdate <= edate+7200
|
|
+ do
|
|
+ wday = daystring(sdate)
|
|
+ if data[wday] ~= nil
|
|
+ then
|
|
+ outfile:write("\n" .. wday .. " "
|
|
+ .. ptd(data[wday]) .. " "
|
|
+ .. ptd(calc_avg(data,wday,7)) .. " "
|
|
+ .. ptd(calc_avg(data,wday,14)) .. " "
|
|
+ .. ptd(calc_avg(data,wday,30)) .. " "
|
|
+ .. ptd(calc_avg(data,wday,60)) .. " "
|
|
+ .. ptd(calc_avg(data,wday,90)))
|
|
+ end
|
|
+ sdate = sdate + 60*60*24
|
|
+ end
|
|
+ outfile:close()
|
|
+end
|
|
+do
|
|
+ local newarg = {}
|
|
+ local i, limit = 1, #arg
|
|
+ while (i <= limit) do
|
|
+ if arg[i] == "-i" then
|
|
+ infile = arg[i+1]
|
|
+ i = i + 1
|
|
+ elseif arg[i] == "-o" then
|
|
+ outfile = arg[i+1]
|
|
+ i = i + 1
|
|
+ elseif arg[i] == "-s" then
|
|
+ startdate = arg[i+1]
|
|
+ i = i + 1
|
|
+ elseif arg[i] == "-e" then
|
|
+ enddate = arg[i+1]
|
|
+ i = i + 1
|
|
+ elseif arg[i] == "-c" then
|
|
+ columns = arg[i+1]
|
|
+ i = i + 1
|
|
+ elseif arg[i] == "-m" then
|
|
+ mode = arg[i+1]
|
|
+ i = i + 1
|
|
+ elseif arg[i] == "-v" then
|
|
+ pversion()
|
|
+ elseif arg[i] == "-h" then
|
|
+ phelp()
|
|
+ else
|
|
+ newarg[#newarg+1] = arg[i]
|
|
+ end
|
|
+ i = i + 1
|
|
+ end
|
|
+ arg = newarg
|
|
+end
|
|
+if mode == "average"
|
|
+then
|
|
+ local startd
|
|
+ local endd
|
|
+
|
|
+ print("set mode to " .. mode)
|
|
+ print("reading data file " .. infile)
|
|
+ data,startd,endd = read_data(infile)
|
|
+ if startdate ~= ""
|
|
+ then
|
|
+ startd = startdate
|
|
+ end
|
|
+ if enddate ~= ""
|
|
+ then
|
|
+ endd = enddate
|
|
+ end
|
|
+ print("writing data file " .. outfile)
|
|
+ write_avg_file(data,outfile,startd,endd)
|
|
+ os.exit(0)
|
|
+end
|
|
+if mode == "compose"
|
|
+then
|
|
+ local row = 0
|
|
+ local column = 0
|
|
+ local ofile
|
|
+ local cols
|
|
+
|
|
+ print("set mode to " .. mode)
|
|
+ print("reading data file " .. infile)
|
|
+ for line in io.lines(infile)
|
|
+ do
|
|
+ row = row + 1
|
|
+ data[row] = {}
|
|
+ column = 0
|
|
+ for value in string.gmatch(line, "%S+")
|
|
+ do
|
|
+ column = column + 1
|
|
+ data[row][column] = value
|
|
+ end
|
|
+ end
|
|
+ cols = assert(load("return table.concat({"..columns:gsub("%d+","(...)[%0]").."},' ')"))
|
|
+ ofile = assert(io.open(outfile, "w"))
|
|
+ print("writing data file " .. outfile)
|
|
+ for irow = 1,row
|
|
+ do
|
|
+ if irow == row
|
|
+ then
|
|
+ ofile:write(cols(data[irow]))
|
|
+ else
|
|
+ ofile:write(cols(data[irow]).."\n")
|
|
+ end
|
|
+ end
|
|
+ ofile:close()
|
|
+ os.exit(0)
|
|
+end
|
|
+if mode == "cut"
|
|
+then
|
|
+ local ofile
|
|
+ local date
|
|
+ local sdate
|
|
+ local edate
|
|
+ local cdate
|
|
+
|
|
+ check_date(startdate)
|
|
+ check_date(enddate)
|
|
+ sdate = unixtime(parse_date(startdate))
|
|
+ edate = unixtime(parse_date(enddate))
|
|
+ print("set mode to " .. mode)
|
|
+ print("reading data file " .. infile)
|
|
+ print("writing data file " .. outfile)
|
|
+ ofile = assert(io.open(outfile, "w"))
|
|
+ for line in io.lines(infile)
|
|
+ do
|
|
+ if string.match(line, "date")
|
|
+ then
|
|
+ ofile:write(line)
|
|
+ else
|
|
+ date = parse_dateinline(line)
|
|
+ cdate = unixtime(parse_date(date))
|
|
+ if cdate >= sdate and cdate <= edate
|
|
+ then
|
|
+ ofile:write("\n" .. line)
|
|
+ end
|
|
+ end
|
|
+ end
|
|
+ ofile:close()
|
|
+ os.exit(0)
|
|
+end
|
|
+if mode == "*"
|
|
+then
|
|
+ io.stderr:write ("Error 11: no mode specified!")
|
|
+ os.exit(11)
|
|
+else
|
|
+ io.stderr:write ("Error 12: invalid mode " .. mode)
|
|
+ os.exit(12)
|
|
+end
|
|
--- texk/texlive/linked_scripts/glossaries/makeglossaries-lite.lua
|
|
+++ texk/texlive/linked_scripts/glossaries/makeglossaries-lite.lua 2016-01-29 12:25:37.115559979 +0000
|
|
@@ -0,0 +1,471 @@
|
|
+#!/usr/bin/env texlua
|
|
+--[[
|
|
+ File : makeglossaries.lua
|
|
+ Author : Nicola Talbot
|
|
+
|
|
+ Lua alternative to the makeglossaries Perl script.
|
|
+
|
|
+ Since Lua has limitations, this script isn't an exact
|
|
+ replacement to the Perl script. In particular the makeglossaries -d
|
|
+ switch isn't implemented in this Lua version.
|
|
+ This also doesn't provide the more detailed diagnostics that the Perl
|
|
+ version does nor does it attempt any language mappings. Since xindy
|
|
+ requires Perl, don't use this script if you want to use xindy. Instead
|
|
+ use the Perl makeglossaries script.
|
|
+
|
|
+ This file is distributed as part of the glossaries LaTeX package.
|
|
+ Copyright 2015 Nicola L.C. Talbot
|
|
+ This work may be distributed and/or modified under the
|
|
+ conditions of the LaTeX Project Public License, either version 1.3
|
|
+ of this license or any later version.
|
|
+ The latest version of this license is in
|
|
+ http://www.latex-project.org/lppl.txt
|
|
+ and version 1.3 or later is part of all distributions of LaTeX
|
|
+ version 2005/12/01 or later.
|
|
+
|
|
+ This work has the LPPL maintenance status `maintained'.
|
|
+
|
|
+ History:
|
|
+ * 1.1 changed first line from lua to texlua
|
|
+--]]
|
|
+
|
|
+thisversion = "1.1 2015-07-17"
|
|
+
|
|
+quiet = false
|
|
+dryrun = false
|
|
+
|
|
+infile = nil
|
|
+outfile = nil
|
|
+styfile = nil
|
|
+logfile = nil
|
|
+
|
|
+isxindy = false
|
|
+
|
|
+xindylang = nil
|
|
+xindyexec = "xindy"
|
|
+
|
|
+makeindex_c = false
|
|
+makeindex_g = false
|
|
+letterorder = false
|
|
+makeindex_r = false
|
|
+makeindex_p = nil
|
|
+makeindex_m = "makeindex"
|
|
+
|
|
+function version()
|
|
+ print(string.format("makeglossaries.lua version %s", thisversion))
|
|
+ print("Copyright (C) 2015 Nicola L C Talbot")
|
|
+ print("This material is subject to the LaTeX Project Public License.")
|
|
+end
|
|
+
|
|
+function help()
|
|
+ version()
|
|
+ print([[
|
|
+Syntax : makeglossaries.lua [options] <filename>
|
|
+
|
|
+For use with the glossaries package to pass relevant
|
|
+files to makeindex or xindy.
|
|
+
|
|
+<filename> Base name of glossary file(s). This should
|
|
+ be the name of your main LaTeX document without any
|
|
+ extension. If you do add an extension, only that
|
|
+ glossary file will be processed.
|
|
+
|
|
+General Options:
|
|
+
|
|
+-o <gls> Use <gls> as the output file.
|
|
+ (Don't use -o if you have more than one glossary.)
|
|
+-s <sty> Employ <sty> as the style file.
|
|
+-t <log> Employ <log> as the transcript file.
|
|
+ (Don't use -t if you have more than one glossary
|
|
+ or the transcripts will be overwritten.)
|
|
+-q Quiet mode.
|
|
+-l Letter ordering.
|
|
+-n Print the command that would normally be executed,
|
|
+ but don't execute it (dry run).
|
|
+--help Print this help message.
|
|
+--version Print the version.
|
|
+
|
|
+Xindy Options:
|
|
+
|
|
+-L <language> Use <language>.
|
|
+-x <file> Full path to xindy executable.
|
|
+ (Default assumes xindy is on the operating system's path.)
|
|
+
|
|
+Makeindex Options:
|
|
+(See makeindex documentation for further details on these options.)
|
|
+
|
|
+-c Compress intermediate blanks.
|
|
+-g Employ German word ordering.
|
|
+-p <num> Set the starting page number to be <num>.
|
|
+-r Disable implicit page range formation.
|
|
+-m <file> Full path to makeindex executable.
|
|
+ (Default assumes makeindex is on the operating system's path.)
|
|
+
|
|
+This is a light-weight Lua alternative to the makeglossaries Perl script.
|
|
+If you want to use xindy, it's better to use the Perl makeglossaries version
|
|
+instead.
|
|
+]])
|
|
+end
|
|
+
|
|
+function dorun(name, glg, gls, glo, language, codepage)
|
|
+
|
|
+ if isxindy then
|
|
+ doxindy(name, glg, gls, glo, language, codepage)
|
|
+ else
|
|
+ domakeindex(name, glg, gls, glo)
|
|
+ end
|
|
+
|
|
+end
|
|
+
|
|
+function doxindy(name, glg, gls, glo, language, codepage)
|
|
+
|
|
+ cmd = string.format('"%s" -I xindy -L %s -C %s -M "%s" -t "%s" -o "%s"',
|
|
+ xindyexec, language, codepage, styfile, glg, gls)
|
|
+
|
|
+ if letterorder then cmd = string.format('%s -M ord/letorder', cmd) end
|
|
+
|
|
+ if quiet then cmd = string.format('%s -q', cmd) end
|
|
+
|
|
+ cmd = string.format('%s "%s"', cmd, glo)
|
|
+
|
|
+ if dryrun then
|
|
+
|
|
+ print(cmd)
|
|
+
|
|
+ else
|
|
+
|
|
+ assert(os.execute(cmd),
|
|
+ string.format("Failed to execute '%s'", cmd))
|
|
+
|
|
+ end
|
|
+
|
|
+end
|
|
+
|
|
+function domakeindex(name, glg, gls, glo)
|
|
+
|
|
+ cmd = string.format('"%s"', makeindex_m)
|
|
+
|
|
+ if makeindex_c then cmd = cmd .. " -c" end
|
|
+
|
|
+ if makeindex_g then cmd = cmd .. " -g" end
|
|
+
|
|
+ if letterorder then cmd = cmd .. " -l" end
|
|
+
|
|
+ if quiet then cmd = cmd .. " -q" end
|
|
+
|
|
+ if glg ~= nil then cmd = string.format('%s -t "%s"', cmd, glg) end
|
|
+
|
|
+ if gls ~= nil then cmd = string.format('%s -o "%s"', cmd, gls) end
|
|
+
|
|
+ if makeindex_p ~= nil then
|
|
+ cmd = string.format("%s -p %s", cmd, makeindex_p)
|
|
+ end
|
|
+
|
|
+ if styfile ~= nil then
|
|
+ cmd = string.format('%s -s "%s"', cmd, styfile)
|
|
+ end
|
|
+
|
|
+ cmd = string.format('%s "%s"', cmd, glo)
|
|
+
|
|
+ if dryrun then
|
|
+ print(cmd)
|
|
+ else
|
|
+ assert(os.execute(cmd),
|
|
+ string.format("Failed to execute '%s'", cmd))
|
|
+ end
|
|
+
|
|
+end
|
|
+
|
|
+if #arg < 1
|
|
+then
|
|
+ error("Syntax error: filename expected. Use --help for help.")
|
|
+end
|
|
+
|
|
+i = 1
|
|
+
|
|
+while i <= #arg do
|
|
+
|
|
+-- General Options
|
|
+ if arg[i] == "-q" then
|
|
+ quiet = true
|
|
+ elseif arg[i] == "-n"
|
|
+ then
|
|
+ dryrun = true
|
|
+ elseif arg[i] == "-o"
|
|
+ then
|
|
+ i = i + 1
|
|
+ if i > #arg then error("-o requires a filename") end
|
|
+ outfile = arg[i]
|
|
+ elseif arg[i] == "-s"
|
|
+ then
|
|
+ i = i + 1
|
|
+ if i > #arg then error("-s requires a filename") end
|
|
+ styfile = arg[i]
|
|
+ elseif arg[i] == "-t"
|
|
+ then
|
|
+ i = i + 1
|
|
+ if i > #arg then error("-t requires a filename") end
|
|
+ logfile = arg[i]
|
|
+ elseif arg[i] == "--version"
|
|
+ then
|
|
+ version()
|
|
+ os.exit()
|
|
+ elseif arg[i] == "--help"
|
|
+ then
|
|
+ help()
|
|
+ os.exit()
|
|
+-- General options for the Perl version that aren't implemented by
|
|
+-- this light-weight version:
|
|
+ elseif (arg[i] == "-Q") or (arg[i] == "-k")
|
|
+ then
|
|
+ print(string.format("Ignoring option '%s' (only available with the Perl version).", arg[i]))
|
|
+ elseif arg[i] == "-d"
|
|
+ then
|
|
+ error(string.format(
|
|
+ "The '%s' option isn't available for this light-weight version.\nYou will need to use the Perl version instead.",
|
|
+ arg[i]))
|
|
+
|
|
+-- Xindy Options
|
|
+ elseif arg[i] == "-L"
|
|
+ then
|
|
+ i = i + 1
|
|
+ if i > #arg then error("-L requires a language name") end
|
|
+ xindylang = arg[i]
|
|
+ elseif arg[i] == "-x"
|
|
+ then
|
|
+ i = i + 1
|
|
+ if i > #arg then error("-x requires a filename") end
|
|
+ xindyexec = arg[i]
|
|
+
|
|
+-- Makeindex Options
|
|
+ elseif arg[i] == "-c"
|
|
+ then
|
|
+ makeindex_c = true
|
|
+ elseif arg[i] == "-g"
|
|
+ then
|
|
+ makeindex_g = true
|
|
+ elseif arg[i] == "-l"
|
|
+ then
|
|
+ letterorder = true
|
|
+ elseif arg[i] == "-r"
|
|
+ then
|
|
+ makeindex_r = true
|
|
+ elseif arg[i] == "-p"
|
|
+ then
|
|
+ i = i + 1
|
|
+ if i > #arg then error("-p requires a page number") end
|
|
+ makeindex_p = arg[i]
|
|
+ elseif arg[i] == "-m"
|
|
+ then
|
|
+ i = i + 1
|
|
+ if i > #arg then error("-m requires a filename") end
|
|
+ makeindex_m = arg[i]
|
|
+
|
|
+-- Unknown Option
|
|
+ elseif string.sub(arg[i], 1, 1) == "-"
|
|
+ then
|
|
+ error(
|
|
+ string.format("Syntax error: unknown option '%s'. Use '--help' for help.",
|
|
+ arg[i]));
|
|
+
|
|
+-- Input file
|
|
+ elseif infile == nil
|
|
+ then
|
|
+ infile = arg[i]
|
|
+ else
|
|
+ error("Syntax error: only one filename permitted");
|
|
+ end
|
|
+
|
|
+ i = i + 1
|
|
+end
|
|
+
|
|
+if not quiet then
|
|
+ print(string.format("makeglossaries.lua version %s", thisversion))
|
|
+end
|
|
+
|
|
+if infile == nil
|
|
+then
|
|
+ error("Syntax error: missing filename")
|
|
+end
|
|
+
|
|
+i, j = string.find(infile, "%.%a*$")
|
|
+
|
|
+ext = nil
|
|
+inbase = infile
|
|
+
|
|
+if i ~= nil
|
|
+then
|
|
+ ext = string.sub(infile, i, j);
|
|
+
|
|
+ lext = string.lower(ext)
|
|
+
|
|
+ inbase = string.sub(infile, 1, i-1);
|
|
+
|
|
+ -- Just in case user has accidentally specified the aux or tex file
|
|
+ if lext == ".aux" or lext == ".tex"
|
|
+ then
|
|
+ ext = nil
|
|
+ infile = inbase
|
|
+ end
|
|
+end
|
|
+
|
|
+auxfile = inbase..".aux"
|
|
+
|
|
+if not quiet then print(string.format("Parsing '%s'", auxfile)) end
|
|
+
|
|
+assert(io.input(auxfile),
|
|
+ string.format("Unable to open '%s'", auxfile))
|
|
+
|
|
+aux = io.read("*a")
|
|
+
|
|
+if styfile == nil
|
|
+then
|
|
+ styfile = string.match(aux, "\\@istfilename{\"?([^}]*%.?%a*)\"?}")
|
|
+
|
|
+ if styfile == nil
|
|
+ then
|
|
+ error([[
|
|
+No \@istfilename found.
|
|
+Did your LaTeX run fail?
|
|
+Did your LaTeX run produce any output?
|
|
+Did you remember to use \makeglossaries?
|
|
+ ]])
|
|
+ end
|
|
+end
|
|
+
|
|
+i = string.len(styfile)
|
|
+
|
|
+if string.sub(styfile, i-3, i) == ".xdy"
|
|
+then
|
|
+ isxindy = true
|
|
+end
|
|
+
|
|
+if not letterorder
|
|
+then
|
|
+ if string.match(aux, "\\@glsorder{letter}") ~= nil
|
|
+ then
|
|
+ letterorder = true
|
|
+ end
|
|
+end
|
|
+
|
|
+if dryrun then print("Dry run mode. No commands will be executed.") end
|
|
+
|
|
+onlyname = nil
|
|
+
|
|
+glossaries = {}
|
|
+
|
|
+for name, glg, gls, glo in
|
|
+ string.gmatch(aux, "\\@newglossary{([^}]+)}{([^}]+)}{([^}]+)}{([^}]+)}") do
|
|
+
|
|
+ if not quiet then
|
|
+ print(string.format("Found glossary type '%s' (%s,%s,%s)",
|
|
+ name, glg, gls, glo))
|
|
+ end
|
|
+
|
|
+ glossaries[name] = {}
|
|
+
|
|
+ glossaries[name].glg = glg
|
|
+ glossaries[name].gls = gls
|
|
+ glossaries[name].glo = glo
|
|
+
|
|
+ if "."..glo == ext then
|
|
+
|
|
+ onlyname = name
|
|
+
|
|
+ end
|
|
+
|
|
+ if isxindy then
|
|
+
|
|
+ if xindylang == nil then
|
|
+ glossaries[name].language = string.match(aux,
|
|
+ "\\@xdylanguage{"..name.."}{([^}]+)}");
|
|
+ else
|
|
+ glossaries[name].language = xindylang
|
|
+ end
|
|
+
|
|
+ glossaries[name].codepage = string.match(aux,
|
|
+ "\\@gls@codepage{"..name.."}{([^}]+)}");
|
|
+
|
|
+ end
|
|
+
|
|
+end
|
|
+
|
|
+
|
|
+if ext == nil
|
|
+then
|
|
+
|
|
+ done = false
|
|
+
|
|
+ for name, value in pairs(glossaries) do
|
|
+
|
|
+ glg = value.glg
|
|
+ gls = value.gls
|
|
+ glo = value.glo
|
|
+
|
|
+ if logfile == nil then
|
|
+ glg = inbase .. "." .. glg
|
|
+ else
|
|
+ glg = logfile
|
|
+ end
|
|
+
|
|
+ if outfile == nil then
|
|
+ gls = inbase .. "." .. gls
|
|
+ else
|
|
+ gls = outfile
|
|
+ end
|
|
+
|
|
+ glo = infile .. "." .. glo
|
|
+
|
|
+ dorun(name, glg, gls, glo, value.language, value.codepage)
|
|
+
|
|
+ done = true
|
|
+ end
|
|
+
|
|
+ if not done then
|
|
+ error([[
|
|
+No \@newglossary commands found in aux file.
|
|
+Did you remember to use \makeglossaries?
|
|
+Did you accidentally suppress the default glossary using "nomain"
|
|
+and not provide an alternative glossary?
|
|
+]])
|
|
+ end
|
|
+
|
|
+else
|
|
+
|
|
+ if onlyname == nil then
|
|
+
|
|
+ glo = infile
|
|
+ gls = outfile
|
|
+ glg = logfile
|
|
+
|
|
+ language = xindylang
|
|
+ codepage = 'utf8'
|
|
+
|
|
+ if language == nil then language = 'english' end
|
|
+
|
|
+ if gls == nil then gls = infile..".gls" end
|
|
+
|
|
+ else
|
|
+
|
|
+ value = glossaries[onlyname]
|
|
+
|
|
+ glg = value.glg
|
|
+ gls = value.gls
|
|
+ glo = infile
|
|
+
|
|
+ if logfile == nil then
|
|
+ glg = inbase .. "." .. glg
|
|
+ else
|
|
+ glg = logfile
|
|
+ end
|
|
+
|
|
+ if outfile == nil then
|
|
+ gls = inbase .. "." .. gls
|
|
+ else
|
|
+ gls = outfile
|
|
+ end
|
|
+
|
|
+ end
|
|
+
|
|
+ dorun(onlyname, glg, gls, glo, language, codepage)
|
|
+end
|
|
--- texk/texlive/linked_scripts/make4ht/make4ht
|
|
+++ texk/texlive/linked_scripts/make4ht/make4ht 2016-01-29 13:11:56.883615943 +0000
|
|
@@ -0,0 +1,62 @@
|
|
+#!/usr/bin/env texlua
|
|
+kpse.set_program_name("luatex")
|
|
+
|
|
+
|
|
+local make4ht = require("make4ht-lib")
|
|
+local lapp = require("lapp-mk4")
|
|
+local mkutils = require("mkutils")
|
|
+local mkparams = require("mkparams")
|
|
+-- args string is here just as sample, we dont pass it it to
|
|
+-- mkparams.get_args() so default args string is used
|
|
+local args = [[
|
|
+make4ht - build system for tex4ht
|
|
+Usage:
|
|
+make4ht [options] filename ["tex4ht.sty op." "tex4ht op." "t4ht op" "latex op"]
|
|
+-c,--config (default xhtml) Custom config file
|
|
+-d,--output-dir (default nil) Output directory
|
|
+-l,--lua Use lualatex for document compilation
|
|
+-s,--shell-escape Enables running external programs from LaTeX
|
|
+-u,--utf8 For output documents in utf8 encoding
|
|
+-x,--xetex Use xelatex for document compilation
|
|
+<filename> (string) Input file name
|
|
+]]
|
|
+
|
|
+local args = mkparams.get_args()
|
|
+
|
|
+local parameters = mkparams.process_args(args)
|
|
+
|
|
+local mode = parameters.mode
|
|
+local build_file = parameters.build_file
|
|
+
|
|
+local make = mkutils.load_config(parameters, build_file)["Make"]
|
|
+make.params = parameters
|
|
+if make:length() < 1 then
|
|
+ if mode == "draft" then
|
|
+ make:htlatex()
|
|
+ else
|
|
+ make:htlatex()
|
|
+ make:htlatex()
|
|
+ make:htlatex()
|
|
+ end
|
|
+end
|
|
+
|
|
+
|
|
+if not args["no-tex4ht"] then
|
|
+ make:tex4ht()
|
|
+end
|
|
+
|
|
+local ext = args.xetex and "xdv" or "dvi"
|
|
+if #make.image_patterns > 0 then
|
|
+ make.params.t4ht_par = make.params.t4ht_par .. " -p"
|
|
+end
|
|
+make:t4ht {ext = ext}
|
|
+make:match("tmp$", function() return false,"tmp file" end)
|
|
+make:match(".*",function(filename,par)
|
|
+ local outdir = '' --par["outdir"] and par["outdir"] .."/" or ''
|
|
+ if par['outdir'] ~= "" then outdir = par['outdir'] .. '/' end
|
|
+ print("outdir: "..outdir)
|
|
+ local outfilename = outdir .. filename
|
|
+ mkutils.copy(filename,outfilename)
|
|
+ return true
|
|
+end)
|
|
+make:run()
|
|
--- texk/texlive/linked_scripts/pdfbook2/pdfbook2
|
|
+++ texk/texlive/linked_scripts/pdfbook2/pdfbook2 2016-01-29 13:13:36.561613489 +0000
|
|
@@ -0,0 +1,237 @@
|
|
+#!/usr/bin/env python
|
|
+""" pdfbook2 - transform pdf files to booklets
|
|
+
|
|
+ This program 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.
|
|
+
|
|
+ This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
|
+ """
|
|
+
|
|
+
|
|
+import sys
|
|
+import subprocess
|
|
+import os
|
|
+from optparse import OptionParser, OptionGroup, HelpFormatter
|
|
+import shutil
|
|
+
|
|
+
|
|
+#===============================================================================
|
|
+# Create booklet for file $name
|
|
+#===============================================================================
|
|
+
|
|
+def booklify( name, opts ):
|
|
+ #------------------------------------------------------ Check if file exists
|
|
+ print "\nProcessing", name
|
|
+ if not os.path.isfile( name ):
|
|
+ print "SKIP: file not found."
|
|
+ return
|
|
+ print "Getting bounds...",
|
|
+ sys.stdout.flush()
|
|
+
|
|
+ #---------------------------------------------------------- useful constants
|
|
+ bboxName = "%%HiResBoundingBox:"
|
|
+ tmpFile = ".crop-tmp.pdf"
|
|
+
|
|
+ #------------------------------------------------- find min/max bounding box
|
|
+ if opts.crop:
|
|
+ p = subprocess.Popen( ["pdfcrop", "--verbose",
|
|
+ "--resolution", repr( opts.resolution ),
|
|
+ name, tmpFile],
|
|
+ stdout = subprocess.PIPE,
|
|
+ stderr = subprocess.PIPE )
|
|
+ p.wait()
|
|
+ out, err = p.communicate()
|
|
+ if len( err ) != 0:
|
|
+ print err
|
|
+ print "\n\nABORT: Problem getting bounds"
|
|
+ sys.exit( 1 )
|
|
+ lines = out.splitlines()
|
|
+ bboxes = [s[len( bboxName ) + 1:] for s in lines if s.startswith( bboxName )]
|
|
+ bounds = [[float( x ) for x in bbox.split()] for bbox in bboxes ]
|
|
+ minLOdd = min( [bound[0] for bound in bounds[::2] ] )
|
|
+ maxROdd = max( [bound[2] for bound in bounds[::2] ] )
|
|
+ minLEven = min( [bound[0] for bound in bounds[1::2] ] )
|
|
+ maxREven = max( [bound[2] for bound in bounds[1::2] ] )
|
|
+ minT = min( [bound[1] for bound in bounds ] )
|
|
+ maxB = max( [bound[3] for bound in bounds ] )
|
|
+
|
|
+ widthOdd = maxROdd - minLOdd
|
|
+ widthEven = maxREven - minLEven
|
|
+ maxWidth = max( widthOdd, widthEven )
|
|
+ minLOdd -= maxWidth - widthOdd
|
|
+ maxREven += maxWidth - widthEven
|
|
+
|
|
+ print "done"
|
|
+ sys.stdout.flush()
|
|
+
|
|
+ #--------------------------------------------- crop file to area of interest
|
|
+ print "cropping...",
|
|
+ sys.stdout.flush()
|
|
+ p = subprocess.Popen( ["pdfcrop",
|
|
+ "--bbox-odd", "{L} {T} {R} {B}".format( L = minLOdd - opts.innerMargin / 2,
|
|
+ T = minT - opts.topMargin,
|
|
+ R = maxROdd + opts.outerMargin,
|
|
+ B = maxB + opts.outerMargin ),
|
|
+ "--bbox-even", "{L} {T} {R} {B}".format( L = minLEven - opts.outerMargin,
|
|
+ T = minT - opts.topMargin,
|
|
+ R = maxREven + opts.innerMargin / 2,
|
|
+ B = maxB + opts.outerMargin ),
|
|
+ "--resolution", repr( opts.resolution ),
|
|
+ name,
|
|
+ tmpFile],
|
|
+ stdout = subprocess.PIPE,
|
|
+ stderr = subprocess.PIPE )
|
|
+ p.wait()
|
|
+ out, err = p.communicate()
|
|
+ if len( err ) != 0:
|
|
+ print err
|
|
+ print "\n\nABORT: Problem with cropping"
|
|
+ sys.exit( 1 )
|
|
+ print "done"
|
|
+ sys.stdout.flush()
|
|
+ else:
|
|
+ shutil.copy( name, tmpFile )
|
|
+
|
|
+ #-------------------------------------------------------- create the booklet
|
|
+ print "create booklet...",
|
|
+ sys.stdout.flush()
|
|
+ pdfJamCallList = [ "pdfjam",
|
|
+ "--booklet", "true",
|
|
+ "--landscape",
|
|
+ "--suffix", "book",
|
|
+ "--signature", repr( opts.signature ),
|
|
+ tmpFile ]
|
|
+
|
|
+ # add option --paper to call
|
|
+ if opts.paper is not None:
|
|
+ pdfJamCallList.append( "--paper" )
|
|
+ pdfJamCallList.append( opts.paper )
|
|
+
|
|
+ # add option --short-edge to call
|
|
+ if opts.shortedge:
|
|
+ # check if everyshi.sty exists as texlive recommends
|
|
+ p = subprocess.Popen( ["kpsewhich", "everyshi.sty"],
|
|
+ stdout = subprocess.PIPE,
|
|
+ stderr = subprocess.PIPE )
|
|
+ p.wait()
|
|
+ out, err = p.communicate()
|
|
+ if len( out ) == 0:
|
|
+ print "\n\nABORT: The everyshi.sty latex package is needed for short-edge."
|
|
+ sys.exit( 1 )
|
|
+ else:
|
|
+ pdfJamCallList.append( "--preamble" )
|
|
+ pdfJamCallList.append( r"\usepackage{everyshi}\makeatletter\EveryShipout{\ifodd\c@page\pdfpageattr{/Rotate 180}\fi}\makeatother" )
|
|
+
|
|
+ # run call to pdfJam to make booklet
|
|
+ p = subprocess.Popen( pdfJamCallList,
|
|
+ stdout = subprocess.PIPE,
|
|
+ stderr = subprocess.PIPE )
|
|
+ p.wait()
|
|
+
|
|
+ #-------------------------------------------- move file and remove temp file
|
|
+ os.rename( tmpFile[:-4] + "-book.pdf", name[:-4] + "-book.pdf" )
|
|
+ os.remove( tmpFile )
|
|
+ print "done"
|
|
+ sys.stdout.flush()
|
|
+
|
|
+
|
|
+#===============================================================================
|
|
+# Help formatter
|
|
+#===============================================================================
|
|
+
|
|
+class MyHelpFormatter ( HelpFormatter ):
|
|
+ """Format help with indented section bodies.
|
|
+ """
|
|
+
|
|
+ def __init__( self,
|
|
+ indent_increment = 4,
|
|
+ max_help_position = 16,
|
|
+ width = None,
|
|
+ short_first = 0 ):
|
|
+ HelpFormatter.__init__(
|
|
+ self, indent_increment, max_help_position, width, short_first )
|
|
+
|
|
+ def format_usage( self, usage ):
|
|
+ return ( "USAGE\n\n%*s%s\n" ) % ( self.indent_increment, "", usage )
|
|
+
|
|
+ def format_heading( self, heading ):
|
|
+ return "%*s%s\n\n" % ( self.current_indent, "", heading.upper() )
|
|
+
|
|
+
|
|
+#===============================================================================
|
|
+# main programm
|
|
+#===============================================================================
|
|
+
|
|
+if __name__ == "__main__":
|
|
+ #------------------------------------------------------------ useful strings
|
|
+ usageString = "Usage: %prog [options] file1 [file2 ...]"
|
|
+ versionString = """
|
|
+ %prog v1.2
|
|
+ (c) 2015 Johannes Neumann (http://www.neumannjo.de)
|
|
+ licensed under GPLv3 (http://www.gnu.org/licenses/gpl-3.0)
|
|
+ based on pdfbook by David Firth with help from Marco Pessotto\n"""
|
|
+ defaultString = " (default: %default)"
|
|
+
|
|
+ #------------------------------------------------- create commandline parser
|
|
+ parser = OptionParser( usage = usageString, version = versionString,
|
|
+ formatter = MyHelpFormatter( indent_increment = 4 ) )
|
|
+
|
|
+ generalGroup = OptionGroup( parser, "General" )
|
|
+ generalGroup.add_option( "-p", "--paper", dest = "paper", type = "str", action = "store",
|
|
+ metavar = "STR",
|
|
+ help = "Format of the output paper dimensions as latex keyword (e.g. a4paper, letterpaper, legalpaper, ...)" )
|
|
+ generalGroup.add_option( "-s", "--short-edge", dest = "shortedge", action = "store_true",
|
|
+ help = "Format the booklet for short-edge double-sided printing",
|
|
+ default = False )
|
|
+ generalGroup.add_option( "-n", "--no-crop", dest = "crop", action = "store_false",
|
|
+ help = "Prevent the cropping to the content area",
|
|
+ default = True )
|
|
+ parser.add_option_group( generalGroup )
|
|
+
|
|
+ marginGroup = OptionGroup( parser, "Margins" )
|
|
+ marginGroup.add_option( "-o", "--outer-margin", type = "int", default = 40,
|
|
+ dest = "outerMargin", action = "store", metavar = "INT",
|
|
+ help = "Defines the outer margin in the booklet" + defaultString )
|
|
+ marginGroup.add_option( "-i", "--inner-margin", type = "int", default = 150,
|
|
+ dest = "innerMargin", action = "store", metavar = "INT",
|
|
+ help = "Defines the inner margin between the pages in the booklet" + defaultString )
|
|
+ marginGroup.add_option( "-t", "--top-margin", type = "int", default = 30,
|
|
+ dest = "topMargin", action = "store", metavar = "INT",
|
|
+ help = "Defines the top margin in the booklet" + defaultString )
|
|
+ marginGroup.add_option( "-b", "--bottom-margin", type = "int", default = 30, metavar = "INT",
|
|
+ dest = "bottomMargin", action = "store",
|
|
+ help = "Defines the bottom margin in the booklet" + defaultString )
|
|
+ parser.add_option_group( marginGroup )
|
|
+
|
|
+ advancedGroup = OptionGroup( parser, "Advanced" )
|
|
+ advancedGroup.add_option( "--signature", dest = "signature", action = "store", type = "int",
|
|
+ help = "Define the signature for the booklet handed to pdfjam, needs to be multiple of 4" + defaultString,
|
|
+ default = 4, metavar = "INT" )
|
|
+ advancedGroup.add_option( "--signature*", dest = "signature", action = "store", type = "int",
|
|
+ help = "Same as --signature", metavar = "INT" )
|
|
+ advancedGroup.add_option( "--resolution", dest = "resolution", action = "store", type = "int",
|
|
+ help = "Resolution used by ghostscript in bp" + defaultString,
|
|
+ metavar = "INT", default = 72 )
|
|
+ parser.add_option_group( advancedGroup )
|
|
+
|
|
+ opts, args = parser.parse_args()
|
|
+
|
|
+ #------------------------------------ show help if started without arguments
|
|
+ if len( args ) == 0:
|
|
+ parser.print_version()
|
|
+ parser.print_help()
|
|
+ print ""
|
|
+ sys.exit( 2 )
|
|
+
|
|
+ #------------------------------------------- run for each provided file name
|
|
+ parser.print_version()
|
|
+ for arg in args:
|
|
+ booklify( arg, opts )
|
|
--- texk/texlive/linked_scripts/tex4ebook/tex4ebook
|
|
+++ texk/texlive/linked_scripts/tex4ebook/tex4ebook 2016-01-29 13:15:14.519645559 +0000
|
|
@@ -0,0 +1,154 @@
|
|
+#!/usr/bin/env texlua
|
|
+kpse.set_program_name("luatex")
|
|
+require("lapp-mk4")
|
|
+-- require("ebookutils")
|
|
+local ebookutils = require "mkutils"
|
|
+
|
|
+-- Setting
|
|
+local latex_cmd="latex"
|
|
+local copy_cmd="copy"
|
|
+local move_cmd="move"
|
|
+local env_param="%%"
|
|
+local htlatex_call=""
|
|
+-- These correspond to htlatex parameters
|
|
+local tex4ht_sty_par=""
|
|
+local tex4ht_par=""
|
|
+local t4ht_par=""
|
|
+local latex_par=""
|
|
+local output_formats={epub=true,mobi=true,epub3=true}
|
|
+local executor=nil
|
|
+local tidy = false
|
|
+local include_fonts = false
|
|
+local arg_message = [[
|
|
+tex4ebook - ebook generation support for LaTeX
|
|
+Usage:
|
|
+tex4ebook [switches] inputfile ["tex4ht.sty op." "tex4ht op." "t4ht op" "latex op"]
|
|
+-c,--config (default xhtml) Custom config file
|
|
+-e,--build-file (default nil) If build file is different than `filename`.mk4
|
|
+-f,--format (default epub) Output format. Supported values: epub, epub3, mobi
|
|
+-l,--lua Runs htlualatex instead of htlatex
|
|
+-m,--mode (default default) Switch which can be used in the makefile
|
|
+-r,--resolution (default 167)
|
|
+-s,--shell-escape Enable shell escape in htlatex run
|
|
+-t,--tidy Run html tidy on html output. May result in wrong spacing!
|
|
+]]
|
|
+
|
|
+-- This option is no longer available, all files must be unicode
|
|
+-- -u,--utf8
|
|
+local args=lapp(arg_message)
|
|
+
|
|
+if args[1] == nil then
|
|
+ print(arg_message)
|
|
+ return
|
|
+else
|
|
+ input_file=args[1]
|
|
+end
|
|
+
|
|
+if args.lua then
|
|
+ print("Mame lua")
|
|
+ latex_cmd="dvilualatex"
|
|
+end
|
|
+
|
|
+--if args.utf8 then
|
|
+tex4ht_sty_par=tex4ht_sty_par .. ", charset=utf-8"
|
|
+tex4ht_par=tex4ht_par .. " -cmozhtf -utf8"
|
|
+--end
|
|
+
|
|
+if args["shell-escape"] then
|
|
+ latex_par = latex_par .. " -shell-escape"
|
|
+end
|
|
+
|
|
+if args["include-fonts"] then
|
|
+ include_fonts = true
|
|
+end
|
|
+
|
|
+-- local mathml = ","
|
|
+-- if args["mathml"] then
|
|
+-- -- mathml = ",mathml,"
|
|
+-- tex4ht_sty_par = tex4ht_sty_par .. ",mathml"
|
|
+-- end
|
|
+local mode = args.mode or "default"
|
|
+
|
|
+if os.type=="unix" then
|
|
+ env_param="$"
|
|
+ copy_cmd="cp"
|
|
+ move_cmd="mv"
|
|
+ t4ht_dir_format="%s/"
|
|
+else
|
|
+ env_param="%%"
|
|
+ copy_cmd="copy"
|
|
+ move_cmd="move"
|
|
+ t4ht_dir_format="%s"
|
|
+end
|
|
+
|
|
+if args.tidy then
|
|
+ tidy = true
|
|
+else
|
|
+ tidy = false
|
|
+end
|
|
+-- Env file copying
|
|
+
|
|
+--[[if not ebookutils.file_exists("tex4ht.env") then
|
|
+local env_file = kpse.find_file("epub2.env")
|
|
+ebookutils.copy_filter(env_file,"tex4ht.env",function(s) return s % {
|
|
+move = move_cmd,
|
|
+copy = copy_cmd,
|
|
+resolution = args.resolution
|
|
+} end)
|
|
+end--]]
|
|
+
|
|
+--print ("nazdar ${world}" % {world="svete"})
|
|
+--print(args.config)
|
|
+
|
|
+local input = ebookutils.remove_extension(input_file)
|
|
+local config=ebookutils.remove_extension(args.config)
|
|
+local tex4ht_sty_par = config ..tex4ht_sty_par..","+args.format
|
|
+--local sty_args = args[2] and ", " .. args[2] or ""
|
|
+local sty_args = ""
|
|
+if args[2] then
|
|
+ sty_args = "," .. args[2]
|
|
+end
|
|
+local tex4ht_sty_par = tex4ht_sty_par + sty_args --args[2]
|
|
+local tex4ht_par = tex4ht_par +args[3]
|
|
+local t4ht_par = t4ht_par + args[4]
|
|
+local latex_par = latex_par + args[5]
|
|
+local params = {
|
|
+ htlatex=latex_cmd
|
|
+ ,input=input
|
|
+ ,format=args.format
|
|
+ ,latex_par=latex_par
|
|
+ ,tex4ht_sty_par=tex4ht_sty_par
|
|
+ ,tex4ht_par=tex4ht_par
|
|
+ ,t4ht_par=t4ht_par
|
|
+ ,mode = mode
|
|
+ ,t4ht_dir_format=t4ht_dir_format
|
|
+ ,tidy = tidy
|
|
+ ,include_fonts = include_fonts
|
|
+ ,resolution=args.resolution
|
|
+ ,mathml=mathml
|
|
+ ,packages="\\RequirePackage{tex4ebook}"
|
|
+}
|
|
+
|
|
+if output_formats[args.format] then
|
|
+ executor=require("exec_"..args.format)
|
|
+ params=executor.prepare(params)
|
|
+else
|
|
+ print("Unknown output format: "..args.format)
|
|
+ return
|
|
+end
|
|
+
|
|
+local build_file = input.. ".mk4"
|
|
+
|
|
+if args["build-file"] and args["build-file"] ~= "nil" then
|
|
+ build_file = args["build-file"]
|
|
+end
|
|
+
|
|
+local config_file = ebookutils.load_config(nil, build_file)
|
|
+
|
|
+params["config_file"] = config_file
|
|
+--config_file.Make:run()
|
|
+print("${htlatex} ${input} \"${tex4ht_sty_par}\" \"${tex4ht_par}\" \"${t4ht_par}\" \"${latex_par}\"" % params)
|
|
+executor.run(input,params)
|
|
+executor.writeContainer()
|
|
+executor.clean()
|
|
+--print(args[1])
|