diff options
author | Hans Hagen <pragma@wxs.nl> | 2013-05-19 19:27:00 +0200 |
---|---|---|
committer | Hans Hagen <pragma@wxs.nl> | 2013-05-19 19:27:00 +0200 |
commit | 9a10021cd4cb23995ad3ffa915fc5b7f6890aaf8 (patch) | |
tree | 983e02c29872e4713a10a9dc8ae7708c6da3de88 /scripts/context/lua/mtx-convert.lua | |
parent | 0deffde58a47f5c85a46a7d999ff9cf817b81cef (diff) | |
download | context-9a10021cd4cb23995ad3ffa915fc5b7f6890aaf8.tar.gz |
beta 2013.05.19 19:27
Diffstat (limited to 'scripts/context/lua/mtx-convert.lua')
-rw-r--r-- | scripts/context/lua/mtx-convert.lua | 350 |
1 files changed, 175 insertions, 175 deletions
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 = [[ -<?xml version="1.0"?> -<application> - <metadata> - <entry name="name">mtx-convert</entry> - <entry name="detail">ConTeXT Graphic Conversion Helpers</entry> - <entry name="version">0.10</entry> - </metadata> - <flags> - <category name="basic"> - <subcategory> - <flag name="convertall"><short>convert all graphics on path</short></flag> - <flag name="inputpath" value="string"><short>original graphics path</short></flag> - <flag name="outputpath" value="string"><short>converted graphics path</short></flag> - <flag name="watch"><short>watch folders</short></flag> - <flag name="force"><short>force conversion (even if older)</short></flag> - <flag name="delay"><short>time between sweeps</short></flag> - </subcategory> - </category> - </flags> -</application> -]] - -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 = [[
+<?xml version="1.0"?>
+<application>
+ <metadata>
+ <entry name="name">mtx-convert</entry>
+ <entry name="detail">ConTeXT Graphic Conversion Helpers</entry>
+ <entry name="version">0.10</entry>
+ </metadata>
+ <flags>
+ <category name="basic">
+ <subcategory>
+ <flag name="convertall"><short>convert all graphics on path</short></flag>
+ <flag name="inputpath" value="string"><short>original graphics path</short></flag>
+ <flag name="outputpath" value="string"><short>converted graphics path</short></flag>
+ <flag name="watch"><short>watch folders</short></flag>
+ <flag name="force"><short>force conversion (even if older)</short></flag>
+ <flag name="delay"><short>time between sweeps</short></flag>
+ </subcategory>
+ </category>
+ </flags>
+</application>
+]]
+
+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
|