1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
#!/usr/bin/env texlua
--*-Lua-*-
-- $Id$
-- Copyright (C) 2008-2015 Reinhard Kotucha.
-- You may freely use, modify and/or distribute this file.
-- Replacement for eps2eps.bat.
-- 'Distill' Encapsulated PostScript.
local function usage (progname)
local message=
'Usage: '..progname..' [options] <inputfile> <outputfile>\n'..
' <inputfile> 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, '.*%.(.*)')
else
return false
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 --
-- parse command line
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=eps2write')
if os.type=='unix' then push (command, '-sstdout=%stderr') end
push(command, '-sOutputFile='..file.output, '-dNOPAUSE',
'-dBATCH', '-P-', '-dALLOWPSTRANSPARENCY', '-dDEVICEWIDTH=250000',
'-dDEVICEHEIGHT=250000')
push(command, options)
push(command, 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)
|