#!/usr/bin/perl
read (STDIN, $tip, $ENV{'CONTENT_LENGTH'});
unless ($tip) {
 print <<VEGE;
Content-type: text/html

<HTML>
<HEAD>
<TITLE>Mártonfi-féle halandzsavers-generátor</TITLE>
<HEAD>
<BODY>
<H1>Mártonfi-féle halandzsavers-generátor</H1>
<FORM ACTION="vers.cgi" METHOD="POST">
<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
<TR>
<TD><INPUT TYPE=RADIO NAME="tipus" VALUE="1"></TD>
<TD ROWSPAN=5 WIDTH=10>&nbsp;</TD>
<TD>Ütemhangsúlyos sorpár</TD>
</TR>
<TR>
<TD><INPUT TYPE=RADIO NAME="tipus" VALUE="2"></TD>
<TD>Balassi-versszak</TD>
</TR>
<TR>
<TD><INPUT TYPE=RADIO NAME="tipus" VALUE="3"></TD>
<TD>Disztichon</TD>
</TR>
<TR>
<TD><INPUT TYPE=RADIO NAME="tipus" VALUE="4"></TD>
<TD>Szapphói szakasz</TD>
</TR>
<TR>
<TD><INPUT TYPE=RADIO NAME="tipus" VALUE="5"></TD>
<TD>Aszklépiadészi szakasz</TD>
</TR>
</TABLE>
<BR><INPUT TYPE=SUBMIT VALUE=" Mehet ">&nbsp;&nbsp;&nbsp;<INPUT TYPE=RESET VALUE=" Mégsem ">
</FORM>
<BR><P><B>Apám emlékére</B></P>
<P><B>Algoritmus:</B><BR>Mártonfi Ferenc 1980. Nyelvészet és verscsinálás. In Horváth Iván–Veres András (szerk.): <I>Ismétlődés a művészetben.</I> Opus. Irodalomelméleti Tanulmányok 5. Akadémiai Kiadó, Budapest, 191–243.</P>
<P><B>Kódolás:</B><BR>Mártonfi Attila, 2001.</P>
</BODY>
</HEAD>
VEGE
}
else {
$tip =~ s/tipus=//gi;
@tip = ("Ütemhangsúlyos sorpár", "Balassi-versszak", "Disztichon", "Szapphói szakasz", "Aszklépiadészi szakasz");

# Kategóriaszimbólumok
@c = ("t", "d", "n", "c", "dz", "sz", "z", "ty", "gy", "ny", "cs", "dzs", "s", "zs", "p", "b", "m", "f", "v", "k", "g"); # 21
@v = ("e", "é", "ö", "ő", "a", "á", "o", "ó", "i", "í", "ü", "ű", "u", "ú"); # 14
@vr = ("e", "ö", "a", "o", "i", "ü", "u"); # 7
@vh = ("é", "ő", "á", "ó", "í", "ű", "ú"); # 7
@s = ("sz", "z", "s", "zs"); # 4
@l = ("r", "l"); # 2
@t = ("t", "d", "ty", "gy", "p", "b", "k", "g"); # 8

# Ütemhangsúlyos sorpár
if ($tip == 1) {
 $vers = "";
 # (63)-(66)
 $sor = int(rand(3)) + 1;
 # (67)
 $a = int(rand(2)) + 3;
 # (68)
 $b = int(rand(3)) + 2;
 # (68)
 $b1 = int(rand(3)) + 2;
 # (69)
 $c = int(rand(4)) + 1;
 # (70)
 $d = int(rand(3)) + 1;
 $sya = &syl;
 for ($i = 0; $i < 2; $i++) {
  $s = "";
  if ($sor == 1) {
   for ($j = 0; $j < $a; $j++) {
    $s .= &syl;
   }
   $s .= " ";
   for ($j = 0; $j < $b-1; $j++) {
    $s .= &syl;
   }
  }
  elsif ($sor == 2) {
   for ($j = 0; $j < $a; $j++) {
    $s .= &syl;
   }
   $s .= " ";
   for ($j = 0; $j < $b; $j++) {
    $s .= &syl;
   }
   $s .= " ";
   for ($j = 0; $j < $c-1; $j++) {
    $s .= &syl;
   }
  }
  elsif ($sor == 3) {
   for ($j = 0; $j < $b; $j++) {
    $s .= &syl;
   }
   $s .= " ";
   for ($j = 0; $j < $b1; $j++) {
    $s .= &syl;
   }
   $s .= " ";
   for ($j = 0; $j < $a; $j++) {
    $s .= &syl;
   }
   $s .= " ";
   for ($j = 0; $j < $d-1; $j++) {
    $s .= &syl;
   }
  }
  $vers .= "$s$sya\n";
 }
}
# Balassi-strófa
elsif ($tip == 2) {
 $vers = "";
 $syb = &syl;
 for ($i = 0; $i < 3; $i++) {
  $s = "";
  $sya = &syl;
  $a1 = int(rand(4)) + 1;
  $a2 = int(rand(4)) + 1;
  $b = int(rand(2)) + 1;
  if ($a1 == 1) {
   $s .= &syl.&syl." ".&syl.&syl." ".&syl.$sya;
  }
  elsif ($a1 == 2) {
   $s .= &syl." ".&syl.&syl." ".&syl.&syl.$sya;
  }
  elsif ($a1 == 3) {
   $s .= &syl.&syl.&syl." ".&syl.&syl.$sya;
  }
  else {
   $s .= &syl.&syl." ".&syl.&syl.&syl.$sya;
  }
  $s .= "  ";
  if ($a2 == 1) {
   $s .= &syl.&syl." ".&syl.&syl." ".&syl.$sya;
  }
  elsif ($a2 == 2) {
   $s .= &syl." ".&syl.&syl." ".&syl.&syl.$sya;
  }
  elsif ($a2 == 3) {
   $s .= &syl.&syl.&syl." ".&syl.&syl.$sya;
  }
  else {
   $s .= &syl.&syl." ".&syl.&syl.&syl.$sya;
  }
  $s .= "  ";
  if ($b == 1) {
   $s .= &syl.&syl." ".&syl.&syl." ".&syl.&syl.$syb;
  }
  else {
   $s .= &syl.&syl.&syl." ".&syl.&syl.&syl.$syb;
  }
  $vers .= "$s\n";
 }
}
# disztichon
elsif ($tip == 3) {
 $vers = &cons;
 for ($i = 0; $i < 4; $i++) {
  $a = int(rand(2)) + 1;
  if ($a == 1) {
   $vers .= &sylh.&sylr.&sylr;
  }
  else {
   $vers .= &sylh.&sylh;
  }
 }
 $vers .= &sylh.&sylr.&sylr.&sylh.&sylv."\n\t".&cons;
 for ($i = 0; $i < 2; $i++) {
  $a = int(rand(2)) + 1;
  if ($a == 1) {
   $vers .= &sylh.&sylr.&sylr;
  }
  else {
   $vers .= &sylh.&sylh;
  }
 }
 $vers .= &sylv." ".&cons.&sylh.&sylr.&sylr.&sylh.&sylr.&sylr.&sylv."\n";
}
# szapphói szakasz
elsif ($tip == 4) {
 $vers = "";
 for ($i = 0; $i < 3; $ i++) {
  $vers .= &cons.&sylh.&sylr.&sylh.&sylh.&sylv." ".&cons.&sylr.&sylr.&sylh.&sylr.&sylh.&sylv."\n";
 }
 $vers .= "\t".&cons.&sylh.&sylr.&sylr.&sylh.&sylv."\n";
}
# aszklépiadészi szakasz
elsif ($tip == 5) {
 $vers = "";
 for ($i = 0; $i < 3; $ i++) {
  $vers .= &cons.&sylh.&sylh.&sylh.&sylr.&sylr.&sylv." ".&sylh.&sylr.&sylr.&sylh.&sylr.&sylv."\n";
 }
 $vers .= "\t".&cons.&sylh.&sylh.&sylh.&sylr.&sylr.&sylh.&sylr.&sylv."\n";
}
# hiba
else {
}
# kiküldés
$vers =~ s/cscs/ccs/g;
$vers =~ s/dzdz/ddz/g;
$vers =~ s/dzsdzs/ddzs/g;
$vers =~ s/gygy/ggy/g;
$vers =~ s/nyny/nny/g;
$vers =~ s/szsz/ssz/g;
$vers =~ s/tyty/tty/g;
$vers =~ s/zszs/zzs/g;
$vers = "<P>$vers</P>";
$vers =~ s/\n/<BR>\n/g;
$vers =~ s/<BR>\n<\/P>/<\/P>\n/g;
$vers =~ s/\t/&nbsp;&nbsp;&nbsp;&nbsp;/g;
$vers =~ s/  /&nbsp;&nbsp;&nbsp;/g;
print "Content-type: text/html\n\n";
print "<HTML>\n<HEAD>\n<TITLE>Mártonfi-féle halandzsavers-generátor</TITLE>\n</HEAD>\n";
print "<BODY>\n<H1>$tip[$tip-1]</H1>\n";
print "$vers";
print "<A HREF=\"vers.cgi\">Új vers</A>\n";
print "<BR><P><B>Apám emlékére</B></P>\n";
print "<P><B>Algoritmus:</B><BR>Mártonfi Ferenc 1980. Nyelvészet és verscsinálás. In Horváth Iván–Veres András (szerk.): <I>Ismétlődés a művészetben.</I> Opus. Irodalomelméleti Tanulmányok 5. Akadémiai Kiadó, Budapest, 191–243.</P>\n";
print "<P><B>Kódolás:</B><BR>Mártonfi Attila, 2001.</P>\n";
print "</BODY>\n</HTML>";
}
exit;

