Exemplo n.º 1
0
/// Can a given Farsi character join via its right edj.
///
/// @param c
///
/// @return true if the character can join via its right edj.
static bool canF_Rjoin(char_u c)
{
  switch (c) {
    case ALEF:
    case ALEF_:
    case ALEF_U_H:
    case ALEF_U_H_:
    case DAL:
    case ZAL:
    case RE:
    case JE:
    case ZE:
    case TEE:
    case TEE_:
    case WAW:
    case WAW_H:
      return true;
  }
  return canF_Ljoin(c);
}
Exemplo n.º 2
0
/// Can a given Farsi character join via its right edj.
///
/// @param c
///
/// @return TRUE if the character can join via its right edj.
static int canF_Rjoin(int c)
{
  switch (c) {
    case ALEF:
    case ALEF_:
    case ALEF_U_H:
    case ALEF_U_H_:
    case DAL:
    case ZAL:
    case RE:
    case JE:
    case ZE:
    case TEE:
    case TEE_:
    case WAW:
    case WAW_H:
      return TRUE;
  }

  return canF_Ljoin(c);
}
Exemplo n.º 3
0
/// Convert the Farsi 3342 standard into Farsi VIM.
void conv_to_pvim(void)
{
  char_u *ptr;
  int lnum, llen, i;

  for (lnum = 1; lnum <= curbuf->b_ml.ml_line_count; ++lnum) {
    ptr = ml_get((linenr_T)lnum);
    llen = (int)STRLEN(ptr);
    for (i = 0; i < llen - 1; i++) {
      if (canF_Ljoin(ptr[i]) && canF_Rjoin(ptr[i + 1])) {
        ptr[i] = toF_leading(ptr[i]);
        i++;

        while (canF_Rjoin(ptr[i]) && i < llen) {
          ptr[i] = toF_Rjoin(ptr[i]);
          if (F_isterm(ptr[i]) || !F_isalpha(ptr[i])) {
            break;
          }
          i++;
        }

        if (!F_isalpha(ptr[i]) || !canF_Rjoin(ptr[i])) {
          ptr[i - 1] = toF_ending(ptr[i - 1]);
        }
      } else {
        ptr[i] = toF_TyA(ptr[i]);
      }
    }
  }

  // Following lines contains Farsi encoded character.
  do_cmdline_cmd((char_u *)"%s/\202\231/\232/g");
  do_cmdline_cmd((char_u *)"%s/\201\231/\370\334/g");

  // Assume the screen has been messed up: clear it and redraw.
  redraw_later(CLEAR);
  MSG_ATTR(farsi_text_1, hl_attr(HLF_S));
}