reArrangeUnicodeConvertedText method
Implementation
String reArrangeUnicodeConvertedText(String str) {
// #mb_internal_encoding("UTF-8") # force multi-byte UTF-8 encoding
//
// #global proConversionMap
//
// #for (i = 0; i < mb_strlen(str); ++i)
int i = 0;
while (i < mb_strlen(str)) {
if (i < (mb_strlen(str) - 1) && mbCharAt(str, i) == 'র' &&
isBanglaHalant(mbCharAt(str, i + 1)) &&
isBanglaHalant(mbCharAt(str, i - 1))) {
int j = 1;
while (true) {
if (i - j < 0) {
break;
}
if (isBanglaBanjonborno(mbCharAt(str, i - j)) &&
isBanglaHalant(mbCharAt(str, i - j - 1))) {
j += 2;
}
else if (j == 1 && isBanglaKar(mbCharAt(str, i - j))) {
j += 1;
}
else {
break;
}
}
String temp = subString(str, 0, i - j);
temp += mbCharAt(str, i);
temp += mbCharAt(str, i + 1);
temp += subString(str, i - j, i);
temp += subString(str, i + 2, mb_strlen(str));
str = temp;
i += 1;
continue;
}
i += 1;
}
str = doCharMap(str, proConversionMap);
i = 0;
while (i < mb_strlen(str)) {
if (i < mb_strlen(str) - 1 && mbCharAt(str, i) == 'র' &&
isBanglaHalant(mbCharAt(str, i + 1)) &&
!isBanglaHalant(mbCharAt(str, i - 1)) &&
isBanglaHalant(mbCharAt(str, i + 2))) {
int j = 1;
while (true) {
if (i - j < 0) {
break;
}
if (isBanglaBanjonborno(mbCharAt(str, i - j)) &&
isBanglaHalant(mbCharAt(str, i - j - 1))) {
j += 2;
} else if (j == 1 && isBanglaKar(mbCharAt(str, i - j))) {
j += 1;
} else {
break;
}
}
String temp = subString(str, 0, i - j);
temp += mbCharAt(str, i);
temp += mbCharAt(str, i + 1);
temp += subString(str, i - j, i);
temp += subString(str, i + 2, mb_strlen(str));
str = temp;
i += 1;
continue;
}
// # for 'Vowel + HALANT + Consonant' it should be 'HALANT + Consonant + Vowel'
if (i > 0 && mbCharAt(str, i) == '\u09CD' &&
(isBanglaKar(mbCharAt(str, i - 1)) ||
isBanglaNukta(mbCharAt(str, i - 1))) && i < mb_strlen(str) - 1) {
String temp = subString(str, 0, i - 1);
temp += mbCharAt(str, i);
temp += mbCharAt(str, i + 1);
temp += mbCharAt(str, i - 1);
temp += subString(str, i + 2, mb_strlen(str));
str = temp;
}
// # for 'RA (\u09B0) + HALANT + Vowel' it should be 'Vowel + RA (\u09B0) + HALANT'
if (i > 0 && i < mb_strlen(str) - 1 && mbCharAt(str, i) == '\u09CD' &&
mbCharAt(str, i - 1) == '\u09B0' &&
mbCharAt(str, i - 2) != '\u09CD' &&
isBanglaKar(mbCharAt(str, i + 1))) {
String temp = subString(str, 0, i - 1);
temp += mbCharAt(str, i + 1);
temp += mbCharAt(str, i - 1);
temp += mbCharAt(str, i);
temp += subString(str, i + 2, mb_strlen(str));
str = temp;
}
// # Change pre-kar to post format suitable for unicode
if (i < mb_strlen(str) - 1 && isBanglaPreKar(mbCharAt(str, i)) &&
isSpace(mbCharAt(str, i + 1)) == false) {
var temp = subString(str, 0, i);
int j = 1;
while ((i + j) < mb_strlen(str) - 1 &&
isBanglaBanjonborno(mbCharAt(str, i + j))) {
if ((i + j) < mb_strlen(str) &&
isBanglaHalant(mbCharAt(str, i + j + 1))) {
j += 2;
} else {
break;
}
}
temp += subString(str, i + 1, i + j + 1);
int l = 0;
if (mbCharAt(str, i) == 'ে' && mbCharAt(str, i + j + 1) == 'া') {
temp += "ো";
l = 1;
}
else if (mbCharAt(str, i) == 'ে' && mbCharAt(str, i + j + 1) == "ৗ") {
temp += "ৌ";
l = 1;
}
else {
temp += mbCharAt(str, i);
}
temp += subString(str, i + j + l + 1, mb_strlen(str));
str = temp;
i += j;
}
// # nukta should be placed after kars
if (i < mb_strlen(str) - 1 && isBanglaNukta(mbCharAt(str, i)) &&
isBanglaPostKar(mbCharAt(str, i + 1))) {
var temp = subString(str, 0, i);
temp += mbCharAt(str, i + 1);
temp += mbCharAt(str, i);
temp += subString(str, i + 2, mb_strlen(str));
str = temp;
}
i += 1;
}
return str;
}