Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement