line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package TeX::AutoTeX::PostScript; |
2
|
|
|
|
|
|
|
|
3
|
|
|
|
|
|
|
# |
4
|
|
|
|
|
|
|
# $Id: PostScript.pm,v 1.11.2.5 2011/01/27 18:42:28 thorstens Exp $ |
5
|
|
|
|
|
|
|
# $Revision: 1.11.2.5 $ |
6
|
|
|
|
|
|
|
# $Source: /cvsroot/arxivlib/arXivLib/lib/TeX/AutoTeX/PostScript.pm,v $ |
7
|
|
|
|
|
|
|
# |
8
|
|
|
|
|
|
|
# $Date: 2011/01/27 18:42:28 $ |
9
|
|
|
|
|
|
|
# $Author: thorstens $ |
10
|
|
|
|
|
|
|
# |
11
|
|
|
|
|
|
|
|
12
|
2
|
|
|
2
|
|
8
|
use strict; |
|
2
|
|
|
|
|
4
|
|
|
2
|
|
|
|
|
2043
|
|
13
|
|
|
|
|
|
|
### use warnings; |
14
|
|
|
|
|
|
|
|
15
|
|
|
|
|
|
|
our ($VERSION) = '$Revision: 1.11.2.5 $' =~ m{ \$Revision: \s+ (\S+) }x; |
16
|
|
|
|
|
|
|
|
17
|
|
|
|
|
|
|
sub fix_ps_title { |
18
|
0
|
|
|
0
|
1
|
|
my ($sfile, $dir, $title, $log) = @_; |
19
|
|
|
|
|
|
|
|
20
|
0
|
|
|
|
|
|
my $file = "$dir/$sfile"; |
21
|
0
|
0
|
0
|
|
|
|
if (!(-e $file && -r _)) { |
22
|
0
|
|
|
|
|
|
$log->verbose("'$sfile' does not exist or doesn't have adequate permissions, not setting the %%Title"); |
23
|
0
|
|
|
|
|
|
return; |
24
|
|
|
|
|
|
|
} |
25
|
0
|
|
|
|
|
|
$log->verbose("Backing up '$sfile'. Going to change %%Title line."); |
26
|
0
|
0
|
|
|
|
|
if (!rename($file, "$file.xbak")) { |
27
|
0
|
|
|
|
|
|
$log->verbose("failed to make backup of '$file', so we'll skip the title change."); |
28
|
|
|
|
|
|
|
} else { |
29
|
0
|
|
|
|
|
|
my ($CHANGED, $ORIG); |
30
|
0
|
0
|
0
|
|
|
|
if (!(open($CHANGED, '>', $file) && open($ORIG, '<', "$file.xbak"))) { |
31
|
0
|
|
|
|
|
|
$log->verbose("failed to create new '$file' or read '$file.xbak', so we'll revert to the old one."); |
32
|
0
|
0
|
|
|
|
|
if (!rename "$file.xbak", $file) { |
33
|
0
|
|
|
|
|
|
throw TeX::AutoTeX::FatalException("woe is me, now that failed. We're doomed.\nGiving up!"); |
34
|
|
|
|
|
|
|
} |
35
|
|
|
|
|
|
|
} else { |
36
|
0
|
|
|
|
|
|
TITLE: while (<$ORIG>) { |
37
|
|
|
|
|
|
|
# Only change first title line if any before line 6 |
38
|
0
|
0
|
|
|
|
|
if (substr($_, 0, 7) eq '%%Title') { |
39
|
0
|
|
|
|
|
|
print {$CHANGED} "%%Title: $title\n"; |
|
0
|
|
|
|
|
|
|
40
|
0
|
|
|
|
|
|
$log->verbose('%%Title: line found and changed.'); |
41
|
0
|
|
|
|
|
|
last TITLE; |
42
|
|
|
|
|
|
|
} |
43
|
0
|
|
|
|
|
|
print {$CHANGED} $_; |
|
0
|
|
|
|
|
|
|
44
|
0
|
0
|
|
|
|
|
last TITLE if $. > 5; |
45
|
|
|
|
|
|
|
} |
46
|
|
|
|
|
|
|
# TS: ps files can be huge, don't go line by line. |
47
|
|
|
|
|
|
|
# consider sysread/syswrite a la File::Copy |
48
|
0
|
|
|
|
|
|
my $chunk = 2097152; # 2MB = 1024 * 1024 * 2; |
49
|
0
|
|
|
|
|
|
my ($r, $buf); |
50
|
0
|
|
|
|
|
|
while (1) { |
51
|
0
|
0
|
|
|
|
|
defined ($r = read $ORIG, $buf, $chunk) || |
52
|
|
|
|
|
|
|
throw TeX::AutoTeX::FatalException('read after title change failed.'); |
53
|
0
|
0
|
|
|
|
|
last if $r == 0; |
54
|
0
|
0
|
|
|
|
|
print {$CHANGED} $buf |
|
0
|
|
|
|
|
|
|
55
|
|
|
|
|
|
|
or throw TeX::AutoTeX::FatalException('print after title change failed'); |
56
|
|
|
|
|
|
|
} |
57
|
0
|
|
|
|
|
|
close $ORIG; |
58
|
0
|
|
|
|
|
|
close $CHANGED; |
59
|
|
|
|
|
|
|
|
60
|
0
|
|
|
|
|
|
$log->verbose('Title change completed.'); |
61
|
0
|
0
|
|
|
|
|
if (-e "$file.xbak") { |
62
|
0
|
0
|
|
|
|
|
unlink "$file.xbak" or $log->verbose("couldn't unlink '$file.xbak': $!"); |
63
|
|
|
|
|
|
|
} |
64
|
|
|
|
|
|
|
} |
65
|
|
|
|
|
|
|
} |
66
|
0
|
|
|
|
|
|
return 0; |
67
|
|
|
|
|
|
|
} |
68
|
|
|
|
|
|
|
|
69
|
|
|
|
|
|
|
sub stamp_postscript { |
70
|
0
|
|
|
0
|
1
|
|
my ($sfile, $dir, $stampref, $log) = @_; |
71
|
|
|
|
|
|
|
|
72
|
0
|
|
|
|
|
|
my $file = "$dir/$sfile"; |
73
|
0
|
0
|
0
|
|
|
|
if (!(-e $file && -r _)) { |
74
|
0
|
0
|
|
|
|
|
$log->verbose("'$sfile' doesn't exist, or doesn't have adequate permissions, not stamping") if $log; |
75
|
0
|
|
|
|
|
|
return; |
76
|
|
|
|
|
|
|
} |
77
|
0
|
0
|
|
|
|
|
$log->verbose("Backing up '$sfile'. Going to add a name/date stamp to it.") if $log; |
78
|
0
|
0
|
|
|
|
|
if (!rename $file, "$file.bak") { |
79
|
0
|
0
|
|
|
|
|
$log->verbose("failed to make backup of '$file', so we'll skip the stamping.") if $log; |
80
|
|
|
|
|
|
|
} else { |
81
|
0
|
|
|
|
|
|
my ($STAMPED, $ORIG); |
82
|
0
|
0
|
0
|
|
|
|
if (!(open($STAMPED, '>', $file) && open($ORIG, '<', "$file.bak"))) { |
83
|
0
|
0
|
|
|
|
|
$log->verbose("failed to create new '$file' or read '$file.bak', so we'll revert to the old one.") if $log; |
84
|
0
|
0
|
0
|
|
|
|
if (!rename("$file.bak", $file) && $log) { |
85
|
0
|
|
|
|
|
|
throw TeX::AutoTeX::FatalException("woe is me, now that failed. We're doomed.\nGiving up!"); |
86
|
|
|
|
|
|
|
} |
87
|
|
|
|
|
|
|
} else { |
88
|
0
|
|
|
|
|
|
PAGE1: while (<$ORIG>) { |
89
|
0
|
|
|
|
|
|
print {$STAMPED} $_; |
|
0
|
|
|
|
|
|
|
90
|
0
|
0
|
|
|
|
|
last PAGE1 if /^%%Page:\s+-?\d+\s+1\s*$/; |
91
|
|
|
|
|
|
|
} |
92
|
0
|
|
|
|
|
|
STAMP: while (<$ORIG>) { |
93
|
0
|
0
|
|
|
|
|
if (substr($_, 0, 2) ne '%%') { |
94
|
0
|
0
|
|
|
|
|
$log->verbose('OK, inserting the stamp') if $log; |
95
|
|
|
|
|
|
|
# we had a request for extra space in front of the v |
96
|
|
|
|
|
|
|
# on postscript files (only) |
97
|
0
|
|
|
|
|
|
my $xmoveto = int(6*72 - length($stampref->[0])*9/2); |
98
|
|
|
|
|
|
|
#6in - halflength, ymoveto=39=.54in |
99
|
|
|
|
|
|
|
|
100
|
0
|
0
|
|
|
|
|
if ($stampref->[1]) { |
101
|
0
|
|
|
|
|
|
print {$STAMPED} <<"EOSTAMP"; |
|
0
|
|
|
|
|
|
|
102
|
|
|
|
|
|
|
gsave %matrix defaultmatrix setmatrix |
103
|
|
|
|
|
|
|
90 rotate /stampsize 20 def /Times-Roman findfont stampsize scalefont setfont |
104
|
|
|
|
|
|
|
currentfont /FontBBox get aload pop /pdf\@top exch 1000 div stampsize mul def |
105
|
|
|
|
|
|
|
pop /pdf\@bottom exch 1000 div stampsize mul def pop |
106
|
|
|
|
|
|
|
$xmoveto -32 moveto |
107
|
|
|
|
|
|
|
currentpoint /pdf\@lly exch pdf\@bottom add def /pdf\@llx exch 2 sub def |
108
|
|
|
|
|
|
|
0.5 setgray ($stampref->[0]) show |
109
|
|
|
|
|
|
|
currentpoint /pdf\@ury exch pdf\@top add def /pdf\@urx exch 2 add def |
110
|
|
|
|
|
|
|
/pdfmark where{pop}{userdict /pdfmark /cleartomark load put}ifelse |
111
|
|
|
|
|
|
|
[ /H /I /Border [0 0 1] /BS <> /Color [0 1 1] |
112
|
|
|
|
|
|
|
/Action << /Subtype /URI /URI ($stampref->[1])>> |
113
|
|
|
|
|
|
|
/Subtype /Link /Rect[pdf\@llx pdf\@lly pdf\@urx pdf\@ury] /ANN pdfmark |
114
|
|
|
|
|
|
|
grestore |
115
|
|
|
|
|
|
|
EOSTAMP |
116
|
|
|
|
|
|
|
} else { |
117
|
0
|
|
|
|
|
|
print {$STAMPED} <<"EOPS"; |
|
0
|
|
|
|
|
|
|
118
|
|
|
|
|
|
|
gsave %matrix defaultmatrix setmatrix |
119
|
|
|
|
|
|
|
90 rotate $xmoveto -39 moveto /Times-Roman findfont 20 scalefont setfont |
120
|
|
|
|
|
|
|
0.3 setgray ($stampref->[0]) show grestore |
121
|
|
|
|
|
|
|
EOPS |
122
|
|
|
|
|
|
|
} |
123
|
0
|
|
|
|
|
|
print {$STAMPED} $_; |
|
0
|
|
|
|
|
|
|
124
|
0
|
|
|
|
|
|
last STAMP; |
125
|
|
|
|
|
|
|
} |
126
|
0
|
|
|
|
|
|
print {$STAMPED} $_; |
|
0
|
|
|
|
|
|
|
127
|
|
|
|
|
|
|
} |
128
|
|
|
|
|
|
|
# TS: ps files can be huge, don't go line by line. |
129
|
|
|
|
|
|
|
# consider sysread/syswrite a la File::Copy |
130
|
0
|
|
|
|
|
|
my $chunk = 2097152; # 2MB = 1024 * 1024 * 2; |
131
|
0
|
|
|
|
|
|
my ($r, $buf); |
132
|
0
|
|
|
|
|
|
while (1) { |
133
|
0
|
0
|
|
|
|
|
defined ($r = read $ORIG, $buf, $chunk) || |
134
|
|
|
|
|
|
|
throw TeX::AutoTeX::FatalException('read after stamping failed.'); |
135
|
0
|
0
|
|
|
|
|
last if $r == 0; |
136
|
0
|
0
|
|
|
|
|
print {$STAMPED} $buf |
|
0
|
|
|
|
|
|
|
137
|
|
|
|
|
|
|
or throw TeX::AutoTeX::FatalException('print after stamping failed'); |
138
|
|
|
|
|
|
|
} |
139
|
0
|
0
|
|
|
|
|
$log->verbose('Stamping completed.') if $log; |
140
|
|
|
|
|
|
|
} |
141
|
0
|
|
|
|
|
|
close $ORIG; |
142
|
0
|
|
|
|
|
|
close $STAMPED; |
143
|
|
|
|
|
|
|
} |
144
|
0
|
0
|
|
|
|
|
unlink "$file.bak" if -e "$file.bak"; |
145
|
|
|
|
|
|
|
|
146
|
0
|
|
|
|
|
|
return 0; |
147
|
|
|
|
|
|
|
} |
148
|
|
|
|
|
|
|
|
149
|
|
|
|
|
|
|
1; |
150
|
|
|
|
|
|
|
|
151
|
|
|
|
|
|
|
__END__ |