/* Conversion of Greek text from Latin transliteration,
   written in ASCII, to real Greek in ISO 8859-7.
   Assumes a simple translation (without diacritics):
        alpha     a
        beta      b
        gamma     g
        delta     d
        epsilon   e
        zeta      z
        eta       e:
        theta     th
        iota      i
        kappa     k (or c)
        lambda    l
        mu        m
        nu        n
        xi        x (or ks)
        omicron   o
        pi        p
        rho       r (or rh)
        sigma     s
        tau       t
        upsilon   y (or u)
        phi       f (or ph)
        chi       kh (or ch)
        psi       ps
        omega     o:
  To use this program, take a file containing Greek text in
  Latin translation (plain text, no HTML markup), give it as
  input to this program, and then insert the resulting file
  into an HTML document to an appropriate place, and add
  markup like <P> for indicating paragraphs.
  See http://www.hut.fi/u/jkorpela/prog/tst.txt
  for trivial sample data and
  http://www.hut.fi/u/jkorpela/prog/test.htm7
  for an HTML file which contains the converted data.
*/

#include <stdio.h>
#include <ctype.h>

#define LENGTH ':'

int main(void)
{
int ch, nextch;
while((ch=getchar()) != EOF)
    switch(ch) {
      case 'A' : putchar(0xC1); break;
      case 'B' : putchar(0xC2); break;
      case 'C' :
      case 'K' : if( (nextch=getchar()) == 'H' || nextch == 'h')
                   { putchar(0xD7); break; }
                 else if(nextch == 'S' || nextch == 's')
                   { putchar(0xCE); break; }
                 else
                   { putchar(0xCA); ungetc(nextch, stdin); break; }
      case 'D' : putchar(0xC4); break;
      case 'E' : if( (nextch=getchar()) == LENGTH )
                   { putchar(0xC7); break; }
                 else
                   { putchar(0xC5); ungetc(nextch, stdin); break; }
      case 'F' : putchar(0xD6); break;
      case 'G' : putchar(0xC3); break;
      case 'H' : break;
      case 'I' :
      case 'J' : putchar(0xC9); break;
      case 'L' : putchar(0xCB); break;
      case 'M' : putchar(0xCC); break;
      case 'N' : putchar(0xCD); break;
      case 'O' : if( (nextch=getchar()) == LENGTH )
                   { putchar(0xD9); break; }
                 else
                   { putchar(0xCF); ungetc(nextch, stdin); break; }
      case 'P' : if( (nextch=getchar()) == 'H' || nextch == 'h')
                   { putchar(0xD6); break; }
                 else if(nextch == 'S' || nextch == 's')
                   { putchar(0xD8); break; }
                 else
                   { putchar(0xD0); ungetc(nextch, stdin); break; }
      case 'R' : putchar(0xD1); break;
      case 'S' : putchar(0xD3); break;
      case 'T' : if( (nextch=getchar()) == 'H' || nextch == 'h')
                   { putchar(0xC8); break; }
                 else
                   { putchar(0xD4); ungetc(nextch, stdin); break; }
      case 'U' :
      case 'Y' : putchar(0xD5); break;
      case 'X' : putchar(0xCE); break;
      case 'Z' : putchar(0xC6); break;

      case 'a' : putchar(0xE1); break;
      case 'b' : putchar(0xE2); break;
      case 'c' :
      case 'k' : if( (nextch=getchar()) == 'h')
                   { putchar(0xF7); break; }
                 else if(nextch == 's')
                   { putchar(0xEE); break; }
                 else
                   { putchar(0xEA); ungetc(nextch, stdin); break; }
      case 'd' : putchar(0xE4); break;
      case 'e' : if( (nextch=getchar()) == LENGTH )
                   { putchar(0xE7); break; }
                 else
                   { putchar(0xE5); ungetc(nextch, stdin); break; }
      case 'f' : putchar(0xF6); break;
      case 'g' : putchar(0xE3); break;
      case 'h' : break;
      case 'i' :
      case 'j' : putchar(0xE9); break;
      case 'l' : putchar(0xEB); break;
      case 'm' : putchar(0xEC); break;
      case 'n' : putchar(0xED); break;
      case 'o' : if( (nextch=getchar()) == LENGTH )
                   { putchar(0xF9); break; }
                 else
                   { putchar(0xEF); ungetc(nextch, stdin); break; }
      case 'p' : if( (nextch=getchar()) == 'h')
                   { putchar(0xF6); break; }
                 else if(nextch == 's')
                   { putchar(0xF8); break; }
                 else
                   { putchar(0xF0); ungetc(nextch, stdin); break; }
      case 'r' : putchar(0xF1); break;
      case 's' : putchar(0xF3); break;
      case 't' : if( (nextch=getchar()) == 'h')
                   { putchar(0xE8); break; }
                 else
                   { putchar(0xF4); ungetc(nextch, stdin); break; }
      case 'u' :
      case 'y' : putchar(0xF5); break;
      case 'x' : putchar(0xEE); break;
      case 'z' : putchar(0xE6); break;

      default  : putchar(ch);
    }
}
