#!/usr/bin/perl
#=======================================================================
# Copyright (c) 2000 Daniele Giacomini daniele@swlibero.org
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#=======================================================================
# ALdoc2Alml < ALTOOLS_SOURCE > ALML_SOURCE
#
# Partial translator from ALdoc to Alml.
#=======================================================================

# Record letto.
$riga = "";


# Salta blocco.
sub SaltaBlocco
{
    local ($conclusione) = $_[0];

    # Cerca di saltare il blocco.
    while ($riga !~ m|$conclusione|i)
      {
	# Trasferisce il record letto, e legge il successivo.
	print STDOUT "$riga";
	$riga = <STDIN>;
      }

    # Trasferisce anche l'ultimo record letto.
    print STDOUT "$riga";
}    


#======================================================================
# Elabora bloccotitolo.
#----------------------------------------------------------------------
sub ElaboraBloccoTitolo {

    local $accumulo = "";

    print STDOUT "$riga";
    $riga = <STDIN>;

    while ( $riga !~ m|</bloccotitolo>|i ) {

	if ( $riga =~ m|<titolo>|i ) {
	    print STDOUT "$riga";
	    $riga = <STDIN>;
	} else {
	    print STDERR "$riga";
	    $accumulo = $accumulo . $riga;
	    $riga = <STDIN>;
	}
    }

    print STDOUT "$accumulo";
    print STDOUT "$riga";
}    


# Inizio del programma.

