diff options
Diffstat (limited to 'src/farsi.c')
-rw-r--r-- | src/farsi.c | 3815 |
1 files changed, 2297 insertions, 1518 deletions
diff --git a/src/farsi.c b/src/farsi.c index 31e62e2510..9a22b3f364 100644 --- a/src/farsi.c +++ b/src/farsi.c @@ -46,83 +46,108 @@ static int toF_Xor_X_(int c) int tempc; switch (c) { - case BE: - return _BE; - case PE: - return _PE; - case TE: - return _TE; - case SE: - return _SE; - case JIM: - return _JIM; - case CHE: - return _CHE; - case HE_J: - return _HE_J; - case XE: - return _XE; - case SIN: - return _SIN; - case SHIN: - return _SHIN; - case SAD: - return _SAD; - case ZAD: - return _ZAD; - case AYN: - return _AYN; - case AYN_: - return _AYN_; - case GHAYN: - return _GHAYN; - case GHAYN_: - return _GHAYN_; - case FE: - return _FE; - case GHAF: - return _GHAF; - case KAF: - return _KAF; - case GAF: - return _GAF; - case LAM: - return _LAM; - case MIM: - return _MIM; - case NOON: - return _NOON; - case YE: - case YE_: - return _YE; - case YEE: - case YEE_: - return _YEE; - case IE: - case IE_: - return _IE; - case F_HE: - tempc = _HE; - - if (p_ri && (curwin->w_cursor.col + 1 - < (colnr_T)STRLEN(ml_get_curline()))) { - inc_cursor(); + case BE: + return _BE; - if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) - tempc = _HE_; + case PE: + return _PE; - dec_cursor(); - } - if (!p_ri && STRLEN(ml_get_curline())) { - dec_cursor(); + case TE: + return _TE; - if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) - tempc = _HE_; + case SE: + return _SE; - inc_cursor(); - } + case JIM: + return _JIM; - return tempc; + case CHE: + return _CHE; + + case HE_J: + return _HE_J; + + case XE: + return _XE; + + case SIN: + return _SIN; + + case SHIN: + return _SHIN; + + case SAD: + return _SAD; + + case ZAD: + return _ZAD; + + case AYN: + return _AYN; + + case AYN_: + return _AYN_; + + case GHAYN: + return _GHAYN; + + case GHAYN_: + return _GHAYN_; + + case FE: + return _FE; + + case GHAF: + return _GHAF; + + case KAF: + return _KAF; + + case GAF: + return _GAF; + + case LAM: + return _LAM; + + case MIM: + return _MIM; + + case NOON: + return _NOON; + + case YE: + case YE_: + return _YE; + + case YEE: + case YEE_: + return _YEE; + + case IE: + case IE_: + return _IE; + + case F_HE: + tempc = _HE; + + if (p_ri && + (curwin->w_cursor.col + 1 < (colnr_T)STRLEN(ml_get_curline()))) { + inc_cursor(); + if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) { + tempc = _HE_; + } + dec_cursor(); + } + + if (!p_ri && STRLEN(ml_get_curline())) { + dec_cursor(); + if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) { + tempc = _HE_; + } + inc_cursor(); + } + + return tempc; } return 0; } @@ -133,71 +158,98 @@ static int toF_Xor_X_(int c) int toF_TyA(int c) { switch (c) { - case ALEF_: - return ALEF; - case ALEF_U_H_: - return ALEF_U_H; - case _BE: - return BE; - case _PE: - return PE; - case _TE: - return TE; - case _SE: - return SE; - case _JIM: - return JIM; - case _CHE: - return CHE; - case _HE_J: - return HE_J; - case _XE: - return XE; - case _SIN: - return SIN; - case _SHIN: - return SHIN; - case _SAD: - return SAD; - case _ZAD: - return ZAD; - case _AYN: - case AYN_: - case _AYN_: - return AYN; - case _GHAYN: - case GHAYN_: - case _GHAYN_: - return GHAYN; - case _FE: - return FE; - case _GHAF: - return GHAF; - /* I am not sure what it is !!! case _KAF_H: */ - case _KAF: - return KAF; - case _GAF: - return GAF; - case _LAM: - return LAM; - case _MIM: - return MIM; - case _NOON: - return NOON; - case _YE: - case YE_: - return YE; - case _YEE: - case YEE_: - return YEE; - case TEE_: - return TEE; - case _IE: - case IE_: - return IE; - case _HE: - case _HE_: - return F_HE; + case ALEF_: + return ALEF; + + case ALEF_U_H_: + return ALEF_U_H; + + case _BE: + return BE; + + case _PE: + return PE; + + case _TE: + return TE; + + case _SE: + return SE; + + case _JIM: + return JIM; + + case _CHE: + return CHE; + + case _HE_J: + return HE_J; + + case _XE: + return XE; + + case _SIN: + return SIN; + + case _SHIN: + return SHIN; + + case _SAD: + return SAD; + + case _ZAD: + return ZAD; + + case _AYN: + case AYN_: + case _AYN_: + return AYN; + + case _GHAYN: + case GHAYN_: + case _GHAYN_: + return GHAYN; + + case _FE: + return FE; + + case _GHAF: + return GHAF; + + /* I am not sure what it is !!! case _KAF_H: */ + case _KAF: + return KAF; + + case _GAF: + return GAF; + + case _LAM: + return LAM; + + case _MIM: + return MIM; + + case _NOON: + return NOON; + + case _YE: + case YE_: + return YE; + + case _YEE: + case YEE_: + return YEE; + + case TEE_: + return TEE; + + case _IE: + case IE_: + return IE; + + case _HE: + case _HE_: + return F_HE; } return c; } @@ -211,44 +263,45 @@ static int F_is_TyB_TyC_TyD(int src, int offset) { int c; - if (src == SRC_EDT) + if (src == SRC_EDT) { c = gchar_cursor(); - else - c = cmd_gchar(AT_CURSOR+offset); + } else { + c = cmd_gchar(AT_CURSOR + offset); + } switch (c) { - case _LAM: - case _BE: - case _PE: - case _TE: - case _SE: - case _JIM: - case _CHE: - case _HE_J: - case _XE: - case _SIN: - case _SHIN: - case _SAD: - case _ZAD: - case _TA: - case _ZA: - case _AYN: - case _AYN_: - case _GHAYN: - case _GHAYN_: - case _FE: - case _GHAF: - case _KAF: - case _KAF_H: - case _GAF: - case _MIM: - case _NOON: - case _YE: - case _YEE: - case _IE: - case _HE_: - case _HE: - return TRUE; + case _LAM: + case _BE: + case _PE: + case _TE: + case _SE: + case _JIM: + case _CHE: + case _HE_J: + case _XE: + case _SIN: + case _SHIN: + case _SAD: + case _ZAD: + case _TA: + case _ZA: + case _AYN: + case _AYN_: + case _GHAYN: + case _GHAYN_: + case _FE: + case _GHAF: + case _KAF: + case _KAF_H: + case _GAF: + case _MIM: + case _NOON: + case _YE: + case _YEE: + case _IE: + case _HE_: + case _HE: + return TRUE; } return FALSE; } @@ -259,17 +312,17 @@ static int F_is_TyB_TyC_TyD(int src, int offset) static int F_is_TyE(int c) { switch (c) { - case ALEF_A: - case ALEF_D_H: - case DAL: - case ZAL: - case RE: - case ZE: - case JE: - case WAW: - case WAW_H: - case HAMZE: - return TRUE; + case ALEF_A: + case ALEF_D_H: + case DAL: + case ZAL: + case RE: + case ZE: + case JE: + case WAW: + case WAW_H: + case HAMZE: + return TRUE; } return FALSE; } @@ -280,18 +333,18 @@ static int F_is_TyE(int c) static int F_is_TyC_TyD(int c) { switch (c) { - case ALEF_: - case ALEF_U_H_: - case _AYN_: - case AYN_: - case _GHAYN_: - case GHAYN_: - case _HE_: - case YE_: - case IE_: - case TEE_: - case YEE_: - return TRUE; + case ALEF_: + case ALEF_U_H_: + case _AYN_: + case AYN_: + case _GHAYN_: + case GHAYN_: + case _HE_: + case YE_: + case IE_: + case TEE_: + case YEE_: + return TRUE; } return FALSE; } @@ -302,17 +355,38 @@ static int F_is_TyC_TyD(int c) static int toF_TyB(int c) { switch (c) { - case ALEF_: return ALEF; - case ALEF_U_H_: return ALEF_U_H; - case _AYN_: return _AYN; - case AYN_: return AYN; /* exception - there are many of them */ - case _GHAYN_: return _GHAYN; - case GHAYN_: return GHAYN; /* exception - there are many of them */ - case _HE_: return _HE; - case YE_: return YE; - case IE_: return IE; - case TEE_: return TEE; - case YEE_: return YEE; + case ALEF_: + return ALEF; + + case ALEF_U_H_: + return ALEF_U_H; + + case _AYN_: + return _AYN; + + case AYN_: + return AYN; /* exception - there are many of them */ + + case _GHAYN_: + return _GHAYN; + + case GHAYN_: + return GHAYN; /* exception - there are many of them */ + + case _HE_: + return _HE; + + case YE_: + return YE; + + case IE_: + return IE; + + case TEE_: + return TEE; + + case YEE_: + return YEE; } return c; } @@ -324,15 +398,17 @@ static void put_curr_and_l_to_X(int c) { int tempc; - if (curwin->w_p_rl && p_ri) + if (curwin->w_p_rl && p_ri) { return; + } if ((curwin->w_cursor.col < (colnr_T)STRLEN(ml_get_curline()))) { if ((p_ri && curwin->w_cursor.col) || !p_ri) { - if (p_ri) + if (p_ri) { dec_cursor(); - else + } else { inc_cursor(); + } if (F_is_TyC_TyD((tempc = gchar_cursor()))) { pchar_cursor(toF_TyB(tempc)); @@ -340,10 +416,11 @@ static void put_curr_and_l_to_X(int c) AppendCharToRedobuff(tempc); } - if (p_ri) + if (p_ri) { inc_cursor(); - else + } else { dec_cursor(); + } } } @@ -360,184 +437,226 @@ static void put_and_redo(int c) /* ** Change the char. under the cursor to a X_ or X type */ -static void chg_c_toX_orX(void) { +static void chg_c_toX_orX(void) +{ int tempc, curc; switch ((curc = gchar_cursor())) { - case _BE: - tempc = BE; - break; - case _PE: - tempc = PE; - break; - case _TE: - tempc = TE; - break; - case _SE: - tempc = SE; - break; - case _JIM: - tempc = JIM; - break; - case _CHE: - tempc = CHE; - break; - case _HE_J: - tempc = HE_J; - break; - case _XE: - tempc = XE; - break; - case _SIN: - tempc = SIN; - break; - case _SHIN: - tempc = SHIN; - break; - case _SAD: - tempc = SAD; - break; - case _ZAD: - tempc = ZAD; - break; - case _FE: - tempc = FE; - break; - case _GHAF: - tempc = GHAF; - break; - case _KAF_H: - case _KAF: - tempc = KAF; - break; - case _GAF: - tempc = GAF; - break; - case _AYN: - tempc = AYN; - break; - case _AYN_: - tempc = AYN_; - break; - case _GHAYN: - tempc = GHAYN; - break; - case _GHAYN_: - tempc = GHAYN_; - break; - case _LAM: - tempc = LAM; - break; - case _MIM: - tempc = MIM; - break; - case _NOON: - tempc = NOON; - break; - case _HE: - case _HE_: - tempc = F_HE; - break; - case _YE: - case _IE: - case _YEE: - if (p_ri) { - inc_cursor(); - if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) - tempc = (curc == _YE ? YE_ : - (curc == _IE ? IE_ : YEE_)); - else - tempc = (curc == _YE ? YE : - (curc == _IE ? IE : YEE)); - dec_cursor(); - } else { - if (curwin->w_cursor.col) { - dec_cursor(); - if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) + case _BE: + tempc = BE; + break; + + case _PE: + tempc = PE; + break; + + case _TE: + tempc = TE; + break; + + case _SE: + tempc = SE; + break; + + case _JIM: + tempc = JIM; + break; + + case _CHE: + tempc = CHE; + break; + + case _HE_J: + tempc = HE_J; + break; + + case _XE: + tempc = XE; + break; + + case _SIN: + tempc = SIN; + break; + + case _SHIN: + tempc = SHIN; + break; + + case _SAD: + tempc = SAD; + break; + + case _ZAD: + tempc = ZAD; + break; + + case _FE: + tempc = FE; + break; + + case _GHAF: + tempc = GHAF; + break; + + case _KAF_H: + case _KAF: + tempc = KAF; + break; + + case _GAF: + tempc = GAF; + break; + + case _AYN: + tempc = AYN; + break; + + case _AYN_: + tempc = AYN_; + break; + + case _GHAYN: + tempc = GHAYN; + break; + + case _GHAYN_: + tempc = GHAYN_; + break; + + case _LAM: + tempc = LAM; + break; + + case _MIM: + tempc = MIM; + break; + + case _NOON: + tempc = NOON; + break; + + case _HE: + case _HE_: + tempc = F_HE; + break; + + case _YE: + case _IE: + case _YEE: + if (p_ri) { + inc_cursor(); + + if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) { tempc = (curc == _YE ? YE_ : (curc == _IE ? IE_ : YEE_)); - else + } else { tempc = (curc == _YE ? YE : (curc == _IE ? IE : YEE)); - inc_cursor(); - } else - tempc = (curc == _YE ? YE : - (curc == _IE ? IE : YEE)); - } - break; - default: - tempc = 0; + } + dec_cursor(); + } else { + if (curwin->w_cursor.col) { + dec_cursor(); + + if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) { + tempc = (curc == _YE ? YE_ : + (curc == _IE ? IE_ : YEE_)); + } else { + tempc = (curc == _YE ? YE : + (curc == _IE ? IE : YEE)); + } + inc_cursor(); + } else { + tempc = (curc == _YE ? YE : + (curc == _IE ? IE : YEE)); + } + } + break; + + default: + tempc = 0; } - if (tempc) + if (tempc) { put_and_redo(tempc); + } } /* ** Change the char. under the cursor to a _X_ or X_ type */ - -static void chg_c_to_X_orX_(void) { +static void chg_c_to_X_orX_(void) +{ int tempc; switch (gchar_cursor()) { - case ALEF: - tempc = ALEF_; - break; - case ALEF_U_H: - tempc = ALEF_U_H_; - break; - case _AYN: - tempc = _AYN_; - break; - case AYN: - tempc = AYN_; - break; - case _GHAYN: - tempc = _GHAYN_; - break; - case GHAYN: - tempc = GHAYN_; - break; - case _HE: - tempc = _HE_; - break; - case YE: - tempc = YE_; - break; - case IE: - tempc = IE_; - break; - case TEE: - tempc = TEE_; - break; - case YEE: - tempc = YEE_; - break; - default: - tempc = 0; + case ALEF: + tempc = ALEF_; + break; + + case ALEF_U_H: + tempc = ALEF_U_H_; + break; + + case _AYN: + tempc = _AYN_; + break; + + case AYN: + tempc = AYN_; + break; + + case _GHAYN: + tempc = _GHAYN_; + break; + + case GHAYN: + tempc = GHAYN_; + break; + + case _HE: + tempc = _HE_; + break; + + case YE: + tempc = YE_; + break; + + case IE: + tempc = IE_; + break; + + case TEE: + tempc = TEE_; + break; + + case YEE: + tempc = YEE_; + break; + + default: + tempc = 0; } - if (tempc) + if (tempc) { put_and_redo(tempc); + } } /* ** Change the char. under the cursor to a _X_ or _X type */ -static void chg_c_to_X_or_X(void) { +static void chg_c_to_X_or_X(void) +{ int tempc; tempc = gchar_cursor(); if (curwin->w_cursor.col + 1 < (colnr_T)STRLEN(ml_get_curline())) { inc_cursor(); - if ((tempc == F_HE) && (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR))) { tempc = _HE_; - dec_cursor(); - put_and_redo(tempc); return; } @@ -545,837 +664,1192 @@ static void chg_c_to_X_or_X(void) { dec_cursor(); } - if ((tempc = toF_Xor_X_(tempc)) != 0) + if ((tempc = toF_Xor_X_(tempc)) != 0) { put_and_redo(tempc); + } } /* ** Change the character left to the cursor to a _X_ or X_ type */ -static void chg_l_to_X_orX_(void) { +static void chg_l_to_X_orX_(void) +{ int tempc; - if (curwin->w_cursor.col != 0 && - (curwin->w_cursor.col + 1 == (colnr_T)STRLEN(ml_get_curline()))) + if ((curwin->w_cursor.col != 0) && + (curwin->w_cursor.col + 1 == (colnr_T)STRLEN(ml_get_curline()))) { return; + } - if (!curwin->w_cursor.col && p_ri) + if (!curwin->w_cursor.col && p_ri) { return; + } - if (p_ri) + if (p_ri) { dec_cursor(); - else + } else { inc_cursor(); + } switch (gchar_cursor()) { - case ALEF: - tempc = ALEF_; - break; - case ALEF_U_H: - tempc = ALEF_U_H_; - break; - case _AYN: - tempc = _AYN_; - break; - case AYN: - tempc = AYN_; - break; - case _GHAYN: - tempc = _GHAYN_; - break; - case GHAYN: - tempc = GHAYN_; - break; - case _HE: - tempc = _HE_; - break; - case YE: - tempc = YE_; - break; - case IE: - tempc = IE_; - break; - case TEE: - tempc = TEE_; - break; - case YEE: - tempc = YEE_; - break; - default: - tempc = 0; + case ALEF: + tempc = ALEF_; + break; + + case ALEF_U_H: + tempc = ALEF_U_H_; + break; + + case _AYN: + tempc = _AYN_; + break; + + case AYN: + tempc = AYN_; + break; + + case _GHAYN: + tempc = _GHAYN_; + break; + + case GHAYN: + tempc = GHAYN_; + break; + + case _HE: + tempc = _HE_; + break; + + case YE: + tempc = YE_; + break; + + case IE: + tempc = IE_; + break; + + case TEE: + tempc = TEE_; + break; + + case YEE: + tempc = YEE_; + break; + + default: + tempc = 0; } - if (tempc) + if (tempc) { put_and_redo(tempc); + } - if (p_ri) + if (p_ri) { inc_cursor(); - else + } else { dec_cursor(); + } } /* ** Change the character left to the cursor to a X or _X type */ - -static void chg_l_toXor_X(void) { +static void chg_l_toXor_X(void) +{ int tempc; - if (curwin->w_cursor.col != 0 && - (curwin->w_cursor.col + 1 == (colnr_T)STRLEN(ml_get_curline()))) + if ((curwin->w_cursor.col != 0) && + (curwin->w_cursor.col + 1 == (colnr_T)STRLEN(ml_get_curline()))) { return; + } - if (!curwin->w_cursor.col && p_ri) + if (!curwin->w_cursor.col && p_ri) { return; + } - if (p_ri) + if (p_ri) { dec_cursor(); - else + } else { inc_cursor(); + } switch (gchar_cursor()) { - case ALEF_: - tempc = ALEF; - break; - case ALEF_U_H_: - tempc = ALEF_U_H; - break; - case _AYN_: - tempc = _AYN; - break; - case AYN_: - tempc = AYN; - break; - case _GHAYN_: - tempc = _GHAYN; - break; - case GHAYN_: - tempc = GHAYN; - break; - case _HE_: - tempc = _HE; - break; - case YE_: - tempc = YE; - break; - case IE_: - tempc = IE; - break; - case TEE_: - tempc = TEE; - break; - case YEE_: - tempc = YEE; - break; - default: - tempc = 0; + case ALEF_: + tempc = ALEF; + break; + + case ALEF_U_H_: + tempc = ALEF_U_H; + break; + + case _AYN_: + tempc = _AYN; + break; + + case AYN_: + tempc = AYN; + break; + + case _GHAYN_: + tempc = _GHAYN; + break; + + case GHAYN_: + tempc = GHAYN; + break; + + case _HE_: + tempc = _HE; + break; + + case YE_: + tempc = YE; + break; + + case IE_: + tempc = IE; + break; + + case TEE_: + tempc = TEE; + break; + + case YEE_: + tempc = YEE; + break; + + default: + tempc = 0; } - if (tempc) + if (tempc) { put_and_redo(tempc); + } - if (p_ri) + if (p_ri) { inc_cursor(); - else + } else { dec_cursor(); + } } /* ** Change the character right to the cursor to a _X or _X_ type */ - -static void chg_r_to_Xor_X_(void) { +static void chg_r_to_Xor_X_(void) +{ int tempc, c; if (curwin->w_cursor.col) { - if (!p_ri) + if (!p_ri) { dec_cursor(); + } tempc = gchar_cursor(); - - if ((c = toF_Xor_X_(tempc)) != 0) + if ((c = toF_Xor_X_(tempc)) != 0) { put_and_redo(c); + } - if (!p_ri) + if (!p_ri) { inc_cursor(); - + } } } /* ** Map Farsi keyboard when in fkmap mode. */ - int fkmap(int c) { int tempc; static int revins; - if (IS_SPECIAL(c)) + if (IS_SPECIAL(c)) { return c; + } - if (VIM_ISDIGIT(c) || ((c == '.' || c == '+' || c == '-' || - c == '^' || c == '%' || c == '#' || - c == '=') && revins)) { + if (VIM_ISDIGIT(c) || + (((c == '.') || + (c == '+') || + (c == '-') || + (c == '^') || + (c == '%') || + (c == '#') || + (c == '=')) && revins)) { if (!revins) { if (curwin->w_cursor.col) { - if (!p_ri) + if (!p_ri) { dec_cursor(); + } - chg_c_toX_orX (); - chg_l_toXor_X (); - - if (!p_ri) + chg_c_toX_orX(); + chg_l_toXor_X(); + if (!p_ri) { inc_cursor(); + } } } arrow_used = TRUE; (void)stop_arrow(); - if (!curwin->w_p_rl && revins) + if (!curwin->w_p_rl && revins) { inc_cursor(); + } ++revins; - p_ri=1; - } else { + p_ri = 1; + } else { if (revins) { arrow_used = TRUE; (void)stop_arrow(); revins = 0; if (curwin->w_p_rl) { - while ((F_isdigit(gchar_cursor()) - || (gchar_cursor() == F_PERIOD - || gchar_cursor() == F_PLUS - || gchar_cursor() == F_MINUS - || gchar_cursor() == F_MUL - || gchar_cursor() == F_DIVIDE - || gchar_cursor() == F_PERCENT - || gchar_cursor() == F_EQUALS)) - && gchar_cursor() != NUL) + while ((F_isdigit(gchar_cursor()) || + (gchar_cursor() == F_PERIOD || + gchar_cursor() == F_PLUS || + gchar_cursor() == F_MINUS || + gchar_cursor() == F_MUL || + gchar_cursor() == F_DIVIDE || + gchar_cursor() == F_PERCENT || + gchar_cursor() == F_EQUALS)) && + gchar_cursor() != NUL) { ++curwin->w_cursor.col; + } } else { - if (curwin->w_cursor.col) - while ((F_isdigit(gchar_cursor()) - || (gchar_cursor() == F_PERIOD - || gchar_cursor() == F_PLUS - || gchar_cursor() == F_MINUS - || gchar_cursor() == F_MUL - || gchar_cursor() == F_DIVIDE - || gchar_cursor() == F_PERCENT - || gchar_cursor() == F_EQUALS)) - && --curwin->w_cursor.col) - ; - - if (!F_isdigit(gchar_cursor())) + if (curwin->w_cursor.col) { + while ((F_isdigit(gchar_cursor()) || + (gchar_cursor() == F_PERIOD || + gchar_cursor() == F_PLUS || + gchar_cursor() == F_MINUS || + gchar_cursor() == F_MUL || + gchar_cursor() == F_DIVIDE || + gchar_cursor() == F_PERCENT || + gchar_cursor() == F_EQUALS)) && + --curwin->w_cursor.col) { + } + } + + if (!F_isdigit(gchar_cursor())) { ++curwin->w_cursor.col; + } } } } if (!revins) { - if (curwin->w_p_rl) - p_ri=0; - if (!curwin->w_p_rl) - p_ri=1; + if (curwin->w_p_rl) { + p_ri = 0; + } + + if (!curwin->w_p_rl) { + p_ri = 1; + } } - if ((c < 0x100) && (isalpha(c) || c == '&' || c == '^' || c == ';' || - c == '\''|| c == ',' || c == '[' || - c == ']' || c == '{' || c == '}' )) + if ((c < 0x100) && + (isalpha(c) || + (c == '&') || + (c == '^') || + (c == ';') || + (c == '\'') || + (c == ',') || + (c == '[') || + (c == ']') || + (c == '{') || + (c == '}'))) { chg_r_to_Xor_X_(); + } tempc = 0; switch (c) { - case '`': - case ' ': - case '.': - case '!': - case '"': - case '$': - case '%': - case '^': - case '&': - case '/': - case '(': - case ')': - case '=': - case '\\': - case '?': - case '+': - case '-': - case '_': - case '*': - case ':': - case '#': - case '~': - case '@': - case '<': - case '>': - case '{': - case '}': - case '|': - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - case 'B': - case 'E': - case 'F': - case 'H': - case 'I': - case 'K': - case 'L': - case 'M': - case 'O': - case 'P': - case 'Q': - case 'R': - case 'T': - case 'U': - case 'W': - case 'Y': - case NL: - case TAB: - - if (p_ri && c == NL && curwin->w_cursor.col) { - /* - ** If the char before the cursor is _X_ or X_ do not change - ** the one under the cursor with X type. - */ - - dec_cursor(); + case '`': + case ' ': + case '.': + case '!': + case '"': + case '$': + case '%': + case '^': + case '&': + case '/': + case '(': + case ')': + case '=': + case '\\': + case '?': + case '+': + case '-': + case '_': + case '*': + case ':': + case '#': + case '~': + case '@': + case '<': + case '>': + case '{': + case '}': + case '|': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'B': + case 'E': + case 'F': + case 'H': + case 'I': + case 'K': + case 'L': + case 'M': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'T': + case 'U': + case 'W': + case 'Y': + case NL: + case TAB: + if (p_ri && (c == NL) && curwin->w_cursor.col) { + /* + ** If the char before the cursor is _X_ or X_ do not change + ** the one under the cursor with X type. + */ - if (F_isalpha(gchar_cursor())) { + dec_cursor(); + if (F_isalpha(gchar_cursor())) { + inc_cursor(); + return NL; + } inc_cursor(); - return NL; } - inc_cursor(); - } + if (!p_ri) { + if (!curwin->w_cursor.col) { + switch (c) { + case '0': + return FARSI_0; - if (!p_ri) - if (!curwin->w_cursor.col) { - switch (c) { - case '0': return FARSI_0; - case '1': return FARSI_1; - case '2': return FARSI_2; - case '3': return FARSI_3; - case '4': return FARSI_4; - case '5': return FARSI_5; - case '6': return FARSI_6; - case '7': return FARSI_7; - case '8': return FARSI_8; - case '9': return FARSI_9; - case 'B': return F_PSP; - case 'E': return JAZR_N; - case 'F': return ALEF_D_H; - case 'H': return ALEF_A; - case 'I': return TASH; - case 'K': return F_LQUOT; - case 'L': return F_RQUOT; - case 'M': return HAMZE; - case 'O': return '['; - case 'P': return ']'; - case 'Q': return OO; - case 'R': return MAD_N; - case 'T': return OW; - case 'U': return MAD; - case 'W': return OW_OW; - case 'Y': return JAZR; - case '`': return F_PCN; - case '!': return F_EXCL; - case '@': return F_COMMA; - case '#': return F_DIVIDE; - case '$': return F_CURRENCY; - case '%': return F_PERCENT; - case '^': return F_MUL; - case '&': return F_BCOMMA; - case '*': return F_STAR; - case '(': return F_LPARENT; - case ')': return F_RPARENT; - case '-': return F_MINUS; - case '_': return F_UNDERLINE; - case '=': return F_EQUALS; - case '+': return F_PLUS; - case '\\': return F_BSLASH; - case '|': return F_PIPE; - case ':': return F_DCOLON; - case '"': return F_SEMICOLON; - case '.': return F_PERIOD; - case '/': return F_SLASH; - case '<': return F_LESS; - case '>': return F_GREATER; - case '?': return F_QUESTION; - case ' ': return F_BLANK; - } - break; - } - if (!p_ri) - dec_cursor(); + case '1': + return FARSI_1; - switch ((tempc = gchar_cursor())) { - case _BE: - case _PE: - case _TE: - case _SE: - case _JIM: - case _CHE: - case _HE_J: - case _XE: - case _SIN: - case _SHIN: - case _SAD: - case _ZAD: - case _FE: - case _GHAF: - case _KAF: - case _KAF_H: - case _GAF: - case _LAM: - case _MIM: - case _NOON: - case _HE: - case _HE_: - case _TA: - case _ZA: - put_curr_and_l_to_X(toF_TyA(tempc)); - break; - case _AYN: - case _AYN_: + case '2': + return FARSI_2; - if (!p_ri) - if (!curwin->w_cursor.col) { - put_curr_and_l_to_X(AYN); + case '3': + return FARSI_3; + + case '4': + return FARSI_4; + + case '5': + return FARSI_5; + + case '6': + return FARSI_6; + + case '7': + return FARSI_7; + + case '8': + return FARSI_8; + + case '9': + return FARSI_9; + + case 'B': + return F_PSP; + + case 'E': + return JAZR_N; + + case 'F': + return ALEF_D_H; + + case 'H': + return ALEF_A; + + case 'I': + return TASH; + + case 'K': + return F_LQUOT; + + case 'L': + return F_RQUOT; + + case 'M': + return HAMZE; + + case 'O': + return '['; + + case 'P': + return ']'; + + case 'Q': + return OO; + + case 'R': + return MAD_N; + + case 'T': + return OW; + + case 'U': + return MAD; + + case 'W': + return OW_OW; + + case 'Y': + return JAZR; + + case '`': + return F_PCN; + + case '!': + return F_EXCL; + + case '@': + return F_COMMA; + + case '#': + return F_DIVIDE; + + case '$': + return F_CURRENCY; + + case '%': + return F_PERCENT; + + case '^': + return F_MUL; + + case '&': + return F_BCOMMA; + + case '*': + return F_STAR; + + case '(': + return F_LPARENT; + + case ')': + return F_RPARENT; + + case '-': + return F_MINUS; + + case '_': + return F_UNDERLINE; + + case '=': + return F_EQUALS; + + case '+': + return F_PLUS; + + case '\\': + return F_BSLASH; + + case '|': + return F_PIPE; + + case ':': + return F_DCOLON; + + case '"': + return F_SEMICOLON; + + case '.': + return F_PERIOD; + + case '/': + return F_SLASH; + + case '<': + return F_LESS; + + case '>': + return F_GREATER; + + case '?': + return F_QUESTION; + + case ' ': + return F_BLANK; + } break; } + } - if (p_ri) - inc_cursor(); - else + if (!p_ri) { dec_cursor(); + } + + switch ((tempc = gchar_cursor())) { + case _BE: + case _PE: + case _TE: + case _SE: + case _JIM: + case _CHE: + case _HE_J: + case _XE: + case _SIN: + case _SHIN: + case _SAD: + case _ZAD: + case _FE: + case _GHAF: + case _KAF: + case _KAF_H: + case _GAF: + case _LAM: + case _MIM: + case _NOON: + case _HE: + case _HE_: + case _TA: + case _ZA: + put_curr_and_l_to_X(toF_TyA(tempc)); + break; - if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) - tempc = AYN_; - else - tempc = AYN; + case _AYN: + case _AYN_: + if (!p_ri) { + if (!curwin->w_cursor.col) { + put_curr_and_l_to_X(AYN); + break; + } + } + + if (p_ri) { + inc_cursor(); + } else { + dec_cursor(); + } + + if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) { + tempc = AYN_; + } else { + tempc = AYN; + } + + if (p_ri) { + dec_cursor(); + } else { + inc_cursor(); + } + + put_curr_and_l_to_X(tempc); + break; - if (p_ri) - dec_cursor(); - else + case _GHAYN: + case _GHAYN_: + + if (!p_ri) { + if (!curwin->w_cursor.col) { + put_curr_and_l_to_X(GHAYN); + break; + } + } + + if (p_ri) { + inc_cursor(); + } else { + dec_cursor(); + } + + if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) { + tempc = GHAYN_; + } else { + tempc = GHAYN; + } + + if (p_ri) { + dec_cursor(); + } else { + inc_cursor(); + } + + put_curr_and_l_to_X(tempc); + break; + + case _YE: + case _IE: + case _YEE: + + if (!p_ri) { + if (!curwin->w_cursor.col) { + put_curr_and_l_to_X((tempc == _YE ? YE : + (tempc == _IE ? IE : YEE))); + break; + } + } + + if (p_ri) { + inc_cursor(); + } else { + dec_cursor(); + } + + if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) { + tempc = (tempc == _YE ? YE_ : + (tempc == _IE ? IE_ : YEE_)); + } else { + tempc = (tempc == _YE ? YE : + (tempc == _IE ? IE : YEE)); + } + + if (p_ri) { + dec_cursor(); + } else { + inc_cursor(); + } + + put_curr_and_l_to_X(tempc); + break; + } + + if (!p_ri) { inc_cursor(); + } + + tempc = 0; + + switch (c) { + case '0': + return FARSI_0; + + case '1': + return FARSI_1; + + case '2': + return FARSI_2; + + case '3': + return FARSI_3; + + case '4': + return FARSI_4; + + case '5': + return FARSI_5; + + case '6': + return FARSI_6; + + case '7': + return FARSI_7; + + case '8': + return FARSI_8; + + case '9': + return FARSI_9; + + case 'B': + return F_PSP; + + case 'E': + return JAZR_N; + + case 'F': + return ALEF_D_H; + + case 'H': + return ALEF_A; + + case 'I': + return TASH; + + case 'K': + return F_LQUOT; + + case 'L': + return F_RQUOT; + + case 'M': + return HAMZE; + + case 'O': + return '['; + + case 'P': + return ']'; + + case 'Q': + return OO; + + case 'R': + return MAD_N; + + case 'T': + return OW; + + case 'U': + return MAD; + + case 'W': + return OW_OW; + + case 'Y': + return JAZR; + + case '`': + return F_PCN; + + case '!': + return F_EXCL; + + case '@': + return F_COMMA; + + case '#': + return F_DIVIDE; + + case '$': + return F_CURRENCY; + + case '%': + return F_PERCENT; + + case '^': + return F_MUL; + + case '&': + return F_BCOMMA; + + case '*': + return F_STAR; + + case '(': + return F_LPARENT; + + case ')': + return F_RPARENT; + + case '-': + return F_MINUS; + + case '_': + return F_UNDERLINE; + + case '=': + return F_EQUALS; + + case '+': + return F_PLUS; + + case '\\': + return F_BSLASH; + + case '|': + return F_PIPE; - put_curr_and_l_to_X(tempc); + case ':': + return F_DCOLON; + case '"': + return F_SEMICOLON; + + case '.': + return F_PERIOD; + + case '/': + return F_SLASH; + + case '<': + return F_LESS; + + case '>': + return F_GREATER; + + case '?': + return F_QUESTION; + + case ' ': + return F_BLANK; + } + break; + + case 'a': + tempc = _SHIN; + break; + + case 'A': + tempc = WAW_H; + break; + + case 'b': + tempc = ZAL; + break; + + case 'c': + tempc = ZE; break; - case _GHAYN: - case _GHAYN_: - if (!p_ri) + case 'C': + tempc = JE; + break; + + case 'd': + tempc = _YE; + break; + + case 'D': + tempc = _YEE; + break; + + case 'e': + tempc = _SE; + break; + + case 'f': + tempc = _BE; + break; + + case 'g': + tempc = _LAM; + break; + + case 'G': + if (!curwin->w_cursor.col && STRLEN(ml_get_curline())) { + if (gchar_cursor() == _LAM) { + chg_c_toX_orX(); + } else if (p_ri) { + chg_c_to_X_or_X(); + } + } + + if (!p_ri) { if (!curwin->w_cursor.col) { - put_curr_and_l_to_X(GHAYN); - break; + return ALEF_U_H; } + } - if (p_ri) - inc_cursor(); - else + if (!p_ri) { dec_cursor(); + } - if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) - tempc = GHAYN_; - else - tempc = GHAYN; + if (gchar_cursor() == _LAM) { + chg_c_toX_orX(); + chg_l_toXor_X(); + tempc = ALEF_U_H; + } else if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) { + tempc = ALEF_U_H_; + chg_l_toXor_X(); + } else { + tempc = ALEF_U_H; + } - if (p_ri) - dec_cursor(); - else + if (!p_ri) { inc_cursor(); + } - put_curr_and_l_to_X(tempc); - break; - case _YE: - case _IE: - case _YEE: - if (!p_ri) + return tempc; + + case 'h': + if (!curwin->w_cursor.col && STRLEN(ml_get_curline())) { + if (p_ri) { + chg_c_to_X_or_X(); + } + } + + if (!p_ri) { if (!curwin->w_cursor.col) { - put_curr_and_l_to_X((tempc == _YE ? YE : - (tempc == _IE ? IE : YEE))); - break; + return ALEF; } + } - if (p_ri) - inc_cursor(); - else + if (!p_ri) { dec_cursor(); + } - if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) - tempc = (tempc == _YE ? YE_ : - (tempc == _IE ? IE_ : YEE_)); - else - tempc = (tempc == _YE ? YE : - (tempc == _IE ? IE : YEE)); + if (gchar_cursor() == _LAM) { + chg_l_toXor_X(); + del_char(FALSE); + AppendCharToRedobuff(K_BS); - if (p_ri) - dec_cursor(); - else + if (!p_ri) { + dec_cursor(); + } + + tempc = LA; + } else { + if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) { + tempc = ALEF_; + chg_l_toXor_X(); + } else { + tempc = ALEF; + } + } + + if (!p_ri) { inc_cursor(); + } - put_curr_and_l_to_X(tempc); - break; - } + return tempc; - if (!p_ri) - inc_cursor(); + case 'i': - tempc = 0; - - switch (c) { - case '0': return FARSI_0; - case '1': return FARSI_1; - case '2': return FARSI_2; - case '3': return FARSI_3; - case '4': return FARSI_4; - case '5': return FARSI_5; - case '6': return FARSI_6; - case '7': return FARSI_7; - case '8': return FARSI_8; - case '9': return FARSI_9; - case 'B': return F_PSP; - case 'E': return JAZR_N; - case 'F': return ALEF_D_H; - case 'H': return ALEF_A; - case 'I': return TASH; - case 'K': return F_LQUOT; - case 'L': return F_RQUOT; - case 'M': return HAMZE; - case 'O': return '['; - case 'P': return ']'; - case 'Q': return OO; - case 'R': return MAD_N; - case 'T': return OW; - case 'U': return MAD; - case 'W': return OW_OW; - case 'Y': return JAZR; - case '`': return F_PCN; - case '!': return F_EXCL; - case '@': return F_COMMA; - case '#': return F_DIVIDE; - case '$': return F_CURRENCY; - case '%': return F_PERCENT; - case '^': return F_MUL; - case '&': return F_BCOMMA; - case '*': return F_STAR; - case '(': return F_LPARENT; - case ')': return F_RPARENT; - case '-': return F_MINUS; - case '_': return F_UNDERLINE; - case '=': return F_EQUALS; - case '+': return F_PLUS; - case '\\': return F_BSLASH; - case '|': return F_PIPE; - case ':': return F_DCOLON; - case '"': return F_SEMICOLON; - case '.': return F_PERIOD; - case '/': return F_SLASH; - case '<': return F_LESS; - case '>': return F_GREATER; - case '?': return F_QUESTION; - case ' ': return F_BLANK; - } - break; - - case 'a': - tempc = _SHIN; - break; - case 'A': - tempc = WAW_H; - break; - case 'b': - tempc = ZAL; - break; - case 'c': - tempc = ZE; - break; - case 'C': - tempc = JE; - break; - case 'd': - tempc = _YE; - break; - case 'D': - tempc = _YEE; - break; - case 'e': - tempc = _SE; - break; - case 'f': - tempc = _BE; - break; - case 'g': - tempc = _LAM; - break; - case 'G': - if (!curwin->w_cursor.col && STRLEN(ml_get_curline())) { - - if (gchar_cursor() == _LAM) - chg_c_toX_orX (); - else if (p_ri) - chg_c_to_X_or_X (); - } + if (!curwin->w_cursor.col && STRLEN(ml_get_curline())) { + if (!p_ri && !F_is_TyE(tempc)) { + chg_c_to_X_orX_(); + } - if (!p_ri) - if (!curwin->w_cursor.col) - return ALEF_U_H; + if (p_ri) { + chg_c_to_X_or_X(); + } + } - if (!p_ri) - dec_cursor(); + if (!p_ri && !curwin->w_cursor.col) { + return _HE; + } - if (gchar_cursor() == _LAM) { - chg_c_toX_orX (); - chg_l_toXor_X (); - tempc = ALEF_U_H; - } else if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) { - tempc = ALEF_U_H_; - chg_l_toXor_X (); - } else - tempc = ALEF_U_H; + if (!p_ri) { + dec_cursor(); + } - if (!p_ri) - inc_cursor(); + if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) { + tempc = _HE_; + } else { + tempc = _HE; + } - return tempc; - case 'h': - if (!curwin->w_cursor.col && STRLEN(ml_get_curline())) { - if (p_ri) - chg_c_to_X_or_X (); + if (!p_ri) { + inc_cursor(); + } + break; - } + case 'j': + tempc = _TE; + break; - if (!p_ri) - if (!curwin->w_cursor.col) - return ALEF; + case 'J': - if (!p_ri) - dec_cursor(); + if (!curwin->w_cursor.col && STRLEN(ml_get_curline())) { + if (p_ri) { + chg_c_to_X_or_X(); + } + } - if (gchar_cursor() == _LAM) { - chg_l_toXor_X(); - del_char(FALSE); - AppendCharToRedobuff(K_BS); + if (!p_ri) { + if (!curwin->w_cursor.col) { + return TEE; + } + } - if (!p_ri) + if (!p_ri) { dec_cursor(); + } - tempc = LA; - } else { if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) { - tempc = ALEF_; - chg_l_toXor_X (); - } else - tempc = ALEF; - } + tempc = TEE_; + chg_l_toXor_X(); + } else { + tempc = TEE; + } - if (!p_ri) - inc_cursor(); + if (!p_ri) { + inc_cursor(); + } - return tempc; - case 'i': - if (!curwin->w_cursor.col && STRLEN(ml_get_curline())) { - if (!p_ri && !F_is_TyE(tempc)) - chg_c_to_X_orX_ (); - if (p_ri) - chg_c_to_X_or_X (); + return tempc; - } + case 'k': + tempc = _NOON; + break; - if (!p_ri && !curwin->w_cursor.col) - return _HE; + case 'l': + tempc = _MIM; + break; - if (!p_ri) - dec_cursor(); + case 'm': + tempc = _PE; + break; - if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) - tempc = _HE_; - else - tempc = _HE; + case 'n': + case 'N': + tempc = DAL; + break; - if (!p_ri) - inc_cursor(); - break; - case 'j': - tempc = _TE; - break; - case 'J': - if (!curwin->w_cursor.col && STRLEN(ml_get_curline())) { - if (p_ri) - chg_c_to_X_or_X (); + case 'o': + tempc = _XE; + break; - } + case 'p': + tempc = _HE_J; + break; - if (!p_ri) - if (!curwin->w_cursor.col) - return TEE; + case 'q': + tempc = _ZAD; + break; - if (!p_ri) - dec_cursor(); + case 'r': + tempc = _GHAF; + break; - if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) { - tempc = TEE_; - chg_l_toXor_X (); - } else - tempc = TEE; + case 's': + tempc = _SIN; + break; - if (!p_ri) - inc_cursor(); + case 'S': + tempc = _IE; + break; - return tempc; - case 'k': - tempc = _NOON; - break; - case 'l': - tempc = _MIM; - break; - case 'm': - tempc = _PE; - break; - case 'n': - case 'N': - tempc = DAL; - break; - case 'o': - tempc = _XE; - break; - case 'p': - tempc = _HE_J; - break; - case 'q': - tempc = _ZAD; - break; - case 'r': - tempc = _GHAF; - break; - case 's': - tempc = _SIN; - break; - case 'S': - tempc = _IE; - break; - case 't': - tempc = _FE; - break; - case 'u': - if (!curwin->w_cursor.col && STRLEN(ml_get_curline())) { - if (!p_ri && !F_is_TyE(tempc)) - chg_c_to_X_orX_ (); - if (p_ri) - chg_c_to_X_or_X (); + case 't': + tempc = _FE; + break; - } + case 'u': + if (!curwin->w_cursor.col && STRLEN(ml_get_curline())) { + if (!p_ri && !F_is_TyE(tempc)) { + chg_c_to_X_orX_(); + } - if (!p_ri && !curwin->w_cursor.col) - return _AYN; + if (p_ri) { + chg_c_to_X_or_X(); + } + } - if (!p_ri) - dec_cursor(); + if (!p_ri && !curwin->w_cursor.col) { + return _AYN; + } - if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) - tempc = _AYN_; - else - tempc = _AYN; + if (!p_ri) { + dec_cursor(); + } - if (!p_ri) - inc_cursor(); - break; - case 'v': - case 'V': - tempc = RE; - break; - case 'w': - tempc = _SAD; - break; - case 'x': - case 'X': - tempc = _TA; - break; - case 'y': - if (!curwin->w_cursor.col && STRLEN(ml_get_curline())) { - if (!p_ri && !F_is_TyE(tempc)) - chg_c_to_X_orX_ (); - if (p_ri) - chg_c_to_X_or_X (); + if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) { + tempc = _AYN_; + } else { + tempc = _AYN; + } - } + if (!p_ri) { + inc_cursor(); + } + break; - if (!p_ri && !curwin->w_cursor.col) - return _GHAYN; + case 'v': + case 'V': + tempc = RE; + break; - if (!p_ri) - dec_cursor(); + case 'w': + tempc = _SAD; + break; - if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) - tempc = _GHAYN_; - else - tempc = _GHAYN; + case 'x': + case 'X': + tempc = _TA; + break; - if (!p_ri) - inc_cursor(); + case 'y': + if (!curwin->w_cursor.col && STRLEN(ml_get_curline())) { + if (!p_ri && !F_is_TyE(tempc)) { + chg_c_to_X_orX_(); + } - break; - case 'z': - tempc = _ZA; - break; - case 'Z': - tempc = _KAF_H; - break; - case ';': - tempc = _KAF; - break; - case '\'': - tempc = _GAF; - break; - case ',': - tempc = WAW; - break; - case '[': - tempc = _JIM; - break; - case ']': - tempc = _CHE; - break; + if (p_ri) { + chg_c_to_X_or_X(); + } + } + + if (!p_ri && !curwin->w_cursor.col) { + return _GHAYN; + } + + if (!p_ri) { + dec_cursor(); + } + + if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) { + tempc = _GHAYN_; + } else { + tempc = _GHAYN; + } + + if (!p_ri) { + inc_cursor(); + } + + break; + + case 'z': + tempc = _ZA; + break; + + case 'Z': + tempc = _KAF_H; + break; + + case ';': + tempc = _KAF; + break; + + case '\'': + tempc = _GAF; + break; + + case ',': + tempc = WAW; + break; + + case '[': + tempc = _JIM; + break; + + case ']': + tempc = _CHE; + break; } if ((F_isalpha(tempc) || F_isdigit(tempc))) { - if (!curwin->w_cursor.col && STRLEN(ml_get_curline())) { - if (!p_ri && !F_is_TyE(tempc)) - chg_c_to_X_orX_ (); - if (p_ri) - chg_c_to_X_or_X (); + if (!curwin->w_cursor.col && STRLEN(ml_get_curline())) { + if (!p_ri && !F_is_TyE(tempc)) { + chg_c_to_X_orX_(); + } + + if (p_ri) { + chg_c_to_X_or_X(); + } } if (curwin->w_cursor.col) { - if (!p_ri) + if (!p_ri) { dec_cursor(); + } - if (F_is_TyE(tempc)) - chg_l_toXor_X (); - else - chg_l_to_X_orX_ (); + if (F_is_TyE(tempc)) { + chg_l_toXor_X(); + } else { + chg_l_to_X_orX_(); + } - if (!p_ri) + if (!p_ri) { inc_cursor(); + } } } - if (tempc) + + if (tempc) { return tempc; + } return c; } @@ -1385,48 +1859,94 @@ int fkmap(int c) static int toF_leading(int c) { switch (c) { - case ALEF_: return ALEF; - case ALEF_U_H_: return ALEF_U_H; - case BE: return _BE; - case PE: return _PE; - case TE: return _TE; - case SE: return _SE; - case JIM: return _JIM; - case CHE: return _CHE; - case HE_J: return _HE_J; - case XE: return _XE; - case SIN: return _SIN; - case SHIN: return _SHIN; - case SAD: return _SAD; - case ZAD: return _ZAD; - - case AYN: - case AYN_: - case _AYN_: return _AYN; - - case GHAYN: - case GHAYN_: - case _GHAYN_: return _GHAYN; - - case FE: return _FE; - case GHAF: return _GHAF; - case KAF: return _KAF; - case GAF: return _GAF; - case LAM: return _LAM; - case MIM: return _MIM; - case NOON: return _NOON; - - case _HE_: - case F_HE: return _HE; - - case YE: - case YE_: return _YE; - - case IE_: - case IE: return _IE; - - case YEE: - case YEE_: return _YEE; + case ALEF_: + return ALEF; + + case ALEF_U_H_: + return ALEF_U_H; + + case BE: + return _BE; + + case PE: + return _PE; + + case TE: + return _TE; + + case SE: + return _SE; + + case JIM: + return _JIM; + + case CHE: + return _CHE; + + case HE_J: + return _HE_J; + + case XE: + return _XE; + + case SIN: + return _SIN; + + case SHIN: + return _SHIN; + + case SAD: + return _SAD; + + case ZAD: + return _ZAD; + + case AYN: + case AYN_: + case _AYN_: + return _AYN; + + case GHAYN: + case GHAYN_: + case _GHAYN_: + return _GHAYN; + + case FE: + return _FE; + + case GHAF: + return _GHAF; + + case KAF: + return _KAF; + + case GAF: + return _GAF; + + case LAM: + return _LAM; + + case MIM: + return _MIM; + + case NOON: + return _NOON; + + case _HE_: + case F_HE: + return _HE; + + case YE: + case YE_: + return _YE; + + case IE_: + case IE: + return _IE; + + case YEE: + case YEE_: + return _YEE; } return c; } @@ -1437,50 +1957,97 @@ static int toF_leading(int c) static int toF_Rjoin(int c) { switch (c) { - case ALEF: return ALEF_; - case ALEF_U_H: return ALEF_U_H_; - case BE: return _BE; - case PE: return _PE; - case TE: return _TE; - case SE: return _SE; - case JIM: return _JIM; - case CHE: return _CHE; - case HE_J: return _HE_J; - case XE: return _XE; - case SIN: return _SIN; - case SHIN: return _SHIN; - case SAD: return _SAD; - case ZAD: return _ZAD; - - case AYN: - case AYN_: - case _AYN: return _AYN_; - - case GHAYN: - case GHAYN_: - case _GHAYN_: return _GHAYN_; - - case FE: return _FE; - case GHAF: return _GHAF; - case KAF: return _KAF; - case GAF: return _GAF; - case LAM: return _LAM; - case MIM: return _MIM; - case NOON: return _NOON; - - case _HE: - case F_HE: return _HE_; - - case YE: - case YE_: return _YE; - - case IE_: - case IE: return _IE; - - case TEE: return TEE_; - - case YEE: - case YEE_: return _YEE; + case ALEF: + return ALEF_; + + case ALEF_U_H: + return ALEF_U_H_; + + case BE: + return _BE; + + case PE: + return _PE; + + case TE: + return _TE; + + case SE: + return _SE; + + case JIM: + return _JIM; + + case CHE: + return _CHE; + + case HE_J: + return _HE_J; + + case XE: + return _XE; + + case SIN: + return _SIN; + + case SHIN: + return _SHIN; + + case SAD: + return _SAD; + + case ZAD: + return _ZAD; + + case AYN: + case AYN_: + case _AYN: + return _AYN_; + + case GHAYN: + case GHAYN_: + case _GHAYN_: + return _GHAYN_; + + case FE: + return _FE; + + case GHAF: + return _GHAF; + + case KAF: + return _KAF; + + case GAF: + return _GAF; + + case LAM: + return _LAM; + + case MIM: + return _MIM; + + case NOON: + return _NOON; + + case _HE: + case F_HE: + return _HE_; + + case YE: + case YE_: + return _YE; + + case IE_: + case IE: + return _IE; + + case TEE: + return TEE_; + + case YEE: + case YEE_: + return _YEE; } return c; } @@ -1491,68 +2058,68 @@ static int toF_Rjoin(int c) static int canF_Ljoin(int c) { switch (c) { - case _BE: - case BE: - case PE: - case _PE: - case TE: - case _TE: - case SE: - case _SE: - case JIM: - case _JIM: - case CHE: - case _CHE: - case HE_J: - case _HE_J: - case XE: - case _XE: - case SIN: - case _SIN: - case SHIN: - case _SHIN: - case SAD: - case _SAD: - case ZAD: - case _ZAD: - case _TA: - case _ZA: - case AYN: - case _AYN: - case _AYN_: - case AYN_: - case GHAYN: - case GHAYN_: - case _GHAYN_: - case _GHAYN: - case FE: - case _FE: - case GHAF: - case _GHAF: - case _KAF_H: - case KAF: - case _KAF: - case GAF: - case _GAF: - case LAM: - case _LAM: - case MIM: - case _MIM: - case NOON: - case _NOON: - case IE: - case _IE: - case IE_: - case YE: - case _YE: - case YE_: - case YEE: - case _YEE: - case YEE_: - case F_HE: - case _HE: - case _HE_: - return TRUE; + case _BE: + case BE: + case PE: + case _PE: + case TE: + case _TE: + case SE: + case _SE: + case JIM: + case _JIM: + case CHE: + case _CHE: + case HE_J: + case _HE_J: + case XE: + case _XE: + case SIN: + case _SIN: + case SHIN: + case _SHIN: + case SAD: + case _SAD: + case ZAD: + case _ZAD: + case _TA: + case _ZA: + case AYN: + case _AYN: + case _AYN_: + case AYN_: + case GHAYN: + case GHAYN_: + case _GHAYN_: + case _GHAYN: + case FE: + case _FE: + case GHAF: + case _GHAF: + case _KAF_H: + case KAF: + case _KAF: + case GAF: + case _GAF: + case LAM: + case _LAM: + case MIM: + case _MIM: + case NOON: + case _NOON: + case IE: + case _IE: + case IE_: + case YE: + case _YE: + case YE_: + case YEE: + case _YEE: + case YEE_: + case F_HE: + case _HE: + case _HE_: + return TRUE; } return FALSE; } @@ -1563,24 +2130,23 @@ static int canF_Ljoin(int c) 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; + 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); - } /* @@ -1589,20 +2155,20 @@ static int canF_Rjoin(int c) static int F_isterm(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 WAW: - case WAW_H: - case TEE: - case TEE_: - return TRUE; + case ALEF: + case ALEF_: + case ALEF_U_H: + case ALEF_U_H_: + case DAL: + case ZAL: + case RE: + case JE: + case ZE: + case WAW: + case WAW_H: + case TEE: + case TEE_: + return TRUE; } return FALSE; @@ -1613,72 +2179,101 @@ static int F_isterm(int c) */ static int toF_ending(int c) { - switch (c) { - case _BE: - return BE; - case _PE: - return PE; - case _TE: - return TE; - case _SE: - return SE; - case _JIM: - return JIM; - case _CHE: - return CHE; - case _HE_J: - return HE_J; - case _XE: - return XE; - case _SIN: - return SIN; - case _SHIN: - return SHIN; - case _SAD: - return SAD; - case _ZAD: - return ZAD; - case _AYN: - return AYN; - case _AYN_: - return AYN_; - case _GHAYN: - return GHAYN; - case _GHAYN_: - return GHAYN_; - case _FE: - return FE; - case _GHAF: - return GHAF; - case _KAF_H: - case _KAF: - return KAF; - case _GAF: - return GAF; - case _LAM: - return LAM; - case _MIM: - return MIM; - case _NOON: - return NOON; - case _YE: - return YE_; - case YE_: - return YE; - case _YEE: - return YEE_; - case YEE_: - return YEE; - case TEE: - return TEE_; - case _IE: - return IE_; - case IE_: - return IE; - case _HE: - case _HE_: - return F_HE; + case _BE: + return BE; + + case _PE: + return PE; + + case _TE: + return TE; + + case _SE: + return SE; + + case _JIM: + return JIM; + + case _CHE: + return CHE; + + case _HE_J: + return HE_J; + + case _XE: + return XE; + + case _SIN: + return SIN; + + case _SHIN: + return SHIN; + + case _SAD: + return SAD; + + case _ZAD: + return ZAD; + + case _AYN: + return AYN; + + case _AYN_: + return AYN_; + + case _GHAYN: + return GHAYN; + + case _GHAYN_: + return GHAYN_; + + case _FE: + return FE; + + case _GHAF: + return GHAF; + + case _KAF_H: + case _KAF: + return KAF; + + case _GAF: + return GAF; + + case _LAM: + return LAM; + + case _MIM: + return MIM; + + case _NOON: + return NOON; + + case _YE: + return YE_; + + case YE_: + return YE; + + case _YEE: + return YEE_; + + case YEE_: + return YEE; + + case TEE: + return TEE_; + + case _IE: + return IE_; + + case IE_: + return IE; + + case _HE: + case _HE_: + return F_HE; } return c; } @@ -1686,30 +2281,33 @@ static int toF_ending(int c) /* ** Convert the Farsi 3342 standard into Farsi VIM. */ -void conv_to_pvim(void) { - char_u *ptr; +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])) { + 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])) + 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 + + if (!F_isalpha(ptr[i]) || !canF_Rjoin(ptr[i])) { + ptr[i - 1] = toF_ending(ptr[i - 1]); + } + } else { ptr[i] = toF_TyA(ptr[i]); + } } } @@ -1728,8 +2326,9 @@ void conv_to_pvim(void) { /* * Convert the Farsi VIM into Farsi 3342 standard. */ -void conv_to_pstd(void) { - char_u *ptr; +void conv_to_pstd(void) +{ + char_u *ptr; int lnum, llen, i; /* @@ -1737,15 +2336,11 @@ void conv_to_pstd(void) { */ do_cmdline_cmd((char_u *)"%s/\232/\202\231/g"); - 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; i++) { + for (i = 0; i < llen; i++) { ptr[i] = toF_TyA(ptr[i]); - } } @@ -1759,12 +2354,11 @@ void conv_to_pstd(void) { */ static void lrswapbuf(char_u *buf, int len) { - char_u *s, *e; + char_u *s, *e; int c; s = buf; e = buf + len - 1; - while (e > s) { c = *s; *s = *e; @@ -1777,32 +2371,34 @@ static void lrswapbuf(char_u *buf, int len) /* * swap all the characters in reverse direction */ -char_u *lrswap(char_u *ibuf) +char_u* lrswap(char_u *ibuf) { - if (ibuf != NULL && *ibuf != NUL) + if ((ibuf != NULL) && (*ibuf != NUL)) { lrswapbuf(ibuf, (int)STRLEN(ibuf)); + } return ibuf; } /* * swap all the Farsi characters in reverse direction */ -char_u *lrFswap(char_u *cmdbuf, int len) +char_u* lrFswap(char_u *cmdbuf, int len) { int i, cnt; - - if (cmdbuf == NULL) + if (cmdbuf == NULL) { return cmdbuf; + } - if (len == 0 && (len = (int)STRLEN(cmdbuf)) == 0) + if ((len == 0) && ((len = (int)STRLEN(cmdbuf)) == 0)) { return cmdbuf; + } for (i = 0; i < len; i++) { - for (cnt = 0; i + cnt < len - && (F_isalpha(cmdbuf[i + cnt]) - || F_isdigit(cmdbuf[i + cnt]) - || cmdbuf[i + cnt] == ' '); ++cnt) - ; + for (cnt = 0; i + cnt < len && + (F_isalpha(cmdbuf[i + cnt]) || + F_isdigit(cmdbuf[i + cnt]) || + cmdbuf[i + cnt] == ' '); ++cnt) { + } lrswapbuf(cmdbuf + i, cnt); i += cnt; @@ -1815,38 +2411,40 @@ char_u *lrFswap(char_u *cmdbuf, int len) * accordingly. * TODO: handle different separator characters. Use skip_regexp(). */ -char_u *lrF_sub(char_u *ibuf) +char_u* lrF_sub(char_u *ibuf) { - char_u *p, *ep; + char_u *p, *ep; int i, cnt; p = ibuf; /* Find the boundary of the search path */ - while (((p = vim_strchr(p + 1, '/')) != NULL) && p[-1] == '\\') - ; + while (((p = vim_strchr(p + 1, '/')) != NULL) && p[-1] == '\\') { + } - if (p == NULL) + if (p == NULL) { return ibuf; + } /* Reverse the Farsi characters in the search path. */ - lrFswap(ibuf, (int)(p-ibuf)); + lrFswap(ibuf, (int)(p - ibuf)); /* Now find the boundary of the substitute section */ - if ((ep = (char_u *)strrchr((char *)++p, '/')) != NULL) + if ((ep = (char_u *)strrchr((char *)++p, '/')) != NULL) { cnt = (int)(ep - p); - else + } else { cnt = (int)STRLEN(p); + } /* Reverse the characters in the substitute section and take care of '\' */ - for (i = 0; i < cnt-1; i++) + for (i = 0; i < cnt - 1; i++) { if (p[i] == '\\') { - p[i] = p[i+1]; + p[i] = p[i + 1]; p[++i] = '\\'; } + } lrswapbuf(p, cnt); - return ibuf; } @@ -1858,246 +2456,426 @@ int cmdl_fkmap(int c) int tempc; switch (c) { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - case '`': - case ' ': - case '.': - case '!': - case '"': - case '$': - case '%': - case '^': - case '&': - case '/': - case '(': - case ')': - case '=': - case '\\': - case '?': - case '+': - case '-': - case '_': - case '*': - case ':': - case '#': - case '~': - case '@': - case '<': - case '>': - case '{': - case '}': - case '|': - case 'B': - case 'E': - case 'F': - case 'H': - case 'I': - case 'K': - case 'L': - case 'M': - case 'O': - case 'P': - case 'Q': - case 'R': - case 'T': - case 'U': - case 'W': - case 'Y': - case NL: - case TAB: - - switch ((tempc = cmd_gchar(AT_CURSOR))) { - case _BE: - case _PE: - case _TE: - case _SE: - case _JIM: - case _CHE: - case _HE_J: - case _XE: - case _SIN: - case _SHIN: - case _SAD: - case _ZAD: - case _AYN: - case _GHAYN: - case _FE: - case _GHAF: - case _KAF: - case _GAF: - case _LAM: - case _MIM: - case _NOON: - case _HE: - case _HE_: - cmd_pchar(toF_TyA(tempc), AT_CURSOR); - break; - case _AYN_: - cmd_pchar(AYN_, AT_CURSOR); - break; - case _GHAYN_: - cmd_pchar(GHAYN_, AT_CURSOR); - break; - case _IE: - if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR+1)) - cmd_pchar(IE_, AT_CURSOR); - else - cmd_pchar(IE, AT_CURSOR); - break; - case _YEE: - if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR+1)) - cmd_pchar(YEE_, AT_CURSOR); - else - cmd_pchar(YEE, AT_CURSOR); + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '`': + case ' ': + case '.': + case '!': + case '"': + case '$': + case '%': + case '^': + case '&': + case '/': + case '(': + case ')': + case '=': + case '\\': + case '?': + case '+': + case '-': + case '_': + case '*': + case ':': + case '#': + case '~': + case '@': + case '<': + case '>': + case '{': + case '}': + case '|': + case 'B': + case 'E': + case 'F': + case 'H': + case 'I': + case 'K': + case 'L': + case 'M': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'T': + case 'U': + case 'W': + case 'Y': + case NL: + case TAB: + switch ((tempc = cmd_gchar(AT_CURSOR))) { + case _BE: + case _PE: + case _TE: + case _SE: + case _JIM: + case _CHE: + case _HE_J: + case _XE: + case _SIN: + case _SHIN: + case _SAD: + case _ZAD: + case _AYN: + case _GHAYN: + case _FE: + case _GHAF: + case _KAF: + case _GAF: + case _LAM: + case _MIM: + case _NOON: + case _HE: + case _HE_: + cmd_pchar(toF_TyA(tempc), AT_CURSOR); + break; + + case _AYN_: + cmd_pchar(AYN_, AT_CURSOR); + break; + + case _GHAYN_: + cmd_pchar(GHAYN_, AT_CURSOR); + break; + + case _IE: + if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR + 1)) { + cmd_pchar(IE_, AT_CURSOR); + } else { + cmd_pchar(IE, AT_CURSOR); + } + break; + + case _YEE: + if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR + 1)) { + cmd_pchar(YEE_, AT_CURSOR); + } else { + cmd_pchar(YEE, AT_CURSOR); + } + break; + + case _YE: + if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR + 1)) { + cmd_pchar(YE_, AT_CURSOR); + } else { + cmd_pchar(YE, AT_CURSOR); + } + } + + switch (c) { + case '0': + return FARSI_0; + + case '1': + return FARSI_1; + + case '2': + return FARSI_2; + + case '3': + return FARSI_3; + + case '4': + return FARSI_4; + + case '5': + return FARSI_5; + + case '6': + return FARSI_6; + + case '7': + return FARSI_7; + + case '8': + return FARSI_8; + + case '9': + return FARSI_9; + + case 'B': + return F_PSP; + + case 'E': + return JAZR_N; + + case 'F': + return ALEF_D_H; + + case 'H': + return ALEF_A; + + case 'I': + return TASH; + + case 'K': + return F_LQUOT; + + case 'L': + return F_RQUOT; + + case 'M': + return HAMZE; + + case 'O': + return '['; + + case 'P': + return ']'; + + case 'Q': + return OO; + + case 'R': + return MAD_N; + + case 'T': + return OW; + + case 'U': + return MAD; + + case 'W': + return OW_OW; + + case 'Y': + return JAZR; + + case '`': + return F_PCN; + + case '!': + return F_EXCL; + + case '@': + return F_COMMA; + + case '#': + return F_DIVIDE; + + case '$': + return F_CURRENCY; + + case '%': + return F_PERCENT; + + case '^': + return F_MUL; + + case '&': + return F_BCOMMA; + + case '*': + return F_STAR; + + case '(': + return F_LPARENT; + + case ')': + return F_RPARENT; + + case '-': + return F_MINUS; + + case '_': + return F_UNDERLINE; + + case '=': + return F_EQUALS; + + case '+': + return F_PLUS; + + case '\\': + return F_BSLASH; + + case '|': + return F_PIPE; + + case ':': + return F_DCOLON; + + case '"': + return F_SEMICOLON; + + case '.': + return F_PERIOD; + + case '/': + return F_SLASH; + + case '<': + return F_LESS; + + case '>': + return F_GREATER; + + case '?': + return F_QUESTION; + + case ' ': + return F_BLANK; + } break; - case _YE: - if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR+1)) - cmd_pchar(YE_, AT_CURSOR); - else - cmd_pchar(YE, AT_CURSOR); - } - switch (c) { - case '0': return FARSI_0; - case '1': return FARSI_1; - case '2': return FARSI_2; - case '3': return FARSI_3; - case '4': return FARSI_4; - case '5': return FARSI_5; - case '6': return FARSI_6; - case '7': return FARSI_7; - case '8': return FARSI_8; - case '9': return FARSI_9; - case 'B': return F_PSP; - case 'E': return JAZR_N; - case 'F': return ALEF_D_H; - case 'H': return ALEF_A; - case 'I': return TASH; - case 'K': return F_LQUOT; - case 'L': return F_RQUOT; - case 'M': return HAMZE; - case 'O': return '['; - case 'P': return ']'; - case 'Q': return OO; - case 'R': return MAD_N; - case 'T': return OW; - case 'U': return MAD; - case 'W': return OW_OW; - case 'Y': return JAZR; - case '`': return F_PCN; - case '!': return F_EXCL; - case '@': return F_COMMA; - case '#': return F_DIVIDE; - case '$': return F_CURRENCY; - case '%': return F_PERCENT; - case '^': return F_MUL; - case '&': return F_BCOMMA; - case '*': return F_STAR; - case '(': return F_LPARENT; - case ')': return F_RPARENT; - case '-': return F_MINUS; - case '_': return F_UNDERLINE; - case '=': return F_EQUALS; - case '+': return F_PLUS; - case '\\': return F_BSLASH; - case '|': return F_PIPE; - case ':': return F_DCOLON; - case '"': return F_SEMICOLON; - case '.': return F_PERIOD; - case '/': return F_SLASH; - case '<': return F_LESS; - case '>': return F_GREATER; - case '?': return F_QUESTION; - case ' ': return F_BLANK; - } + case 'a': + return _SHIN; - break; - - case 'a': return _SHIN; - case 'A': return WAW_H; - case 'b': return ZAL; - case 'c': return ZE; - case 'C': return JE; - case 'd': return _YE; - case 'D': return _YEE; - case 'e': return _SE; - case 'f': return _BE; - case 'g': return _LAM; - case 'G': - if (cmd_gchar(AT_CURSOR) == _LAM ) { - cmd_pchar(LAM, AT_CURSOR); - return ALEF_U_H; - } + case 'A': + return WAW_H; - if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR)) - return ALEF_U_H_; - else - return ALEF_U_H; - case 'h': - if (cmd_gchar(AT_CURSOR) == _LAM ) { - cmd_pchar(LA, AT_CURSOR); - redrawcmdline(); - return K_IGNORE; - } + case 'b': + return ZAL; - if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR)) - return ALEF_; - else - return ALEF; - case 'i': - if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR)) - return _HE_; - else - return _HE; - case 'j': return _TE; - case 'J': - if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR)) - return TEE_; - else - return TEE; - case 'k': return _NOON; - case 'l': return _MIM; - case 'm': return _PE; - case 'n': - case 'N': return DAL; - case 'o': return _XE; - case 'p': return _HE_J; - case 'q': return _ZAD; - case 'r': return _GHAF; - case 's': return _SIN; - case 'S': return _IE; - case 't': return _FE; - case 'u': - if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR)) - return _AYN_; - else - return _AYN; - case 'v': - case 'V': return RE; - case 'w': return _SAD; - case 'x': - case 'X': return _TA; - case 'y': - if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR)) - return _GHAYN_; - else - return _GHAYN; - case 'z': - case 'Z': return _ZA; - case ';': return _KAF; - case '\'': return _GAF; - case ',': return WAW; - case '[': return _JIM; - case ']': return _CHE; + case 'c': + return ZE; + + case 'C': + return JE; + + case 'd': + return _YE; + + case 'D': + return _YEE; + + case 'e': + return _SE; + + case 'f': + return _BE; + + case 'g': + return _LAM; + + case 'G': + if (cmd_gchar(AT_CURSOR) == _LAM) { + cmd_pchar(LAM, AT_CURSOR); + return ALEF_U_H; + } + + if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR)) { + return ALEF_U_H_; + } else { + return ALEF_U_H; + } + + case 'h': + if (cmd_gchar(AT_CURSOR) == _LAM) { + cmd_pchar(LA, AT_CURSOR); + redrawcmdline(); + return K_IGNORE; + } + + if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR)) { + return ALEF_; + } else { + return ALEF; + } + + case 'i': + if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR)) { + return _HE_; + } else { + return _HE; + } + + case 'j': + return _TE; + + case 'J': + if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR)) { + return TEE_; + } else { + return TEE; + } + + case 'k': + return _NOON; + + case 'l': + return _MIM; + + case 'm': + return _PE; + + case 'n': + case 'N': + return DAL; + + case 'o': + return _XE; + + case 'p': + return _HE_J; + + case 'q': + return _ZAD; + + case 'r': + return _GHAF; + + case 's': + return _SIN; + + case 'S': + return _IE; + + case 't': + return _FE; + + case 'u': + if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR)) { + return _AYN_; + } else { + return _AYN; + } + + case 'v': + case 'V': + return RE; + + case 'w': + return _SAD; + + case 'x': + case 'X': + return _TA; + + case 'y': + if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR)) { + return _GHAYN_; + } else { + return _GHAYN; + } + + case 'z': + case 'Z': + return _ZA; + + case ';': + return _KAF; + + case '\'': + return _GAF; + + case ',': + return WAW; + + case '[': + return _JIM; + + case ']': + return _CHE; } return c; @@ -2108,9 +2886,9 @@ int cmdl_fkmap(int c) */ int F_isalpha(int c) { - return ( c >= TEE_ && c <= _YE) - || (c >= ALEF_A && c <= YE) - || (c >= _IE && c <= YE_); + return (c >= TEE_ && c <= _YE) || + (c >= ALEF_A && c <= YE) || + (c >= _IE && c <= YE_); } /* @@ -2139,7 +2917,7 @@ void farsi_fkey(cmdarg_T *cap) p_fkmap = 0; do_cmdline_cmd((char_u *)"set norl"); MSG(""); - } else { + } else { p_fkmap = 1; do_cmdline_cmd((char_u *)"set rl"); MSG(""); @@ -2152,10 +2930,11 @@ void farsi_fkey(cmdarg_T *cap) if (c == K_F9) { if (p_altkeymap && curwin->w_p_rl) { curwin->w_farsi = curwin->w_farsi ^ W_CONV; - if (curwin->w_farsi & W_CONV) + if (curwin->w_farsi & W_CONV) { conv_to_pvim(); - else + } else { conv_to_pstd(); + } } } } |