#!/bin/bash # faust2mathdoc.sh # # Generate a full Faust documentation, in a '*-mdoc' top directory. # # Karim Barkati # November 2009 # # Warning : this script requires several things to be installed : # - svg2pdf, from the Cairo 2D graphics library; # - pdflatex, to compile the tex file; # - breqn, a latex package to break equations; # - faust ;-) # Usage. print_usage() { echo "usage: faust2mathdoc [-l LANG] [-utf8] faust_file.dsp ..." echo " LANG is usually a 2-lowercase-letters language name, like en, fr, or it." echo " -utf8 force faust_file.dsp to be recoded in UTF-8 before being processed" } # Visit each directory transmited as argument, # in order to convert process.svg files into pdf. # This function uses the svg2pdf command, # from the Cairo 2D graphics library. convert_svgprocesses2pdf() { for DIR in $@ ; do if [ -d $DIR ] ; then echo "cd " $DIR cd $DIR FILE="process.svg" for SRC in $FILE ; do echo ' --> '$SRC PDF=${SRC%.svg}'.pdf' svg2pdf "$SRC" "$PDF" echo ' <-- '$PDF done cd - else echo error : \'$DIR\' is not a directory. fi done } # Visit each directory transmited as argument, # in order to convert .svg files into pdf. # This function uses the svg2pdf command, # from the Cairo 2D graphics library. convert_svgdirs2pdf() { for DIR in $@ ; do if [ -d $DIR ] ; then #echo "cd " $DIR cd $DIR FILES=`ls | grep -E "\.svg"` for SRC in $FILES ; do #echo ' --> '$SRC PDF=${SRC%.svg}'.pdf' svg2pdf "$SRC" "$PDF" echo "svg2pdf $SRC $PDF" #echo ' <-- '$PDF done cd .. else echo error : \'$DIR\' is not a directory. fi done } # In-place recoding of a text file from its current encoding to UTF-8. # This is useful for .dsp files with accents in comments that are coded # with a different character set. recode2utf8() { charset=`file -0 --mime-encoding $1 | cut -d' ' -f2` recode $charset..utf-8 $1 } MDLANGOPT="" if [ $1 = "-mdlang" ] || [ $1 = "--mathdoc-lang" ] || [ $1 = "-l" ] then MDLANGOPT="-mdlang $2" shift 2 fi CONVERT="" if [ $1 = "-utf8" ] || [ $1 = "--utf8" ] then CONVERT="utf8" shift 1 fi if [ $# -eq 0 ] then print_usage exit 1 fi # Main loop of this script : # 1. Compile `faust --mathdoc` to generate the TeX file and SVG block-diagrams. # 2. Move to the "${FILEPATH%.dsp}-mdoc" directory created by faust. # 3. Convert SVG files into PDF files recursively (with svg2pdf). # 4. Compile pdflatex twice (including the top-level block-diagram). # 5. Copy some important files where needed. for FILEPATH in $@ ; do if [ -f $FILEPATH ] ; then FILENAME=`basename $FILEPATH` && case $FILENAME in *.dsp ) if [ $CONVERT = "utf8" ] then recode2utf8 $FILENAME fi faust $MDLANGOPT -o ${FILEPATH%.dsp}.cpp --mathdoc $FILEPATH && cd ${FILEPATH%.dsp}-mdoc/ && cd svg && convert_svgdirs2pdf svg-* && cd .. && cd tex && pdflatex ${FILENAME%.dsp}.tex && pdflatex ${FILENAME%.dsp}.tex && cd .. && mkdir -p pdf && cp tex/${FILENAME%.dsp}.pdf pdf && mkdir -p cpp && mv ../${FILENAME%.dsp}.cpp cpp && cd .. ;; * ) echo error : \'$FILENAME\' does not have a \'.dsp\' extension. exit 2 ;; esac else print_usage exit 1 fi done exit 0