Blame tools/djvudigital

Packit df99a1
#!/bin/sh
Packit df99a1
#C--------------------------------------------------------------------
Packit df99a1
#C- DjVuLibre-3.5
Packit df99a1
#C- Copyright (c) 2002  Leon Bottou and Yann Le Cun.
Packit df99a1
#C- Copyright (c) 2001  AT&T
Packit df99a1
#C-
Packit df99a1
#C- This software is subject to, and may be distributed under, the
Packit df99a1
#C- GNU General Public License, either Version 2 of the license,
Packit df99a1
#C- or (at your option) any later version. The license should have
Packit df99a1
#C- accompanied the software or you may obtain a copy of the license
Packit df99a1
#C- from the Free Software Foundation at http://www.fsf.org .
Packit df99a1
#C-
Packit df99a1
#C- This program is distributed in the hope that it will be useful,
Packit df99a1
#C- but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit df99a1
#C- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit df99a1
#C- GNU General Public License for more details.
Packit df99a1
#C-
Packit df99a1
#C- DjVuLibre-3.5 is derived from the DjVu(r) Reference Library from
Packit df99a1
#C- Lizardtech Software.  Lizardtech Software has authorized us to
Packit df99a1
#C- replace the original DjVu(r) Reference Library notice by the following
Packit df99a1
#C- text (see doc/lizard2002.djvu and doc/lizardtech2007.djvu):
Packit df99a1
#C-
Packit df99a1
#C-  ------------------------------------------------------------------
Packit df99a1
#C- | DjVu (r) Reference Library (v. 3.5)
Packit df99a1
#C- | Copyright (c) 1999-2001 LizardTech, Inc. All Rights Reserved.
Packit df99a1
#C- | The DjVu Reference Library is protected by U.S. Pat. No.
Packit df99a1
#C- | 6,058,214 and patents pending.
Packit df99a1
#C- |
Packit df99a1
#C- | This software is subject to, and may be distributed under, the
Packit df99a1
#C- | GNU General Public License, either Version 2 of the license,
Packit df99a1
#C- | or (at your option) any later version. The license should have
Packit df99a1
#C- | accompanied the software or you may obtain a copy of the license
Packit df99a1
#C- | from the Free Software Foundation at http://www.fsf.org .
Packit df99a1
#C- |
Packit df99a1
#C- | The computer code originally released by LizardTech under this
Packit df99a1
#C- | license and unmodified by other parties is deemed "the LIZARDTECH
Packit df99a1
#C- | ORIGINAL CODE."  Subject to any third party intellectual property
Packit df99a1
#C- | claims, LizardTech grants recipient a worldwide, royalty-free, 
Packit df99a1
#C- | non-exclusive license to make, use, sell, or otherwise dispose of 
Packit df99a1
#C- | the LIZARDTECH ORIGINAL CODE or of programs derived from the 
Packit df99a1
#C- | LIZARDTECH ORIGINAL CODE in compliance with the terms of the GNU 
Packit df99a1
#C- | General Public License.   This grant only confers the right to 
Packit df99a1
#C- | infringe patent claims underlying the LIZARDTECH ORIGINAL CODE to 
Packit df99a1
#C- | the extent such infringement is reasonably necessary to enable 
Packit df99a1
#C- | recipient to make, have made, practice, sell, or otherwise dispose 
Packit df99a1
#C- | of the LIZARDTECH ORIGINAL CODE (or portions thereof) and not to 
Packit df99a1
#C- | any greater extent that may be necessary to utilize further 
Packit df99a1
#C- | modifications or combinations.
Packit df99a1
#C- |
Packit df99a1
#C- | The LIZARDTECH ORIGINAL CODE is provided "AS IS" WITHOUT WARRANTY
Packit df99a1
#C- | OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
Packit df99a1
#C- | TO ANY WARRANTY OF NON-INFRINGEMENT, OR ANY IMPLIED WARRANTY OF
Packit df99a1
#C- | MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Packit df99a1
#C- +------------------------------------------------------------------
Packit df99a1
#C--------------------------------------------------------------------
Packit df99a1
Packit df99a1
# Step 1 -- utilities
Packit df99a1
Packit df99a1
usage()
Packit df99a1
{
Packit df99a1
    cat 1>&2 <<\END
Packit df99a1
Usage:  djvudigital [options] inputfile [outputfile]
Packit df99a1
More information is displayed by typing
Packit df99a1
    djvudigital --help
Packit df99a1
END
Packit df99a1
    exit 10
Packit df99a1
}
Packit df99a1
Packit df99a1
getarg()
Packit df99a1
{
Packit df99a1
        echo "$1" | sed -e 's/^[^=]*=//'
Packit df99a1
}
Packit df99a1
Packit df99a1
getargs()
Packit df99a1
{
Packit df99a1
        echo "$1" | sed -e 's/^[^=]*=//' -e 's/,/ /g'
Packit df99a1
}
Packit df99a1
Packit df99a1
pathexpand()
Packit df99a1
{
Packit df99a1
    tmpvar="$PATH"
Packit df99a1
    tmpdir=
Packit df99a1
    while [ -n "$tmpvar" ]
Packit df99a1
    do
Packit df99a1
      IFS=':' read tmpdir tmpvar <
Packit df99a1
$tmpvar
Packit df99a1
EOF
Packit df99a1
      test -x $tmpdir/$1 && echo $tmpdir/$1
Packit df99a1
    done
Packit df99a1
}
Packit df99a1
Packit df99a1
checkps2utf8()
Packit df99a1
{
Packit df99a1
    if [ -z "$djvutext" ] 
Packit df99a1
    then
Packit df99a1
        djvutext=no
Packit df99a1
        if ( "$gsdjvu" 2>&1 -dNODISPLAY -c '(ps2utf8.ps) runlibfile quit' | \
Packit df99a1
              grep -q WRITESYSTEMDICT )
Packit df99a1
        then
Packit df99a1
            djvutext="/tmp/dj$$.ps"
Packit df99a1
            trap "rm 2>/dev/null $djvutext" 0
Packit df99a1
            cat > $djvutext <<\EOF
Packit df99a1
(ps2utf8.ps) runlibfile currentglobal /setglobal load true setglobal 
Packit df99a1
.ps2utf8 begin /onpage { } bind def /onfont { pop pop pop } bind def
Packit df99a1
/onmark { pop pop pop pop currentx currenty currentpoint 
Packit df99a1
.djvutextmark } bind def end exec
Packit df99a1
EOF
Packit df99a1
        fi
Packit df99a1
    fi
Packit df99a1
    test "$djvutext" != no && test -r "$djvutext"  
Packit df99a1
}
Packit df99a1
Packit df99a1
Packit df99a1
# Step 1 -- locate gsdjvu executable
Packit df99a1
Packit df99a1
gsdjvu=
Packit df99a1
for gs in ${GSDJVU} `pathexpand gs` `pathexpand gsdjvu`
Packit df99a1
do
Packit df99a1
  if [ -z "$gsdjvu" ] && ( "$gs" -h 2>&1 | grep -q djvusep )
