#! /usr/bin/perl

###############      Abverz.pm   ##################################
#                                                                 #
# Project Acronym:     PaGAL                                      #
# Document ID:                                                    #
# Date:                07/05/01                                   #
# Author:              Meike Griese                               #
# WP/Task              T                                          #
# Abstract:            Durchsuchen des Hash nach Verzeichnis-     #
#                      Eintraegen                                 #
# Distribution:        public                                     #
###################################################################
# Version      Date      Author     Bemerkung                     #
# 02           07/12/01  G, J       Arbeit mit zwei Hashs         #
###################################################################

###################################################################
# Das Modul ruft Verzei.pm auf: bekommt zwei Hashs uebergeben und #
# die Langform. Der eine Hash wird durchsucht und die gefundene   #
# Langform darf mehr enhalten als die Langform im Hash (im Falle  #
# eines Kompositums oder eines flektierten Wortes), bei mehreren  #
# gematchten Woertern wird das Laengste abgekuerzt und uebergeben.#
# Im anderen Hash darf die Langform nur komplett matchen. Erst    #
# wenn die Langform nicht komlett matcht wird der zweite Hash     #
# durchsucht.                                                     #
# Modul uebergibt: Abkuerzung, vorne, Langform a.d. Hash u. hinten#
###################################################################

use Verzei;

sub abkklein {                 # Hash der nicht flektierbaren Langformen

my ($langform) = @_;

foreach $langform_hash (keys(%abk_klein)) {

 
	
	if ($langform eq $langform_hash) {

	                          # Langform muss komplett matchen

	    $abk_generiert = $abk_klein{$langform_hash};
	}
    }

return $abk_generiert;   # dazugehoerige Kurzform wird zurueckgegeben

}

sub abk_ab{

my ($langform) = @_;
my ($abk_generiert) = 0;
my ($langform_hash);
my ($lf) = 0;
my ($vorne, $hinten) = 0;

foreach $langform_hash (keys(%abk)) {  # Hash der flektierbaren Langformen

    if ($langform =~ /^&?[A-Z]/){  #beginnt Langform mit einem Grossbuchstaben

	if ($langform =~/(.*)$langform_hash(.*)/i) { 

        # bei Durchlaufen dieses Hashs wird Gross- u. Kleinschreibung ignoriert

        # eventuelle Teile vor und nach der gematchten Langform werden isoliert
	
	  if (stringlen($langform_hash)>stringlen($lf))
  
  #Laenge der gematchten Langform wird in &stringlen geprueft

	    {
		
	      $abk_generiert = $abk{$langform_hash};

	      $vorne = $1;
	      $hinten = $2;

	      $langf_hash = $langform_hash;

	      if ($vorne){	      
		  $abk_generiert =~ tr/A-Z/a-z/;

  # wenn vor der gematchten Langform etwas steht soll die Abkuerzung mit
  # einem Kleinbuchstaben beginnen
	     
	      }
 
	      else {

		  $abk_generiert = "\u$abk_generiert"; 

           # sonst soll sie mit einem Grossbuchstaben beginnen

	      }

	  $lf = $langform_hash;  

          # $lf als Hilfsvariable um die langste Langform zu ermitteln

	  }

      }

    }

elsif ($langform =~/(.*)$langform_hash(.*)/) {
	
	  if (stringlen($langform_hash)>stringlen($lf))

   # wird eine laengere Langform gefunden, s.o. 

	    {

	      $abk_generiert = $abk{$langform_hash};

	      $vorne = $1;
	      $hinten = $2;

	      $langf_hash = $langform_hash;
	    }
	  
	  $lf = $langform_hash; 
	  
	}

      }
@retlist = $abk_generiert, $vorne, $langf_hash, $hinten;

}

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



sub stringlen {

   # &stringlen ermittelt die Laenge eines uebergebenen Wortes

    my ($string) = @_;

    $string =~ s/&.+;/a/g;  

              #SGML-Kodierungen werden durch einen Buchstaben ersetzt

    @leng = split(//, $string);

    $laenge=@leng;

    return $laenge;      #in $laenge sthet die Anzahl der Buchstaben des Wortes


}

1;