# Scandisce le righe.
while ($riga = <STDIN>)
  {
    # Se si incontra un commento deve essere saltato.
    if ($riga =~ m|<!--|)
      {
	&SaltaBlocco( "-->" );
      }
    elsif ($riga =~ m|<testopreformattato>|i)
      {
	&SaltaBlocco( "</testopreformattato>" );
      }
    elsif ($riga =~ m|<verbatimpre>|i)
      {
	&SaltaBlocco( "</verbatimpre>" );
      }
    elsif ($riga =~ m|<figuratestopreformattato>|i)
      {
	&SaltaBlocco( "</figuratestopreformattato>" );
      }
    elsif ($riga =~ m|<sintassitestopreformattato>|i)
      {
	&SaltaBlocco( "</sintassitestopreformattato>" );
      }
    elsif ($riga =~ m/^<\/sezione.>$/
           || $riga =~ m/^<\/capitolo>$/
           || $riga =~ m/^<\/tomo>$/
           || $riga =~ m/^<\/parte>$/
           || $riga =~ m/^<\/introduzione>$/
           || $riga =~ m/^<\/introsezione.>$/
           || $riga =~ m/^<bloccotitolo>$/)
      {
        # sopprime la riga.
        next;
      }
    else
      {
        $riga =~ s/<nome>/<special special=\"name\">/g;
        $riga =~ s/<\/nome>/<\/special>/g;
        $riga =~ s/<ttid>/<special special=\"ttid\">/g;
        $riga =~ s/<\/ttid>/<\/special>/g;
        $riga =~ s/<ttsc>/<special special=\"ttsc\">/g;
        $riga =~ s/<\/ttsc>/<\/special>/g;

        $riga =~ s/<tomo>/<tomeheading>/g;
        $riga =~ s/<parte>/<h0>/g;
        $riga =~ s/<capitolo>/<h1>/g;
        $riga =~ s/<sezione1>/<h2>/g;
        $riga =~ s/<sezione2>/<h3>/g;
        $riga =~ s/<sezione3>/<h4>/g;
        $riga =~ s/<introduzione>/<h1>/g;
        $riga =~ s/<introsezione1>/<h2>/g;
        $riga =~ s/<introsezione2>/<h3>/g;
        $riga =~ s/<introsezione3>/<h4>/g;

        $riga =~ s/<rb>/<bibref>/g;
        $riga =~ s/<\/rb>/<\/bibref>/g;
        $riga =~ s/<pn>//g;
        $riga =~ s/<\/pn>//g;
        $riga =~ s/<pn1>//g;
        $riga =~ s/<\/pn1>//g;
        $riga =~ s/<elemento>/<li>/g;
        $riga =~ s/<\/elemento>/<\/li>/g;
        $riga =~ s/<evid>/<strong>/g;
        $riga =~ s/<\/evid>/<\/strong>/g;
        $riga =~ s/<elencopuntato>/<ul>/g;
        $riga =~ s/<\/elencopuntato>/<\/ul>/g;
        $riga =~ s/<elenconumerato>/<ol>/g;
        $riga =~ s/<\/elenconumerato>/<\/ol>/g;
        $riga =~ s/<nota>/<frame>/g;
        $riga =~ s/<\/nota>/<\/frame>/g;
        $riga =~ s/<defstra>/<strdfn>/g;
        $riga =~ s/<\/defstra>/<\/strdfn>/g;
        $riga =~ s/<condizioniparticolari>/<specialcondition>/g;
        $riga =~ s/<\/condizioniparticolari>/<\/specialcondition>/g;
        $riga =~ s/<piepagina>/<blockfootnote>/g;
        $riga =~ s/<\/piepagina>/<\/blockfootnote>/g;
        $riga =~ s/<tabella>/<table>/g;
        $riga =~ s/<\/tabella>/<\/table>/g;
        $riga =~ s/<tabulare COLONNE=\">/<tabular col=\">/g;
        $riga =~ s/<\/tabulare>/<\/tabular>/g;
        $riga =~ s/<ttesta>/<thead>/g;
        $riga =~ s/<\/ttesta>/<\/thead>/g;
        $riga =~ s/<tcorpo>/<tbody>/g;
        $riga =~ s/<\/tcorpo>/<\/tbody>/g;
        $riga =~ s/<triga>/<traw>/g;
        $riga =~ s/<\/triga>/<\/traw>/g;
        $riga =~ s/<sepcol>/<colsep>/g;
        $riga =~ s/<elencodescrittivo>/<dl>/g;
        $riga =~ s/<\/elencodescrittivo>/<\/dd>\n<\/dl>/g;
        $riga =~ s/<voce>/<\/dd>\n<dt>/g;
        $riga =~ s/<\/voce>/<\/dt>\n<dd>/g;
        $riga =~ s/<comando>/<command>/g;
        $riga =~ s/<\/comando>/<\/command>/g;
        $riga =~ s/<digita>/<type>/g;
        $riga =~ s/<\/digita>/<\/type>/g;
        $riga =~ s/<continuacomando>/<cnewline>/g;
        $riga =~ s/<figura>/<figure>/g;
        $riga =~ s/<\/figura>/<\/figure>/g;
        $riga =~ s/<immagine FILE=\"/<image imgfile=\"figure\//g;
        $riga =~ s/ALTEZZA=\"/height=\"/g;
        $riga =~ s/<con>/<dfn>/g;
        $riga =~ s/<\/con>/<\/dfn>/g;
        $riga =~ s/<meta>/<var>/g;
        $riga =~ s/<\/meta>/<\/var>/g;
        $riga =~ s/<dat>/<samp>/g;
        $riga =~ s/<\/dat>/<\/samp>/g;
        $riga =~ s/^\s*<sintassi>/<syntax>\n/g;
        $riga =~ s/<\/sintassi>/\n<\/syntax>/g;
        $riga =~ s/<evid>/<strong>/g;
        $riga =~ s/<\/evid>/<\/strong>/g;
        $riga =~ s/<dacr>/<dacronym>/g;
        $riga =~ s/<\/dacr>/<\/dacronym>/g;
        $riga =~ s/<enf>/<em>/g;
        $riga =~ s/<\/enf>/<\/em>/g;
        $riga =~ s/<citazione>/<blockquote>/g;
        $riga =~ s/<\/citazione>/<\/blockquote>/g;
        $riga =~ s/<segmento>/<segment>/g;
        $riga =~ s/<\/segmento>/<\/segment>/g;
        $riga =~ s/<titolosegmento>/<segmenthead>/g;
        $riga =~ s/<\/titolosegmento>/<\/segmenthead>/g;
        $riga =~ s/<keyb>/<kbd>/g;
        $riga =~ s/<\/keyb>/<\/kbd>/g;
        $riga =~ s/<ellissi>/<synellipsys>/g;
        $riga =~ s/<sinquadra>/<synsqb>/g;
        $riga =~ s/<\/sinquadra>/<\/synsqb>/g;
        $riga =~ s/<singraffa>/<syncub>/g;
        $riga =~ s/<\/singraffa>/<\/syncub>/g;
        $riga =~ s/<sinverbar>/<synverbar>/g;
        $riga =~ s/<casc>/<asciicode>/g;
        $riga =~ s/<\/casc>/<\/asciicode>/g;
        $riga =~ s/<puls>/<button>/g;
        $riga =~ s/<\/puls>/<\/button>/g;
        $riga =~ s/<mansez>/<mansect>/g;
        $riga =~ s/<\/mansez>/<\/mansect>/g;
        $riga =~ s/<vocemenu>/<menuitem>/g;
        $riga =~ s/<\/vocemenu>/<\/menuitem>/g;
        $riga =~ s/<glosti>(.*?)<\/glosti>/<special special="glosti">$1<\/special>/g;

        $riga =~ s/<saltopagina>/<newpage>/g;

        $riga =~ s/^\s*<titolo>(.*)<\/titolo>\s*$/$1\n/g;
        $riga =~ s/^\s*<etichetta ID=\"(.*)?\">\s*$/id=\"$1\"\n/g;

        $riga =~ s/<nidx>/<indexentry>/g;
        $riga =~ s/<\/nidx>/<\/indexentry>/g;
        $riga =~ s/<ncdx>/<indexentry emph=\"code\">/g;
        $riga =~ s/<\/ncdx>/<\/indexentry>/g;

        print STDOUT ("$riga");
      }
  }

#======================================================================

