#!/usr/bin/env texlua --*-Lua-*- -- $Id$ -- Copyright (C) 2010 Reinhard Kotucha. -- You may freely use, modify and/or distribute this file. -- Replacement for ps2ps2.bat. -- Converting PostScript 3 or PDF into PostScript 2 with the -- Ghostscript 'ps2write' device. -- This generates a PDF-style stream with an attached -- PostScript program to interpret it. local function usage (progname) local message= 'Usage: '..progname..' [options] \n\n'.. ' can be either a PS, EPS, PDF file, or stdin.\n'.. ' A single hyphen (-) denotes stdin.\n' return message end function fixwin(args_unix) if os.type == 'windows' then local args_win={} -- new table args_win[0]=args_unix[1] for i=1, #args_unix do args_win[i]='"'..args_unix[i]..'"' end return args_win else return args_unix end end local function push (t, ...) local args={...} for _,v in ipairs(args) do if type(v) == 'table' then for _,x in ipairs(v) do t[#t+1]=x end else t[#t+1]=v end end end local function filename (file) -- strip path if string.find(file, '[/\\]') then return string.match(file, '.*[/\\](.*)$') else return file end end local function basename (file) -- strip extension return string.match(filename(file), '(.*)%..*') end local function extension (file) -- return extension if available, false otherwise. local fn=filename(file) if fn:find('%.') then return string.match(fn, '.*%.(.*)') end end local function parse_cmdline () local files={} local options={} local progname local basename=filename(arg[0]) if basename:find('%.') then progname=basename:match('(.*)%..*') else progname=basename end for i=1, #arg do if string.find(arg[i], '^%-.+') then push(options, arg[i]) else push(files, arg[i]) end end files.input =files[1] files.output=files[2] return progname, options, files end local function check_files (progname, files) if #files < 2 then io.stderr:write(usage(progname)) os.exit(1) end end -- main -- local progname, options, file=parse_cmdline() check_files (progname, file) -- setup command local command={} if os.type == 'unix' then command={'gs'} else command={'gswin32c'} end push(command, '-q', '-sDEVICE=ps2write') if os.type=='unix' then push(command, '-sstdout=%stderr') end push(command, '-sOutputFile='..file.output) push(command, '-dNOPAUSE', '-dBATCH', '-P-', '-dALLOWPSTRANSPARENCY') push(command, options, file.input) command=fixwin(command) --[[ prepend an additional hyphen to activate this code for i=0, #command do print (command[i]) end os.exit(0) --]] ret=os.spawn(command) os.exit(ret)