9 test -n "$XDG_CACHE_HOME" \
10 && cachedir
="$XDG_CACHE_HOME" || cachedir
="$HOME/.cache"
12 CACHEDIR
=$cachedir/llpp
13 test -d "$CACHEDIR" || die
"cache directory '$CACHEDIR' does not exist"
19 command -v "$1" >/dev
/null
2>&1
23 cat >"$CACHEDIR/fonts/text" <<EOF
24 Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
25 eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
26 minim veniam, quis nostrud exercitation ullamco laboris nisi ut
27 aliquip ex ea commodo consequat. Duis aute irure dolor in
28 reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
29 pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
30 culpa qui officia deserunt mollit anim id est laborum.
31 Posting Soccer Goals On Vine Is Illegal, Say England's Premier League
32 abcdefghizklmnopqrstwxyz
33 ABCDEFGHIZKLMNOPQRSTWXYZ
42 trap 'test -n "$casp" && rm -f "$casp"' 0
44 while getopts m
:t
:f opt
; do
49 ?
) die
"usage: $0 [-m mime/type] [-t filter] [-f] [path|url]";;
52 shift $
(($OPTIND - 1))
53 test -z "$1" && die
"usage $0: path"
55 test ! -e "$1" && expr >/dev
/null
"$1" : "\(ftp\|https\?\)://" && {
56 if executable_p wget
; then
58 wget
-q -c -nc $1 -O $2
61 if executable_p curl
; then
66 echo "no program to fetch remote urls found"
71 md5of
="$CACHEDIR/$(basename "$1")"
72 dl
"$1" "$md5of" ||
test -e "$md5of"
73 set -- "$md5of" ${2+"@"}
79 ft
=$
(file -L --mime-type -b "$1") || die
"$ft"
83 application
/x-gzip | application
/x-compress
) dc=zcat
;;
84 application
/x-xz
) dc=xzcat
;;
85 application
/x-bzip2
) dc=bzcat
;;
89 filt
='"${dc-cat}" "$1" |'
91 if test -z "$type"; then
92 test -z "$dc" || ft
=$
(file -L --mime-type -bz "$1") || die
"$ft"
96 application
/postscript
) type=ps
;;
97 application
/pdf
) type=pdf
;;
98 image
/vnd.djvu
) type=djvu
;;
99 text
/html
) type=html
;;
100 application
/msword
) type=word
;;
101 application
/vnd.openxmlformats-officedocument.
* \
102 | application
/vnd.ms-powerpoint \
103 | application
/vnd.ms-excel \
104 | application
/vnd.oasis.opendocument.
*) type=uno
;;
105 image
/svg
+xml
) type=svg
;;
106 image
/png | image
/jpeg
) test -n "$dc" && type="image" ||
type="image2";;
107 image
/*) type=image
;;
108 application
/x-dvi
) type=dvi
;;
109 application
/x-font-ttf | application
/vnd.ms-opentype
) type=font
;;
110 *) die
"unhandled file type: '$mime'";;
115 ps
) conv
='ps2pdf - "$casp"';;
116 image2|pdf
) test -z "$dc" && exec llpp
"$@" || conv
='cat >"$casp"';;
117 djvu
) conv
='djvups - | ps2pdf - "$casp"';;
119 test -n "$dc" && die
"can not convert compressed '$mime'"
121 conv
='prince "$1" -o "$casp"'
124 if executable_p unoconv
&& test -z "$dc"; then
126 conv
='unoconv -o "$casp" "$1"'
128 conv
='antiword -m 8859-1.txt -a a4 - >"$casp"'
132 test -n "$dc" && die
"can not convert compressed '$mime'"
134 conv
='unoconv -o "$casp" "$1"'
137 executable_p rsvg-convert \
138 && conv
='rsvg-convert -f pdf -o "$casp"' \
139 || conv
='inkscape -z -A "$casp" -'
142 if test -e "$2"; then
145 arg
="--waterfall $CACHEDIR/fonts/text"
148 # https://mail.gnome.org/archives/gtk-i18n-list/2010-June/msg00000.html
149 eval $filt cat >$CACHEDIR/fonts
/font
150 cat >$CACHEDIR/fonts
/fonts.conf
<<EOF
151 <?xml version="1.0"?>
152 <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
154 <dir>$CACHEDIR/fonts/</dir>
155 <cachedir>$CACHEDIR/fonts/</cachedir>
160 conv
='FONTCONFIG_PATH=$CACHEDIR/fonts/ pango-view -q $arg -o $casp'
164 if test -e "$2"; then
167 arg
="--waterfall $CACHEDIR/fonts/text"
170 conv
='pango-view --font="$1" -q $arg -o $casp'
176 image
) conv
='convert - pdf:"$casp"';;
178 test -n "$dc" && die
"can not convert compressed '$mime'"
180 conv
='dvipdf "$1" "$casp"'
182 *) die
"unhandled filter type: '$type'";;
185 hash=$
(md5sum "$md5of") || die
"$hash"
186 casp
=$CACHEDIR/${hash%% *}$caspsuf
187 (test -n "$force" -o ! -e "$casp") && eval "$filt" "$conv"
189 exec llpp
-origin "$@" "$casp"