@@ -5,7 +5,49 @@
55REQUIRED="tidy"
66SYNOPSIS="converts HTML from a URL, file, or STDIN to markdown-formatted text."
77
8−### common.sh
8+THIS=${0##*/}
9+
10+NEWLINE='
11+'
12+
13+err () { echo "$*" | fold -s -w ${COLUMNS:-110} >&2; }
14+errn () { printf "$*" | fold -s -w ${COLUMNS:-110} >&2; }
15+
16+usage () {
17+ err "$1 - $2" # short description
18+ err "See the $1(1) man page for usage."
19+}
20+
21+# Portable which(1).
22+pathfind () {
23+ oldifs="$IFS"; IFS=':'
24+ for _p in $PATH; do
25+ if [ -x "$_p/$*" ] && [ -f "$_p/$*" ]; then
26+ IFS="$oldifs"
27+ return 0
28+ fi
29+ done
30+ IFS="$oldifs"
31+ return 1
32+}
33+
34+for p in pandoc $REQUIRED; do
35+ pathfind $p || {
36+ err "You need '$p' to use this program!"
37+ exit 1
38+ }
39+done
40+
41+CONF=$(pandoc --dump-args "$@" 2>&1) || {
42+ errcode=$?
43+ echo "$CONF" | sed -e '/^pandoc \[OPTIONS\] \[FILES\]/,$d' >&2
44+ [ $errcode -eq 2 ] && usage "$THIS" "$SYNOPSIS"
45+ exit $errcode
46+}
47+
48+OUTPUT=$(echo "$CONF" | sed -ne '1p')
49+ARGS=$(echo "$CONF" | sed -e '1d')
50+
951
1052grab_url_with () {
1153 url="${1:?internal error: grab_url_with: url required}"
@@ -104,7 +146,24 @@ if [ -n "$argument" ] && ! [ -f "$argument" ]; then
104146 inurl="$argument"
105147fi
106148
107−### tempdir.sh
149+# As a security measure refuse to proceed if mktemp is not available.
150+pathfind mktemp || { err "Couldn't find 'mktemp'; aborting."; exit 1; }
151+
152+# Avoid issues with /tmp directory on Windows/Cygwin
153+cygwin=
154+cygwin=$(uname | sed -ne '/^CYGWIN/p')
155+if [ -n "$cygwin" ]; then
156+ TMPDIR=.
157+ export TMPDIR
158+fi
159+
160+THIS_TEMPDIR=
161+THIS_TEMPDIR="$(mktemp -d -t $THIS.XXXXXXXX)" || exit 1
162+readonly THIS_TEMPDIR
163+
164+trap 'exitcode=$?
165+ [ -z "$THIS_TEMPDIR" ] || rm -rf "$THIS_TEMPDIR"
166+ exit $exitcode' 0 1 2 3 13 15
108167
109168if [ -n "$inurl" ]; then
110169 err "Attempting to fetch file from '$inurl'..."