diff options
author | Karl Berry <karl@freefriends.org> | 2006-11-16 01:02:47 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-11-16 01:02:47 +0000 |
commit | 3c85b55e2f245fb7edac7e445f107e6d0bb423ae (patch) | |
tree | c62b7f80edafe0455310d08e09f4218127bf9e87 /Master/texmf-dist/scripts/context/ruby/newpstopdf.rb | |
parent | e5ecff27a26ef59e1dbe9702677687fd7107be3a (diff) |
context update
git-svn-id: svn://tug.org/texlive/trunk@2444 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/scripts/context/ruby/newpstopdf.rb')
-rw-r--r-- | Master/texmf-dist/scripts/context/ruby/newpstopdf.rb | 524 |
1 files changed, 1 insertions, 523 deletions
diff --git a/Master/texmf-dist/scripts/context/ruby/newpstopdf.rb b/Master/texmf-dist/scripts/context/ruby/newpstopdf.rb index 898f987cbce..a45b4cab896 100644 --- a/Master/texmf-dist/scripts/context/ruby/newpstopdf.rb +++ b/Master/texmf-dist/scripts/context/ruby/newpstopdf.rb @@ -4,527 +4,5 @@ # copyright : PRAGMA Advanced Document Engineering # version : 2002-2005 # author : Hans Hagen -# -# project : ConTeXt / eXaMpLe -# concept : Hans Hagen -# info : j.hagen@xs4all.nl -# www : www.pragma-ade.com -banner = ['PsToPdf', 'version 2.0.0', '2002-2005', 'PRAGMA ADE/POD'] - -unless defined? ownpath - ownpath = $0.sub(/[\\\/]\w*?\.rb/i,'') - $: << ownpath -end - -# todo: paden/prefix in magick and inkscape -# todo: clean up method handling (pass strings, no numbers) -# --method=crop|bounded|raw|... -# --resolution=low|normal|medium|high|printer|print|screen|ebook|default -# + downward compatible flag handling - -require 'base/switch' -require 'base/tool' -require 'base/logger' - -require 'graphics/gs' -require 'graphics/magick' -require 'graphics/inkscape' - -require 'rexml/document' - -exit if defined?(REQUIRE2LIB) - -class Commands - - include CommandBase - - # nowadays we would force a directive, but - # for old times sake we handle default usage - - def main - filename = @commandline.argument('first') - pattern = @commandline.option('pattern') - globfiles(pattern) if filename.empty? && ! pattern.empty? - filename = @commandline.argument('first') - if filename.empty? then - help - elsif filename =~ /\.exa$/ then - request - else - convert - end - end - - # actions - - def convert - - ghostscript = GhostScript.new(logger) - magick = ImageMagick.new(logger) - inkscape = InkScape.new(logger) - - outpath = @commandline.option('outputpath') - unless outpath.empty? then - begin - File.expand_path(outpath) - outpath = File.makedirs(outpath) unless FileTest.directory?(outpath) - rescue - # sorry - end - end - - @commandline.arguments.each do |filename| - - filename = Tool.cleanfilename(filename,@commandline) - inppath = @commandline.option('inputpath') - if inppath.empty? then - inppath = '.' - fullname = filename # avoid duplicate './' - else - fullname = File.join(inppath,filename) - end - if FileTest.file?(fullname) then - handle_whatever(ghostscript,inkscape,magick,filename) - else - report("file #{fullname} does not exist") - end - - end - - end - - def request - - # <exa:request> - # <exa:application> - # <exa:command>pstopdf</exa:command> - # <exa:filename>E:/tmp/demo.ps</exa:filename> - # </exa:application> - # <exa:data> - # <exa:variable label='gs:DoThumbnails'>false</exa:variable> - # <exa:variable label='gs:ColorImageDepth'>-1</exa:variable> - # </exa:data> - # </exa:request> - - ghostscript = GhostScript.new(logger) - magick = ImageMagick.new(logger) - inkscape = InkScape.new(logger) - - dataname = @commandline.argument('first') || '' - filename = @commandline.argument('second') || '' - - if dataname.empty? || ! FileTest.file?(dataname) then - report('provide valid exa file') - return - else - begin - request = REXML::Document.new(File.new(dataname)) - rescue - report('provide valid exa file (xml error)') - return - end - end - if filename.empty? then - begin - if filename = REXML::XPath.first(request.root,"exa:request/exa:application/exa:filename/text()") then - filename = filename.to_s - else - report('no filename found in exa file') - return - end - rescue - filename = '' - end - end - if filename.empty? then - report('provide valid filename') - return - elsif ! FileTest.file?(filename) then - report("invalid filename #{filename}") - return - end - - [ghostscript,inkscape,magick].each do |i| - i.setvariable('inputfile',filename) - end - - # set ghostscript variables - REXML::XPath.each(request.root,"/exa:request/exa:data/exa:variable") do |v| - begin - if (key = v.attributes['label']) and (value = v.text.to_s) then - case key - when /gs[\:\.](var[\:\.])*(offset)/io then ghostscript.setoffset(value) - when /gs[\:\.](var[\:\.])*(method)/io then ghostscript.setvariable('method',value) - when /gs[\:\.](var[\:\.])*(.*)/io then ghostscript.setpsoption($2,value) - end - end - rescue - end - end - - # no inkscape and magick variables (yet) - - handle_whatever(ghostscript,inkscape,magick,filename) - - end - - def watch - - ghostscript = GhostScript.new(logger) - magick = ImageMagick.new(logger) - inkscape = InkScape.new(logger) - - pathname = commandline.option('watch') - - unless pathname and not pathname.empty? then - report('empty watchpath is not supported') - exit - end - - if pathname == '.' then - report("watchpath #{pathname} is not supported") - exit - end - - if FileTest.directory?(pathname) then - if Dir.chdir(pathname) then - report("watching path #{pathname}") - else - report("unable to change to path #{pathname}") - exit - end - else - report("invalid path #{pathname}") - exit - end - - waiting = false - - loop do - - if waiting then - report("waiting #{getvariable('delay')}") - waiting = false - sleep(getvariable('delay').to_i) - end - - files = Dir.glob("**/*.*") - - if files and files.length > 0 then - - files.each do |fullname| - - next unless fullname - - if FileTest.directory?(fullname) then - debug('skipping path', fullname) - next - end - - unless magick.supported(fullname) then - debug('not supported', fullname) - next - end - - if (! FileTest.file?(fullname)) || (FileTest.size(fullname) < 100) then - debug("skipping small crap file #{fullname}") - next - end - - debug("handling file #{fullname}") - - begin - next unless File.rename(fullname,fullname) # access trick - rescue - next # being written - end - - fullname = Tool.cleanfilename(fullname,@commandline) - - fullname.gsub!(/\\/io, '/') - - filename = File.basename(fullname) - filepath = File.dirname(fullname) - - next if filename =~ /gstemp.*/io - - if filepath !~ /(result|done|raw|crop|bound|bitmap)/io then - begin - File.makedirs(filepath+'/raw') - File.makedirs(filepath+'/bound') - File.makedirs(filepath+'/crop') - File.makedirs(filepath+'/bitmap') - debug("creating prefered input paths on #{filepath}") - rescue - debug("creating input paths on #{filepath} failed") - end - end - - if filepath =~ /^(.*\/|)(done|result)$/io then - debug("skipping file #{fullname}") - else - report("start processing file #{fullname}") - if filepath =~ /^(.*\/*)(raw|crop|bound)$/io then - donepath = $1 + 'done' - resultpath = $1 + 'result' - case $2 - when 'raw' then method = 1 - when 'bound' then method = 2 - when 'crop' then method = 3 - else method = 2 - end - report("forcing method #{method}") - else - method = 2 - donepath = filepath + '/done' - resultpath = filepath + '/result' - report("default method #{method}") - end - - begin - File.makedirs(donepath) - File.makedirs(resultpath) - rescue - report('result path creation fails') - end - - if FileTest.directory?(donepath) && FileTest.directory?(resultpath) then - - resultname = resultpath + '/' + filename.sub(/\..*$/,'') + '.pdf' - - @commandline.setoption('inputpath', filepath) - @commandline.setoption('outputpath', resultpath) - @commandline.setoption('method', method) - - if ghostscript.psfile?(fullname) then - handle_ghostscript(ghostscript,filename) - else - handle_magick(magick,filename) - end - - sleep(1) # calm down - - if FileTest.file?(fullname) then - begin - File.copy(fullname,donepath + '/' + filename) - File.delete(fullname) - rescue - report('cleanup fails') - end - end - - end - - end - - end - - end - - waiting = true - end - - end - - private - - def handle_whatever(ghostscript,inkscape,magick,filename) - if ghostscript.psfile?(filename) then - # report("processing ps file #{filename}") - ghostscript.setvariable('pipe',false) if @commandline.option('nopipe') - # ghostscript.setvariable('pipe',not @commandline.option('nopipe')) - ghostscript.setvariable('colormodel',@commandline.option('colormodel')) - ghostscript.setvariable('offset',@commandline.option('offset')) - handle_ghostscript(ghostscript,filename) - elsif ghostscript.pdffile?(filename) && ghostscript.pdfmethod?(@commandline.option('method')) then - # report("processing pdf file #{filename}") - handle_ghostscript(ghostscript,filename) - elsif inkscape.supported?(filename) then - # report("processing non ps/pdf file #{filename}") - handle_inkscape(inkscape,filename) - elsif magick.supported?(filename) then - # report("processing non ps/pdf file #{filename}") - handle_magick(magick,filename) - end - end - - def handle_magick(magick,filename) - - report("converting non-ps file #{filename} into pdf") - - inppath = @commandline.option('inputpath') - outpath = @commandline.option('outputpath') - - inppath = inppath + '/' if not inppath.empty? - outpath = outpath + '/' if not outpath.empty? - - prefix = @commandline.option('prefix') - suffix = @commandline.option('suffix') - - inpfilename = "#{inppath}#{filename}" - outfilename = "#{outpath}#{prefix}#{filename.sub(/\.(.*?)$/, '')}#{suffix}.pdf" - - magick.setvariable('inputfile' , inpfilename) - magick.setvariable('outputfile', outfilename) - - magick.autoconvert - - end - - def handle_inkscape(inkscape,filename) - - report("converting svg(z) file #{filename} into pdf") - - inppath = @commandline.option('inputpath') - outpath = @commandline.option('outputpath') - - inppath = inppath + '/' if not inppath.empty? - outpath = outpath + '/' if not outpath.empty? - - prefix = @commandline.option('prefix') - suffix = @commandline.option('suffix') - - inpfilename = "#{inppath}#{filename}" - outfilename = "#{outpath}#{prefix}#{filename.sub(/\.(.*?)$/, '')}#{suffix}.pdf" - - inkscape.setvariable('inputfile' , inpfilename) - inkscape.setvariable('outputfile', outfilename) - - if @commandline.option('verbose') || @commandline.option('debug') then - logname = filename.gsub(/\.[^\.]*?$/, '.log') - report("log info saved in #{logname}") - inkscape.convert(logname) # logname ook doorgeven - else - inkscape.convert - end - - end - - def handle_ghostscript(ghostscript,filename) - - ghostscript.reset - - method = ghostscript.method(@commandline.option('method')) - force = ghostscript.method(@commandline.option('force')) - - ghostscript.setvariable('method', method) - ghostscript.setvariable('force', force) - - # report("conversion method #{method}") - - inppath = @commandline.option('inputpath') - outpath = @commandline.option('outputpath') - - inppath = inppath + '/' if not inppath.empty? - outpath = outpath + '/' if not outpath.empty? - - prefix = @commandline.option('prefix') - suffix = @commandline.option('suffix') - - ok = false - - if ghostscript.pdfmethod?(method) then - - report("converting pdf file #{filename} into pdf") - - if prefix.empty? && suffix.empty? && inppath.empty? && outpath.empty? then - prefix = ghostscript.pdfprefix(method) - end - - if ghostscript.pdffile?(filename) then - - filename = filename.sub(/\.pdf$/, '') - - inpfilename = "#{inppath}#{filename}.pdf" - outfilename = "#{outpath}#{prefix}#{filename}#{suffix}.pdf" - - ghostscript.setvariable('inputfile' ,inpfilename) - ghostscript.setvariable('outputfile',outfilename) - - if FileTest.file?(inpfilename) then - ok = ghostscript.convert - else - report("no file found #{filename}") - end - - else - report("no pdf file #{filename}") - end - - elsif ghostscript.psfile?(filename) then - - if filename =~ /(.*)\.(.*?)$/io then - filename, filesuffix = $1, $2 - else - filesuffix = 'eps' - end - - report("converting #{filesuffix} (ps) into pdf") - - inpfilename = "#{inppath}#{filename}.#{filesuffix}" - outfilename = "#{outpath}#{prefix}#{filename}#{suffix}.pdf" - - ghostscript.setvariable('inputfile' , inpfilename) - ghostscript.setvariable('outputfile', outfilename) - - if FileTest.file?(inpfilename) then - ok = ghostscript.convert - if ! ok && FileTest.file?(outfilename) then - begin - File.delete(outfilename) - rescue - end - end - else - report("no file with name #{filename} found") - end - - else - report('file must be of type eps/ps/ai/pdf') - end - - return ok - - end - -end - -# ook pdf -> pdf onder optie 0, andere kleurruimte - -logger = Logger.new(banner.shift) -commandline = CommandLine.new - -commandline.registerflag('debug') -commandline.registerflag('verbose') -commandline.registerflag('nopipe') - -commandline.registervalue('method',2) -commandline.registervalue('offset',0) - -commandline.registervalue('prefix') -commandline.registervalue('suffix') - -commandline.registervalue('inputpath') -commandline.registervalue('outputpath') - -commandline.registerflag('watch') -commandline.registerflag('force') - -commandline.registervalue('delay',2) - -commandline.registervalue('colormodel','cmyk') -commandline.registervalue('pattern','') - -commandline.registeraction('help') -commandline.registeraction('version') - -commandline.registeraction('convert', 'convert ps into pdf') -commandline.registeraction('request', 'handles exa request file') -commandline.registeraction('watch', 'watch folders for conversions (untested)') - -commandline.expand - -logger.verbose if (commandline.option('verbose') || commandline.option('debug')) - -Commands.new(commandline,logger,banner).send(commandline.action || 'main') +load(File.join(File.expand_path(File.dirname($0)),'pstopdf.rb')) |