summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/photobook/scripts/make-images.sh
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/photobook/scripts/make-images.sh')
-rw-r--r--macros/latex/contrib/photobook/scripts/make-images.sh449
1 files changed, 449 insertions, 0 deletions
diff --git a/macros/latex/contrib/photobook/scripts/make-images.sh b/macros/latex/contrib/photobook/scripts/make-images.sh
new file mode 100644
index 0000000000..7be3a53cf8
--- /dev/null
+++ b/macros/latex/contrib/photobook/scripts/make-images.sh
@@ -0,0 +1,449 @@
+#!/bin/bash
+shopt -s nullglob extglob
+
+#----------------------------------------------------------------------
+#
+# Template structure:
+# templates/
+# imagepage.tex
+# textpage.tex
+# ...
+# $IMAGE_DIR/
+# $spread/
+# tweaks.tex
+# template tweaks.
+# loaded before the templates are handled.
+# layout.tex
+# manual layout of spread.
+# if given rest of directory contents are
+# ignored.
+# fields:
+# ${IMAGE0}
+# ${CAPTION0}
+# ${IMAGE1}
+# ${CAPTION1}
+# NOTE: if images are included, hi-res source
+# substitution is not done here.
+# <spread-template-name>.tpl
+# indicates the spread template to use.
+# if given the rest of the .tex files in
+# directory are ignored.
+# resolves to:
+# templates/<spread-template-name>.tex
+# fields:
+# ${IMAGE0}
+# ${CAPTION0}
+# ${IMAGE1}
+# ${CAPTION1}
+# imagepage.tex
+# image page template.
+# fields:
+# ${IMAGE}
+# ${CAPTION}
+# textpage.tex
+# text page template.
+# fields:
+# ${TEXT}
+# <spread-template-name>-imagepage.tpl
+# <spread-template-name>-textpage.tpl
+# indicates the image/text page template to use.
+# ignored if explicit templates are given.
+# image fields:
+# ${IMAGE}
+# ${CAPTION}
+# text fields:
+# ${TEXT}
+# 00-<image>.png
+# image.
+# if $IMAGE_HIRES_DIR is set then this will
+# resolve to:
+# $IMAGE_HIRES_DIR/<image>
+# XXX hi-res substitution currently disabled.
+# 01-<text>.txt
+# text.
+# ...
+# ...
+#
+#
+#
+# Env variables:
+# IMAGE_HIRES_DIR=<path>
+# sets the path to which the hi-res images are resolved.
+#
+#
+#
+#
+# XXX TODO:
+# - revise printed comments...
+# - add real arg handling...
+# - add abbility to apply template to a specific page in spread...
+# ...something like:
+# <template-name>-left.tpl
+# <template-name>-right.tpl
+#
+#
+#
+#----------------------------------------------------------------------
+
+# defaults...
+
+CFG_FILE=`basename $0`.cfg
+
+TEMPLATE_PATH=templates/
+
+IMAGE_DIR=pages/
+
+#IMAGE_HIRES_DIR=
+
+
+# Default timplates
+#SINGLE_IMAGE=blank-image
+SINGLE_IMAGE=imagebleedleft
+DOUBLE_IMAGE=image-image
+
+
+# load config...
+[ -e $CFG_FILE ] && source $CFG_FILE
+
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+printhelp(){
+ echo "Usage: `basename $0` [ARGUMENTS] [PATH]"
+ echo " `basename $0` [ARGUMENTS] PATH FROM [COUNT]"
+ echo
+ echo "Generate LaTeX layout from directory structure."
+ echo
+ echo "Arguments:"
+ echo " -h --help - print this help and exit."
+ echo " --templates=PATH"
+ echo " - path to search for templates (default: $TEMPLATE_PATH)."
+ echo " --single-image-tpl=NAME"
+ echo " - single image default template (default: $SINGLE_IMAGE)."
+ echo " --double-image-tpl=NAME"
+ echo " - double image default template (default: $DOUBLE_IMAGE)."
+ echo
+ echo "Parameters:"
+ echo " PATH - path to root pages directory (default: $IMAGE_DIR)"
+ echo " FROM - spread to start from (default: 0)"
+ echo " COUNT - number of spreads to generate (default: 1)"
+ echo
+ echo "Environment:"
+ echo " \$IMAGE_HIRES_DIR "
+ echo " - source directory for replacement hi-res images."
+ echo " \$ANOTATE_IMAGE_PATHS "
+ echo " - if true add image paths in anotations."
+ echo
+ echo "Configuration defaults can be stored in a config file: $CFG_FILE"
+ echo
+ echo "NOTE: COUNT is relevant iff FROM is given, otherwise all available "
+ echo " spreads are generated."
+ echo
+ echo "Examples:"
+ echo " $ `basename $0` ./pages > pages.tex"
+ echo " - generate a layout fron the contents of ./pages"
+ echo
+ echo " $ IMAGE_HIRES_DIR=images/hi-res `basename $0` ./pages"
+ echo " - generate a layout fron the contents of ./pages and "
+ echo " replaceing local images with images in ./images/hi-res"
+ echo
+}
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# handle arguments...
+
+while true ; do
+ case $1 in
+ -h|--help)
+ printhelp
+ exit
+ ;;
+
+ --templates)
+ TEMPLATE_PATH=$2
+ shift
+ shift
+ ;;
+ --single-image-tpl)
+ SINGLE_IMAGE=$2
+ shift
+ shift
+ ;;
+ --double-image-tpl)
+ DOUBLE_IMAGE=$2
+ shift
+ shift
+ ;;
+
+ # handle unknown options...
+ -*|--*)
+ echo "Error: unknown option \"$1\""
+ exit
+ ;;
+
+ *)
+ break
+ ;;
+ esac
+done
+
+
+if [ -z $1 ] ; then
+ IMAGE_DIR=pages/
+else
+ IMAGE_DIR=$1/
+fi
+
+
+# calculate spread index range...
+# XXX add support for negative indexing...
+FROM=$2
+COUNT=$( [ -z $3 ] && echo 1 || echo $3 )
+STOP=$(( FROM + COUNT ))
+
+
+
+#----------------------------------------------------------------------
+
+# XXX should we report images w/o captions???
+getCaption(){
+ local C=`basename "${1%.*}"`
+ #C="${C/[0-9]-}"
+ C="captions/${C}.txt"
+
+ if [ -e "${C}" ] ; then
+ C=`cat "${C}" | sed 's/\\\/\\\\\\\/g'`
+ else
+ C=""
+ fi
+
+ echo ${C[*]}
+}
+
+getTemplate(){
+ local SPREAD=$1
+ local TYPE=$2
+ local TEMPLATE=($SPREAD/*-$TYPE.tex)
+ if [ -z $TEMPLATE ] ; then
+ TEMPLATE=($SPREAD/*-$TYPE.tpl)
+ if ! [ -z $TEMPLATE ] ; then
+ TEMPLATE=${TEMPLATE/$SPREAD\//}
+ TEMPLATE=${TEMPLATE/[0-9]-/}
+ TEMPLATE="$TEMPLATE_PATH/${TEMPLATE[0]%-${TYPE}.*}.tex"
+ fi
+ fi
+ if [ -z $TEMPLATE ] ; then
+ TEMPLATE="$TEMPLATE_PATH/${TYPE}.tex"
+ fi
+ echo $TEMPLATE
+}
+
+anotatePath(){
+ if [ -z "$1" ] || [ -z "$ANOTATE_IMAGE_PATHS" ] ; then
+ return
+ fi
+ path=$(basename ${1%.*})
+ # NOTE: did not figure out how to make a verbatim comment in latex
+ # so here we are, doing it in shell...
+ path=${path//_/\\_}
+ #echo "\\pdfmargincomment{Image: $path}%"
+ echo "\\pdfcommentcell{Image: $path}%"
+}
+
+
+#----------------------------------------------------------------------
+
+
+echo %----------------------------------------------------------------------
+echo %
+echo % WARNING: This file is auto-generated by make-images.sh and will be
+echo "% overwritten on next run..."
+echo %
+echo "% Image source (preview): \"$IMAGE_DIR\""
+echo "% Image source (hi-res): \"$IMAGE_HIRES_DIR\""
+echo %
+echo %----------------------------------------------------------------------
+echo %
+#echo % set image source directory...
+#echo "\\graphicspath{{${IMAGE_DIR}}}"
+#echo %
+#echo %----------------------------------------------------------------------
+#echo %
+#
+#cd ${IMAGE_DIR}
+
+l=$(ls "$IMAGE_DIR/" | wc -l)
+c=0
+
+for spread in "${IMAGE_DIR}"/* ; do
+ # skip non-spreads...
+ if ! [ -d "$spread" ] ; then
+ continue
+ fi
+
+ c=$(( c + 1 ))
+
+ # if $FROM is given print only stuff in range...
+ [ -z $FROM ] \
+ || if (( $(( c - 1 )) < $FROM )) || (( $c > $STOP )) ; then
+ continue
+ fi
+
+ # if we are building only a specific spread...
+ ##if ! [ -z $SPREAD ] && [[ "$spread" != "$IMAGE_DIR/$SPREAD" ]]; then
+ ## continue
+ ##fi
+
+ if ! [ -z $SKIP_FIRST ] ; then
+ echo %
+ echo %
+ echo % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ fi
+ SKIP_FIRST=1
+ # skip temporarily disabled...
+ if [ -z ${spread/-*/} ] ; then
+ echo "% spread: ${spread/-/}: skipped..." | tee >(cat >&2)
+ echo %
+ continue
+ else
+ printf "Spread ($c/$l): ${spread/-/} \r" >&2
+ echo "% spread: ${spread/-/}"
+ fi
+
+
+ # auto layout / templates...
+ # NOTE: to use a specific template just `touch <template-name>.tpl`
+ # in the spread directory...
+
+ # layout tweaks...
+ tweaks=($spread/*tweak.tex)
+ if ! [ -z ${tweaks} ] ; then
+ echo "% tweaks: ${tweaks[0]}"
+ cat ${tweaks[0]}
+ fi
+
+
+ # NOTE: we also get *.txt files here...
+ items=($spread/*.!(tex|tpl|bak))
+
+ # get hi-res image paths...
+ if ! [ -z $IMAGE_HIRES_DIR ] ; then
+ C=0
+ for img in "${items[@]}" ; do
+ # skip non-images...
+ if [[ "$img" == "${img/.txt/}" ]] ; then
+ #new="../$IMAGE_HIRES_DIR/`basename ${img/[0-9]-/}`"
+ new="$IMAGE_HIRES_DIR/`basename ${img/[0-9]-/}`"
+ # ignore file ext for availability test...
+ # NOTE: the first match may be an unsupported format...
+ new="${new%.*}"
+ new=($new.*)
+ if [ -e "${new[0]}" ] ; then
+ items[$C]=${new[0]}
+ else
+ echo %
+ echo "% WARNING: hi-res image not found for: \"${img}\" -> \"${new}\"" | tee >(cat >&2)
+ echo %
+ fi
+ fi
+ C=$(( C + 1 ))
+ done
+ fi
+
+
+ # manual layout...
+ layout=($spread/*layout.tex)
+ if ! [ -z $layout ] ; then
+ TEMPLATE=${layout[0]}
+
+ # templates and partial templates...
+ else
+ # spread template...
+ TEMPLATE=($spread/*.tpl)
+ # skip page template refs: *-imagepage.tpl / *-textpage.tpl
+ # XXX this will also eat 0-imagepage.tpl / 20-textpage.tpl -- do a better pattern...
+ if ! [ -z $TEMPLATE ] ; then
+ TEMPLATE=(`ls "$spread/"*.tpl | egrep -v '.*-(imagepage|textpage)\.tpl'`)
+ fi
+ # no template explicitly defined -> match auto-template...
+ AUTO=
+ if [ -z $layout ] && [ -z $TEMPLATE ] ; then
+ AUTO=" (auto)"
+ if [ ${#items[@]} == 1 ] ; then
+ TEMPLATE=$SINGLE_IMAGE
+
+ # multiple items...
+ else
+ C=0
+ for img in "${items[@]}" ; do
+ C=$(( C + 1 ))
+ P=`[ $C == 1 ] && echo "left" || echo "right"`
+
+ # image...
+ if [ "${img/.txt/}" == "${img}" ] ; then
+ echo %
+ echo "% $P page (image)..."
+ TEMPLATE=`getTemplate "$spread" "imagepage"`
+ echo % page template: $TEMPLATE
+ anotatePath "${img}"
+ CAPTION=`getCaption "${img}"`
+ cat "${TEMPLATE}" \
+ | sed "s%\${IMAGE0\?}%${img%.*}%" \
+ | sed "s%\${CAPTION0\?}%${CAPTION}%"
+
+ # text...
+ else
+ echo %
+ echo "% $P page (text)..."
+ TEMPLATE=`getTemplate "$spread" "textpage"`
+ echo % page template: $TEMPLATE
+ cat "${TEMPLATE}" \
+ | sed "s%\${TEXT}%${img}%"
+ fi
+
+ # reset for next page...
+ TEMPLATE=
+ # only two pages at a time...
+ [ $C == 2 ] && break
+ done
+ fi
+ fi
+ # formatting done...
+ [ -z $TEMPLATE ] && continue
+
+ # format...
+ TEMPLATE=${TEMPLATE/$spread\//}
+ TEMPLATE=${TEMPLATE/[0-9]-/}
+ # get...
+ TEMPLATE="$TEMPLATE_PATH/${TEMPLATE[0]%.*}.tex"
+ fi
+
+ # captions...
+ CAPTION0=`getCaption "${items[0]}"`
+ CAPTION1=`getCaption "${items[1]}"`
+
+ echo "% template: (template${AUTO}: $TEMPLATE)"
+ anotatePath "${items[0]}"
+
+ # fill the template...
+ cat "${TEMPLATE}" \
+ | sed "s%\${IMAGE0\?}%${items[0]%.*}%" \
+ | sed "s%\${CAPTION0\?}%${CAPTION0}%" \
+ | sed "s%\${IMAGE1}%${items[1]%.*}%" \
+ | sed "s%\${CAPTION1}%${CAPTION1}%"
+done
+
+echo %
+echo %
+echo %
+echo %----------------------------------------------------------------------
+echo
+
+echo "Spread created: $c of $l " >&2
+
+
+
+#----------------------------------------------------------------------
+# vim:set ts=4 sw=4 :