[ Skip to the content ]

Institute of Formal and Applied Linguistics Wiki


[ Back to the navigation ]

telugu2latin.pl

#!/usr/bin/perl
# Převede text z telužského písma do latinky. Jde pouze o usnadnění čitelnosti, ne nutně o zachování veškeré informace.
# (c) 2007 Dan Zeman <zeman@ufal.mff.cuni.cz>
# Licence: GNU GPL
 
use utf8;
use open ":utf8";
binmode(STDIN, ":utf8");
binmode(STDOUT, ":utf8");
binmode(STDERR, ":utf8");
 
# Samostatná písmena pro samohlásky začínají kódem 3077.
@samohlasky = ("a", "á", "i", "í", "u", "ú", "r", "l", "", "e", "é", "aj", "", "o", "ó", "au");
for(my $i = 0; $i<=$#samohlasky; $i++)
{
    my $src = chr($i+3077);
    $prevod{$src} = $samohlasky[$i];
}
# Diakritická znaménka pro samohlásky začínají kódem 3134.
@diasamohlasky = ("á", "i", "í", "u", "ú", "r", "l", "", "e", "é", "aj", "", "o", "ó", "au");
# Souhlásky začínají kódem 3093.
@souhlasky =
(
    "k", "kh", "g", "gh", "ng",
    "č", "čh", "dž", "džh", "ň",
    "t", "th", "d", "dh", "n", # tt tth dd ddh nn
    "t", "th", "d", "dh", "n", "",
    "p", "ph", "b", "bh", "m",
    "j", "r", "rr", "l", "ll", "", "v",
    "š", "š", "s", "h" # první š je asi spíš ś
);
for(my $i = 0; $i<=$#souhlasky; $i++)
{
    my $src = chr($i+3093);
    $prevod{$src} = $souhlasky[$i]."a";
    # 3149 je znaménko virama (halantamu), které likviduje implicitní samohlásku "a"
    my $src2 = chr(3149);
    $prevod{$src.$src2} = $souhlasky[$i];
    for(my $j = 0; $j<=$#diasamohlasky; $j++)
    {
        my $src2 = chr($j+3134);
        $prevod{$src.$src2} = $souhlasky[$i].$diasamohlasky[$j];
    }
}
# 3074 je znaménko anusvara (sunna), které způsobuje, že předcházející samohláska je nosová.
$prevod{chr(3074)} = "n";
# 3073 je znaménko candrabindu (arasunna), které rovněž nazalizuje předcházející samohlásku.
$prevod{chr(3073)} = "m";
# 3075 je znaménko visarga, které přidává neznělý dech za samohláskou.
$prevod{chr(3075)} = "'";
# 3174 je kód telužské nuly, 3183 je devítka
for(my $i = 0; $i<=9; $i++)
{
    my $src = chr($i+3174);
    $prevod{$src} = $i;
}
 
# Ladění: vypsat převody.
if(0)
{
    foreach my $klic (sort(keys(%prevod)))
    {
        print("$klic\t$prevod{$klic}\n");
    }
}
 
while(<>)
{
    my @znaky = split(//, $_);
    for(my $i = 0; $i<=$#znaky; $i++)
    {
        # Je-li převod dvojice znaků neprázdný, použít ho.
        if($i<$#znaky)
        {
            my $src = $znaky[$i].$znaky[$i+1];
            if($prevod{$src} ne "")
            {
                $znaky[$i] = $prevod{$src};
                splice(@znaky, $i+1, 1);
                $i--;
                next;
            }
        }
        if($prevod{$znaky[$i]} ne "")
        {
            $znaky[$i] = $prevod{$znaky[$i]};
        }
    }
    print(join("", @znaky));
}

[ Back to the navigation ] [ Back to the content ]