#! /bin/bash
if test $2
then from_rep=$1 ; from_fil=$2 ; dest=$3
else from_rep=`pwd` ; from_fil=$1.mws ; dest=$1.lyx
fi
# echo "$1 ** $2 ** $3 ** $from_rep/$from_fil $dest"
tmp_sed1=$from_rep/tmp_sed1
tmp_sed2=$from_rep/tmp_sed2
tmp_sed3=$from_rep/tmp_sed3
tmp_sed4=$from_rep/tmp_sed4
tmp1=$from_rep/tmp1
tmp2=$from_rep/tmp2
tmp3=$from_rep/tmp3
tmp4=$from_rep/tmp4
#### le preambule #########################################
#\newcommand{\captionseparator}{~--}
#\usepackage{float}
#\floatstyle{plain}
#\restylefloat{figure}
#\usepackage{algorithm}
cat << EOF > $dest
\lyxformat 218
\textclass book
\begin_preamble
\usepackage{float}
\renewcommand{\captionseparator}{~--}
\floatname{algorithm}{Alg.}
\usepackage{algorithmic}
\end_preamble
\language english
\inputencoding latin1
\fontscheme default
\graphics default
\float_placement htbp
\paperfontsize 12
\spacing single
\papersize a4paper
\paperpackage a4
\use_geometry 1
\use_amsmath 1
\paperorientation portrait
\leftmargin 1in
\topmargin 1in
\rightmargin 1in
\bottommargin 1in
\secnumdepth 2
\tocdepth 2
\paragraph_separation indent
\defskip medskip
\quotes_language english
\quotes_times 2
\papercolumns 1
\papersides 2
\paperpagestyle default
\layout Standard
\begin_inset FormulaMacro
\newcommand{\pow}{\: \widehat{\: }\, }
\end_inset
EOF
#### tmp_sed1 ################################
cat << EOF > $tmp_sed1
s/¶//g
s/{EXCHG/\\
{EXCHG/g
s/{USTYLE/\\
{USTYLE/g
s/{SECT/\\
{SECT/g
s/{MPLTEXT[^"]*""\ }}*//g
s/{MPLTEXT/\\
{MPLTEXT/g
s/{PARA/\\
{PARA/g
s/{MARK/\\
{MARK/g
s/end\ if/; endif /g
s/end\ do/; enddo /g
s/end\ proc/; endproc /g
s/\\\\n/ /g
s/\\\\+/ /g
s/^{MPLTEXT[^"]*""\ }}*$//
EOF
#### tmp_sed2 ################################
cat << EOF > $tmp_sed2
s/^{MPLTEXT[^"]*"/¶¶¶debalg/
s/"\ }}*$/\\
¶¶¶endalg/
s/local /\\
¶¶¶local /
s/global /\\
¶¶¶global /
s/option \`/\\
¶¶¶option /
s/ if / \\
¶¶¶if /g
s/;if / \\
¶¶¶if /g
s/ then / ¶¶¶then\\
¶¶¶state /g
s/ else / \\
¶¶¶else\\
¶¶¶state /g
s/ elif / \\
¶¶¶elif /g
s/ endif / \\
¶¶¶endif\\
¶¶¶state /g
s/ for / \\
¶¶¶for /g
s/;for / \\
¶¶¶for /g
s/ do / ¶¶¶do\\
¶¶¶state /g
s/ enddo / \\
¶¶¶enddo\\
¶¶¶state /g
s/endproc//
s/RETURN([^)]*)/return ¶¶¶kill&/g
s/¶¶¶killRETURN//g
s/;/\\
¶¶¶state /g
s/¶¶¶state[ ]*error /¶¶¶error /g
s/¶¶¶state[ ]*break /¶¶¶break /g
s/¶¶¶state[ ]*return /¶¶¶return /g
EOF
#### tmp_sed3 ################################
cat << EOF > $tmp_sed3
/¶¶¶debalg/ {
s/^/\\
\\
\\\\begin_float alg ¶¶¶laystan ¶¶¶latexopen \\\\backslash begin{algorithmic}[1] ¶¶¶laystan \\
/
s/¶¶¶debalg[^:]*:=/ ¶¶¶latexopen \\\\backslash DEF { ¶¶¶latexclot &¶¶¶findef ¶¶¶latexopen } { ¶¶¶latexclot \\
/
s/¶¶¶debalg// ; s/:=¶¶¶findef//
s/proc[^)]*)/ ¶¶¶deb& ¶¶¶fineq ¶¶¶latexopen } ¶¶¶latexclot/
s/¶¶¶debproc/¶¶¶debeq /
}
/¶¶¶endalg/ {
s/¶¶¶endalg/ \\
¶¶¶laystan ¶¶¶latexopen \\\\backslash end{algorithmic} \\
\\
\\\\layout Caption\\
\\
leg \\
\\\\end_float \\
\\
/
}
/¶¶¶local/ {
s/¶¶¶local/ ¶¶¶laystan ¶¶¶latexopen \\\\backslash LOCAL ¶¶¶latexclot ¶¶¶debeq/
s/$/¶¶¶fineq/
}
/¶¶¶global/ {
s/¶¶¶global/ ¶¶¶laystan ¶¶¶latexopen \\\\backslash GLOBAL ¶¶¶latexclot ¶¶¶debeq/
s/$/¶¶¶fineq/
}
/¶¶¶option/ d
s/¶¶¶if/¶¶¶laystan ¶¶¶latexopen \\\\backslash IF { ¶¶¶latexclot þþþifdebeq / g
s/¶¶¶elif/¶¶¶laystan ¶¶¶latexopen \\\\backslash ELSIF { ¶¶¶latexclot þþþifdebeq / g
s/¶¶¶then/ þþþiffineq ¶¶¶latexopen } / g
s/¶¶¶else/¶¶¶laystan ¶¶¶latexopen \\\\backslash ELSE/ g
s/¶¶¶endif/¶¶¶laystan ¶¶¶latexopen \\\\backslash ENDIF/ g
s/þþþif/¶¶¶/g
/¶¶¶do/ {
s/¶¶¶for/¶¶¶laystan ¶¶¶latexopen \\\\backslash FOR { ¶¶¶latexclot þþþfordebeq / g
s/¶¶¶do/ þþþforfineq ¶¶¶latexopen } / g
s/ to / þþþforfineq ¶¶¶latexopen \\\\backslash TO ¶¶¶latexclot þþþfordebeq /
s/ from / þþþforfineq ¶¶¶latexopen \\\\backslash FROM ¶¶¶latexclot þþþfordebeq /
s/ while / þþþforfineq WHILE þþþfordebeq /
s/þþþfor/¶¶¶/g
}
s/¶¶¶enddo/ ¶¶¶laystan ¶¶¶latexopen \\\\backslash ENDFOR / g
/^¶¶¶state[ ]*$/ d
/¶¶¶state/ {
s/¶¶¶state/¶¶¶laystan ¶¶¶latexopen \\\\backslash STATE ¶¶¶latexclot ¶¶¶debeq/
s/$/¶¶¶fineq ; /
}
/¶¶¶error/ {
s/¶¶¶error/¶¶¶laystan ¶¶¶latexopen \\\\backslash STATE \\\\backslash ERROR ¶¶¶latexclot /
s/\\\\"/"/g
}
/¶¶¶return/ {
s/¶¶¶return/¶¶¶laystan ¶¶¶latexopen \\\\backslash STATE \\\\backslash RETURN ¶¶¶latexclot ¶¶¶debeq /
s/$/¶¶¶fineq/
}
s/¶¶¶break/¶¶¶laystan ¶¶¶latexopen \\\\backslash STATE \\\\backslash BREAK ¶¶¶latexclot /
s/¶¶¶debeq/\\
¶¶¶debeq/g
s/¶¶¶fineq/¶¶¶fineq\\
/g
s/¶¶¶latexopen/\\
\\\\latex latex \\
\\
/g
s/¶¶¶latexclot/\\
\\\\latex default \\
\\
/g
EOF
#### tmp_sed4 ################################
cat << EOF > $tmp_sed4
s/¶¶¶laystan/\\
\\\\layout Standard\\
\\
/g
/¶¶¶debeq/ {
s/(/\\\\left(/g
s/)/\\\\right)/g
s/,/,\\\\,/g
s/\^/ \\\\pow /g
s/not/not \\\\, /g
s/<>/ \\\\neq /g
s/or/ \\\\, or \\\\, /g
s/¶¶¶debeq/\\
\\\\begin_inset Formula \\\\( /
s/¶¶¶fineq/ \\\\)\\
\\\\end_inset\\
\\
\\
/
}
EOF
#### tmp_sedx ################################
cat $from_rep/$from_fil | tr \\f\\r\\n ¶¶¶ | sed -f $tmp_sed1 | grep MPLTEXT > $tmp1
# et alors $tmp1 contient exactement une ligne par cellule maple non vide
# au passage, on a recollé les end_if, end_do, end_proc
sed -f $tmp_sed2 $tmp1 > $tmp2
# et alors $tmp2 est composé de "lignes logiques", chacune commençant par un code.
# les lignes non vides correspondent aux lignes du résultat final
sed -f $tmp_sed3 $tmp2 > $tmp3
# gestion des mots-clefs ; puis une ligne pour chaque instruction élémentaire
sed -f $tmp_sed4 $tmp3 > $tmp4
# gestion des équations
cat $tmp4 >> $dest
dater=`date +"%Y/%m/%d %Hh%M"`
cat << EOF >> $dest
\the_end
EOF
rm $tmp1 $tmp2 $tmp3 $tmp4 $tmp_sed1 $tmp_sed2 $tmp_sed3 $tmp_sed4
lyx $dest