private void Comp(StringBuilder result) { // All decomposed and reordered. // Combine all combinable characters. int cc; int last_cc = 0; char c; int last_start = 0; for (int i = 0; i < result.Length; i++) { cc = Combining.Class(result[i]); if ((i > 0) && ((last_cc == 0) || (last_cc != cc)) && Compose.Combine(result[last_start], result[i], out c)) { result[last_start] = c; result.Remove(i, 1); i--; if (i == last_start) { last_cc = 0; } else { last_cc = Combining.Class(result[i - 1]); } continue; } if (cc == 0) { last_start = i; } last_cc = cc; } }