From 9a10021cd4cb23995ad3ffa915fc5b7f6890aaf8 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Sun, 19 May 2013 19:27:00 +0200 Subject: beta 2013.05.19 19:27 --- scripts/context/lua/mtx-convert.lua | 350 ++++++++++++++++++------------------ 1 file changed, 175 insertions(+), 175 deletions(-) (limited to 'scripts/context/lua/mtx-convert.lua') diff --git a/scripts/context/lua/mtx-convert.lua b/scripts/context/lua/mtx-convert.lua index b76b3baaf..e6de9356e 100644 --- a/scripts/context/lua/mtx-convert.lua +++ b/scripts/context/lua/mtx-convert.lua @@ -1,175 +1,175 @@ -if not modules then modules = { } end modules ['mtx-convert'] = { - version = 1.001, - comment = "companion to mtxrun.lua", - author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", - copyright = "PRAGMA ADE / ConTeXt Development Team", - license = "see context related readme files" -} - --- todo: eps and svg - -local helpinfo = [[ - - - - mtx-convert - ConTeXT Graphic Conversion Helpers - 0.10 - - - - - convert all graphics on path - original graphics path - converted graphics path - watch folders - force conversion (even if older) - time between sweeps - - - - -]] - -local application = logs.application { - name = "mtx-convert", - banner = "ConTeXT Graphic Conversion Helpers 0.10", - helpinfo = helpinfo, -} - -local format, find = string.format, string.find -local concat = table.concat - -local report = application.report - -scripts = scripts or { } -scripts.convert = scripts.convert or { } -local convert = scripts.convert -convert.converters = convert.converters or { } -local converters = convert.converters - -local gsprogram = os.type == "windows" and "gswin32c" or "gs" -local gstemplate_eps = "%s -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -dEPSCrop -dNOPAUSE -dSAFER -dNOCACHE -dBATCH -dAutoRotatePages=/None -dProcessColorModel=/DeviceCMYK -sOutputFile=%s %s -c quit" -local gstemplate_ps = "%s -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -dNOPAUSE -dSAFER -dNOCACHE -dBATCH -dAutoRotatePages=/None -dProcessColorModel=/DeviceCMYK -sOutputFile=%s %s -c quit" - -function converters.eps(oldname,newname) - return format(gstemplate_eps,gsprogram,newname,oldname) -end - -function converters.ps(oldname,newname) - return format(gstemplate_ps,gsprogram,newname,oldname) -end - -local improgram = "convert" -local imtemplate = { - low = "%s -quality 0 -compress zip %s pdf:%s", - medium = "%s -quality 75 -compress zip %s pdf:%s", - high = "%s -quality 100 -compress zip %s pdf:%s", -} - -function converters.jpg(oldname,newname) - local ea = environment.arguments - local quality = (ea.high and 'high') or (ea.medium and 'medium') or (ea.low and 'low') or 'high' - return format(imtemplate[quality],improgram,oldname,newname) -end - -converters.gif = converters.jpg -converters.tif = converters.jpg -converters.tiff = converters.jpg -converters.png = converters.jpg - -function converters.convertgraphic(kind,oldname,newname) - if converters[kind] then -- extra test - local tmpname = file.replacesuffix(newname,"tmp") - local command = converters[kind](oldname,tmpname) - report("command: %s",command) - io.flush() - os.spawn(command) - os.remove(newname) - os.rename(tmpname,newname) - if lfs.attributes(newname,"size") == 0 then - os.remove(newname) - end - end -end - -function converters.convertpath(inputpath,outputpath) - inputpath = inputpath or "." - outputpath = outputpath or "." - for name in lfs.dir(inputpath) do - local suffix = file.suffix(name) - if find(name,"%.$") then - -- skip . and .. - elseif converters[suffix] then - local oldname = file.join(inputpath,name) - local newname = file.join(outputpath,file.replacesuffix(name,"pdf")) - local et = lfs.attributes(oldname,"modification") - local pt = lfs.attributes(newname,"modification") - if not pt or et > pt then - dir.mkdirs(outputpath) - converters.convertgraphic(suffix,oldname,newname) - end - elseif lfs.isdir(inputpath .. "/".. name) then - converters.convertpath(inputpath .. "/".. name,outputpath .. "/".. name) - end - end -end - -function converters.convertfile(oldname) - local suffix = file.suffix(oldname) - if converters[suffix] then - local newname = file.replacesuffix(oldname,"pdf") - if oldname == newname then - -- todo: downsample, crop etc - elseif environment.argument("force") then - converters.convertgraphic(suffix,oldname,newname) - else - local et = lfs.attributes(oldname,"modification") - local pt = lfs.attributes(newname,"modification") - if not pt or et > pt then - converters.convertgraphic(suffix,oldname,newname) - end - end - end -end - -if environment.ownscript then - -- stand alone -else - report(application.banner) - return convert -end - -convert.delay = 5 * 60 -- 5 minutes - -function convert.convertall() - local watch = environment.arguments.watch or false - local delay = environment.arguments.delay or convert.delay - local input = environment.arguments.inputpath or "." - local output = environment.arguments.outputpath or "." - while true do - converters.convertpath(input, output) - if watch then - os.sleep(delay) - else - break - end - end -end - -function convert.convertgiven() - local files = environment.files - for i=1,#files do - converters.convertfile(files[i]) - end -end - -if environment.arguments.convertall then - convert.convertall() -elseif environment.files[1] then - convert.convertgiven() -elseif environment.argument("exporthelp") then - application.export(environment.argument("exporthelp"),environment.files[1]) -else - application.help() -end +if not modules then modules = { } end modules ['mtx-convert'] = { + version = 1.001, + comment = "companion to mtxrun.lua", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +-- todo: eps and svg + +local helpinfo = [[ + + + + mtx-convert + ConTeXT Graphic Conversion Helpers + 0.10 + + + + + convert all graphics on path + original graphics path + converted graphics path + watch folders + force conversion (even if older) + time between sweeps + + + + +]] + +local application = logs.application { + name = "mtx-convert", + banner = "ConTeXT Graphic Conversion Helpers 0.10", + helpinfo = helpinfo, +} + +local format, find = string.format, string.find +local concat = table.concat + +local report = application.report + +scripts = scripts or { } +scripts.convert = scripts.convert or { } +local convert = scripts.convert +convert.converters = convert.converters or { } +local converters = convert.converters + +local gsprogram = os.type == "windows" and "gswin32c" or "gs" +local gstemplate_eps = "%s -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -dEPSCrop -dNOPAUSE -dSAFER -dNOCACHE -dBATCH -dAutoRotatePages=/None -dProcessColorModel=/DeviceCMYK -sOutputFile=%s %s -c quit" +local gstemplate_ps = "%s -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -dNOPAUSE -dSAFER -dNOCACHE -dBATCH -dAutoRotatePages=/None -dProcessColorModel=/DeviceCMYK -sOutputFile=%s %s -c quit" + +function converters.eps(oldname,newname) + return format(gstemplate_eps,gsprogram,newname,oldname) +end + +function converters.ps(oldname,newname) + return format(gstemplate_ps,gsprogram,newname,oldname) +end + +local improgram = "convert" +local imtemplate = { + low = "%s -quality 0 -compress zip %s pdf:%s", + medium = "%s -quality 75 -compress zip %s pdf:%s", + high = "%s -quality 100 -compress zip %s pdf:%s", +} + +function converters.jpg(oldname,newname) + local ea = environment.arguments + local quality = (ea.high and 'high') or (ea.medium and 'medium') or (ea.low and 'low') or 'high' + return format(imtemplate[quality],improgram,oldname,newname) +end + +converters.gif = converters.jpg +converters.tif = converters.jpg +converters.tiff = converters.jpg +converters.png = converters.jpg + +function converters.convertgraphic(kind,oldname,newname) + if converters[kind] then -- extra test + local tmpname = file.replacesuffix(newname,"tmp") + local command = converters[kind](oldname,tmpname) + report("command: %s",command) + io.flush() + os.spawn(command) + os.remove(newname) + os.rename(tmpname,newname) + if lfs.attributes(newname,"size") == 0 then + os.remove(newname) + end + end +end + +function converters.convertpath(inputpath,outputpath) + inputpath = inputpath or "." + outputpath = outputpath or "." + for name in lfs.dir(inputpath) do + local suffix = file.suffix(name) + if find(name,"%.$") then + -- skip . and .. + elseif converters[suffix] then + local oldname = file.join(inputpath,name) + local newname = file.join(outputpath,file.replacesuffix(name,"pdf")) + local et = lfs.attributes(oldname,"modification") + local pt = lfs.attributes(newname,"modification") + if not pt or et > pt then + dir.mkdirs(outputpath) + converters.convertgraphic(suffix,oldname,newname) + end + elseif lfs.isdir(inputpath .. "/".. name) then + converters.convertpath(inputpath .. "/".. name,outputpath .. "/".. name) + end + end +end + +function converters.convertfile(oldname) + local suffix = file.suffix(oldname) + if converters[suffix] then + local newname = file.replacesuffix(oldname,"pdf") + if oldname == newname then + -- todo: downsample, crop etc + elseif environment.argument("force") then + converters.convertgraphic(suffix,oldname,newname) + else + local et = lfs.attributes(oldname,"modification") + local pt = lfs.attributes(newname,"modification") + if not pt or et > pt then + converters.convertgraphic(suffix,oldname,newname) + end + end + end +end + +if environment.ownscript then + -- stand alone +else + report(application.banner) + return convert +end + +convert.delay = 5 * 60 -- 5 minutes + +function convert.convertall() + local watch = environment.arguments.watch or false + local delay = environment.arguments.delay or convert.delay + local input = environment.arguments.inputpath or "." + local output = environment.arguments.outputpath or "." + while true do + converters.convertpath(input, output) + if watch then + os.sleep(delay) + else + break + end + end +end + +function convert.convertgiven() + local files = environment.files + for i=1,#files do + converters.convertfile(files[i]) + end +end + +if environment.arguments.convertall then + convert.convertall() +elseif environment.files[1] then + convert.convertgiven() +elseif environment.argument("exporthelp") then + application.export(environment.argument("exporthelp"),environment.files[1]) +else + application.help() +end -- cgit v1.2.3