Packit df99a1
  then
Packit df99a1
     gsdjvu="$gs"
Packit df99a1
  fi
Packit df99a1
done
Packit df99a1
Packit df99a1
if [ -z "$gsdjvu" ]
Packit df99a1
then
Packit df99a1
    cat 1>&2 <<\EOF
Packit df99a1
djvudigital: cannot locate suitable ghostscript executable.
Packit df99a1
+--------------------------------------------------------------------+
Packit df99a1
| DjVuDigital relies on a special ghostscript device driver, but     |
Packit df99a1
| could not find a ghostscript executable that implement this driver.|
Packit df99a1
| Please visit http://djvu.sourceforge.net/gsdjvu.html.              |
Packit df99a1
+--------------------------------------------------------------------+
Packit df99a1
EOF
Packit df99a1
    exit 10
Packit df99a1
fi
Packit df99a1
Packit df99a1
Packit df99a1
# Step 2 -- locate csepdjvu executable
Packit df99a1
Packit df99a1
csepdjvu=
Packit df99a1
for cs in ${CSEPDJVU} `pathexpand csepdjvu` `pathexpand msepdjvu`
Packit df99a1
do
Packit df99a1
  if [ -z "$csepdjvu" ] && ( "$cs" -h 2>&1 | grep -q quality )
