Greeklish text converter

The below class in C#, will convert Greek text to a Latin equivalent, that can be easily read by Greek people, yet

uses English letters.

/// <summary>

/// Converts Greek text to a latin equivalent

/// </summary>

public class Greeklish

{

public Greeklish()

{

}

public static string Greek2Roman(string input)

{

char[] charInput = Greeklish.filterPunctuation(input).ToCharArray();

string output = "";

for (int i = 0; i <= input.Length - 1; i++)

{

switch (charInput[i].ToString())

{

case "Α":

if (i + 1 <= input.Length - 1)

{

switch (charInput[i + 1].ToString())

{

case "ι":

output = output + "Ai";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

case "υ":

if (i + 2 <= input.Length - 1)

{

switch (charInput[i + 2].ToString())

{

case "β":

case "γ":

case "δ":

case "ζ":

case "λ":

case "μ":

case "ν":

case "ρ":

case "α":

case "ε":

case "η":

case "ι":

case "ο":

case "υ":

case "ω":

output = output + "Av";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

default:

output = output + "Af";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

}

}

else

{

output = output + "Av";

i = i + 1;

}

break;

default:

output = output + "A";

break;

}

}

else

{

output = output + "A";

}

break;

case "α":

if (i + 1 <= input.Length - 1)

{

switch (charInput[i + 1].ToString())

{

case "ι":

output = output + "ai";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

case "υ":

if (i + 2 <= input.Length - 1)

{

switch (charInput[i + 2].ToString())

{

case "β":

case "γ":

case "δ":

case "ζ":

case "λ":

case "μ":

case "ν":

case "ρ":

case "α":

case "ε":

case "η":

case "ι":

case "ο":

case "υ":

case "ω":

output = output + "av";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

default:

output = output + "af";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

}

}

else

{

output = output + "av";

i = i + 1;

}

break;

default:

output = output + "a";

break;

}

}

else

{

output = output + "a";

}

break;

case "Β":

output = output + "B";

break;

case "β":

output = output + "b";

break;

case "Γ":

if (i + 1 <= input.Length - 1)

{

switch (charInput[i + 1].ToString())

{

case "γ":

output = output + "Ng";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

case "κ":

output = output + "Gg";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

case "ξ":

output = output + "Nx";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

case "χ":

output = output + "Nch";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

default:

output = output + "G";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

}

}

else

{

output = output + "G";

}

break;

case "γ":

if (i + 1 <= input.Length - 1)

{

switch (charInput[i + 1].ToString())

{

case "γ":

output = output + "ng";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

case "κ":

output = output + "gg";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

case "ξ":

output = output + "nx";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

case "χ":

output = output + "nch";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

default:

output = output + "g";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

}

}

else

{

output = output + "g";

}

break;

case "Δ":

output = output + "D";

break;

case "δ":

output = output + "d";

break;

case "Ε":

if (i + 1 <= input.Length - 1)

{

switch (charInput[i + 1].ToString())

{

case "ι":

output = output + "Ei";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

case "υ":

if (i + 2 <= input.Length - 1)

{

switch (charInput[i + 2].ToString())

{

case "β":

case "γ":

case "δ":

case "ζ":

case "λ":

case "μ":

case "ν":

case "ρ":

case "α":

case "ε":

case "η":

case "ι":

case "ο":

case "υ":

case "ω":

output = output + "Ev";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

default:

output = output + "Ef";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

}

}

else

{

output = output + "Ev";

i = i + 1;

}

break;

default:

output = output + "E";

break;

}

}

else

{

output = output + "E";

}

break;

case "ε":

if (i + 1 <= input.Length - 1)

{

switch (charInput[i + 1].ToString())

{

case "ι":

output = output + "ei";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

case "υ":

if (i + 2 <= input.Length - 1)

{

switch (charInput[i + 2].ToString())

{

case "β":

case "γ":

case "δ":

case "ζ":

case "λ":

case "μ":

case "ν":

case "ρ":

case "α":

case "ε":

case "η":

case "ι":

case "ο":

case "υ":

case "ω":

output = output + "ev";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

default:

output = output + "ef";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

}

}

else

{

output = output + "ev";

i = i + 1;

}

break;

default:

output = output + "e";

break;

}

}

else

{

output = output + "e";

}

break;

case "Ζ":

output = output + "Z";

break;

case "ζ":

output = output + "z";

break;

case "Η":

if (i + 1 <= input.Length - 1)

{

switch (charInput[i + 1].ToString())

{

case "υ":

if (i + 2 <= input.Length - 1)

{

switch (charInput[i + 2].ToString())

{

case "β":

case "γ":

case "δ":

case "ζ":

case "λ":

case "μ":

case "ν":

case "ρ":

case "α":

case "ε":

case "η":

case "ι":

case "ο":

case "υ":

case "ω":

output = output + "Iv";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

default:

output = output + "If";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

}

}

else

{

output = output + "Iv";

i = i + 1;

}

break;

default:

output = output + "I";

break;

}

}

else

{

output = output + "I";

}

break;

case "η":

if (i + 1 <= input.Length - 1)

{

switch (charInput[i + 1].ToString())

{

case "υ":

if (i + 2 <= input.Length - 1)

{

switch (charInput[i + 2].ToString())

{

case "β":

case "γ":

case "δ":

case "ζ":

case "λ":

case "μ":

case "ν":

case "ρ":

case "α":

case "ε":

case "η":

case "ι":

case "ο":

case "υ":

case "ω":

output = output + "iv";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

default:

output = output + "if";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

}

}

else

{

output = output + "iv";

i = i + 1;

}

break;

default:

output = output + "i";

break;

}

}

else

{

output = output + "i";

}

break;

case "Θ":

output = output + "Th";

break;

case "θ":

output = output + "th";

break;

case "Ι":

output = output + "I";

break;

case "ι":

output = output + "i";

break;

case "Κ":

output = output + "K";

break;

case "κ":

output = output + "k";

break;

case "Λ":

output = output + "L";

break;

case "λ":

output = output + "l";

break;

case "Μ":

if (i + 1 <= input.Length - 1)

{

switch (charInput[i + 1].ToString())

{

case "π":

if (i == 0 || charInput[i - 1].ToString() == " ")

{

output = output + "B";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

}

else

{

output = output + "Mp";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

}

default:

output = output + "M";

break;

}

}

else

{

output = output + "M";

}

break;

case "μ":

if (i + 1 <= input.Length - 1)

{

switch (charInput[i + 1].ToString())

{

case "π":

if (i == 0 || charInput[i - 1].ToString() == " ")

{

output = output + "b";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

}

else

{

output = output + "mp";

i = i + 1;

break; // TODO: might not be correct. Was : Exit Select

}

default:

output = output + "m";

break;

}

}

else

{

output = output + "m";

}

break;

case "Ν":

output = output + "N";

break;

case "ν":

output = output + "n";

break;

case "Ξ":

output = output + "X";

break;

case "ξ":

output = output + "x";

break;

case "Ο":

output = output + "O";

break;

case "ο":

output = output + "o";

break;

case "Π":

output = output + "P";

break;

case "π":

output = output + "p";

break;

case "Ρ":

output = output + "R";

break;

case "ρ":

output = output + "r";

break;

case "Σ":

output = output + "S";

break;

case "σ":

output = output + "s";

break;

case "ς":

output = output + "s";

break;

case "Τ":

output = output + "T";

break;

case "τ":

output = output + "t";

break;

case "Υ":

output = output + "Y";

break;

case "υ":

output = output + "y";

break;

case "Φ":

output = output + "F";

break;

case "φ":

output = output + "f";

break;

case "Χ":

output = output + "Ch";

break;

case "χ":

output = output + "ch";

break;

case "Ψ":

output = output + "Ps";

break;

case "ψ":

output = output + "ps";

break;

case "Ω":

output = output + "O";

break;

case "ω":

output = output + "o";

break;

default:

output = output + charInput[i].ToString();

break;

}

}

return output;

}

private static string filterPunctuation(string input)

{

char[] charInput = input.ToCharArray();

string output = "";

for (int i = 0; i <= input.Length - 1; i++)

{

switch (charInput[i].ToString())

{

case "Ά":

output = output + "Α";

break;

case "ά":

output = output + "α";

break;

case "Έ":

output = output + "Ε";

break;

case "έ":

output = output + "ε";

break;

case "Ή":

output = output + "Η";

break;

case "ή":

output = output + "η";

break;

case "Ί":

output = output + "Ι";

break;

case "ί":

output = output + "ι";

break;

case "Ύ":

output = output + "Υ";

break;

case "ύ":

output = output + "υ";

break;

case "Ό":

output = output + "Ο";

break;

case "ό":

output = output + "ο";

break;

case "Ώ":

output = output + "Ω";

break;

case "ώ":

output = output + "ω";

break;

default:

output = output + charInput[i].ToString();

break;

}

}

return output;

}

}