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