Packit df99a1
  then
Packit df99a1
      csepdjvu="$cs"
Packit df99a1
  fi
Packit df99a1
done
Packit df99a1
Packit df99a1
if [ -z "$csepdjvu" ]
Packit df99a1
then
Packit df99a1
    cat 1>&2 <<\EOF
Packit df99a1
djvudigital: cannot locate csepdjvu executable.
Packit df99a1
+--------------------------------------------------------------------+
Packit df99a1
| DjVuDigital was not able to locate the djvulibre tool "csepdjvu".   |
Packit df99a1
| Please make sure that the djvulibre tools are properly installed.  |
Packit df99a1
+--------------------------------------------------------------------+
Packit df99a1
EOF
Packit df99a1
    exit 10
Packit df99a1
fi
Packit df99a1
Packit df99a1
Packit df99a1
# Step 3 -- process arguments
Packit df99a1
Packit df99a1
gsarg0="-sDEVICE=djvusep -dNOPAUSE -dBATCH -dSAFER"
Packit df99a1
gsarg1=
Packit df99a1
gsarg2=
Packit df99a1
csepargs=
Packit df99a1
dpi="300"
Packit df99a1
gsprinted="-dPrinted"
Packit df99a1
gsepsf="-dEPSCrop"
Packit df99a1
gsverbosity=
Packit df99a1
csepverbosity='-v'
Packit df99a1
djvutext=
Packit df99a1
infile=
Packit df99a1
outfile=
Packit df99a1
run=
Packit df99a1
sepfile=
Packit df99a1
Packit df99a1
for n
Packit df99a1
do
Packit df99a1
  case $n in 
Packit df99a1
      --*) 
Packit df99a1
          ;;
Packit df99a1
      -*)  
Packit df99a1
          n="-$n" 
Packit df99a1
          ;;
Packit df99a1
  esac
Packit df99a1
  case $n in
Packit df99a1
      --help)
Packit df99a1
          man djvudigital
Packit df99a1
          exit 10
Packit df99a1
          ;;
Packit df99a1
      --check)
Packit df99a1
          echo 1>&2 "Using: $gsdjvu"
Packit df99a1
          echo 1>&2 "  and: $csepdjvu"
Packit df99a1
          exit 0
Packit df99a1
          ;;
Packit df99a1
      --dpi=[0-9]*)
Packit df99a1
          dpi="`getarg $n`"
Packit df99a1
          ;;
Packit df99a1
      --verbose|--v)
Packit df99a1
          gsverbosity=''
Packit df99a1
          csepverbosity='-vv'
Packit df99a1
          ;;
Packit df99a1
      --dryrun)
Packit df99a1
          run=echo
Packit df99a1
          ;;
Packit df99a1
      --sepfile)
Packit df99a1
          sepfile=yes
Packit df99a1
          ;;
Packit df99a1
      --quiet|--q)
Packit df99a1
          gsverbosity='-q'
Packit df99a1
          csepverbosity=''
Packit df99a1
          ;;
Packit df99a1
      --psrotate=0)
Packit df99a1
          gsarg2="-c << /Orientation 0 >> setpagedevice"
Packit df99a1
          ;;
Packit df99a1
      --psrotate=90)
Packit df99a1
          gsarg2="-c << /Orientation 3 >> setpagedevice"
Packit df99a1
          ;;
