diff options
Diffstat (limited to 'lib/ps2epsi')
-rwxr-xr-x | lib/ps2epsi | 103 |
1 files changed, 16 insertions, 87 deletions
diff --git a/lib/ps2epsi b/lib/ps2epsi index d992180f..7590cb5a 100755 --- a/lib/ps2epsi +++ b/lib/ps2epsi @@ -1,30 +1,22 @@ #!/bin/sh +# Revised in 2020 to use the eps2write device (within ps2epsi.ps) + # This definition is changed on install to match the -# executable name set in the makefile +# executable name set in the makefile, but we check a couple of other +# places (bin/ sibling to $LIBDIR and 'gs' on the $PATH) GS_EXECUTABLE=gs -gs="`dirname \"$0\"`/$GS_EXECUTABLE" +LIBDIR=`dirname $0` +gs="$LIBDIR/$GS_EXECUTABLE" if test ! -x "$gs"; then - gs="$GS_EXECUTABLE" -fi -GS_EXECUTABLE="$gs" - -# try to create a temporary file securely -if test -z "$TMPDIR"; then - TMPDIR=/tmp -fi -if which mktemp >/dev/null 2>/dev/null; then - tmpfile="`mktemp $TMPDIR/ps2epsi.XXXXXX`" -else - tmpdir=$TMPDIR/ps2epsi.$$ - (umask 077 && mkdir "$tmpdir") - if test ! -d "$tmpdir"; then - echo "failed: could not create temporary file" - exit 1 + # Might be executing lib/ps2epsi with bin/ as sibling to lib/ + gs="$LIBDIR/../bin/$GS_EXECUTABLE" + if test ! -x "$gs"; then + # Fallback to using any 'gs' on the path + gs="$GS_EXECUTABLE" fi - tmpfile="$tmpdir"/ps2epsi$$ fi -trap "rm -rf \"$tmpfile\"" 0 1 2 3 7 13 15 +GS_EXECUTABLE="$gs" export outfile @@ -35,8 +27,7 @@ fi infile=$1; -if [ $# -eq 1 ] -then +if [ $# -eq 1 ]; then case "${infile}" in *.ps) base=`basename "${infile}" .ps` ;; *.cps) base=`basename "${infile}" .cps` ;; @@ -49,70 +40,8 @@ else outfile=$2 fi -"$GS_EXECUTABLE" -q -dBATCH -dNOPAUSE -P- -sDEVICE=bbox -sOutputFile=/dev/null "${infile}" 2>${outfile} - -ls -l "${infile}" | -awk 'F==1 { - cd="%%CreationDate: " $6 " " $7 " " $8; - t="%%Title: " $9; - f="%%For:" U " " $3; - c="%%Creator: Ghostscript ps2epsi from " $9; - next; - } - /^%!/ {next;} - /^%%Title:/ {t=$0; next;} - /^%%Creator:/ {c=$0; next;} - /^%%CreationDate:/ {cd=$0; next;} - /^%%For:/ {f=$0; next;} - !/^%/ { - print "/ps2edict 30 dict def"; - print "ps2edict begin"; - print "/epsititle (" t "\\n) def"; - print "/epsicreator (" c "\\n) def"; - print "/epsicrdt (" cd "\\n) def"; - print "/epsifor (" f "\\n) def"; - exit(0); - } - ' U="$USERNAME$LOGNAME" F=1 - F=2 "${infile}" >"$tmpfile" - -ls -l "${outfile}" | -awk 'F==1 { - b="%%BoundingBox: 0 0 0 0\\n"; - } - /^%%BoundingBox:/ {b=$0; next;} - /^%%HiResBoundingBox:/ { - hb=$0; - print "ps2edict where {pop} {/ps2edict 30 dict def} ifelse"; - print "ps2edict begin"; - print "/BBoxString (" b "\\n) def"; - print "/HiresBBoxString (" hb "\\n) def"; - print "end"; - exit(0); - } - ' F=1 - F=2 "${outfile}" >>"$tmpfile" - -"$GS_EXECUTABLE" -q -dNOPAUSE -P- -r72 -sDEVICE=bit -sOutputFile=/dev/null "$tmpfile" ps2epsi.ps "$tmpfile" <"${infile}" 1>&2 -rm -f "$tmpfile" -rm -rf "$tmpdir" - -( -cat << BEGINEPS -save countdictstack mark newpath /showpage {} def /setpagedevice /pop load def -%%EndProlog -%%Page 1 1 -BEGINEPS - -cat "${infile}" | -LC_ALL=C \ -sed -e '/^%%BeginPreview:/,/^%%EndPreview[^!-\~]*$/d' -e '/^%!PS-Adobe/d'\ - -e '/^%%[A-Za-z][A-Za-z]*[^!-\~]*$/d' -e '/^%%[A-Za-z][A-Za-z]*: /d' - -cat << ENDEPS -%%Trailer -cleartomark countdictstack exch sub { end } repeat restore -%%EOF -ENDEPS - -) >> "${outfile}" +# Note, we expect 'ps2epsi.ps' to be in the same directory as 'ps2epsi' +"$GS_EXECUTABLE" -q -dNOOUTERSAVE -dNODISPLAY -dLastPage=1 -sOutputFile="${outfile}" \ + --permit-file-all="${infile}" -- "$LIBDIR/ps2epsi.ps" "${infile}" 1>&2 exit 0 |