diff options
| author | David Z. Chen <david.z.chen@outlook.com> | 2014-03-06 15:10:19 -0800 | 
|---|---|---|
| committer | Thiago de Arruda <tpadilha84@gmail.com> | 2014-03-07 11:06:02 -0300 | 
| commit | 0412ee7440da718a27425fa1559855f3d363549f (patch) | |
| tree | b68a539c983731b0c79b4721b4a876af830dede5 /src | |
| parent | 998541eb043b3effe28a238dd583fe845ce1ba1d (diff) | |
| download | rneovim-0412ee7440da718a27425fa1559855f3d363549f.tar.gz rneovim-0412ee7440da718a27425fa1559855f3d363549f.tar.bz2 rneovim-0412ee7440da718a27425fa1559855f3d363549f.zip | |
Issue #311 - Clean up arabic.c, arabic.h, farsi.c, farsi.h. Tweaks to uncrustify.cfg.
Diffstat (limited to 'src')
| -rw-r--r-- | src/arabic.c | 1800 | ||||
| -rw-r--r-- | src/arabic.h | 5 | ||||
| -rw-r--r-- | src/farsi.c | 3815 | ||||
| -rw-r--r-- | src/farsi.h | 65 | 
4 files changed, 3332 insertions, 2353 deletions
| diff --git a/src/arabic.c b/src/arabic.c index 8904ed7108..2bff0c2866 100644 --- a/src/arabic.c +++ b/src/arabic.c @@ -40,157 +40,153 @@ static int A_is_ok(int c);  static int A_is_valid(int c);  static int A_is_special(int c); -  /*   * Returns True if c is an ISO-8859-6 shaped ARABIC letter (user entered)   */  static int A_is_a(int cur_c)  {    switch (cur_c) { -  case a_HAMZA: -  case a_ALEF_MADDA: -  case a_ALEF_HAMZA_ABOVE: -  case a_WAW_HAMZA: -  case a_ALEF_HAMZA_BELOW: -  case a_YEH_HAMZA: -  case a_ALEF: -  case a_BEH: -  case a_TEH_MARBUTA: -  case a_TEH: -  case a_THEH: -  case a_JEEM: -  case a_HAH: -  case a_KHAH: -  case a_DAL: -  case a_THAL: -  case a_REH: -  case a_ZAIN: -  case a_SEEN: -  case a_SHEEN: -  case a_SAD: -  case a_DAD: -  case a_TAH: -  case a_ZAH: -  case a_AIN: -  case a_GHAIN: -  case a_TATWEEL: -  case a_FEH: -  case a_QAF: -  case a_KAF: -  case a_LAM: -  case a_MEEM: -  case a_NOON: -  case a_HEH: -  case a_WAW: -  case a_ALEF_MAKSURA: -  case a_YEH: -    return TRUE; +    case a_HAMZA: +    case a_ALEF_MADDA: +    case a_ALEF_HAMZA_ABOVE: +    case a_WAW_HAMZA: +    case a_ALEF_HAMZA_BELOW: +    case a_YEH_HAMZA: +    case a_ALEF: +    case a_BEH: +    case a_TEH_MARBUTA: +    case a_TEH: +    case a_THEH: +    case a_JEEM: +    case a_HAH: +    case a_KHAH: +    case a_DAL: +    case a_THAL: +    case a_REH: +    case a_ZAIN: +    case a_SEEN: +    case a_SHEEN: +    case a_SAD: +    case a_DAD: +    case a_TAH: +    case a_ZAH: +    case a_AIN: +    case a_GHAIN: +    case a_TATWEEL: +    case a_FEH: +    case a_QAF: +    case a_KAF: +    case a_LAM: +    case a_MEEM: +    case a_NOON: +    case a_HEH: +    case a_WAW: +    case a_ALEF_MAKSURA: +    case a_YEH: +      return TRUE;    }    return FALSE;  } -  /*   * Returns True if c is an Isolated Form-B ARABIC letter   */  static int A_is_s(int cur_c)  {    switch (cur_c) { -  case a_s_HAMZA: -  case a_s_ALEF_MADDA: -  case a_s_ALEF_HAMZA_ABOVE: -  case a_s_WAW_HAMZA: -  case a_s_ALEF_HAMZA_BELOW: -  case a_s_YEH_HAMZA: -  case a_s_ALEF: -  case a_s_BEH: -  case a_s_TEH_MARBUTA: -  case a_s_TEH: -  case a_s_THEH: -  case a_s_JEEM: -  case a_s_HAH: -  case a_s_KHAH: -  case a_s_DAL: -  case a_s_THAL: -  case a_s_REH: -  case a_s_ZAIN: -  case a_s_SEEN: -  case a_s_SHEEN: -  case a_s_SAD: -  case a_s_DAD: -  case a_s_TAH: -  case a_s_ZAH: -  case a_s_AIN: -  case a_s_GHAIN: -  case a_s_FEH: -  case a_s_QAF: -  case a_s_KAF: -  case a_s_LAM: -  case a_s_MEEM: -  case a_s_NOON: -  case a_s_HEH: -  case a_s_WAW: -  case a_s_ALEF_MAKSURA: -  case a_s_YEH: -    return TRUE; +    case a_s_HAMZA: +    case a_s_ALEF_MADDA: +    case a_s_ALEF_HAMZA_ABOVE: +    case a_s_WAW_HAMZA: +    case a_s_ALEF_HAMZA_BELOW: +    case a_s_YEH_HAMZA: +    case a_s_ALEF: +    case a_s_BEH: +    case a_s_TEH_MARBUTA: +    case a_s_TEH: +    case a_s_THEH: +    case a_s_JEEM: +    case a_s_HAH: +    case a_s_KHAH: +    case a_s_DAL: +    case a_s_THAL: +    case a_s_REH: +    case a_s_ZAIN: +    case a_s_SEEN: +    case a_s_SHEEN: +    case a_s_SAD: +    case a_s_DAD: +    case a_s_TAH: +    case a_s_ZAH: +    case a_s_AIN: +    case a_s_GHAIN: +    case a_s_FEH: +    case a_s_QAF: +    case a_s_KAF: +    case a_s_LAM: +    case a_s_MEEM: +    case a_s_NOON: +    case a_s_HEH: +    case a_s_WAW: +    case a_s_ALEF_MAKSURA: +    case a_s_YEH: +      return TRUE;    }    return FALSE;  } -  /*   * Returns True if c is a Final shape of an ARABIC letter   */  static int A_is_f(int cur_c)  {    switch (cur_c) { -  case a_f_ALEF_MADDA: -  case a_f_ALEF_HAMZA_ABOVE: -  case a_f_WAW_HAMZA: -  case a_f_ALEF_HAMZA_BELOW: -  case a_f_YEH_HAMZA: -  case a_f_ALEF: -  case a_f_BEH: -  case a_f_TEH_MARBUTA: -  case a_f_TEH: -  case a_f_THEH: -  case a_f_JEEM: -  case a_f_HAH: -  case a_f_KHAH: -  case a_f_DAL: -  case a_f_THAL: -  case a_f_REH: -  case a_f_ZAIN: -  case a_f_SEEN: -  case a_f_SHEEN: -  case a_f_SAD: -  case a_f_DAD: -  case a_f_TAH: -  case a_f_ZAH: -  case a_f_AIN: -  case a_f_GHAIN: -  case a_f_FEH: -  case a_f_QAF: -  case a_f_KAF: -  case a_f_LAM: -  case a_f_MEEM: -  case a_f_NOON: -  case a_f_HEH: -  case a_f_WAW: -  case a_f_ALEF_MAKSURA: -  case a_f_YEH: -  case a_f_LAM_ALEF_MADDA_ABOVE: -  case a_f_LAM_ALEF_HAMZA_ABOVE: -  case a_f_LAM_ALEF_HAMZA_BELOW: -  case a_f_LAM_ALEF: -    return TRUE; +    case a_f_ALEF_MADDA: +    case a_f_ALEF_HAMZA_ABOVE: +    case a_f_WAW_HAMZA: +    case a_f_ALEF_HAMZA_BELOW: +    case a_f_YEH_HAMZA: +    case a_f_ALEF: +    case a_f_BEH: +    case a_f_TEH_MARBUTA: +    case a_f_TEH: +    case a_f_THEH: +    case a_f_JEEM: +    case a_f_HAH: +    case a_f_KHAH: +    case a_f_DAL: +    case a_f_THAL: +    case a_f_REH: +    case a_f_ZAIN: +    case a_f_SEEN: +    case a_f_SHEEN: +    case a_f_SAD: +    case a_f_DAD: +    case a_f_TAH: +    case a_f_ZAH: +    case a_f_AIN: +    case a_f_GHAIN: +    case a_f_FEH: +    case a_f_QAF: +    case a_f_KAF: +    case a_f_LAM: +    case a_f_MEEM: +    case a_f_NOON: +    case a_f_HEH: +    case a_f_WAW: +    case a_f_ALEF_MAKSURA: +    case a_f_YEH: +    case a_f_LAM_ALEF_MADDA_ABOVE: +    case a_f_LAM_ALEF_HAMZA_ABOVE: +    case a_f_LAM_ALEF_HAMZA_BELOW: +    case a_f_LAM_ALEF: +      return TRUE;    }    return FALSE;  } -  /*   * Change shape - from ISO-8859-6/Isolated to Form-B Isolated   */ @@ -199,125 +195,161 @@ static int chg_c_a2s(int cur_c)    int tempc;    switch (cur_c) { -  case a_HAMZA: -    tempc = a_s_HAMZA; -    break; -  case a_ALEF_MADDA: -    tempc = a_s_ALEF_MADDA; -    break; -  case a_ALEF_HAMZA_ABOVE: -    tempc = a_s_ALEF_HAMZA_ABOVE; -    break; -  case a_WAW_HAMZA: -    tempc = a_s_WAW_HAMZA; -    break; -  case a_ALEF_HAMZA_BELOW: -    tempc = a_s_ALEF_HAMZA_BELOW; -    break; -  case a_YEH_HAMZA: -    tempc = a_s_YEH_HAMZA; -    break; -  case a_ALEF: -    tempc = a_s_ALEF; -    break; -  case a_TEH_MARBUTA: -    tempc = a_s_TEH_MARBUTA; -    break; -  case a_DAL: -    tempc = a_s_DAL; -    break; -  case a_THAL: -    tempc = a_s_THAL; -    break; -  case a_REH: -    tempc = a_s_REH; -    break; -  case a_ZAIN: -    tempc = a_s_ZAIN; -    break; -  case a_TATWEEL:                       /* exceptions */ -    tempc = cur_c; -    break; -  case a_WAW: -    tempc = a_s_WAW; -    break; -  case a_ALEF_MAKSURA: -    tempc = a_s_ALEF_MAKSURA; -    break; -  case a_BEH: -    tempc = a_s_BEH; -    break; -  case a_TEH: -    tempc = a_s_TEH; -    break; -  case a_THEH: -    tempc = a_s_THEH; -    break; -  case a_JEEM: -    tempc = a_s_JEEM; -    break; -  case a_HAH: -    tempc = a_s_HAH; -    break; -  case a_KHAH: -    tempc = a_s_KHAH; -    break; -  case a_SEEN: -    tempc = a_s_SEEN; -    break; -  case a_SHEEN: -    tempc = a_s_SHEEN; -    break; -  case a_SAD: -    tempc = a_s_SAD; -    break; -  case a_DAD: -    tempc = a_s_DAD; -    break; -  case a_TAH: -    tempc = a_s_TAH; -    break; -  case a_ZAH: -    tempc = a_s_ZAH; -    break; -  case a_AIN: -    tempc = a_s_AIN; -    break; -  case a_GHAIN: -    tempc = a_s_GHAIN; -    break; -  case a_FEH: -    tempc = a_s_FEH; -    break; -  case a_QAF: -    tempc = a_s_QAF; -    break; -  case a_KAF: -    tempc = a_s_KAF; -    break; -  case a_LAM: -    tempc = a_s_LAM; -    break; -  case a_MEEM: -    tempc = a_s_MEEM; -    break; -  case a_NOON: -    tempc = a_s_NOON; -    break; -  case a_HEH: -    tempc = a_s_HEH; -    break; -  case a_YEH: -    tempc = a_s_YEH; -    break; -  default: -    tempc = 0; +    case a_HAMZA: +      tempc = a_s_HAMZA; +      break; + +    case a_ALEF_MADDA: +      tempc = a_s_ALEF_MADDA; +      break; + +    case a_ALEF_HAMZA_ABOVE: +      tempc = a_s_ALEF_HAMZA_ABOVE; +      break; + +    case a_WAW_HAMZA: +      tempc = a_s_WAW_HAMZA; +      break; + +    case a_ALEF_HAMZA_BELOW: +      tempc = a_s_ALEF_HAMZA_BELOW; +      break; + +    case a_YEH_HAMZA: +      tempc = a_s_YEH_HAMZA; +      break; + +    case a_ALEF: +      tempc = a_s_ALEF; +      break; + +    case a_TEH_MARBUTA: +      tempc = a_s_TEH_MARBUTA; +      break; + +    case a_DAL: +      tempc = a_s_DAL; +      break; + +    case a_THAL: +      tempc = a_s_THAL; +      break; + +    case a_REH: +      tempc = a_s_REH; +      break; + +    case a_ZAIN: +      tempc = a_s_ZAIN; +      break; + +    case a_TATWEEL: /* exceptions */ +      tempc = cur_c; +      break; + +    case a_WAW: +      tempc = a_s_WAW; +      break; + +    case a_ALEF_MAKSURA: +      tempc = a_s_ALEF_MAKSURA; +      break; + +    case a_BEH: +      tempc = a_s_BEH; +      break; + +    case a_TEH: +      tempc = a_s_TEH; +      break; + +    case a_THEH: +      tempc = a_s_THEH; +      break; + +    case a_JEEM: +      tempc = a_s_JEEM; +      break; + +    case a_HAH: +      tempc = a_s_HAH; +      break; + +    case a_KHAH: +      tempc = a_s_KHAH; +      break; + +    case a_SEEN: +      tempc = a_s_SEEN; +      break; + +    case a_SHEEN: +      tempc = a_s_SHEEN; +      break; + +    case a_SAD: +      tempc = a_s_SAD; +      break; + +    case a_DAD: +      tempc = a_s_DAD; +      break; + +    case a_TAH: +      tempc = a_s_TAH; +      break; + +    case a_ZAH: +      tempc = a_s_ZAH; +      break; + +    case a_AIN: +      tempc = a_s_AIN; +      break; + +    case a_GHAIN: +      tempc = a_s_GHAIN; +      break; + +    case a_FEH: +      tempc = a_s_FEH; +      break; + +    case a_QAF: +      tempc = a_s_QAF; +      break; + +    case a_KAF: +      tempc = a_s_KAF; +      break; + +    case a_LAM: +      tempc = a_s_LAM; +      break; + +    case a_MEEM: +      tempc = a_s_MEEM; +      break; + +    case a_NOON: +      tempc = a_s_NOON; +      break; + +    case a_HEH: +      tempc = a_s_HEH; +      break; + +    case a_YEH: +      tempc = a_s_YEH; +      break; + +    default: +      tempc = 0;    }    return tempc;  } -  /*   * Change shape - from ISO-8859-6/Isolated to Initial   */ @@ -326,125 +358,161 @@ static int chg_c_a2i(int cur_c)    int tempc;    switch (cur_c) { -  case a_YEH_HAMZA: -    tempc = a_i_YEH_HAMZA; -    break; -  case a_HAMZA:                         /* exceptions */ -    tempc = a_s_HAMZA; -    break; -  case a_ALEF_MADDA:                    /* exceptions */ -    tempc = a_s_ALEF_MADDA; -    break; -  case a_ALEF_HAMZA_ABOVE:              /* exceptions */ -    tempc = a_s_ALEF_HAMZA_ABOVE; -    break; -  case a_WAW_HAMZA:                     /* exceptions */ -    tempc = a_s_WAW_HAMZA; -    break; -  case a_ALEF_HAMZA_BELOW:              /* exceptions */ -    tempc = a_s_ALEF_HAMZA_BELOW; -    break; -  case a_ALEF:                          /* exceptions */ -    tempc = a_s_ALEF; -    break; -  case a_TEH_MARBUTA:                   /* exceptions */ -    tempc = a_s_TEH_MARBUTA; -    break; -  case a_DAL:                           /* exceptions */ -    tempc = a_s_DAL; -    break; -  case a_THAL:                          /* exceptions */ -    tempc = a_s_THAL; -    break; -  case a_REH:                           /* exceptions */ -    tempc = a_s_REH; -    break; -  case a_ZAIN:                          /* exceptions */ -    tempc = a_s_ZAIN; -    break; -  case a_TATWEEL:                       /* exceptions */ -    tempc = cur_c; -    break; -  case a_WAW:                           /* exceptions */ -    tempc = a_s_WAW; -    break; -  case a_ALEF_MAKSURA:                  /* exceptions */ -    tempc = a_s_ALEF_MAKSURA; -    break; -  case a_BEH: -    tempc = a_i_BEH; -    break; -  case a_TEH: -    tempc = a_i_TEH; -    break; -  case a_THEH: -    tempc = a_i_THEH; -    break; -  case a_JEEM: -    tempc = a_i_JEEM; -    break; -  case a_HAH: -    tempc = a_i_HAH; -    break; -  case a_KHAH: -    tempc = a_i_KHAH; -    break; -  case a_SEEN: -    tempc = a_i_SEEN; -    break; -  case a_SHEEN: -    tempc = a_i_SHEEN; -    break; -  case a_SAD: -    tempc = a_i_SAD; -    break; -  case a_DAD: -    tempc = a_i_DAD; -    break; -  case a_TAH: -    tempc = a_i_TAH; -    break; -  case a_ZAH: -    tempc = a_i_ZAH; -    break; -  case a_AIN: -    tempc = a_i_AIN; -    break; -  case a_GHAIN: -    tempc = a_i_GHAIN; -    break; -  case a_FEH: -    tempc = a_i_FEH; -    break; -  case a_QAF: -    tempc = a_i_QAF; -    break; -  case a_KAF: -    tempc = a_i_KAF; -    break; -  case a_LAM: -    tempc = a_i_LAM; -    break; -  case a_MEEM: -    tempc = a_i_MEEM; -    break; -  case a_NOON: -    tempc = a_i_NOON; -    break; -  case a_HEH: -    tempc = a_i_HEH; -    break; -  case a_YEH: -    tempc = a_i_YEH; -    break; -  default: -    tempc = 0; +    case a_YEH_HAMZA: +      tempc = a_i_YEH_HAMZA; +      break; + +    case a_HAMZA: /* exceptions */ +      tempc = a_s_HAMZA; +      break; + +    case a_ALEF_MADDA: /* exceptions */ +      tempc = a_s_ALEF_MADDA; +      break; + +    case a_ALEF_HAMZA_ABOVE: /* exceptions */ +      tempc = a_s_ALEF_HAMZA_ABOVE; +      break; + +    case a_WAW_HAMZA: /* exceptions */ +      tempc = a_s_WAW_HAMZA; +      break; + +    case a_ALEF_HAMZA_BELOW: /* exceptions */ +      tempc = a_s_ALEF_HAMZA_BELOW; +      break; + +    case a_ALEF: /* exceptions */ +      tempc = a_s_ALEF; +      break; + +    case a_TEH_MARBUTA: /* exceptions */ +      tempc = a_s_TEH_MARBUTA; +      break; + +    case a_DAL: /* exceptions */ +      tempc = a_s_DAL; +      break; + +    case a_THAL: /* exceptions */ +      tempc = a_s_THAL; +      break; + +    case a_REH: /* exceptions */ +      tempc = a_s_REH; +      break; + +    case a_ZAIN: /* exceptions */ +      tempc = a_s_ZAIN; +      break; + +    case a_TATWEEL: /* exceptions */ +      tempc = cur_c; +      break; + +    case a_WAW: /* exceptions */ +      tempc = a_s_WAW; +      break; + +    case a_ALEF_MAKSURA: /* exceptions */ +      tempc = a_s_ALEF_MAKSURA; +      break; + +    case a_BEH: +      tempc = a_i_BEH; +      break; + +    case a_TEH: +      tempc = a_i_TEH; +      break; + +    case a_THEH: +      tempc = a_i_THEH; +      break; + +    case a_JEEM: +      tempc = a_i_JEEM; +      break; + +    case a_HAH: +      tempc = a_i_HAH; +      break; + +    case a_KHAH: +      tempc = a_i_KHAH; +      break; + +    case a_SEEN: +      tempc = a_i_SEEN; +      break; + +    case a_SHEEN: +      tempc = a_i_SHEEN; +      break; + +    case a_SAD: +      tempc = a_i_SAD; +      break; + +    case a_DAD: +      tempc = a_i_DAD; +      break; + +    case a_TAH: +      tempc = a_i_TAH; +      break; + +    case a_ZAH: +      tempc = a_i_ZAH; +      break; + +    case a_AIN: +      tempc = a_i_AIN; +      break; + +    case a_GHAIN: +      tempc = a_i_GHAIN; +      break; + +    case a_FEH: +      tempc = a_i_FEH; +      break; + +    case a_QAF: +      tempc = a_i_QAF; +      break; + +    case a_KAF: +      tempc = a_i_KAF; +      break; + +    case a_LAM: +      tempc = a_i_LAM; +      break; + +    case a_MEEM: +      tempc = a_i_MEEM; +      break; + +    case a_NOON: +      tempc = a_i_NOON; +      break; + +    case a_HEH: +      tempc = a_i_HEH; +      break; + +    case a_YEH: +      tempc = a_i_YEH; +      break; + +    default: +      tempc = 0;    }    return tempc;  } -  /*   * Change shape - from ISO-8859-6/Isolated to Medial   */ @@ -453,125 +521,161 @@ static int chg_c_a2m(int cur_c)    int tempc;    switch (cur_c) { -  case a_HAMZA:                         /* exception */ -    tempc = a_s_HAMZA; -    break; -  case a_ALEF_MADDA:                    /* exception */ -    tempc = a_f_ALEF_MADDA; -    break; -  case a_ALEF_HAMZA_ABOVE:              /* exception */ -    tempc = a_f_ALEF_HAMZA_ABOVE; -    break; -  case a_WAW_HAMZA:                     /* exception */ -    tempc = a_f_WAW_HAMZA; -    break; -  case a_ALEF_HAMZA_BELOW:              /* exception */ -    tempc = a_f_ALEF_HAMZA_BELOW; -    break; -  case a_YEH_HAMZA: -    tempc = a_m_YEH_HAMZA; -    break; -  case a_ALEF:                          /* exception */ -    tempc = a_f_ALEF; -    break; -  case a_BEH: -    tempc = a_m_BEH; -    break; -  case a_TEH_MARBUTA:                   /* exception */ -    tempc = a_f_TEH_MARBUTA; -    break; -  case a_TEH: -    tempc = a_m_TEH; -    break; -  case a_THEH: -    tempc = a_m_THEH; -    break; -  case a_JEEM: -    tempc = a_m_JEEM; -    break; -  case a_HAH: -    tempc = a_m_HAH; -    break; -  case a_KHAH: -    tempc = a_m_KHAH; -    break; -  case a_DAL:                           /* exception */ -    tempc = a_f_DAL; -    break; -  case a_THAL:                          /* exception */ -    tempc = a_f_THAL; -    break; -  case a_REH:                           /* exception */ -    tempc = a_f_REH; -    break; -  case a_ZAIN:                          /* exception */ -    tempc = a_f_ZAIN; -    break; -  case a_SEEN: -    tempc = a_m_SEEN; -    break; -  case a_SHEEN: -    tempc = a_m_SHEEN; -    break; -  case a_SAD: -    tempc = a_m_SAD; -    break; -  case a_DAD: -    tempc = a_m_DAD; -    break; -  case a_TAH: -    tempc = a_m_TAH; -    break; -  case a_ZAH: -    tempc = a_m_ZAH; -    break; -  case a_AIN: -    tempc = a_m_AIN; -    break; -  case a_GHAIN: -    tempc = a_m_GHAIN; -    break; -  case a_TATWEEL:                       /* exception */ -    tempc = cur_c; -    break; -  case a_FEH: -    tempc = a_m_FEH; -    break; -  case a_QAF: -    tempc = a_m_QAF; -    break; -  case a_KAF: -    tempc = a_m_KAF; -    break; -  case a_LAM: -    tempc = a_m_LAM; -    break; -  case a_MEEM: -    tempc = a_m_MEEM; -    break; -  case a_NOON: -    tempc = a_m_NOON; -    break; -  case a_HEH: -    tempc = a_m_HEH; -    break; -  case a_WAW:                           /* exception */ -    tempc = a_f_WAW; -    break; -  case a_ALEF_MAKSURA:                  /* exception */ -    tempc = a_f_ALEF_MAKSURA; -    break; -  case a_YEH: -    tempc = a_m_YEH; -    break; -  default: -    tempc = 0; +    case a_HAMZA: /* exception */ +      tempc = a_s_HAMZA; +      break; + +    case a_ALEF_MADDA: /* exception */ +      tempc = a_f_ALEF_MADDA; +      break; + +    case a_ALEF_HAMZA_ABOVE: /* exception */ +      tempc = a_f_ALEF_HAMZA_ABOVE; +      break; + +    case a_WAW_HAMZA: /* exception */ +      tempc = a_f_WAW_HAMZA; +      break; + +    case a_ALEF_HAMZA_BELOW: /* exception */ +      tempc = a_f_ALEF_HAMZA_BELOW; +      break; + +    case a_YEH_HAMZA: +      tempc = a_m_YEH_HAMZA; +      break; + +    case a_ALEF: /* exception */ +      tempc = a_f_ALEF; +      break; + +    case a_BEH: +      tempc = a_m_BEH; +      break; + +    case a_TEH_MARBUTA: /* exception */ +      tempc = a_f_TEH_MARBUTA; +      break; + +    case a_TEH: +      tempc = a_m_TEH; +      break; + +    case a_THEH: +      tempc = a_m_THEH; +      break; + +    case a_JEEM: +      tempc = a_m_JEEM; +      break; + +    case a_HAH: +      tempc = a_m_HAH; +      break; + +    case a_KHAH: +      tempc = a_m_KHAH; +      break; + +    case a_DAL: /* exception */ +      tempc = a_f_DAL; +      break; + +    case a_THAL: /* exception */ +      tempc = a_f_THAL; +      break; + +    case a_REH: /* exception */ +      tempc = a_f_REH; +      break; + +    case a_ZAIN: /* exception */ +      tempc = a_f_ZAIN; +      break; + +    case a_SEEN: +      tempc = a_m_SEEN; +      break; + +    case a_SHEEN: +      tempc = a_m_SHEEN; +      break; + +    case a_SAD: +      tempc = a_m_SAD; +      break; + +    case a_DAD: +      tempc = a_m_DAD; +      break; + +    case a_TAH: +      tempc = a_m_TAH; +      break; + +    case a_ZAH: +      tempc = a_m_ZAH; +      break; + +    case a_AIN: +      tempc = a_m_AIN; +      break; + +    case a_GHAIN: +      tempc = a_m_GHAIN; +      break; + +    case a_TATWEEL: /* exception */ +      tempc = cur_c; +      break; + +    case a_FEH: +      tempc = a_m_FEH; +      break; + +    case a_QAF: +      tempc = a_m_QAF; +      break; + +    case a_KAF: +      tempc = a_m_KAF; +      break; + +    case a_LAM: +      tempc = a_m_LAM; +      break; + +    case a_MEEM: +      tempc = a_m_MEEM; +      break; + +    case a_NOON: +      tempc = a_m_NOON; +      break; + +    case a_HEH: +      tempc = a_m_HEH; +      break; + +    case a_WAW: /* exception */ +      tempc = a_f_WAW; +      break; + +    case a_ALEF_MAKSURA: /* exception */ +      tempc = a_f_ALEF_MAKSURA; +      break; + +    case a_YEH: +      tempc = a_m_YEH; +      break; + +    default: +      tempc = 0;    }    return tempc;  } -  /*   * Change shape - from ISO-8859-6/Isolated to final   */ @@ -590,125 +694,161 @@ static int chg_c_a2f(int cur_c)     */    switch (cur_c) { -  case a_HAMZA:                         /* exception */ -    tempc = a_s_HAMZA; -    break; -  case a_ALEF_MADDA: -    tempc = a_f_ALEF_MADDA; -    break; -  case a_ALEF_HAMZA_ABOVE: -    tempc = a_f_ALEF_HAMZA_ABOVE; -    break; -  case a_WAW_HAMZA: -    tempc = a_f_WAW_HAMZA; -    break; -  case a_ALEF_HAMZA_BELOW: -    tempc = a_f_ALEF_HAMZA_BELOW; -    break; -  case a_YEH_HAMZA: -    tempc = a_f_YEH_HAMZA; -    break; -  case a_ALEF: -    tempc = a_f_ALEF; -    break; -  case a_BEH: -    tempc = a_f_BEH; -    break; -  case a_TEH_MARBUTA: -    tempc = a_f_TEH_MARBUTA; -    break; -  case a_TEH: -    tempc = a_f_TEH; -    break; -  case a_THEH: -    tempc = a_f_THEH; -    break; -  case a_JEEM: -    tempc = a_f_JEEM; -    break; -  case a_HAH: -    tempc = a_f_HAH; -    break; -  case a_KHAH: -    tempc = a_f_KHAH; -    break; -  case a_DAL: -    tempc = a_f_DAL; -    break; -  case a_THAL: -    tempc = a_f_THAL; -    break; -  case a_REH: -    tempc = a_f_REH; -    break; -  case a_ZAIN: -    tempc = a_f_ZAIN; -    break; -  case a_SEEN: -    tempc = a_f_SEEN; -    break; -  case a_SHEEN: -    tempc = a_f_SHEEN; -    break; -  case a_SAD: -    tempc = a_f_SAD; -    break; -  case a_DAD: -    tempc = a_f_DAD; -    break; -  case a_TAH: -    tempc = a_f_TAH; -    break; -  case a_ZAH: -    tempc = a_f_ZAH; -    break; -  case a_AIN: -    tempc = a_f_AIN; -    break; -  case a_GHAIN: -    tempc = a_f_GHAIN; -    break; -  case a_TATWEEL:                       /* exception */ -    tempc = cur_c; -    break; -  case a_FEH: -    tempc = a_f_FEH; -    break; -  case a_QAF: -    tempc = a_f_QAF; -    break; -  case a_KAF: -    tempc = a_f_KAF; -    break; -  case a_LAM: -    tempc = a_f_LAM; -    break; -  case a_MEEM: -    tempc = a_f_MEEM; -    break; -  case a_NOON: -    tempc = a_f_NOON; -    break; -  case a_HEH: -    tempc = a_f_HEH; -    break; -  case a_WAW: -    tempc = a_f_WAW; -    break; -  case a_ALEF_MAKSURA: -    tempc = a_f_ALEF_MAKSURA; -    break; -  case a_YEH: -    tempc = a_f_YEH; -    break; -  default: -    tempc = 0; +    case a_HAMZA: /* exception */ +      tempc = a_s_HAMZA; +      break; + +    case a_ALEF_MADDA: +      tempc = a_f_ALEF_MADDA; +      break; + +    case a_ALEF_HAMZA_ABOVE: +      tempc = a_f_ALEF_HAMZA_ABOVE; +      break; + +    case a_WAW_HAMZA: +      tempc = a_f_WAW_HAMZA; +      break; + +    case a_ALEF_HAMZA_BELOW: +      tempc = a_f_ALEF_HAMZA_BELOW; +      break; + +    case a_YEH_HAMZA: +      tempc = a_f_YEH_HAMZA; +      break; + +    case a_ALEF: +      tempc = a_f_ALEF; +      break; + +    case a_BEH: +      tempc = a_f_BEH; +      break; + +    case a_TEH_MARBUTA: +      tempc = a_f_TEH_MARBUTA; +      break; + +    case a_TEH: +      tempc = a_f_TEH; +      break; + +    case a_THEH: +      tempc = a_f_THEH; +      break; + +    case a_JEEM: +      tempc = a_f_JEEM; +      break; + +    case a_HAH: +      tempc = a_f_HAH; +      break; + +    case a_KHAH: +      tempc = a_f_KHAH; +      break; + +    case a_DAL: +      tempc = a_f_DAL; +      break; + +    case a_THAL: +      tempc = a_f_THAL; +      break; + +    case a_REH: +      tempc = a_f_REH; +      break; + +    case a_ZAIN: +      tempc = a_f_ZAIN; +      break; + +    case a_SEEN: +      tempc = a_f_SEEN; +      break; + +    case a_SHEEN: +      tempc = a_f_SHEEN; +      break; + +    case a_SAD: +      tempc = a_f_SAD; +      break; + +    case a_DAD: +      tempc = a_f_DAD; +      break; + +    case a_TAH: +      tempc = a_f_TAH; +      break; + +    case a_ZAH: +      tempc = a_f_ZAH; +      break; + +    case a_AIN: +      tempc = a_f_AIN; +      break; + +    case a_GHAIN: +      tempc = a_f_GHAIN; +      break; + +    case a_TATWEEL: /* exception */ +      tempc = cur_c; +      break; + +    case a_FEH: +      tempc = a_f_FEH; +      break; + +    case a_QAF: +      tempc = a_f_QAF; +      break; + +    case a_KAF: +      tempc = a_f_KAF; +      break; + +    case a_LAM: +      tempc = a_f_LAM; +      break; + +    case a_MEEM: +      tempc = a_f_MEEM; +      break; + +    case a_NOON: +      tempc = a_f_NOON; +      break; + +    case a_HEH: +      tempc = a_f_HEH; +      break; + +    case a_WAW: +      tempc = a_f_WAW; +      break; + +    case a_ALEF_MAKSURA: +      tempc = a_f_ALEF_MAKSURA; +      break; + +    case a_YEH: +      tempc = a_f_YEH; +      break; + +    default: +      tempc = 0;    }    return tempc;  } -  /*   * Change shape - from Initial to Medial   */ @@ -717,83 +857,105 @@ static int chg_c_i2m(int cur_c)    int tempc;    switch (cur_c) { -  case a_i_YEH_HAMZA: -    tempc = a_m_YEH_HAMZA; -    break; -  case a_i_BEH: -    tempc = a_m_BEH; -    break; -  case a_i_TEH: -    tempc = a_m_TEH; -    break; -  case a_i_THEH: -    tempc = a_m_THEH; -    break; -  case a_i_JEEM: -    tempc = a_m_JEEM; -    break; -  case a_i_HAH: -    tempc = a_m_HAH; -    break; -  case a_i_KHAH: -    tempc = a_m_KHAH; -    break; -  case a_i_SEEN: -    tempc = a_m_SEEN; -    break; -  case a_i_SHEEN: -    tempc = a_m_SHEEN; -    break; -  case a_i_SAD: -    tempc = a_m_SAD; -    break; -  case a_i_DAD: -    tempc = a_m_DAD; -    break; -  case a_i_TAH: -    tempc = a_m_TAH; -    break; -  case a_i_ZAH: -    tempc = a_m_ZAH; -    break; -  case a_i_AIN: -    tempc = a_m_AIN; -    break; -  case a_i_GHAIN: -    tempc = a_m_GHAIN; -    break; -  case a_i_FEH: -    tempc = a_m_FEH; -    break; -  case a_i_QAF: -    tempc = a_m_QAF; -    break; -  case a_i_KAF: -    tempc = a_m_KAF; -    break; -  case a_i_LAM: -    tempc = a_m_LAM; -    break; -  case a_i_MEEM: -    tempc = a_m_MEEM; -    break; -  case a_i_NOON: -    tempc = a_m_NOON; -    break; -  case a_i_HEH: -    tempc = a_m_HEH; -    break; -  case a_i_YEH: -    tempc = a_m_YEH; -    break; -  default: -    tempc = 0; +    case a_i_YEH_HAMZA: +      tempc = a_m_YEH_HAMZA; +      break; + +    case a_i_BEH: +      tempc = a_m_BEH; +      break; + +    case a_i_TEH: +      tempc = a_m_TEH; +      break; + +    case a_i_THEH: +      tempc = a_m_THEH; +      break; + +    case a_i_JEEM: +      tempc = a_m_JEEM; +      break; + +    case a_i_HAH: +      tempc = a_m_HAH; +      break; + +    case a_i_KHAH: +      tempc = a_m_KHAH; +      break; + +    case a_i_SEEN: +      tempc = a_m_SEEN; +      break; + +    case a_i_SHEEN: +      tempc = a_m_SHEEN; +      break; + +    case a_i_SAD: +      tempc = a_m_SAD; +      break; + +    case a_i_DAD: +      tempc = a_m_DAD; +      break; + +    case a_i_TAH: +      tempc = a_m_TAH; +      break; + +    case a_i_ZAH: +      tempc = a_m_ZAH; +      break; + +    case a_i_AIN: +      tempc = a_m_AIN; +      break; + +    case a_i_GHAIN: +      tempc = a_m_GHAIN; +      break; + +    case a_i_FEH: +      tempc = a_m_FEH; +      break; + +    case a_i_QAF: +      tempc = a_m_QAF; +      break; + +    case a_i_KAF: +      tempc = a_m_KAF; +      break; + +    case a_i_LAM: +      tempc = a_m_LAM; +      break; + +    case a_i_MEEM: +      tempc = a_m_MEEM; +      break; + +    case a_i_NOON: +      tempc = a_m_NOON; +      break; + +    case a_i_HEH: +      tempc = a_m_HEH; +      break; + +    case a_i_YEH: +      tempc = a_m_YEH; +      break; + +    default: +      tempc = 0;    }    return tempc;  } -  /*   * Change shape - from Final to Medial   */ @@ -802,105 +964,128 @@ static int chg_c_f2m(int cur_c)    int tempc;    switch (cur_c) { -  /* NOTE: these encodings are multi-positional, no ? -     case a_f_ALEF_MADDA: -     case a_f_ALEF_HAMZA_ABOVE: -     case a_f_ALEF_HAMZA_BELOW: -   */ -  case a_f_YEH_HAMZA: -    tempc = a_m_YEH_HAMZA; -    break; -  case a_f_WAW_HAMZA:                   /* exceptions */ -  case a_f_ALEF: -  case a_f_TEH_MARBUTA: -  case a_f_DAL: -  case a_f_THAL: -  case a_f_REH: -  case a_f_ZAIN: -  case a_f_WAW: -  case a_f_ALEF_MAKSURA: -    tempc = cur_c; -    break; -  case a_f_BEH: -    tempc = a_m_BEH; -    break; -  case a_f_TEH: -    tempc = a_m_TEH; -    break; -  case a_f_THEH: -    tempc = a_m_THEH; -    break; -  case a_f_JEEM: -    tempc = a_m_JEEM; -    break; -  case a_f_HAH: -    tempc = a_m_HAH; -    break; -  case a_f_KHAH: -    tempc = a_m_KHAH; -    break; -  case a_f_SEEN: -    tempc = a_m_SEEN; -    break; -  case a_f_SHEEN: -    tempc = a_m_SHEEN; -    break; -  case a_f_SAD: -    tempc = a_m_SAD; -    break; -  case a_f_DAD: -    tempc = a_m_DAD; -    break; -  case a_f_TAH: -    tempc = a_m_TAH; -    break; -  case a_f_ZAH: -    tempc = a_m_ZAH; -    break; -  case a_f_AIN: -    tempc = a_m_AIN; -    break; -  case a_f_GHAIN: -    tempc = a_m_GHAIN; -    break; -  case a_f_FEH: -    tempc = a_m_FEH; -    break; -  case a_f_QAF: -    tempc = a_m_QAF; -    break; -  case a_f_KAF: -    tempc = a_m_KAF; -    break; -  case a_f_LAM: -    tempc = a_m_LAM; -    break; -  case a_f_MEEM: -    tempc = a_m_MEEM; -    break; -  case a_f_NOON: -    tempc = a_m_NOON; -    break; -  case a_f_HEH: -    tempc = a_m_HEH; -    break; -  case a_f_YEH: -    tempc = a_m_YEH; -    break; -  /* NOTE: these encodings are multi-positional, no ? -      case a_f_LAM_ALEF_MADDA_ABOVE: -      case a_f_LAM_ALEF_HAMZA_ABOVE: -      case a_f_LAM_ALEF_HAMZA_BELOW: -      case a_f_LAM_ALEF: -   */ -  default: -    tempc = 0; +    /* NOTE: these encodings are multi-positional, no ? +       case a_f_ALEF_MADDA: +       case a_f_ALEF_HAMZA_ABOVE: +       case a_f_ALEF_HAMZA_BELOW: +     */ +    case a_f_YEH_HAMZA: +      tempc = a_m_YEH_HAMZA; +      break; + +    case a_f_WAW_HAMZA: /* exceptions */ +    case a_f_ALEF: +    case a_f_TEH_MARBUTA: +    case a_f_DAL: +    case a_f_THAL: +    case a_f_REH: +    case a_f_ZAIN: +    case a_f_WAW: +    case a_f_ALEF_MAKSURA: +      tempc = cur_c; +      break; + +    case a_f_BEH: +      tempc = a_m_BEH; +      break; + +    case a_f_TEH: +      tempc = a_m_TEH; +      break; + +    case a_f_THEH: +      tempc = a_m_THEH; +      break; + +    case a_f_JEEM: +      tempc = a_m_JEEM; +      break; + +    case a_f_HAH: +      tempc = a_m_HAH; +      break; + +    case a_f_KHAH: +      tempc = a_m_KHAH; +      break; + +    case a_f_SEEN: +      tempc = a_m_SEEN; +      break; + +    case a_f_SHEEN: +      tempc = a_m_SHEEN; +      break; + +    case a_f_SAD: +      tempc = a_m_SAD; +      break; + +    case a_f_DAD: +      tempc = a_m_DAD; +      break; + +    case a_f_TAH: +      tempc = a_m_TAH; +      break; + +    case a_f_ZAH: +      tempc = a_m_ZAH; +      break; + +    case a_f_AIN: +      tempc = a_m_AIN; +      break; + +    case a_f_GHAIN: +      tempc = a_m_GHAIN; +      break; + +    case a_f_FEH: +      tempc = a_m_FEH; +      break; + +    case a_f_QAF: +      tempc = a_m_QAF; +      break; + +    case a_f_KAF: +      tempc = a_m_KAF; +      break; + +    case a_f_LAM: +      tempc = a_m_LAM; +      break; + +    case a_f_MEEM: +      tempc = a_m_MEEM; +      break; + +    case a_f_NOON: +      tempc = a_m_NOON; +      break; + +    case a_f_HEH: +      tempc = a_m_HEH; +      break; + +    case a_f_YEH: +      tempc = a_m_YEH; +      break; + +    /* NOTE: these encodings are multi-positional, no ? +        case a_f_LAM_ALEF_MADDA_ABOVE: +        case a_f_LAM_ALEF_HAMZA_ABOVE: +        case a_f_LAM_ALEF_HAMZA_BELOW: +        case a_f_LAM_ALEF: +     */ +    default: +      tempc = 0;    }    return tempc;  } -  /*   * Change shape - from Combination (2 char) to an Isolated   */ @@ -909,26 +1094,29 @@ static int chg_c_laa2i(int hid_c)    int tempc;    switch (hid_c) { -  case a_ALEF_MADDA: -    tempc = a_s_LAM_ALEF_MADDA_ABOVE; -    break; -  case a_ALEF_HAMZA_ABOVE: -    tempc = a_s_LAM_ALEF_HAMZA_ABOVE; -    break; -  case a_ALEF_HAMZA_BELOW: -    tempc = a_s_LAM_ALEF_HAMZA_BELOW; -    break; -  case a_ALEF: -    tempc = a_s_LAM_ALEF; -    break; -  default: -    tempc = 0; +    case a_ALEF_MADDA: +      tempc = a_s_LAM_ALEF_MADDA_ABOVE; +      break; + +    case a_ALEF_HAMZA_ABOVE: +      tempc = a_s_LAM_ALEF_HAMZA_ABOVE; +      break; + +    case a_ALEF_HAMZA_BELOW: +      tempc = a_s_LAM_ALEF_HAMZA_BELOW; +      break; + +    case a_ALEF: +      tempc = a_s_LAM_ALEF; +      break; + +    default: +      tempc = 0;    }    return tempc;  } -  /*   * Change shape - from Combination-Isolated to Final   */ @@ -937,20 +1125,24 @@ static int chg_c_laa2f(int hid_c)    int tempc;    switch (hid_c) { -  case a_ALEF_MADDA: -    tempc = a_f_LAM_ALEF_MADDA_ABOVE; -    break; -  case a_ALEF_HAMZA_ABOVE: -    tempc = a_f_LAM_ALEF_HAMZA_ABOVE; -    break; -  case a_ALEF_HAMZA_BELOW: -    tempc = a_f_LAM_ALEF_HAMZA_BELOW; -    break; -  case a_ALEF: -    tempc = a_f_LAM_ALEF; -    break; -  default: -    tempc = 0; +    case a_ALEF_MADDA: +      tempc = a_f_LAM_ALEF_MADDA_ABOVE; +      break; + +    case a_ALEF_HAMZA_ABOVE: +      tempc = a_f_LAM_ALEF_HAMZA_ABOVE; +      break; + +    case a_ALEF_HAMZA_BELOW: +      tempc = a_f_LAM_ALEF_HAMZA_BELOW; +      break; + +    case a_ALEF: +      tempc = a_f_LAM_ALEF; +      break; + +    default: +      tempc = 0;    }    return tempc; @@ -961,10 +1153,13 @@ static int chg_c_laa2f(int hid_c)   */  static int half_shape(int c)  { -  if (A_is_a(c)) +  if (A_is_a(c)) {      return chg_c_a2i(c); -  if (A_is_valid(c) && A_is_f(c)) +  } + +  if (A_is_valid(c) && A_is_f(c)) {      return chg_c_f2m(c); +  }    return 0;  } @@ -977,7 +1172,8 @@ static int half_shape(int c)   *		     (not shaped)   * in:     "next_c"  is the next character (not shaped).   */ -int arabic_shape(int c, int *ccp, int *c1p, int prev_c, int prev_c1, int next_c) +int arabic_shape(int c, int *ccp, int *c1p, int prev_c, int prev_c1, +                 int next_c)  {    int curr_c;    int shape_c; @@ -985,8 +1181,9 @@ int arabic_shape(int c, int *ccp, int *c1p, int prev_c, int prev_c1, int next_c)    int prev_laa;    /* Deal only with Arabic character, pass back all others */ -  if (!A_is_ok(c)) +  if (!A_is_ok(c)) {      return c; +  }    /* half-shape current and previous character */    shape_c = half_shape(prev_c); @@ -998,31 +1195,34 @@ int arabic_shape(int c, int *ccp, int *c1p, int prev_c, int prev_c1, int next_c)    prev_laa = A_firstc_laa(prev_c, prev_c1);    if (curr_laa) { -    if (A_is_valid(prev_c) && !A_is_f(shape_c) -        && !A_is_s(shape_c) && !prev_laa) +    if (A_is_valid(prev_c) && !A_is_f(shape_c) && !A_is_s(shape_c) && +        !prev_laa) {        curr_c = chg_c_laa2f(curr_laa); -    else +    } else {        curr_c = chg_c_laa2i(curr_laa); +    }      /* Remove the composing character */      *c1p = 0; -  } else if (!A_is_valid(prev_c) && A_is_valid(next_c)) +  } else if (!A_is_valid(prev_c) && A_is_valid(next_c)) {      curr_c = chg_c_a2i(c); -  else if (!shape_c || A_is_f(shape_c) || A_is_s(shape_c) || prev_laa) +  } else if (!shape_c || A_is_f(shape_c) || A_is_s(shape_c) || prev_laa) {      curr_c = A_is_valid(next_c) ? chg_c_a2i(c) : chg_c_a2s(c); -  else if (A_is_valid(next_c)) +  } else if (A_is_valid(next_c)) {      curr_c = A_is_iso(c) ? chg_c_a2m(c) : chg_c_i2m(c); -  else if (A_is_valid(prev_c)) +  } else if (A_is_valid(prev_c)) {      curr_c = chg_c_a2f(c); -  else +  } else {      curr_c = chg_c_a2s(c); +  }    /* Sanity check -- curr_c should, in the future, never be 0.     * We should, in the future, insert a fatal error here. */ -  if (curr_c == NUL) +  if (curr_c == NUL) {      curr_c = c; +  } -  if (curr_c != c && ccp != NULL) { +  if ((curr_c != c) && (ccp != NULL)) {      char_u buf[MB_MAXBYTES + 1];      /* Update the first byte of the character. */ @@ -1034,22 +1234,19 @@ int arabic_shape(int c, int *ccp, int *c1p, int prev_c, int prev_c1, int next_c)    return curr_c;  } -  /*   * A_firstc_laa returns first character of LAA combination if it exists + * in: "c" base character + * in: "c1" first composing character   */ -static int  -A_firstc_laa ( -    int c,          /* base character */ -    int c1         /* first composing character */ -) +static int A_firstc_laa(int c, int c1)  { -  if (c1 != NUL && c == a_LAM && !A_is_harakat(c1)) +  if ((c1 != NUL) && (c == a_LAM) && !A_is_harakat(c1)) {      return c1; +  }    return 0;  } -  /*   * A_is_harakat returns TRUE if 'c' is an Arabic Harakat character   *		(harakat/tanween) @@ -1059,32 +1256,29 @@ static int A_is_harakat(int c)    return c >= a_FATHATAN && c <= a_SUKUN;  } -  /*   * A_is_iso returns TRUE if 'c' is an Arabic ISO-8859-6 character   *		(alphabet/number/punctuation)   */  static int A_is_iso(int c)  { -  return (c >= a_HAMZA && c <= a_GHAIN) -         || (c >= a_TATWEEL && c <= a_HAMZA_BELOW) -         || c == a_MINI_ALEF; +  return (c >= a_HAMZA && c <= a_GHAIN) || +         (c >= a_TATWEEL && c <= a_HAMZA_BELOW) || +         c == a_MINI_ALEF;  } -  /*   * A_is_formb returns TRUE if 'c' is an Arabic 10646-1 FormB character   *		(alphabet/number/punctuation)   */  static int A_is_formb(int c)  { -  return (c >= a_s_FATHATAN && c <= a_s_DAMMATAN) -         || c == a_s_KASRATAN -         || (c >= a_s_FATHA && c <= a_f_LAM_ALEF) -         || c == a_BYTE_ORDER_MARK; +  return (c >= a_s_FATHATAN && c <= a_s_DAMMATAN) || +         c == a_s_KASRATAN || +         (c >= a_s_FATHA && c <= a_f_LAM_ALEF) || +         c == a_BYTE_ORDER_MARK;  } -  /*   * A_is_ok returns TRUE if 'c' is an Arabic 10646 (8859-6 or Form-B)   */ @@ -1093,7 +1287,6 @@ static int A_is_ok(int c)    return A_is_iso(c) || A_is_formb(c);  } -  /*   * A_is_valid returns TRUE if 'c' is an Arabic 10646 (8859-6 or Form-B)   *		with some exceptions/exclusions @@ -1103,7 +1296,6 @@ static int A_is_valid(int c)    return A_is_ok(c) && !A_is_special(c);  } -  /*   * A_is_special returns TRUE if 'c' is not a special Arabic character.   *		Specials don't adhere to most of the rules. diff --git a/src/arabic.h b/src/arabic.h index 6b277351cf..80b9563275 100644 --- a/src/arabic.h +++ b/src/arabic.h @@ -6,6 +6,9 @@   * Do ":help credits" in Vim to see a list of people who contributed.   */ +#ifndef SRC_ARABIC_H_ +#define SRC_ARABIC_H_ +  /*   * Arabic characters are categorized into following types:   * @@ -256,3 +259,5 @@  /* Range of Arabic characters that might be shaped. */  #define ARABIC_CHAR(c)          ((c) >= a_HAMZA && (c) <= a_MINI_ALEF) + +#endif  // SRC_ARABIC_H_ 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(); +      }      }    }  } diff --git a/src/farsi.h b/src/farsi.h index 84c3402431..1a38e01cf3 100644 --- a/src/farsi.h +++ b/src/farsi.h @@ -6,8 +6,8 @@   * Do ":help credits" in Vim to see a list of people who contributed.   */ -#ifndef NEOVIM_FARSI_H -#define NEOVIM_FARSI_H +#ifndef SRC_FARSI_H_ +#define SRC_FARSI_H_  /*   * Farsi characters are categorized into following types: @@ -186,46 +186,49 @@  #define W_CONV 0x1  #define W_R_L  0x2 -  /* special Farsi text messages */ -EXTERN char_u farsi_text_1[]  #ifdef DO_INIT -  = { YE_, _SIN, RE, ALEF_, _FE, ' ', 'V', 'I', 'M', -      ' ', F_HE, _BE, ' ', SHIN, RE, _GAF, DAL,' ', NOON, -      ALEF_, _YE, ALEF_, _PE, '\0'} - +EXTERN char_u farsi_text_1[] = { +  YE_, _SIN, RE, ALEF_, _FE, ' ', 'V', 'I', 'M', +  ' ', F_HE, _BE, ' ', SHIN, RE, _GAF, DAL, ' ', NOON, +  ALEF_, _YE, ALEF_, _PE, '\0' +}; +#else +EXTERN char_u farsi_text_1[];  #endif -; -EXTERN char_u farsi_text_2[]  #ifdef DO_INIT -  = { YE_, _SIN, RE, ALEF_, _FE, ' ', FARSI_3, FARSI_3, -      FARSI_4, FARSI_2, ' ', DAL, RE, ALEF, DAL, _NOON, -      ALEF_, _TE, _SIN, ALEF, ' ', F_HE, _BE, ' ', SHIN, -      RE,  _GAF, DAL, ' ', NOON, ALEF_, _YE, ALEF_, _PE, '\0'} - +EXTERN char_u farsi_text_2[] = { +  YE_, _SIN, RE, ALEF_, _FE, ' ', FARSI_3, FARSI_3, +  FARSI_4, FARSI_2, ' ', DAL, RE, ALEF, DAL, _NOON, +  ALEF_, _TE, _SIN, ALEF, ' ', F_HE, _BE, ' ', SHIN, +  RE,  _GAF, DAL, ' ', NOON, ALEF_, _YE, ALEF_, _PE, '\0' +}; +#else +EXTERN char_u farsi_text_2[];  #endif -; -EXTERN char_u farsi_text_3[]  #ifdef DO_INIT -  = { DAL, WAW, _SHIN, _YE, _MIM, _NOON, ' ', YE_, _NOON, -      ALEF_,_BE, _YE, _TE, _SHIN, _PE, ' ', 'R','E','P','L', -      'A','C','E', ' ', NOON, ALEF_, _MIM, RE, _FE, ZE, ALEF, -      ' ', 'R', 'E', 'V', 'E', 'R', 'S', 'E', ' ', 'I', 'N', -      'S', 'E', 'R', 'T', ' ', SHIN, WAW, RE, ' ', ALEF_, _BE, -      ' ', YE_, _SIN, RE, ALEF_, _FE, ' ', RE, DAL, ' ', RE, -      ALEF_, _KAF,' ', MIM, ALEF_, _GAF, _NOON, _HE, '\0'} - +EXTERN char_u farsi_text_3[] = { +  DAL, WAW, _SHIN, _YE, _MIM, _NOON, ' ', YE_, _NOON, +  ALEF_, _BE, _YE, _TE, _SHIN, _PE, ' ', 'R', 'E', 'P', 'L', +  'A', 'C', 'E', ' ', NOON, ALEF_, _MIM, RE, _FE, ZE, ALEF, +  ' ', 'R', 'E', 'V', 'E', 'R', 'S', 'E', ' ', 'I', 'N', +  'S', 'E', 'R', 'T', ' ', SHIN, WAW, RE, ' ', ALEF_, _BE, +  ' ', YE_, _SIN, RE, ALEF_, _FE, ' ', RE, DAL, ' ', RE, +  ALEF_, _KAF, ' ', MIM, ALEF_, _GAF, _NOON, _HE, '\0' +}; +#else +EXTERN char_u farsi_text_3[];  #endif -; - -EXTERN char_u farsi_text_5[]  #ifdef DO_INIT -  = { ' ', YE_, _SIN, RE, ALEF_, _FE, '\0'} +EXTERN char_u farsi_text_5[] = { +  ' ', YE_, _SIN, RE, ALEF_, _FE, '\0' +}; +#else +EXTERN char_u farsi_text_5[];  #endif -; -#endif /* NEOVIM_FARSI_H */ +#endif  // SRC_FARSI_H_ | 