Packit df99a1
      --psrotate=180)
Packit df99a1
          gsarg2="-c << /Orientation 2 >> setpagedevice"
Packit df99a1
          ;;
Packit df99a1
      --psrotate=270)
Packit df99a1
          gsarg2="-c << /Orientation 1 >> setpagedevice"
Packit df99a1
          ;;
Packit df99a1
      --epsf=no)
Packit df99a1
          gsepsf=
Packit df99a1
          ;;
Packit df99a1
      --epsf=ignore)
Packit df99a1
          gsepsf="-dNOEPS"
Packit df99a1
          ;;
Packit df99a1
      --epsf=fit)
Packit df99a1
          gsepsf="-dEPSFitPage"
Packit df99a1
          ;;
Packit df99a1
      --epsf=crop)
Packit df99a1
          gsepsf="-dEPSCrop"
Packit df99a1
          ;;
Packit df99a1
      --words)
Packit df99a1
          if checkps2utf8; then
Packit df99a1
            gsarg0="$gsarg0 -dDELAYBIND -dWRITESYSTEMDICT"
Packit df99a1
            gsarg1="-f $djvutext"
Packit df99a1
          else
Packit df99a1
            gsarg0="$gsarg0 -dProvideUnicode -dExtractText"
Packit df99a1
          fi
Packit df99a1
          ;;
Packit df99a1
      --lines)
Packit df99a1
          if checkps2utf8; then 
Packit df99a1
            gsarg0="$gsarg0 -dDELAYBIND -dWRITESYSTEMDICT"
Packit df99a1
            gsarg1="-f $djvutext"
Packit df99a1
          else
Packit df99a1
            gsarg0="$gsarg0 -dProvideUnicode -dExtractText"
Packit df99a1
          fi
Packit df99a1
          csepargs="$csepargs -t"
Packit df99a1
          ;;
Packit df99a1
      --pdf=screen)
Packit df99a1
          gsprinted="-dPrinted=false"
Packit df99a1
          ;;
Packit df99a1
      --pdf=printed)
Packit df99a1
          gsprinted="-dPrinted=true"
Packit df99a1
          ;;
Packit df99a1
      --exact-color)
Packit df99a1
          gsarg0="-dUseCIEColor $gsarg0"
Packit df99a1
          ;;
Packit df99a1
      --threshold=*)
Packit df99a1
          gsarg0=" -dThreshold=`getarg $n` $gsarg0"
Packit df99a1
          ;;
Packit df99a1
      --bg-subsample=*)
Packit df99a1
          gsarg0=" -dBgSubsample=`getarg $n` $gsarg0"
Packit df99a1
          ;;
Packit df99a1
      --bg-slices=*)
Packit df99a1
          csepargs=" -q `getarg $n` $csepargs"
Packit df99a1
          ;;
Packit df99a1
      --fg-colors=*)
Packit df99a1
          gsarg0=" -dFgColors=`getarg $n` $gsarg0"
Packit df99a1
          ;;
Packit df99a1
      --fg-image-colors=*)
Packit df99a1
          gsarg0=" -dFgImgColors=`getarg $n` $gsarg0"
Packit df99a1
          ;;
Packit df99a1
      --gsarg=*)
Packit df99a1
          gsarg0=" `getargs $n` $gsarg0"
Packit df99a1
          ;;
Packit df99a1
      --cseparg=*)
Packit df99a1
          csepargs="$csepargs `getargs $n`"
Packit df99a1
          ;;
Packit df99a1
      -*)
Packit df99a1
          usage
Packit df99a1
          ;;
Packit df99a1
      *)
Packit df99a1
          if [ -z "$infile" ] ; then
Packit df99a1
              infile=$n
Packit df99a1
          elif [ -z "$outfile" ] ; then
Packit df99a1
              outfile=$n
Packit df99a1
          else
Packit df99a1
              usage
Packit df99a1
          fi
Packit df99a1
          ;;
Packit df99a1
  esac
