]> git.plutz.net Git - clickslide/blobdiff - clickslide.sh
prevent broken output when uuencoding images
[clickslide] / clickslide.sh
index dcb01db6dc4b3264d00cfa3ee5dca6b7d2863c5c..b1fd229bb1851d3f31f9854a48c2776305c7e550 100755 (executable)
@@ -3,6 +3,17 @@
 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;'
+  else
+    base64 <"$1" \
+    | sed ':X;$!{N;bX;}; s;\n;;g; s;=\+;;g;'
+  fi
+}
+
 { "${0%/*}"/cgilite/html-sh.sed || cat; } \
 | {
   line="$(line)"
@@ -28,10 +39,21 @@ depth=0 ucdepth=-1
       pre="${tag%%url(*)*}"
       post="${tag#*url(*)}"
       file="${tag#${pre}url(}" file="${file%)$post}"
-      file="${file#"}" file="${file%"}"
+      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" : '.*<img [^>]*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}url('data:image/${file##*.};base64,$(base64 <"${file}" |tr -d \\n)')${post}"
+        tag="${pre}src=\"data:image/${file##*.};base64,$(_base64 "${file}")\"${post}"
       fi
     done >/dev/null
 
@@ -39,6 +61,7 @@ depth=0 ucdepth=-1
     case $tag in
       *\<head\>*|\*\<head\ *\>)  # Inline styles into head
         printf '%s<meta name="viewport" content="width=device-width">
+                <meta charset="UTF-8">
                 <style type="text/css"><!--\n' "${tag%${tag#*<head*>}}"
         cat "${0%/*}/clickslide.css"
         printf '\n--></style>%s' "${tag#*<head*>}"