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 - -o "$casp"'
122 if executable_p unoconv
&& test -z "$dc"; then
124 conv
='unoconv -o "$casp" "$1"'
126 missing antiword
"antiword or unoconv"
127 conv
='antiword -m 8859-1.txt -a a4 - >"$casp"'
131 test -n "$dc" && die
"cannot convert compressed '$mime'"
133 missing unoconv
"unoconv(http://dag.wiee.rs/home-made/unoconv/)"
134 conv
='unoconv -o "$casp" "$1"'
137 if executable_p inkscape
&& test -z "$dc"; then
139 conv
='inkscape -z -A "$casp" "$1"'
141 missing rsvg-convert
"rsvg-convert"
142 conv
='rsvg-convert -f pdf -o "$casp"'
146 if test -e "$2"; then
149 arg
="--waterfall $cachedir/fonts/text"
152 # https://mail.gnome.org/archives/gtk-i18n-list/2010-June/msg00000.html
153 eval $filt cat >$cachedir/fonts
/font
154 cat >$cachedir/fonts
/fonts.conf
<<EOF
155 <?xml version="1.0"?>
156 <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
158 <dir>$cachedir/fonts/</dir>
159 <cachedir>$cachedir/fonts/</cachedir>
164 missing pango-view
"pango-view(http://www.pango.org/)"
165 conv
='FONTCONFIG_PATH=$cachedir/fonts/ pango-view -q $arg -o $casp'
169 if test -e "$2"; then
172 arg
="--waterfall $cachedir/fonts/text"
176 missing pango-view
"pango-view(http://www.pango.org/)"
177 conv
='pango-view --font="$1" -q $arg -o $casp'
183 missing convert
"convert(http://www.imagemagick.org/script/convert.php)"
184 conv
='convert - pdf:"$casp"'
187 test -n "$dc" && die
"cannot convert compressed '$mime'"
189 missing dvipdf
"dvipdf(http://ghostscript.com/)"
190 conv
='dvipdf "$1" "$casp"'
193 missing pandoc
"pandoc(http://pandoc.org/)"
194 conv
='pandoc -t epub - -o "$casp"'
197 *) die
"unhandled filter type: '$type'";;
200 hash=$
(md5sum "$md5of") || die
"$hash"
201 casp
=$cachedir/${hash%% *}$caspsuf
202 (test -n "$force" -o ! -e "$casp") && eval "$filt" "$conv"
204 exec llpp
-origin "$@" "$casp"