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"
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 "$mime" && mime
=$
(file -L --mime-type -bz "$1" || die
"$mime")
94 application
/postscript
) type=ps
;;
95 application
/pdf
) type=pdf
;;
96 image
/vnd.djvu
) type=djvu
;;
97 text
/html
) type=html
;;
98 text
/plain
) type=text
;;
99 application
/msword
) type=word
;;
100 application
/vnd.openxmlformats-officedocument.
* \
101 | application
/vnd.ms-powerpoint \
102 | application
/vnd.ms-excel \
103 | application
/vnd.oasis.opendocument.
*) type=uno
;;
104 image
/svg
+xml
) type=svg
;;
105 image
/png | image
/jpeg
) test -n "$dc" && type="image" ||
type="image2";;
106 image
/*) type=image
;;
107 application
/x-dvi
) type=dvi
;;
108 application
/x-font-ttf | application
/vnd.ms-opentype
) type=font
;;
109 *) die
"unhandled file type: '$mime'";;
114 ps
) conv
='ps2pdf - "$casp"';;
115 image2|pdf
) test -z "$dc" && exec llpp
"$@" || conv
='cat >"$casp"';;
116 djvu
) conv
='ddjvu -format=pdf - "$casp"';;
118 missing prince
"PrinceXML(http://www.princexml.com/)"
119 conv
='prince -s /home/malc/xsrc/llpp/misc/rr.css - -o "$casp"'
122 if executable_p unoconv
&& test -z "$dc"; then
125 conv
='unoconv -o "$casp" "$1"'
127 missing antiword
"antiword or unoconv"
128 conv
='antiword -m 8859-1.txt -a a4 - >"$casp"'
132 test -n "$dc" && die
"cannot convert compressed '$mime'"
134 missing unoconv
"unoconv(http://dag.wiee.rs/home-made/unoconv/)"
135 conv
='unoconv -o "$casp" "$1"'
139 if executable_p inkscape
&& test -z "$dc"; then
141 conv
='inkscape -z -A "$casp" "$1"'
143 missing rsvg-convert
"rsvg-convert"
144 conv
='rsvg-convert -f pdf -o "$casp"'
148 if test -e "$2"; then
151 arg
="--waterfall $cachedir/fonts/text"
154 # https://mail.gnome.org/archives/gtk-i18n-list/2010-June/msg00000.html
155 eval $filt cat >$cachedir/fonts
/font
156 cat >$cachedir/fonts
/fonts.conf
<<EOF
157 <?xml version="1.0"?>
158 <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
160 <dir>$cachedir/fonts/</dir>
161 <cachedir>$cachedir/fonts/</cachedir>
166 missing pango-view
"pango-view(http://www.pango.org/)"
167 conv
='FONTCONFIG_PATH=$cachedir/fonts/ pango-view -q $arg -o $casp'
171 if test -e "$2"; then
174 arg
="--waterfall $cachedir/fonts/text"
178 missing pango-view
"pango-view(http://www.pango.org/)"
179 conv
='pango-view --font="$1" -q $arg -o $casp'
185 missing convert
"convert(http://www.imagemagick.org/script/convert.php)"
186 conv
='convert - pdf:"$casp"'
189 test -n "$dc" && die
"cannot convert compressed '$mime'"
191 missing dvipdf
"dvipdf(http://ghostscript.com/)"
192 conv
='dvipdf "$1" "$casp"'
195 missing pandoc
"pandoc(http://pandoc.org/)"
196 conv
='pandoc -t epub - -o "$casp"'
199 *) die
"unhandled filter type: '$type'";;
202 hash=$
(md5sum "$md5of") || die
"$hash"
203 casp
=$cachedir/${hash%% *}$caspsuf
204 (test -n "$force" -o ! -e "$casp") && eval "$filt" "$conv"
206 exec llpp
-origin "$@" "$casp"