~ubuntu-branches/ubuntu/saucy/faust/saucy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#!/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