9 cachedir
="${XDG_CACHE_HOME:-$HOME/.cache}/llpp"
10 test -d "$cachedir" || die
"cache directory '$cachedir' does not exist"
16 command -v "$1" >/dev
/null
2>&1
21 eval "$1() { die \"$2 is needed for \$type conversion\"; }"
25 test -d "$cachedir/fonts" || mkdir
"$cachedir/fonts"
26 cat >"$cachedir/fonts/text" <<EOF
27 Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
28 eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
29 minim veniam, quis nostrud exercitation ullamco laboris nisi ut
30 aliquip ex ea commodo consequat. Duis aute irure dolor in
31 reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
32 pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
33 culpa qui officia deserunt mollit anim id est laborum.
34 Posting Soccer Goals On Vine Is Illegal, Say England's Premier League
35 abcdefghizklmnopqrstwxyz
36 ABCDEFGHIZKLMNOPQRSTWXYZ
45 trap 'test -n "$casp" && rm -f "$casp"' 0
47 while getopts m
:t
:f opt
; do
52 ?
) die
"usage: $0 [-m mime/type] [-t filter] [-f] [path|url]";;
55 shift $
(($OPTIND - 1))
56 test -z "$1" && die
"usage $0: path"
58 if test ! -e "$1" && expr >/dev
/null
"$1" : "\(ftp\|https\?\)://"; then
59 if executable_p wget
; then
61 wget
-q -c -nc $1 -O $2
63 elif executable_p curl
; then
68 die
"no program to fetch remote urls found"
71 md5of
="$cachedir/$(basename "$1")"
72 dl
"$1" "$md5of" ||
test -e "$md5of"
80 ft
=$
(file -L --mime-type -b "$1") || die
"$ft"
84 application
/x-gzip | application
/x-compress
) dc=zcat
;;
85 application
/x-xz
) dc=xzcat
;;
86 application
/x-bzip2
) dc=bzcat
;;
90 filt
='"${dc-cat}" "$1" |'
92 if test -z "$type"; then
93 test -z "$mime" && mime
=$
(file -L --mime-type -bz "$1" || die
"$mime")
95 application
/postscript
) type=ps
;;
96 application
/pdf
) type=pdf
;;
97 image
/vnd.djvu
) type=djvu
;;
98 text
/html
) type=html
;;
99 text
/plain
) type=text
;;
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
='ddjvu -format=pdf - "$casp"';;
119 missing prince
"PrinceXML(http://www.princexml.com/)"
120 conv
='prince -s /home/malc/xsrc/llpp/misc/rr.css - -o "$casp"'
123 if executable_p unoconv
&& test -z "$dc"; then
126 conv
='unoconv -o "$casp" "$1"'
128 missing antiword
"antiword or unoconv"
129 conv
='antiword -m 8859-1.txt -a a4 - >"$casp"'
133 test -n "$dc" && die
"cannot convert compressed '$mime'"
135 missing unoconv
"unoconv(http://dag.wiee.rs/home-made/unoconv/)"
136 conv
='unoconv -o "$casp" "$1"'
140 if executable_p inkscape
&& test -z "$dc"; then
142 conv
='inkscape -z -A "$casp" "$1"'
144 missing rsvg-convert
"rsvg-convert"
145 conv
='rsvg-convert -f pdf -o "$casp"'
149 if test -e "$2"; then
152 arg
="--waterfall $cachedir/fonts/text"
155 # https://mail.gnome.org/archives/gtk-i18n-list/2010-June/msg00000.html
156 eval $filt cat >$cachedir/fonts
/font
157 cat >$cachedir/fonts
/fonts.conf
<<EOF
158 <?xml version="1.0"?>
159 <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
161 <dir>$cachedir/fonts/</dir>
162 <cachedir>$cachedir/fonts/</cachedir>
167 missing pango-view
"pango-view(http://www.pango.org/)"
168 conv
='FONTCONFIG_PATH=$cachedir/fonts/ pango-view -q $arg -o $casp'
172 if test -e "$2"; then
175 arg
="--waterfall $cachedir/fonts/text"
179 missing pango-view
"pango-view(http://www.pango.org/)"
180 conv
='pango-view --font="$1" -q $arg -o $casp'
186 missing convert
"convert(http://www.imagemagick.org/script/convert.php)"
187 conv
='convert - pdf:"$casp"'
190 test -n "$dc" && die
"cannot convert compressed '$mime'"
192 missing dvipdf
"dvipdf(http://ghostscript.com/)"
193 conv
='dvipdf "$1" "$casp"'
196 missing pandoc
"pandoc(http://pandoc.org/)"
197 conv
='pandoc -t epub - -o "$casp"'
200 *) die
"unhandled filter type: '$type'";;
203 hash=$
(md5sum "$md5of") || die
"$hash"
204 casp
=$cachedir/${hash%% *}$caspsuf
205 (test -n "$force" -o ! -e "$casp") && eval "$filt" "$conv"
207 exec llpp
-origin "$@" "$casp"