#!/usr/bin/perl -w
# $Id$
# Dieses Script (latex-symlist) wurde von Rdiger Beck erstellt
# Es ist freie Software
# Bei Fehlern wenden Sie sich bitte an mich.
# jeffbeck@web.de  oder  jeffbeck@gmx.de

# thist script reads a vapour-table from coolpack-output
# and converts it to a latex-table

# Bibliotheken
use strict;
use DBI;
use Getopt::Long;
Getopt::Long::Configure ("bundling");
use File::Find;
use coldformix;
# ==========================================================================


# Choose the Language: de, en
my $lang="de";

# Choose the Unit-System: si_symbol,
my $unit_system = "si_symbol";


# ===========================================================================
# Optionen verarbeiten
# ==========================================================================
# Parsen der Optionen
my $testopt=GetOptions(
           "lang|l=s" => \$lang,
           "unit_system|u=s" => \$unit_system
          );


print "Language: $lang \n";
print "Unit_System: $unit_system \n";

# Prfen, ob Optionen erkannt wurden, sonst Abbruch
&coldformix::check_options($testopt);


my @exp_symbols=();

#
if (not -e "../coldformix-generated/$lang/latex") {
    system("install -d ../coldformix-generated/$lang/latex");
}

my %symbols  = &coldformix::get_symbols();
my %units  = &coldformix::get_units();
my %trans = &coldformix::get_trans();

#print "$trans{'Enthalpie'}{'en'}\n";

# Standardmssig die erste Einheit whlen
my $number=0;

# zum ausgeben
my $key;
my $value;

my $fz;
my $des;
my $un;

my @psfrag_lines=();

my $name;
my $hashref;
my %all=();
my $line="";


# Refrigeration Technologie
&print_tabular("RT");
# Electrical Technologie
&print_tabular("ET");




############################################################



############################################################
#printing the national psfrag-file
open(PSFRAG,">../coldformix-generated/$lang/latex/psfrag-$lang.tex");
  foreach my $line (@psfrag_lines) {
      print PSFRAG $line;
  }     
close PSFRAG;

############################################################
#printing the international psfrag-file
system("cp ../coldformix-source/latex/psfrag.tex ../coldformix-generated/$lang/latex//psfrag.tex ");






############################################################
# subs
############################################################
sub print_tabular {
    my ($field) = @_;
    my @latex_lines=();

    # reading the database
    while (($name, $hashref) = each %symbols) {
       my $sym=$symbols{$name}{si_symbol};
       my $desc="";
       my $long_lang="$lang"."_long";
       my $base_unit="";
       my $all_units="";
       my $latex;
       my @unit_list=(); 
       my $i;
       my $latex_line="";
       my $latex_unit="";
       my $psfrag_line="";
       my $u="";
       # Description
       if (defined $symbols{$name}{$long_lang} 
                && $symbols{$name}{$long_lang} ne "") {
   	$desc=$symbols{$name}{$long_lang};
       } elsif (defined $symbols{$name}{$lang} 
                     && $symbols{$name}{$lang} ne "") {
      	   $desc=$symbols{$name}{$lang};
       } else {
           $desc="\\textcolor{red}{$symbols{$name}{de}(de)}";
       }

       # Base Unit
       $base_unit=$symbols{$name}{'unit'};

       # Unitlist
       for ($i=0; $i<=4; $i++) {
           my $seen=0;
           $latex="latex_"."$i";
           if (defined $units{$base_unit}{$latex} and 
                       $units{$base_unit}{$latex} ne "") {
   	       print "   Looking at unit $i: $units{$base_unit}{$latex}\n";
               push @unit_list, $units{$base_unit}{$latex};

           } 
       }

       print "\n";
       print "Name is        : $name \n";
       print "Symbol is      : $sym \n";
       print "Field is       : $symbols{$name}{'field'} \n";
       print "Description is : $desc \n";
       print "Base-Unit is   : $base_unit \n";
       print "Units are      : $all_units \n";
       print "Unit-List is   : @unit_list \n";

       foreach $u (@unit_list) {
           if ($latex_unit eq "") {
               $latex_unit=$u;
           } else {
               $latex_unit="$latex_unit".",\\; $u";
           }
       }

       # Push the latex-line in a list
       $latex_line="\$$sym\$ & $desc & \$ $latex_unit \$ \\\\ \n";
       if ($symbols{$name}{'field'} eq $field){
           push @latex_lines, $latex_line;
       }

       # Push the psfrag_line in a list
       $psfrag_line="\\psfrag{$name}[cc][cc]{\$$sym\$} \n";
       push @psfrag_lines, $psfrag_line;
   }


   # improve the sorting
   @latex_lines = sort symbetical @latex_lines;
   @psfrag_lines = sort @psfrag_lines;


   foreach my $sym (@latex_lines){
       print $sym."\n";
   }

   # Translate some words
   $fz=&coldformix::translate("Formel-zeichen",$lang, \%trans);
   $des=&coldformix::translate("Beschreibung",$lang, \%trans);
   $un=&coldformix::translate("Einheiten", $lang, \%trans);

   #printing the symbols
   open(LATEXOUT,">../coldformix-generated/$lang/latex/symlist-$field-$lang.tex");

   print LATEXOUT "% created by latex-symlist\n";
   print LATEXOUT "\\begin{longtable}{|p{14mm}|p{118mm}|p{38mm}|} \\hline \n";
   #print LATEXOUT "   \\caption*{\\large \\bfseries }\\\\ \\hline"," \n";

   print LATEXOUT "$fz & $des & $un \\\\ \\hline \\hline\n";
   print LATEXOUT "\\endhead \n\n",
               "      \\hline"," \n";
   print LATEXOUT "   \\endfoot ","\n",
               "      \\hline ","\n",
               "   \\endlastfoot ","\n";

   foreach my $line (@latex_lines) {
      print LATEXOUT $line;
   }     
   print LATEXOUT "\\hline\n";
   print LATEXOUT "\\end{longtable} \n";
   close LATEXOUT;
}


sub symbetical {
    my $strip_a=$a;
    my $strip_b=$b;
    # remove leading $
    $strip_a=~s/^\$//g;
    $strip_b=~s/^\$//g;
    # remove var prefix in greek symbol names
    $strip_a=~s/\\var/\\/g;
    $strip_b=~s/\\var/\\/g;
    # remove \dot{} from symbols
    if ($strip_a=~m/\\dot{([a-zA-Z]*)}(.*)/ ){
	print "*** $1   and $2   \n";
        $strip_a=$1."z".$2;
    }
    if ($strip_b=~m/\\dot{([a-zA-Z]*)}(.*)/ ){
        $strip_b=$1."z".$2;
    }

    # replace leading \ with zzz\ (make greek dymbols appear last)
    $strip_a=~s/^\\/zzz\\/g;
    $strip_b=~s/^\\/zzz\\/g;

    # print "*Sorting $strip_a and $strip_b\n";

    $strip_a cmp $strip_b;
}

