use Getopt::Long;

$rc = GetOptions("pht=s" => \$phtfile,
		 "ok=s" => \$okfile,
		 "i=s" => \$okfile,
		 "otxt=s" => \$otxt,
		 "o=s" => \$otxt,
		 "showerrs" => \$showerrs);

if(defined $phtfile) {
    load_phtfile( $phtfile);
}

sub load_phtfile
{
    my $phtfile = shift(@_);
    $lphhash{"&"}++;
    $lph_for_sph{"&"} = "&";
    open(PHT, "<$phtfile") || die "error opening phtfile $phtfile\n";
    print STDERR "using phtfile $phtfile\n";
    <PHT>;  # header
    while(<PHT>) {
	s/\s+$//g;
	($trash,$lph,$sph,$num_states) = split(/\s+/);
	$lph_for_sph{$sph} = $lph;
	$lphhash{$lph}++;
    }
    close(PHT);
}

open(HH, "<$okfile") || die "error opening okfile $okfile\n";
open(OO, ">$otxt") || die "error opening output dict $otxt\n";
while(<HH>) {
    s/\s+$//;
    if(/^LANG\s*=\s*(\S+)/) { # LANG = EN-US
	my $language = lc($1);
	my $language_header_line = $_;
	$language =~ s/\-/\./g;
	if(!defined $phtfile) {
	    die "Error: ESRSDK is not defined\n" if(!defined $ENV{ESRSDK});
	    $phtfile = "$ENV{ESRSDK}/config/$language/models/generic.pht";
	    load_phtfile( $phtfile);
	}
	print OO "$language_header_line\n";
	next;
    }
    ($word, $pron) = split(/\s+/);
    @sphlist = split(/ */, $pron);
    @lphlist = ();
    $nerrs = 0;
    foreach $sph (@sphlist) {
	$lph = $lph_for_sph{$sph};
	if(!defined $lph) {
	    warn "error: unknown sph $sph in $word $pron\n" ;
	    $lph = "($sph)";
	    $nerrs++;
	}
	push(@lphlist, $lph);
    }
    next if($nerrs && !$showerrs) ;
    print OO "$word \t @lphlist\n";
}
close(HH);
close(OO);