sub syl {
 # (57)
 $as = rand;
 if ($as < .8) {
  $ss = "CV";
 }
 elsif ($as < .9) {
  $ss = "Cv";
 }
 elsif ($as < .95) {
  $ss = "cV";
 }
 else {
  $ss = "cv";
 }
 # (58)
 $bs = rand;
 if ($bs < .95) {
  $ss =~ s/c/CL/g;
 }
 else {
  $ss =~ s/c/STL/g;
 }
 # (59)
 $cs = rand;
 if ($cs < .95) {
  $ss =~ s/v/VC/g;
 }
 else {
  $ss =~ s/v/Vf/g;
 }
 # (60)
 $ds = rand;
 if ($ds < .95) {
  $ss =~ s/f/LC/g;
 }
 else {
  $ss =~ s/f/LTS/g;
 }
 $co = int(rand(21));
 $vs = int(rand(14));
 $st = int(rand(4));
 $ls = int(rand(2));
 $ts = int(rand(8));
 $ss =~ s/C/$c[$co]/g;
 $ss =~ s/V/$v[$vs]/g;
 $ss =~ s/S/$s[$st]/g;
 $ss =~ s/L/$l[$ls]/g;
 $ss =~ s/T/$t[$ts]/g;
 return $ss;
}

sub sylr {
 # (132)
 $ss = "V C";
 $co = int(rand(21));
 $vs = int(rand(7));
 $ss =~ s/C/$c[$co]/g;
 $ss =~ s/V/$vr[$vs]/g;
 $ss =~ s/ //g if (rand(1) < .4);
 return $ss;
}

