summaryrefslogtreecommitdiff
path: root/Build/source/texk/dvipdfm/dvipdft
blob: db53bd2f5a00c3081109092f2161152071b3a4c5 (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
#!/bin/sh

#
# dvipdft, completely rewtitten by Thomas Esser for teTeX after an
# original script by Mark A. Wicks
#
# Thomas Esser. Public Domain.
#

# This script makes a first (fast) run with dvipdfm, then calls gs on
# the resulting pdf file to get the thumbnails and finally calls dvipdfm.

test -f /bin/sh5 && test -z "$RUNNING_SH5" \
  && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
  && { RUNNING_SH5=true; export RUNNING_SH5; exec /bin/sh5 $0 ${1+"$@"}; }
unset RUNNING_SH5

test -f /bin/bsh && test -z "$RUNNING_BSH" \
  && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \
  && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; }
unset RUNNING_BSH

# hack around a bug in zsh:
test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"'

progname=dvipdft
version=1111942378 # seconds since `00:00:00 1970-01-01 UTC'
                    # date '+%s' (with GNU date)

help="Usage: $progname [options] dvifile
       $progname --help
       $progname --version"

tmpdir=${TMPDIR-${TEMP-${TMP-/tmp}}}/$progname.$$

quoteit()
{
  echo "x$1" | sed "s@.@@; s@'@'\\\\''@; s@^@'@; s@\$@'@"
}

# process args 1 to (n-1) and scan for a -o argument keep a properly
# quoted backup of the options, so that they can be restored later
unset s outfile
while test $# -gt 1; do
  case $1 in
    -o) outfile=$2;;
  esac
  s="$s${s+ }"`quoteit "$1"`
  shift
done

# check for last argument
case $1 in
  --help)
    echo "$help"
    exit 0
    ;;
  --version)
    echo "$progname version $version by Thomas Esser"
    exit 0
    ;;
  "")
    echo "$help"
    exit 1
    ;;
esac

# args 1 to (n-1) are gone, last one must be the dvifile
dvifile=$1

# outfile comes from -o argument, else it is derived from the input file
test -n "$outfile" \
  || outfile=`echo "$dvifile" | sed 's@.*/@@; s@\.dvi$@@; s@$@.pdf@'`

# outBase is part of the thumbname files just as dvipdfm expects them:
outBase=`echo "$outfile" | sed 's@\.pdf$@@'`

# restore args 1 to (n-1):
eval set x "$s"; shift

# Run dvipdfm with the fastest options for the first pass
echo "$progname: running dvipdfm $@ -e -z0 $dvifile" >&2
dvipdfm ${1+"$@"} -e -z0 "$dvifile" || {
  echo "$progname: dvipdfm failed." >&2
  exit 1
}

# before we create the tmpdir, set trap for cleanup
trap '
  rm -rf $tmpdir
  exit 1
' 1 2 3 7 13 15

mkdir "$tmpdir" || {
  echo "$progname: failed to create temp directory." >&2
  exit 1
}

# if outBase contains a /, we might need to create a directory
case $outBase in
  */*)
    fq=`echo "$tmpdir/$outBase" | sed 's@//@/@g; s@/[^/]*$@@'`
    test -d "$fq" || mkdir -p "$fq" || {
      echo "$progname: failed to create temp thumbnail directory." >&2
      rm -rf $tmpdir
      exit 1
    }
    ;;
esac

# run gs
echo "$progname: running gs" >&2
gs -r10 -dNOPAUSE -dBATCH -sDEVICE=png256 \
   -sOutputFile="$tmpdir/$outBase.%d" "$outfile" || {
  echo "$progname: gs failed." >&2
  rm -rf $tmpdir
  exit 1
}

# run dvipdfm with the users specified options for the last pass
echo "$progname: running dvipdfm -dt $@ $dvifile" >&2
TMP=$tmpdir dvipdfm -dt ${1+"$@"} "$dvifile" || {
  echo "$progname: dvipdfm failed." >&2
  rm -rf $tmpdir
  exit 1
}

# nothing failed, so cleanup and report success to caller
rm -rf $tmpdir
exit 0