public static string HandleGreekMaleMajorNouns(string name)
{
// Make some first checks
if (string.IsNullOrEmpty(name) || name.Length < 3)
return name;
Regex re_has_greek = new Regex(@"[α-ωΑ-Ω]");
if (!re_has_greek.IsMatch(name))
return name;
// Check last character. If it is ς, σ or Σ then assume it is Greek male major noun
int name_length = name.Length;
// Check if name ends with vowel and [σςΣ]
// In case we have non Greek names like Οβρένοβιτς no modification must be done
// Also works for female nouns
Regex re = new Regex(@"[αεηιουωΑΕΗΙΟΥΩάέήίόύώΆΈΉΊΌΎΏ][σςΣ]$");
if (!re.IsMatch(name))
return name;
// Get the pre-final letter
string previous_character = name.Substring(name_length - 2, 1);
// In case pre-final is ο replace with ε or Ε
string replace_letter = previous_character;
if (previous_character == "ο")
replace_letter = "ε";
else if (previous_character == "Ο")
replace_letter = "Ε";
// name contains σ, so must be handled, according to rules
// Check if name has tonos ' anywhere. If not, then handle it in a more simple way
Regex re_tonos = new Regex(@"[άέήίόύώΆΈΉΊΌΎΏ]");
if (!re_tonos.IsMatch(name))
return name.Substring(0, name_length - 2) + replace_letter;
// MORE COMPLICATED! MUST FIND TONOS POSITION
// Check if name ends with ος or ός
Regex re_ostonos = new Regex(@"[όΌ][σςΣ]$");
Regex re_os_gen = new Regex(@"[οΟ][σςΣ]$");
var os_tonos_mtch = re_ostonos.Match(name);
if (os_tonos_mtch.Success)
{
return name.Substring(0, name_length - 2) + (previous_character == "ό" ? "έ" : "Έ");
}
var os_gen_mtch = re_os_gen.Match(name);
if (os_gen_mtch.Success)
{
// Check if tonos is in paraligousa and ends with ος
Regex re_paraligousa1 = new Regex(@"[άέήίόύώΆΈΉΊΌΎΏ][^άέήίόύώΆΈΉΊΌΎΏαεηιουωΑΕΗΙΟΥΩ]{1,3}[οΟ][σςΣ]$");
Regex re_paraligousa2 = new Regex(@"[άέήίόύώΆΈΉΊΌΎΏ][οΟ][σςΣ]$");
var paraligousa_mtch = re_paraligousa1.Match(name);
var paraligousa_mtch2 = re_paraligousa2.Match(name);
if (paraligousa_mtch.Success || paraligousa_mtch2.Success)
return name.Substring(0, name_length - 1);
else
return name.Substring(0, name_length - 2) + replace_letter;
}
return name.Substring(0, name_length - 1);
}
Comments