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
37 абвгдеёжзийклмнопрстуфхцчшщэюя
38 АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЭЮЯ
47 trap 'test -n "$casp" && rm -f "$casp"' 0
49 while getopts m
:t
:f opt
; do
55 ?
) die
"usage: $0 [-m mime/type] [-t filter] [-f] [path|url]";;
58 shift $
(($OPTIND - 1))
59 test -z "$1" && die
"usage $0: path"
62 if test ! -e "$1" && expr >/dev
/null
"$1" : "\(ftp\|https\?\)://"; then
63 if executable_p wget
; then
65 wget
-q -c -nc $1 -O $2
67 elif executable_p curl
; then
72 die
"no program to fetch remote urls found"
75 md5of
="$cachedir/$(basename "$1")"
76 dl
"$1" "$md5of" ||
test -e "$md5of"
84 ft
=$
(file -L --mime-type -b "$1") || die
"$ft"
88 application
/x-gzip | application
/x-compress
) dc=zcat
;;
89 application
/x-xz
) dc=xzcat
;;
90 application
/x-bzip2
) dc=bzcat
;;
94 filt
='"${dc-cat}" "$1" |'
96 if test -z "$type"; then
97 test -z "$mime" && mime
=$
(file -L --mime-type -bz "$1" || die
"$mime")
99 application
/postscript
) type=ps
;;
100 application
/pdf
) type=pdf
;;
101 image
/vnd.djvu
) type=djvu
;;
102 text
/html
) type=html
;;
103 text
/plain
) type=text
;;
104 application
/msword
) type=word
;;
105 application
/vnd.openxmlformats-officedocument.
* \
106 | application
/vnd.ms-powerpoint \
107 | application
/vnd.ms-excel \
108 | application
/vnd.oasis.opendocument.
*) type=uno
;;
109 image
/svg
+xml
) type=svg
;;
110 image
/png | image
/jpeg
) test -n "$dc" && type="image" ||
type="image2";;
111 image
/*) type=image
;;
112 application
/x-dvi
) type=dvi
;;
113 application
/x-font-ttf | application
/vnd.ms-opentype
) type=font
;;
114 *) die
"unhandled file type: '$mime'";;
119 ps
) conv
='ps2pdf - "$casp"';;
120 image2|pdf
) test -z "$dc" && exec llpp
"$@" || conv
='cat >"$casp"';;
121 djvu
) conv
='ddjvu -format=pdf - "$casp"';;
123 missing prince
"PrinceXML(http://www.princexml.com/)"
124 conv
='prince $css - -o "$casp"'
127 missing pandoc
"pandoc(http://pandoc.org)"
129 conv
='pandoc -r html - -w epub -o "$casp"'
132 if executable_p unoconv
&& test -z "$dc"; then
135 conv
='unoconv -o "$casp" "$1"'
137 missing antiword
"antiword or unoconv"
138 conv
='antiword -m 8859-1.txt -a a4 - >"$casp"'
142 test -n "$dc" && die
"cannot convert compressed '$mime'"
144 missing unoconv
"unoconv(http://dag.wiee.rs/home-made/unoconv/)"
145 conv
='unoconv -o "$casp" "$1"'
149 if executable_p inkscape
&& test -z "$dc"; then
151 conv
='inkscape -z -A "$casp" "$1"'
153 missing rsvg-convert
"rsvg-convert"
154 conv
='rsvg-convert -f pdf -o "$casp"'
158 if test -e "$2"; then
161 arg
="--waterfall $cachedir/fonts/text"
164 # https://mail.gnome.org/archives/gtk-i18n-list/2010-June/msg00000.html
165 eval $filt cat >$cachedir/fonts
/font
166 cat >$cachedir/fonts
/fonts.conf
<<EOF
167 <?xml version="1.0"?>
168 <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
170 <dir>$cachedir/fonts/</dir>
171 <cachedir>$cachedir/fonts/</cachedir>
176 missing pango-view
"pango-view(http://www.pango.org/)"
177 conv
='FONTCONFIG_PATH=$cachedir/fonts/ pango-view -q $arg -o $casp'
181 if test -e "$2"; then
184 arg
="--waterfall $cachedir/fonts/text"
188 missing pango-view
"pango-view(http://www.pango.org/)"
189 conv
='pango-view --font="$1" -q $arg -o $casp'
195 missing convert
"convert(http://www.imagemagick.org/script/convert.php)"
196 conv
='convert - pdf:"$casp"'
199 test -n "$dc" && die
"cannot convert compressed '$mime'"
201 missing dvipdf
"dvipdf(http://ghostscript.com/)"
202 conv
='dvipdf "$1" "$casp"'
205 missing pandoc
"pandoc(http://pandoc.org/)"
206 conv
='pandoc -t epub - -o "$casp"'
209 *) die
"unhandled filter type: '$type'";;
212 hash=$
(md5sum "$md5of") || die
"$hash"
213 casp
=$cachedir/${hash%% *}$caspsuf
214 (test -n "$force" -o ! -e "$casp") && eval "$filt" "$conv"
217 exec llpp
-origin $origin "$@" "$casp"