#!/bin/bash
# ---------------------------------------------------------------------------- #
## \file pdftogcode.sh
## \author Sebastien Beaugrand
## \sa http://beaugrand.chez.com/
## \copyright CeCILL 2.1 Free Software license
# ---------------------------------------------------------------------------- #
tmp=${TMPDIR:-/tmp}
if [ -d build ]; then
tmp=build
fi
if [ -z "$1" ]; then
echo "Usage: `basename $0` <local-pdf> [metafont-src=metafont-dst]..."
echo "Ex: `basename $0` local.pdf frcr10=frcf10 frcr14=frcf14"
exit 1
fi
src=$1
dst=${1%.*}.ngc
shift
fonts=$*
mpsrc=$tmp/${src%.*}.mp
pdfsrc=$tmp/${src%.*}-1.pdf
# mpsrc
if [ $src -nt $mpsrc ] || [ $0 -nt $mpsrc ]; then
for f in $fonts; do
srcfont=`echo $f | cut -d '=' -f 1`
dstfont=`echo $f | cut -d '=' -f 2`
awkfonts="$awkfonts font[\"$srcfont.mp;\"] = \"$dstfont.mp;\";"
done
pstoedit -q -pta -nomaptoisolatin1 -f mpost $src $mpsrc.ori
sed -e 's/\r/" \& char(13) \& "/'\
-e "s/^defaultfont[^+]*+\([^\"]*\)\";/input \1.mp;/"\
-e 's/fontsize defaultfont/font_size/' $mpsrc.ori |\
awk 'BEGIN {'"$awkfonts"' }
{
for(i = 1; i <= NF; i++) {
if ($i in font) {
printf font[$i];
} else {
printf "%s",$i;
}
if (i < NF) {
printf " ";
}
}
printf "\n";
}' >$mpsrc
fi
# mkfont
mkfont()
{
font=$1
mpfont=$tmp/$font.mp
# font.[0-9]*
list=`ls -1 $tmp/$font.*[0-9] 2>/dev/null | sort -t. -k2 -n`
if [ -z "$list" ]; then
cd $tmp
mpost '&mfplain \mode=localfont; input' $font
cd - >/dev/null
list=`ls -1 $tmp/$font.*[0-9] 2>/dev/null | sort -t. -k2 -n`
fi
# font.[0-9]*.mp
for f in $list; do
if [ $f -nt $f.mp ]; then
echo $f
pstoedit -q -f mpost $f $f.mp
modified=y
fi
done
# mpfont
first=`echo $list | cut -d ' ' -f 1`
if [ $first -nt $mpfont ] || [ $0 -nt $mpfont ] || [ "$modified" = y ]; then
file=`find ~/texmf/fonts/source/ -name $font.mf`
size=`grep font_size $file | cut -d ' ' -f 2`
cat >$mpfont <<EOF
font_size := $size;
vardef showtext(expr origin)(expr angle)(expr str) =
newinternal numeric num;
if str = "":
num := 0;
elseif str = " ":
num := 9;
else:
num := ASCII(str);
fi
EOF
for f in $list; do
n=`echo $f | cut -d. -f2`
echo "elseif num = $n:" >>$mpfont
sed -n '/^beginfig/,/endfig/{/endfig/!p}' $f.mp | sed '1d' |\
sed 's/draw/ draw p scaled defaultscale shifted origin;\n path p;\n p =/' |\
sed 's/fill/ draw p scaled defaultscale shifted origin;\n path p;\n p =/' |\
sed '0,/draw/{/draw/d}' >>$mpfont
echo " draw p scaled defaultscale shifted origin;" >>$mpfont
done
echo "fi" >>$mpfont
echo "enddef;" >>$mpfont
sed -i '0,/elseif num/{s/elseif num/if num/}' $mpfont
modified=y
fi
}
for f in $fonts; do
font=`echo $f | cut -d '=' -f 2`
mkfont $font
done
# pdfsrc
if [ $mpsrc -nt $pdfsrc ] || [ "$modified" = y ]; then
cd $tmp
mptopdf `basename $mpsrc`
cd - >/dev/null
fi
# dst
if [ $pdfsrc -nt $dst ]; then
pstoedit -q -f gcode $pdfsrc $dst
sed -i 's/G01 Z/G00 Z/' $dst
fi