X-Git-Url: http://git.plutz.net/?a=blobdiff_plain;ds=sidebyside;f=clickslide.sh;h=70249148a71f82eb3a862aa2307e506e43b1b612;hb=6f30b5e9508fdeb5506d8fb1718db8c757329048;hp=ddc94c37ef79e44753e54fc71b670f1aef45d0f2;hpb=c2772fd3bec6c84a3bfdcd90b2008d9381c10876;p=clickslide
diff --git a/clickslide.sh b/clickslide.sh
index ddc94c3..7024914 100755
--- a/clickslide.sh
+++ b/clickslide.sh
@@ -3,15 +3,29 @@
prev='' next='' idoff=0
depth=0 ucdepth=-1
+_base64() {
+ # busybox does not ship base64, only uuencode. Other platforms might need base64 instead
+ if which uuencode >/dev/null; then
+ uuencode -m - <"$1" \
+ | sed '1d; :X;$!{N;bX;}; s;\n;;g; s;=\+;;g;'
+ elif which busybox >/dev/null; then
+ busybox uuencode -m - <"$1" \
+ | sed '1d; :X;$!{N;bX;}; s;\n;;g; s;=\+;;g;'
+ else
+ base64 <"$1" \
+ | sed ':X;$!{N;bX;}; s;\n;;g; s;=\+;;g;'
+ fi
+}
+
{ "${0%/*}"/cgilite/html-sh.sed || cat; } \
| {
- line="$(line)"
+ read -r line
while :; do
tag="${tag}${line%%>*}"
if [ "$line" = "${line%%>*}" ]; then
# $line did not contain ">" and thus was added to $tag entirely
- if ! line="$(line)"; then
+ if ! read -r line; then
printf %s\\n "$tag"
break
fi
@@ -19,19 +33,44 @@ depth=0 ucdepth=-1
"
else
# $line is shortened by segment added to $tag
- line="${line#*>}"
+ read -r line
tag="${tag}>"
fi
-
+
+ ### Image embedding for Inline styles
+ while expr "$tag" : '.*<[^>]*style="[^"]*url("\?[^)]\+\.\(png\|jpg\|jpeg\|gif\|svg\)"\?)'; do
+ pre="${tag%%url(*)*}"
+ post="${tag#*url(*)}"
+ file="${tag#${pre}url(}" file="${file%)$post}"
+ file="${file#\"}" file="${file%\"}"
+ echo Inlining Background Image "$file" >&2
+ if [ -r "$file" ]; then
+ tag="${pre}url('data:image/${file##*.};base64,$(_base64 "$file")')${post}"
+ fi
+ done >/dev/null
+
+ ### Image embedding for Image tags
+ while expr "$tag" : '.*]*src="[^"]\+\.\(png\|jpg\|jpeg\|gif\|svg\)"'; do
+ pre="${tag%%src=\"*\"*}"
+ post="${tag#*src=\"*\"}"
+ file="${tag#${pre}src=\"}" file="${file%\"$post}"
+ echo Inlining Image "$file" >&2
+ if [ -r "$file" ]; then
+ tag="${pre}src=\"data:image/${file##*.};base64,$(_base64 "${file}")\"${post}"
+ fi
+ done >/dev/null
+
+ ### Tag Processing
case $tag in
- *\