summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/grph-con.lua
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2017-02-17 10:31:56 +0100
committerContext Git Mirror Bot <phg42.2a@gmail.com>2017-02-17 10:31:56 +0100
commitb14f992ef5f4e868c9959b174278c86516d60dbc (patch)
tree28587bb46c025ea7b0d27ba93f09c93dcf53c73a /tex/context/base/mkiv/grph-con.lua
parent95a1799032dc61dbca4a11e495be34b4397c8fec (diff)
downloadcontext-b14f992ef5f4e868c9959b174278c86516d60dbc.tar.gz
2017-02-17 10:23:00
Diffstat (limited to 'tex/context/base/mkiv/grph-con.lua')
-rw-r--r--tex/context/base/mkiv/grph-con.lua272
1 files changed, 165 insertions, 107 deletions
diff --git a/tex/context/base/mkiv/grph-con.lua b/tex/context/base/mkiv/grph-con.lua
index 380f56b14..65bb91631 100644
--- a/tex/context/base/mkiv/grph-con.lua
+++ b/tex/context/base/mkiv/grph-con.lua
@@ -16,7 +16,6 @@ local settings_to_array = utilities.parsers.settings_to_array
local settings_to_hash = utilities.parsers.settings_to_hash
local allocate = utilities.storage.allocate
local setmetatableindex = table.setmetatableindex
-local replacetemplate = utilities.templates.replace
local codeinjections = backends.codeinjections
local nodeinjections = backends.nodeinjections
@@ -34,7 +33,6 @@ local converters = figures.converters
local programs = figures.programs
local runprogram = programs.run
-local makeuptions = programs.makeoptions
do -- eps | ps
@@ -47,15 +45,16 @@ do -- eps | ps
local epsconverter = converters.eps
converters.ps = epsconverter
- local epstopdf = {
- resolutions = {
- [v_low] = "screen",
- [v_medium] = "ebook",
- [v_high] = "prepress",
- },
- command = os.type == "windows" and { "gswin64c", "gswin32c" } or "gs",
- -- -dProcessDSCComments=false
- argument = longtostring [[
+ local resolutions = {
+ [v_low] = "screen",
+ [v_medium] = "ebook",
+ [v_high] = "prepress",
+ }
+
+ local runner = sandbox.registerrunner {
+ name = "eps to pdf",
+ program = { windows = "gswin64c", unix = "gs" },
+ template = longtostring [[
-q
-sDEVICE=pdfwrite
-dNOPAUSE
@@ -70,10 +69,17 @@ do -- eps | ps
"%oldname%"
-c quit
]],
+ checkers = {
+ oldname = "readable",
+ newname = "writable",
+ presets = "string",
+ level = "string",
+ colorspace = "string",
+ },
}
- programs.epstopdf = epstopdf
- programs.gs = epstopdf
+ programs.epstopdf = { resolutions = epstopdf, runner = runner }
+ programs.gs = programs.epstopdf
local cleanups = { }
local cleaners = { }
@@ -85,9 +91,9 @@ do -- eps | ps
* P("%AI3_Cropmarks:") * quadruple
* P("%%CropBox:") * quadruple
/ function(b,h,m,c)
- return formatters["%%%%BoundingBox: %i %i %i %i\n%%%%HiResBoundingBox: %F %F %F %F\n%%%%CropBox: %F %F %F %F\n"](
- m[1],m[2],m[3],m[4],
- m[1],m[2],m[3],m[4],
+ return formatters["%%%%BoundingBox: %r %r %r %r\n%%%%HiResBoundingBox: %F %F %F %F\n%%%%CropBox: %F %F %F %F\n"](
+ m[1],m[2],m[3],m[4], -- rounded integer
+ m[1],m[2],m[3],m[4], -- real number
m[1],m[2],m[3],m[4]
)
end
@@ -108,8 +114,7 @@ do -- eps | ps
end
function epsconverter.pdf(oldname,newname,resolution,colorspace) -- the resolution interface might change
- local epstopdf = programs.epstopdf -- can be changed
- local presets = epstopdf.resolutions[resolution or "high"] or epstopdf.resolutions.high
+ local presets = resolutions[resolution or "high"] or resolutions.high
local level = codeinjections.getformatoption("pdf_level") or "1.3"
local tmpname = oldname
if not tmpname or tmpname == "" or not lfs.isfile(tmpname) then
@@ -124,13 +129,13 @@ do -- eps | ps
else
colorspace = nil
end
- runprogram(epstopdf.command, epstopdf.argument, {
+ runner {
newname = newname,
oldname = tmpname,
presets = presets,
level = tostring(level),
colorspace = colorspace,
- } )
+ }
if tmpname ~= oldname then
os.remove(tmpname)
end
@@ -144,29 +149,36 @@ do -- eps | ps
end
-do -- pdf
-
- local pdfconverter = converters.pdf
-
- -- programs.pdftoeps = {
- -- command = "pdftops",
- -- argument = [[-eps "%oldname%" "%newname%"]],
- -- }
- --
- -- pdfconverter.stripped = function(oldname,newname)
- -- local pdftoeps = programs.pdftoeps -- can be changed
- -- local epstopdf = programs.epstopdf -- can be changed
- -- local presets = epstopdf.resolutions[resolution or ""] or epstopdf.resolutions.high
- -- local level = codeinjections.getformatoption("pdf_level") or "1.3"
- -- local tmpname = newname .. ".tmp"
- -- runprogram(pdftoeps.command, pdftoeps.argument, { oldname = oldname, newname = tmpname, presets = presets, level = level })
- -- runprogram(epstopdf.command, epstopdf.argument, { oldname = tmpname, newname = newname, presets = presets, level = level })
- -- os.remove(tmpname)
- -- end
- --
- -- figures.registersuffix("stripped","pdf")
-
-end
+-- do -- pdf
+--
+-- local pdfconverter = converters.pdf
+--
+-- programs.pdftoeps = {
+-- runner = sandbox.registerrunner {
+-- name = "pdf to ps",
+-- command = "pdftops",
+-- template = [[-eps "%oldname%" "%newname%"]],
+-- checkers = {
+-- oldname = "readable",
+-- newname = "writable",
+-- }
+-- }
+-- }
+--
+-- pdfconverter.stripped = function(oldname,newname)
+-- local pdftoeps = programs.pdftoeps -- can be changed
+-- local epstopdf = programs.epstopdf -- can be changed
+-- local presets = epstopdf.resolutions[resolution or ""] or epstopdf.resolutions.high
+-- local level = codeinjections.getformatoption("pdf_level") or "1.3"
+-- local tmpname = newname .. ".tmp"
+-- pdftoeps.runner { oldname = oldname, newname = tmpname, presets = presets, level = level }
+-- epstopdf.runner { oldname = tmpname, newname = newname, presets = presets, level = level }
+-- os.remove(tmpname)
+-- end
+--
+-- figures.registersuffix("stripped","pdf")
+--
+-- end
do -- svg
@@ -177,34 +189,46 @@ do -- svg
-- arguments change again? Ok, it's weirder, with -A then it's a name only when
-- not . (current)
- programs.inkscape = {
- command = "inkscape",
- pdfargument = longtostring [[
+ local runner = sandbox.registerrunner {
+ name = "svg to something",
+ program = "inkscape",
+ template = longtostring [[
"%oldname%"
- --export-dpi=600
- --export-pdf="%newname%"
- ]],
- pngargument = longtostring [[
- "%oldname%"
- --export-dpi=600
- --export-png="%newname%"
+ --export-dpi=%resolution%
+ --export-%format%="%newname%"
]],
+ checkers = {
+ oldname = "readable",
+ newname = "writable",
+ format = "string",
+ resolution = "string",
+ },
+ defaults = {
+ format = "pdf",
+ resolution = "600",
+ }
+ }
+
+ programs.inkscape = {
+ runner = runner,
}
function svgconverter.pdf(oldname,newname)
- local inkscape = programs.inkscape -- can be changed
- runprogram(inkscape.command, inkscape.pdfargument, {
- newname = expandfilename(newname),
- oldname = expandfilename(oldname),
- } )
+ runner {
+ format = "pdf",
+ resolution = "600",
+ newname = expandfilename(newname),
+ oldname = expandfilename(oldname),
+ }
end
function svgconverter.png(oldname,newname)
- local inkscape = programs.inkscape
- runprogram(inkscape.command, inkscape.pngargument, {
- newname = expandfilename(newname),
- oldname = expandfilename(oldname),
- } )
+ runner {
+ format = "png",
+ resolution = "600",
+ newname = expandfilename(newname),
+ oldname = expandfilename(oldname),
+ }
end
svgconverter.default = svgconverter.pdf
@@ -280,81 +304,115 @@ do -- png | jpg | profiles
return rgbprofile, cmykprofile
end
- programs.pngtocmykpdf = {
- command = "gm",
- argument = [[convert -compress Zip -strip +profile "*" -profile "%rgbprofile%" -profile "%cmykprofile%" -sampling-factor 1x1 "%oldname%" "%newname%"]],
+ local checkers = {
+ oldname = "readable",
+ newname = "writable",
+ rgbprofile = "string",
+ cmykprofile = "string",
+ resolution = "string",
+ color = "string",
}
- programs.jpgtocmykpdf = {
- command = "gm",
- argument = [[convert -compress JPEG -strip +profile "*" -profile "%rgbprofile%" -profile "%cmykprofile%" -sampling-factor 1x1 "%oldname%" "%newname%"]],
+ local defaults = {
+ resolution = "600",
}
- programs.pngtograypdf = {
- command = "gm",
- argument = [[convert -colorspace gray -compress Zip -sampling-factor 1x1 "%oldname%" "%newname%"]],
+ local pngtocmykpdf = sandbox.registerrunner {
+ name = "png to cmyk pdf",
+ program = "gm",
+ template = [[convert -compress Zip -strip +profile "*" -profile "%rgbprofile%" -profile "%cmykprofile%" -sampling-factor 1x1 "%oldname%" "%newname%"]],
+ checkers = checkers,
+ defaults = defaults,
}
- programs.jpgtograypdf = {
- command = "gm",
- argument = [[convert -colorspace gray -compress Zip -sampling-factor 1x1 "%oldname%" "%newname%"]],
+ local jpgtocmykpdf = sandbox.registerrunner {
+ name = "jpg to cmyk pdf",
+ program = "gm",
+ template = [[convert -compress JPEG -strip +profile "*" -profile "%rgbprofile%" -profile "%cmykprofile%" -sampling-factor 1x1 "%oldname%" "%newname%"]],
+ checkers = checkers,
+ defaults = defaults,
}
+ local pngtograypdf = sandbox.registerrunner {
+ name = "png to gray pdf",
+ program = "gm",
+ template = [[convert -colorspace gray -compress Zip -sampling-factor 1x1 "%oldname%" "%newname%"]],
+ checkers = checkers,
+ defaults = defaults,
+ }
+
+ local jpgtograypdf = sandbox.registerrunner {
+ name = "jpg to gray pdf",
+ program = "gm",
+ template = [[convert -colorspace gray -compress Zip -sampling-factor 1x1 "%oldname%" "%newname%"]],
+ checkers = checkers,
+ defaults = defaults,
+ }
+
+ programs.pngtocmykpdf = { runner = pngtocmykpdf }
+ programs.jpgtocmykpdf = { runner = jpgtocmykpdf }
+ programs.pngtograypdf = { runner = pngtograypdf }
+ programs.jpgtograypdf = { runner = jpgtograypdf }
+
pngconverters["cmyk.pdf"] = function(oldname,newname,resolution)
local rgbprofile, cmykprofile = profiles()
- runprogram(programs.pngtocmykpdf.command, programs.pngtocmykpdf.argument, {
- -- runprogram(programs.pngtocmykpdf, {
- rgbprofile = rgbprofile,
- cmykprofile = cmykprofile,
+ pngtocmykpdf {
oldname = oldname,
newname = newname,
- } )
+ rgbprofile = rgbprofile,
+ cmykprofile = cmykprofile,
+ resolution = resolution,
+ }
end
pngconverters["gray.pdf"] = function(oldname,newname,resolution)
- runprogram(programs.pngtograypdf.command, programs.pngtograypdf.argument, {
- -- runprogram(programs.pngtograypdf, {
- oldname = oldname,
- newname = newname,
- } )
+ pngtograypdf {
+ oldname = oldname,
+ newname = newname,
+ resolution = resolution,
+ }
end
jpgconverters["cmyk.pdf"] = function(oldname,newname,resolution)
local rgbprofile, cmykprofile = profiles()
- runprogram(programs.jpgtocmykpdf.command, programs.jpgtocmykpdf.argument, {
- -- runprogram(programs.jpgtocmykpdf, {
- rgbprofile = rgbprofile,
- cmykprofile = cmykprofile,
+ jpgtocmykpdf {
oldname = oldname,
newname = newname,
- } )
+ rgbprofile = rgbprofile,
+ cmykprofile = cmykprofile,
+ resolution = resolution,
+ }
end
jpgconverters["gray.pdf"] = function(oldname,newname,resolution)
- runprogram(programs.jpgtograypdf.command, programs.jpgtograypdf.argument, {
- -- runprogram(programs.jpgtograypdf, {
- oldname = oldname,
- newname = newname,
- } )
+ jpgtograypdf {
+ oldname = oldname,
+ newname = newname,
+ resolution = resolution,
+ }
end
-- recolor
- programs.recolor = {
- command = "gm",
- argument = [[convert -recolor "%color%" "%oldname%" "%newname%"]],
+ local recolorpng = sandbox.registerrunner {
+ name = "recolor png",
+ program = "gm",
+ template = [[convert -recolor "%color%" "%oldname%" "%newname%"]],
+ checkers = checkers,
+ defaults = defaults,
}
+ -- this is now built in so not really needed any more
+
+ programs.recolor = { runner = recolorpng }
+
pngconverters["recolor.png"] = function(oldname,newname,resolution,arguments)
- runprogram (
- programs.recolor.command,
- programs.recolor.argument,
- {
- oldname = oldname,
- newname = newname,
- color = arguments or ".5 0 0 .7 0 0 .9 0 0",
- }
- )
+ recolorpng {
+ oldname = oldname,
+ newname = newname,
+ resolution = resolution,
+ color = arguments or ".5 0 0 .7 0 0 .9 0 0",
+ }
end
end