reArrangeUnicodeConvertedText method

String reArrangeUnicodeConvertedText(
  1. String str
)

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;
}