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