public String Process(String s) {
if (String.IsNullOrEmpty(s))
return "";
StringBuilder res = new StringBuilder();
for (int i = 0; i < s.Length; i++) {
char letter = s[i];
if (IsVyanjana(letter) || IsSwaraLetter(letter)) {
res.Append(letter);
} else if (IsSwaraMatra(letter)) {
int prevCharIndex = res.Length - 1;
if (prevCharIndex >= 0) {
// a Halanta followed by swara matra, causes it to lose its
// identity
if (res[prevCharIndex] == langTable[HALANTA])
res.Remove(prevCharIndex, 1);
res.Append(letter);
int prevPrevCharIndex = res.Length - 2;
if (letter == langTable[MATRA_I] && prevPrevCharIndex >= 0)
Swap(res, prevPrevCharIndex, res.Length - 1);
} else {
res.Append(letter);
}
} else {
res.Append(letter);
}
}
return res.ToString();
}