#!/usr/bin/perl

#srf28jan02

#####
# moegliche arten des aufrufs:

# es existiert eine datei mit einem transliterierten text.
#   aufruf: me.perl < text

# man moechte nur einmal eine transliterierte phrase eingeben.
# echo EINE PHRASE | me.perl

# es soll eine unbestimmte anzahl phrasen eingegeben werden (interaktiv)
# cat | me.perl
# dann einfach eine phrase eingeben und enter druecken.
# verlassen mit Ctrl-D (EOF) .

# ausgabe erfolgt an bildschirm, oder in datei; dann " > datei" anfuegen.
#####


#####
# dieses programm liest einen text ein, uebersetzt die zeichen
# in entsprechende zahlenwerte, summiert die zahlen eines worts;
# der zahlwert jedes worts wird ausgegeben, am ende der auszugebenden
# zeile wird die summe der wortsummen der eingelesenen zeile ausgegeben.

# geschrieben fuer das griechische Neue Testament in der 
# Thesaurus Linguae Graecae Transliteration; 
# http://rosetta.atla-certr.org/TC/TC-translit-main.html

# der text ist die Stephanus (Robert Etienne's) 1550 edition:
# http://users.mstar2.net/broman/editions.html 
# ein vers pro zeile, keine satzzeichen. einziges problem:
# fragwuerdige stellen sind mit eckigen klammern gekennzeichnet.
# das programm ignoriert allerdings alle zeichen, die nicht in
# der wertetabelle stehen.
#####


# uebersetzung in zahlwerte nach
# http://www.geocities.com/Athens/Parthenon/7069/key-1.html

%werte = ( # jedem zeichen wird ein zahlenwert zugewiesen
    "A" => 1,   # alpha
    "B" => 2,   # beta
    "G" => 3,   # gamma
    "D" => 4,   # delta
    "E" => 5,   # epsilon
    "V" => 6,   # digamma
    "Z" => 7,   # zeta
    "H" => 8,   # eta
    "Q" => 9,   # theta
    "I" => 10,  # iota
    "K" => 11,  # kappa
    "L" => 12,  # lambda
    "M" => 13,  # mu
    "N" => 14,  # nu
    "C" => 15,  # xi
    "O" => 16,  # omicron
    "P" => 17,  # pi
# coph 18
    "R" => 19, # rho
    "S" => 20, # sigma
#    "J" => , # sigma am wortende
    "T" => 21, # tau
    "U" => 22, # upsilon
    "F" => 23, # phi
    "X" => 24, # chi
    "Y" => 25, # psi
    "W" => 26, # omega
# sanpi 27
);

#  print STDERR "usage: getNumbers.perl < greek_input > number_output\n";
print STDERR "usage: see perl source!\n";

#  gelesen wird von STDIN !!!
    $satzIniSum = 0; # summe der initialen eines satzes
    $satzsum=0; # summe der buchstaben eines satzes (durch "." getrennt)
    
  while (<>) { # lesen bis dateiende
    print; # druckt die zeile aus (zur referenz)
    $zeilsum = 0; # alle buchstabenwerte eines verses summiert
    $initialsum = 0; # summe der buchstabenwerte der initialen eines verses
    for $wort(split) { # jeden vers (=zeile) lesen, in worte einteilen
      $wortsum = 0; # summe der zahlen des wortes
        $zaehler=0; # damit nur der erste buchstabe in initialsumme eingeht
      while ($wort =~ /(.)/g) { # jeden einzelnen buchstaben auswerten
        $wortsum += $werte{$1}; # buchstabenwert addieren

$satzsum += $werte{$1};

if ($1 eq "." ) {
$isSatzEnde = 1;
}
          if ($zaehler eq 0) { # wenn erster buchstabe eines wortes
            $initialsum += $werte{$1}; # buchstabenwert zu initialsumme
            $satzIniSum += $werte{$1}; 
          }
          $zaehler++;
          
      }
      print STDOUT $wortsum, " "; # wortsumme ausgeben

if ($isSatzEnde eq 1) {
  print STDOUT " T:", $satzIniSum," ";
  print STDOUT " S:", $satzsum," ";
  $satzIniSum=0;
  $satzsum=0;
}
$isSatzEnde = 0;
      $zeilsum += $wortsum; # wortsumme auf zeilsum addieren.
    }  
      print "I:", $initialsum, " "; # summe der initialen in vers schreiben
      print "Z:", $zeilsum, "\n";  # summe aller buchstaben in vers schreiben 
  }