sub sylh {
 # (132)
 $as = rand;
 if ($as < .4) {
  $ss = "V1C";
 }
 else {
  $ss = "Vc";
 }
 # (133)
 $bs = rand;
 if ($bs < .8) {
  $ss =~ s/c/C C/g;
  $ss =~ s/ //g if (rand(1) < .4);
 }
 elsif ($bs < .9) {
  $ss =~ s/c/c1 C/g;
  $ss =~ s/ //g if (rand(1) < .4);
 }
 elsif ($bs < .95) {
  $ss =~ s/c/C c2/g;
  $ss =~ s/ //g if (rand(1) < .4);
 }
 else {
  $ss =~ s/c/c1 c2/g;
  $ss =~ s/ //g if (rand(1) < .4);
 }
 # (134)
 $cs = rand;
 if ($cs < .95) {
  $ss =~ s/c1/LC/g;
 }
 else {
  $ss =~ s/c1/LTS/g;
 }
 # (135)
 $ds = rand;
 if ($ds < .95) {
  $ss =~ s/c2/CL/g;
 }
 else {
  $ss =~ s/c2/STL/g;
 }
 $co = int(rand(21));
 $v1 = int(rand(7));
 $vs = int(rand(14));
 $st = int(rand(4));
 $ls = int(rand(2));
 $ts = int(rand(8));
 $ss =~ s/C/$c[$co]/g;
 $ss =~ s/V1/$vh[$v1]/g;
 $ss =~ s/V/$v[$vs]/g;
 $ss =~ s/S/$s[$st]/g;
 $ss =~ s/L/$l[$ls]/g;
 $ss =~ s/T/$t[$ts]/g;
 return $ss;
}

sub sylv {
 # (57)
 $as = rand;
 if ($as < .8) {
  $ss = "VC";
 }
 else {
  $ss = "Vc";
 }
 # (58)
 $bs = rand;
 if ($bs < .95) {
  $ss =~ s/c/LC/g;
 }
 else {
  $ss =~ s/c/LTS/g;
 }
 $co = int(rand(21));
 $vs = int(rand(14));
 $st = int(rand(4));
 $ls = int(rand(2));
 $ts = int(rand(8));
 $ss =~ s/C/$c[$co]/g;
 $ss =~ s/V/$v[$vs]/g;
 $ss =~ s/S/$s[$st]/g;
 $ss =~ s/L/$l[$ls]/g;
 $ss =~ s/T/$t[$ts]/g;
 return $ss;
}

sub cons {
 # (132)
 $co = int(rand(21));
 $ss = $c[$co];
 return $ss;
}