Packit df99a1
done
Packit df99a1
Packit df99a1
Packit df99a1
# Step 4 -- check input filename
Packit df99a1
Packit df99a1
if [ -z "$infile" ] ; then
Packit df99a1
    usage
Packit df99a1
elif [ ! -r "$infile" -a -z "$run" ]; then
Packit df99a1
    echo "djvudigital: cannot open $infile for reading" 1>&2
Packit df99a1
    exit 10
Packit df99a1
fi
Packit df99a1
Packit df99a1
if [ -z "$outfile" ]
Packit df99a1
then
Packit df99a1
    outfile="$infile"
Packit df99a1
    for ext in gz GZ ps PS eps EPS pdf PDF
Packit df99a1
    do
Packit df99a1
       case "$outfile" in
Packit df99a1
         *.$ext)
Packit df99a1
            outfile=`basename "$outfile" .$ext`
Packit df99a1
            ;;
Packit df99a1
       esac
Packit df99a1
    done
Packit df99a1
    if [ "$sepfile" = "yes" ] 
Packit df99a1
    then
Packit df99a1
      outfile="$outfile.sep"
Packit df99a1
    else
Packit df99a1
      outfile="$outfile.djvu"
Packit df99a1
    fi
Packit df99a1
fi
Packit df99a1
Packit df99a1
# Step 5 -- execute command
Packit df99a1
Packit df99a1
if [ "$csepverbosity" != "" -o "$gsverbosity" != "-q" ] 
Packit df99a1
then
Packit df99a1
    test -z "$run" && echo "DJVUDIGITAL --- DjVuLibre-3.5"
Packit df99a1
fi
Packit df99a1
Packit df99a1
if [ "$sepfile" = "yes" ] 
Packit df99a1
then
Packit df99a1
  backend="$outfile"
Packit df99a1
else
Packit df99a1
  backend="|$csepdjvu -d "'"'"$dpi"'"'
Packit df99a1
  backend="$backend $csepverbosity $csepargs - "'"'"$outfile"'"'
Packit df99a1
fi
Packit df99a1
Packit df99a1
Packit df99a1
case "$infile" in
Packit df99a1
    *.gz|*.GZ)
Packit df99a1
        if test -z "$run" ; then
Packit df99a1
          gzip -d -c "$infile" | \
Packit df99a1
          $gsdjvu "-r$dpi" $gsverbosity $gsprinted $gsepsf \
Packit df99a1
            "-sOutputFile=$backend" $gsarg0 $gsarg1 $gsarg2 -_ -c quit
Packit df99a1
        else
Packit df99a1
          echo -n gzip -d -c '"'"$infile"'"' '|' ""
Packit df99a1
          echo -n $gsdjvu "-r$dpi" $gsverbosity $gsprinted $gsepsf ""
Packit df99a1
          echo -n "-sOutputFile=""'""$backend""'" ""
Packit df99a1
          echo -n $gsarg0 $gsarg1 $gsarg2 -_ -c quit
Packit df99a1
          echo
Packit df99a1
        fi
Packit df99a1
        ;;
Packit df99a1
    *)
Packit df99a1
        if test -z "$run" ; then
Packit df99a1
          $gsdjvu "-r$dpi" $gsverbosity $gsprinted $gsepsf \
Packit df99a1
            "-sOutputFile=$backend" $gsarg0 $gsarg1 $gsarg2 \
Packit df99a1
            -f "$infile" -c quit
Packit df99a1
        else
Packit df99a1
          echo -n $gsdjvu "-r$dpi" $gsverbosity $gsprinted $gsepsf ""
Packit df99a1
          echo -n "-sOutputFile=""'""$backend""'" ""
Packit df99a1
          echo -n $gsarg0 $gsarg1 $gsarg2 -f '"'"$infile"'"' -c quit
Packit df99a1
          echo
Packit df99a1
        fi
Packit df99a1
        ;;
Packit df99a1
esac