#!/bin/sh

target=FAQ-CervanTeX
LATEX=latex
COMMON="--language=\"spanish\" --charset=\"latin\""
TARGET="FAQ-CervanTeX.sgml"
SOURCEDIR="/home/agmartin/local-docs/docs/sgml"
SOURCE="/home/agmartin/local-docs/docs/sgml/FAQ-CervanTeX.sgml"
MAINTAINER_NAME="Agustín Martín"
MAINTAINER_EMAIL="agmartin@aq.upm.es"
ORGANIZATION="Depto. Física, E.T.S. Arquitectura Madrid"
SMTP_SERVER=/usr/sbin/sendmail   # -- Esto debe ser un link al mailer real

clean_files(){ 
	rm -f *.aux *.log *.dlg *.toc *~
}

clean_all_old(){
	clean_files
	rm -f *.html *.tex *.dvi *.pdf *.txt *.lyx *.info *.latin1 *.cp850 *.cp437 *.applemac *.out *.rtf *.ps *.ms-ansi *.bak *~
}

process_sgml_source (){
    sed -e 's/\$Re[v]ision: \([0-9\.]*\) \$ \$D[a]te: \([0-9\/]*\) \([0-9:]*\) \$/Versión \1 de \2 a las \3/g' $SOURCE > $target.sgml
}


extract_date (){
	grep "^<date>" $target.sgml | grep "Versión" | sed 's/<date>//g'
}

traduce_cabecera(){
    sed -e 's/\\\$Re[v]ision: 1.1 $ \\\$D[a]te: 1999/11/10 16:17:53 $/Versión \1 de \2 a las \3/g' $1
}

extrae_tabla_de_materias (){
lynx -dump  FAQ-CervanTeX.html | sed -e 's/file:.*//g' -e 's/[0-9\.\ ]*$//g' -e 's/\[[0-9]*\]//g' -e 's/#next//g' -e 's/References//g' -e 's/Página siguiente Página anterior Índice general//g' | tr -s '\n' 
}

extrae_faq_address (){
    local first_line
    local last_line
    file=$target.latin1

    first_line=`grep -n "La versión más reciente de esta FAQ está disponible en" $file | sed 's/\([0-9]\):.*/\1/g'`
    last_line=`wc -l $file | sed 's/\ *\([0-9]*\) .*/\1/g'`
    num_lines=`expr $last_line - $first_line + 2`
    tail -$num_lines $file | tr -s '\n'
}

make_toc_mail(){
    echo "To: $FULLDESTINATION"
    echo "Newsgroups: es.comp.lenguajes.tex"
    echo "Organization: $ORGANIZATION"
    echo "Subject: FAQ-CervanTeX `extract_date`"  
    cat mail.header
    echo ""
    test -e novedades.mail && cat novedades.mail
    echo "" 
    extrae_tabla_de_materias 
}

mail_FAQ (){
    if [ -e toc.txt ]; then
	cat toc.txt |  $SMTP_SERVER -f"$MAINTAINER_EMAIL" -F"$MAINTAINER_NAME" $DESTINATION
	if [ "$MAIL_STAT" = "full" ]; then
		cat toc.txt | inews -h 
	fi
	echo "Enviado el mensaje a $DESTINATION"
    else
	echo "ERROR: No se ha encontrado el mensaje a enviar"
    fi
}

create_tex_source (){
sgml2latex --language=spanish --charset=latin \
--pass="\usepackage{times}\usepackage{hyperref}" -p a4 \
$target.sgml 
sed -e \
's:\\usepackage\[english\]{babel}:\\usepackage\[spanish\]{babel}\\AtBeginDocument{\\gdef~{\\nobreakspace{}}\\catcode`\\\"=12}:g' \
	$target.tex > tmp
mv tmp $target.tex
}

process_tex_source (){
    $LATEX $target.tex
    $LATEX $target.tex
    $LATEX $target.tex
    dvips -o $target.ps $target
    pdflatex $target.tex
}

create_html (){
    sgml2html  --language=spanish --charset=latin $target.sgml
}

create_txt_files (){
    CODEPAGES="applemac cp850 cp437 ms-ansi"

    sgml2txt --filter --language=spanish --charset=latin $target.sgml
    mv $target.txt $target.latin1

    for i in $CODEPAGES; do
	    cp $target.latin1 $target.$i
	    recode latin1..$i $target.$i
    done

    unix2dos $target.ms-ansi
}

create_other_formats (){
    OTHER_FORMATS="sgml2txt sgml2rtf sgml2lyx"
    # sgml2info

    for i in $OTHER_FORMATS; do
	echo $i
	$i   --language=spanish --charset=latin $target.sgml
    done
}

rebuild_FAQ () {
    clean_all_old
    process_sgml_source 
    create_tex_source
    create_html
    process_tex_source
    create_txt_files
    create_other_formats

    make_toc_mail > toc.txt
    clean_files
}

add_to_begin(){
    if [ ! -e "$1" ]; then
	touch $1
    fi

    test ! -e "$2" && exit 

    cp "$1" "$1.last"
    cat "$2" > "$1"
    cat "$1.last" >> "$1"
}

cvs_commit(){
    committed="no"

    rm -f $SOURCEDIR/novedades.cvs

    if [ -e novedades ]; then
	echo "Encontrado archivo de novedades"
    else
	echo "  * Cambios menores" > novedades
    fi

    cp novedades $SOURCEDIR/novedades.cvs
    ( cd $SOURCEDIR && cvs commit -Fnovedades.cvs $TARGET && commited="yes" )

    test "$commited" = "no" && ( echo "Error al hacer el commit"; exit  )

    process_sgml_source
    echo "--" > novedades.add
    echo `extract_date` >> novedades.add
    echo "--" >> novedades.add
    cat novedades >> novedades.add

    add_to_begin "novedades.mail" "novedades.add"
    add_to_begin "historia" "novedades.add"
    rm  -f novedades.add novedades
}

case $1 in
    prueba)
	make_toc_mail
	;;
    commit)
	cvs_commit
	;;
    mail|mail-local)
	export DESTINATION="agmartin@aq.upm.es"
	export FULLDESTINATION="agmartin@aq.upm.es (Agustín Martín - pruebas)"
	rebuild_FAQ
	mail_FAQ
	;;
    mail-lista|lista-mail)
	export DESTINATION="spanish-tex@eunet.es, sptex@ls.cica.es" 
	export FULLDESTINATION="spanish-tex@eunet.es (Lista de TeX en castellano), \
	sptex@ls.cica.es (Lista de TeX en castellano)"
	export MAIL_STAT=full
	
	rebuild_FAQ
	sitecopy --update webpublico
	sitecopy --update faq-cervantex
	mail_FAQ
	rm -f novedades.mail
	;;
    update-web)
	rebuild_FAQ
	sitecopy --update webpublico
	sitecopy --update faq-cervantex
	;;
    clean)
	clean_all_old
	;;
    *)
	export DESTINATION="agmartin@aq.upm.es"
	export FULLDESTINATION="agmartin@aq.upm.es (Agustín Martín - pruebas)"
	rebuild_FAQ
	;;
esac
