summaryrefslogtreecommitdiff
path: root/Master/bin/win32/ps2pdf.texlua
blob: 26afd00ef24310fbd578457c50b297766ed80162 (plain)
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
#!/usr/bin/env texlua
--*-Lua-*-
-- $Id$

-- Copyright (C) 2008 Reinhard Kotucha.
-- You may freely use, modify and/or distribute this file.

-- Replacement for ps2pdf*.bat.
-- Convert PS to PDF

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

function filename (file)
   local filename
   if string.find(file, '/') then -- UNIX path
      filename=select(1, string.gsub(file, '.*/', ''))
   elseif string.find(file, '\\') then -- Windows path
      filename=select(1, string.gsub(file, '.*\\', ''))
   else -- no path
      filename=file
   end
   return(filename)
end

function basename (file)
   local basename
   local fname
   fname=filename (file)
   basename=select(1, string.gsub(fname, '\.%a+$', ''))
   return(basename)
end

kpse.set_program_name('ps2pdf.texlua', 'ps2pdf')

TEXDIR=kpse.var_value('SELFAUTOPARENT')

if os.type == 'windows' then
   os.setenv('GS_LIB', TEXDIR..'/tlpkg/tlgs/lib')
   os.setenv('PATH', TEXDIR..'/tlpkg/tlgs/bin;'..os.getenv('PATH'))
   gs='gswin32c'
else
   gs='gs'
end

command={gs}
files={}
options={}

PDF_level='1.4'
if string.find(basename(arg[0]), '12') then
   PDF_level='1.2'
elseif string.find(basename(arg[0]), '13') then
   PDF_level='1.3'
elseif string.find(basename(arg[0]), '14') then
   PDF_level='1.4'
end

options[#options+1]='-dCompatibilityLevel='..PDF_level

for i=1, #arg do
   if string.find(arg[i], '^-$') then
      files[#files+1]=arg[i]
   elseif string.find(arg[i], '^-') then
      options[#options+1]=arg[i]
   else
      files[#files+1]=arg[i]
   end
end

if #files == 1 then
   if string.find(files[1], '^-$') then
      outfile='-'
   elseif string.find(filename(files[1]), '\.e*ps$') then
      outfile=basename(files[1])..'.pdf'
   else
      outfile=filename(files[1])..'.pdf'
   end
else
   outfile=files[2]
end

for i=1, #options do
   command[#command+1]=options[i]
end

other_opts={'-q', '-dSAFER', '-dNOPAUSE', '-dBATCH', '-sDEVICE=pdfwrite'}

for i=1, #other_opts do
   command[#command+1]=other_opts[i]
end

command[#command+1]='-sOutputFile="'..outfile..'"'

for i=1, #options do
   command[#command+1]=options[i]
end

if #files < 1 or #files > 2 then
   io.stderr:write('Usage: ps2pdf [options] (input.[e]ps|-) [output.pdf]\n')
   os.exit(0) 
end



other_opts={'-c', '.setpdfwrite', '-f', files[1]}

for i=1, #other_opts do
   command[#command+1]=other_opts[i]
end

command=fixwin(command)

--[[ prepend an additional hyphen to activate this code
for i=0, #command do
   print (command[i])
end
os.exit(ret)
--]]

ret=os.spawn(command)
os.exit(ret)