diff options
-rw-r--r-- | src/nvim/CMakeLists.txt | 4 | ||||
-rw-r--r-- | src/nvim/edit.c | 8 | ||||
-rw-r--r-- | src/nvim/ex_getln.c | 2 | ||||
-rw-r--r-- | src/nvim/farsi.c | 2007 | ||||
-rw-r--r-- | src/nvim/fold.c | 83 | ||||
-rw-r--r-- | src/nvim/fold.h | 4 | ||||
-rw-r--r-- | src/nvim/indent_c.c | 2 | ||||
-rw-r--r-- | src/nvim/misc1.c | 2 | ||||
-rw-r--r-- | src/nvim/move.c | 52 | ||||
-rw-r--r-- | src/nvim/ops.c | 4 | ||||
-rw-r--r-- | src/nvim/option.c | 12 | ||||
-rw-r--r-- | src/nvim/popupmnu.c | 26 |
12 files changed, 656 insertions, 1550 deletions
diff --git a/src/nvim/CMakeLists.txt b/src/nvim/CMakeLists.txt index 47782e8b6b..09b709b6ce 100644 --- a/src/nvim/CMakeLists.txt +++ b/src/nvim/CMakeLists.txt @@ -58,9 +58,7 @@ set(CONV_SOURCES ex_cmds.c ex_docmd.c ex_getln.c - farsi.c fileio.c - fold.c getchar.c if_cscope.c mbyte.c @@ -68,11 +66,9 @@ set(CONV_SOURCES menu.c message.c misc1.c - move.c normal.c ops.c path.c - popupmnu.c quickfix.c regexp.c screen.c diff --git a/src/nvim/edit.c b/src/nvim/edit.c index 8b2ac1943f..ec0f136d8d 100644 --- a/src/nvim/edit.c +++ b/src/nvim/edit.c @@ -7354,9 +7354,9 @@ static int ins_bs(int c, int mode, int *inserted_space_p) *inserted_space_p = FALSE; if (p_sta && in_indent) - ts = (int)get_sw_value(curbuf); + ts = get_sw_value(curbuf); else - ts = (int)get_sts_value(); + ts = get_sts_value(); /* Compute the virtual column where we want to be. Since * 'showbreak' may get in the way, need to get the last column of * the previous character. */ @@ -7826,9 +7826,9 @@ static int ins_tab(void) AppendToRedobuff((char_u *)"\t"); if (p_sta && ind) /* insert tab in indent, use 'shiftwidth' */ - temp = (int)get_sw_value(curbuf); + temp = get_sw_value(curbuf); else if (curbuf->b_p_sts != 0) /* use 'softtabstop' when set */ - temp = (int)get_sts_value(); + temp = get_sts_value(); else /* otherwise use 'tabstop' */ temp = (int)curbuf->b_p_ts; temp -= get_nolist_virtcol() % temp; diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index f0beef87e7..6b74e85acb 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -1784,7 +1784,7 @@ getexmodeline ( } if (c1 == Ctrl_T) { - long sw = get_sw_value(curbuf); + int sw = get_sw_value(curbuf); p = (char_u *)line_ga.ga_data; p[line_ga.ga_len] = NUL; diff --git a/src/nvim/farsi.c b/src/nvim/farsi.c index 2ca581ebd3..f9d6b14edc 100644 --- a/src/nvim/farsi.c +++ b/src/nvim/farsi.c @@ -2,6 +2,7 @@ /// /// Functions for Farsi language +#include <assert.h> #include <stdbool.h> #include "nvim/cursor.h" @@ -29,26 +30,23 @@ // Special Farsi text messages const 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' + YE_, _SIN, RE, ALEF_, _FE, ' ', 'V', 'I', 'M', ' ', F_HE, _BE, ' ', SHIN, RE, + _GAF, DAL, ' ', NOON, ALEF_, _YE, ALEF_, _PE, '\0' }; const 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' + 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' }; const 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' + 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' }; const char_u farsi_text_5[] = { @@ -65,93 +63,41 @@ const char_u farsi_text_5[] = { /// @param c The character to convert. /// /// @return Farsi character converted to a _X or _X_ type. -static int toF_Xor_X_(int c) +static char_u toF_Xor_X_(int c) { - int tempc; + char_u 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: + 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 AYN : tempc = _AYN ; break; + case AYN_ : tempc = _AYN_ ; break; + case GHAYN : tempc = _GHAYN ; break; + case GHAYN_ : tempc = _GHAYN_ ; break; + case FE : tempc = _FE ; break; + case GHAF : tempc = _GHAF ; break; + case KAF : tempc = _KAF ; break; + case GAF : tempc = _GAF ; break; + case LAM : tempc = _LAM ; break; + case MIM : tempc = _MIM ; break; + case NOON : tempc = _NOON ; break; + case YE : + case YE_ : tempc = _YE ; break; + case YEE : + case YEE_ : tempc = _YEE ; break; + case IE : + case IE_ : tempc = _IE ; break; + case F_HE : tempc = _HE; if (p_ri && @@ -171,9 +117,13 @@ static int toF_Xor_X_(int c) inc_cursor(); } - return tempc; + break; + + default: + tempc = 0; } - return 0; + + return tempc; } /// Convert the given Farsi character into Farsi capital character. @@ -181,104 +131,51 @@ static int toF_Xor_X_(int c) /// @param c The character to convert. /// /// @return Character converted to the Farsi capital leter. -int toF_TyA(int c) +char_u toF_TyA(char_u 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; + char_u tempc; - 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; + switch (c) { + case ALEF_ : tempc = ALEF ; break; + case ALEF_U_H_ : tempc = ALEF_U_H ; break; + 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 _AYN : + case AYN_ : + case _AYN_ : tempc = AYN ; break; + case _GHAYN : + case GHAYN_ : + case _GHAYN_ : tempc = GHAYN ; break; + case _FE : tempc = FE ; break; + case _GHAF : tempc = GHAF ; break; + case _KAF : tempc = KAF ; break; + case _GAF : tempc = GAF ; break; + case _LAM : tempc = LAM ; break; + case _MIM : tempc = MIM ; break; + case _NOON : tempc = NOON ; break; + case _YE : + case YE_ : tempc = YE ; break; + case _YEE : + case YEE_ : tempc = YEE ; break; + case TEE_ : tempc = TEE ; break; + case _IE : + case IE_ : tempc = IE ; break; + case _HE : + case _HE_ : tempc = F_HE ; break; + default : tempc = c ; } - return c; + + return tempc; } /// Is the character under the cursor+offset in the given buffer a join type. @@ -388,51 +285,34 @@ static bool F_is_TyC_TyD(int c) /// @param c The character to convert. /// /// @return The character converted into a leading type. -static int toF_TyB(int c) +static char_u toF_TyB(int c) { - switch (c) { - case ALEF_: - return ALEF; - - case ALEF_U_H_: - return ALEF_U_H; - - case _AYN_: - return _AYN; - - case AYN_: - // exception - there are many of them - return AYN; - - case _GHAYN_: - return _GHAYN; - - case GHAYN_: - // exception - there are many of them - return GHAYN; - - case _HE_: - return _HE; - - case YE_: - return YE; - - case IE_: - return IE; - - case TEE_: - return TEE; + char_u tempc; - case YEE_: - return YEE; + switch (c) { + case ALEF_ : tempc = ALEF ; break; + case ALEF_U_H_ : tempc = ALEF_U_H ; break; + case _AYN_ : tempc = _AYN ; break; + case AYN_ : tempc = AYN ; break; // exception - there are many + case _GHAYN_ : tempc = _GHAYN ; break; + case GHAYN_ : tempc = GHAYN ; break; // exception - there are many + 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: + assert(c >= 0 && c <= UCHAR_MAX); + tempc = (char_u)c; } - return c; + + return tempc; } /// Overwrite the current redo and cursor characters + left adjust /// /// @param c -static void put_curr_and_l_to_X(int c) +static void put_curr_and_l_to_X(char_u c) { int tempc; @@ -465,7 +345,7 @@ static void put_curr_and_l_to_X(int c) put_and_redo(c); } -static void put_and_redo(int c) +static void put_and_redo(char_u c) { pchar_cursor(c); AppendCharToRedobuff(K_BS); @@ -475,110 +355,39 @@ 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) { - int tempc, curc; + int curc; + char_u tempc; 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: + 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(); @@ -621,55 +430,21 @@ static void chg_c_toX_orX(void) /// Change the char. under the cursor to a _X_ or X_ type static void chg_c_to_X_orX_(void) { - int tempc; + char_u 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) { @@ -689,15 +464,14 @@ static void chg_c_to_X_or_X(void) if ((tempc == F_HE) && (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR))) { tempc = _HE_; dec_cursor(); - put_and_redo(tempc); + put_and_redo((char_u)tempc); return; } - dec_cursor(); } if ((tempc = toF_Xor_X_(tempc)) != 0) { - put_and_redo(tempc); + put_and_redo((char_u)tempc); } } @@ -722,56 +496,22 @@ static void chg_l_to_X_orX_(void) } 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) { - put_and_redo(tempc); + put_and_redo((char_u)tempc); } if (p_ri) { @@ -784,7 +524,7 @@ static void chg_l_to_X_orX_(void) /// Change the character left to the cursor to a X or _X type static void chg_l_toXor_X(void) { - int tempc; + char_u tempc; if ((curwin->w_cursor.col != 0) && (curwin->w_cursor.col + 1 == (colnr_T)STRLEN(get_cursor_line_ptr()))) { @@ -802,52 +542,18 @@ static void chg_l_toXor_X(void) } 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) { @@ -864,7 +570,8 @@ static void chg_l_toXor_X(void) /// Change the character right to the cursor to a _X or _X_ type static void chg_r_to_Xor_X_(void) { - int tempc, c; + int tempc; + char_u c; if (curwin->w_cursor.col) { if (!p_ri) { @@ -893,13 +600,13 @@ int fkmap(int c) } if (VIM_ISDIGIT(c) - || (((c == '.') - || (c == '+') - || (c == '-') - || (c == '^') - || (c == '%') - || (c == '#') - || (c == '=')) + || ((c == '.' + || c == '+' + || c == '-' + || c == '^' + || c == '%' + || c == '#' + || c == '=') && revins)) { if (!revins) { if (curwin->w_cursor.col) { @@ -1060,158 +767,57 @@ int fkmap(int c) 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; + 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; } @@ -1246,7 +852,7 @@ int fkmap(int c) case _HE_: case _TA: case _ZA: - put_curr_and_l_to_X(toF_TyA(tempc)); + put_curr_and_l_to_X(toF_TyA((char_u)tempc)); break; case _AYN: @@ -1276,7 +882,7 @@ int fkmap(int c) inc_cursor(); } - put_curr_and_l_to_X(tempc); + put_curr_and_l_to_X((char_u)tempc); break; case _GHAYN: @@ -1307,7 +913,7 @@ int fkmap(int c) inc_cursor(); } - put_curr_and_l_to_X(tempc); + put_curr_and_l_to_X((char_u)tempc); break; case _YE: @@ -1316,8 +922,8 @@ int fkmap(int c) if (!p_ri) { if (!curwin->w_cursor.col) { - put_curr_and_l_to_X((tempc == _YE ? YE : - (tempc == _IE ? IE : YEE))); + put_curr_and_l_to_X( + (tempc == _YE ? YE : tempc == _IE ? IE : YEE)); break; } } @@ -1329,11 +935,9 @@ int fkmap(int c) } if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) { - tempc = (tempc == _YE ? YE_ : - (tempc == _IE ? IE_ : YEE_)); + tempc = (tempc == _YE ? YE_ : tempc == _IE ? IE_ : YEE_); } else { - tempc = (tempc == _YE ? YE : - (tempc == _IE ? IE : YEE)); + tempc = (tempc == _YE ? YE : tempc == _IE ? IE : YEE); } if (p_ri) { @@ -1342,7 +946,7 @@ int fkmap(int c) inc_cursor(); } - put_curr_and_l_to_X(tempc); + put_curr_and_l_to_X((char_u)tempc); break; } @@ -1353,200 +957,70 @@ int fkmap(int c) 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; + 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 '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(get_cursor_line_ptr())) { @@ -1621,7 +1095,6 @@ int fkmap(int c) return tempc; case 'i': - if (!curwin->w_cursor.col && STRLEN(get_cursor_line_ptr())) { if (!p_ri && !F_is_TyE(tempc)) { chg_c_to_X_orX_(); @@ -1656,7 +1129,6 @@ int fkmap(int c) break; case 'J': - if (!curwin->w_cursor.col && STRLEN(get_cursor_line_ptr())) { if (p_ri) { chg_c_to_X_or_X(); @@ -1683,50 +1155,18 @@ int fkmap(int c) 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 '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(get_cursor_line_ptr())) { @@ -1758,19 +1198,11 @@ int fkmap(int c) } break; - case 'v': - case 'V': - tempc = RE; - break; - - case 'w': - tempc = _SAD; - break; - - case 'x': - case 'X': - tempc = _TA; - 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(get_cursor_line_ptr())) { @@ -1803,33 +1235,13 @@ int fkmap(int c) 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; + 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))) { @@ -1871,99 +1283,50 @@ int fkmap(int c) /// @param c The character to convert. /// /// @return The non-leading Farsi character converted to a leading type. -static int toF_leading(int c) +static char_u toF_leading(char_u c) { - switch (c) { - case ALEF_: - return ALEF; - - case ALEF_U_H_: - return ALEF_U_H; - - case BE: - return _BE; - - case PE: - return _PE; + char_u tempc; - 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; + switch (c) { + case ALEF_ : tempc = ALEF ; break; + case ALEF_U_H_ : tempc = ALEF_U_H ; break; + 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 AYN : + case AYN_ : + case _AYN_ : tempc = _AYN ; break; + case GHAYN : + case GHAYN_ : + case _GHAYN_ : tempc = _GHAYN ; break; + case FE : tempc = _FE ; break; + case GHAF : tempc = _GHAF ; break; + case KAF : tempc = _KAF ; break; + case GAF : tempc = _GAF ; break; + case LAM : tempc = _LAM ; break; + case MIM : tempc = _MIM ; break; + case NOON : tempc = _NOON ; break; + case _HE_ : + case F_HE : tempc = _HE ; break; + case YE : + case YE_ : tempc = _YE ; break; + case IE_ : + case IE : tempc = _IE ; break; + case YEE : + case YEE_ : tempc = _YEE ; break; + default : tempc = c; } - return c; + + return tempc; } /// Convert a given Farsi char into right joining type. @@ -1971,102 +1334,51 @@ static int toF_leading(int c) /// @param c The character to convert. /// /// @return The Farsi character converted into a right joining type -static int toF_Rjoin(int c) +static char_u toF_Rjoin(char_u 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; + char_u 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: - 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; + switch (c) { + case ALEF : tempc = ALEF_ ; break; + case ALEF_U_H : tempc = ALEF_U_H_ ; break; + 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 AYN : + case AYN_ : + case _AYN : tempc = _AYN_ ; break; + case GHAYN : + case GHAYN_ : + case _GHAYN_ : tempc = _GHAYN_ ; break; + case FE : tempc = _FE ; break; + case GHAF : tempc = _GHAF ; break; + case KAF : tempc = _KAF ; break; + case GAF : tempc = _GAF ; break; + case LAM : tempc = _LAM ; break; + case MIM : tempc = _MIM ; break; + case NOON : tempc = _NOON ; break; + case _HE : + case F_HE : tempc = _HE_ ; break; + case YE : + case YE_ : tempc = _YE ; break; + case IE_ : + case IE : tempc = _IE ; break; + case TEE : tempc = TEE_ ; break; + case YEE : + case YEE_ : tempc = _YEE ; break; + default : tempc = c ; } - return c; + + return tempc; } /// Can a given Farsi character join via its left edj. @@ -2074,7 +1386,7 @@ static int toF_Rjoin(int c) /// @param c The character to check. /// /// @return true if the character can join via its left edj. -static bool canF_Ljoin(int c) +static bool canF_Ljoin(char_u c) { switch (c) { case _BE: @@ -2148,7 +1460,7 @@ static bool canF_Ljoin(int c) /// @param c /// /// @return true if the character can join via its right edj. -static bool canF_Rjoin(int c) +static bool canF_Rjoin(char_u c) { switch (c) { case ALEF: @@ -2174,7 +1486,7 @@ static bool canF_Rjoin(int c) /// @param c /// /// @return true if the character is a terminating type. -static bool F_isterm(int c) +static bool F_isterm(char_u c) { switch (c) { case ALEF: @@ -2200,105 +1512,48 @@ static bool F_isterm(int c) /// @param c The character to convert. /// /// @return The character converted into an ending type. -static int toF_ending(int c) +static char_u toF_ending(char_u 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; + char_u tempc; - 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; + switch (c) { + 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 _AYN : tempc = AYN ; break; + case _AYN_ : tempc = AYN_ ; break; + case _GHAYN : tempc = GHAYN ; break; + case _GHAYN_ : tempc = GHAYN_ ; 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 _LAM : tempc = LAM ; break; + case _MIM : tempc = MIM ; break; + case _NOON : tempc = NOON ; break; + case _YE : tempc = YE_ ; break; + case YE_ : tempc = YE ; break; + case _YEE : tempc = YEE_ ; break; + case YEE_ : tempc = YEE ; break; + case TEE : tempc = TEE_ ; break; + case _IE : tempc = IE_ ; break; + case IE_ : tempc = IE ; break; + case _HE : + case _HE_ : tempc = F_HE ; break; + default : tempc = c ; } - return c; + + return tempc; } /// Convert the Farsi 3342 standard into Farsi VIM. @@ -2369,7 +1624,7 @@ void conv_to_pstd(void) static void lrswapbuf(char_u *buf, int len) { char_u *s, *e; - int c; + char_u c; s = buf; e = buf + len - 1; @@ -2442,6 +1697,7 @@ char_u* lrF_sub(char_u *ibuf) // Find the boundary of the search path while (((p = vim_strchr(p + 1, '/')) != NULL) && p[-1] == '\\') { + // empty } if (p == NULL) { @@ -2560,15 +1816,15 @@ int cmdl_fkmap(int c) case _NOON: case _HE: case _HE_: - cmd_pchar(toF_TyA(tempc), AT_CURSOR); + cmd_pchar(toF_TyA((char_u)tempc), AT_CURSOR); break; case _AYN_: - cmd_pchar(AYN_, AT_CURSOR); + cmd_pchar(AYN_, AT_CURSOR); break; case _GHAYN_: - cmd_pchar(GHAYN_, AT_CURSOR); + cmd_pchar(GHAYN_, AT_CURSOR); break; case _IE: @@ -2596,190 +1852,70 @@ int cmdl_fkmap(int c) } 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 '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': - 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 '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) { @@ -2823,39 +1959,18 @@ int cmdl_fkmap(int c) 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 '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)) { @@ -2864,16 +1979,11 @@ int cmdl_fkmap(int c) return _AYN; } - case 'v': - case 'V': - return RE; - - case 'w': - return _SAD; - - case 'x': - case 'X': - return _TA; + 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)) { @@ -2882,24 +1992,13 @@ int cmdl_fkmap(int c) return _GHAYN; } - case 'z': - case 'Z': - return _ZA; - - case ';': - return _KAF; - - case '\'': - return _GAF; - - case ',': - return WAW; - - case '[': - return _JIM; - - case ']': - return _CHE; + case 'z' : + case 'Z' : return _ZA ; + case ';' : return _KAF ; + case '\'' : return _GAF ; + case ',' : return WAW ; + case '[' : return _JIM ; + case ']' : return _CHE ; } return c; diff --git a/src/nvim/fold.c b/src/nvim/fold.c index 267c586543..281e5b5768 100644 --- a/src/nvim/fold.c +++ b/src/nvim/fold.c @@ -114,9 +114,9 @@ static int prev_lnum_lvl = -1; #define DONE_ACTION 1 /* did close or open a fold */ #define DONE_FOLD 2 /* did find a fold */ -static int foldstartmarkerlen; +static size_t foldstartmarkerlen; static char_u *foldendmarker; -static int foldendmarkerlen; +static size_t foldendmarkerlen; /* Exported folding functions. {{{1 */ /* copyFoldingState() {{{2 */ @@ -622,7 +622,7 @@ void foldCreate(linenr_T start, linenr_T end) if (end_rel < fp[cont - 1].fd_top + fp[cont - 1].fd_len - 1) end_rel = fp[cont - 1].fd_top + fp[cont - 1].fd_len - 1; /* Move contained folds to inside new fold. */ - memmove(fold_ga.ga_data, fp, sizeof(fold_T) * cont); + memmove(fold_ga.ga_data, fp, sizeof(fold_T) * (size_t)cont); fold_ga.ga_len += cont; i += cont; @@ -634,7 +634,7 @@ void foldCreate(linenr_T start, linenr_T end) /* Move remaining entries to after the new fold. */ if (i < gap->ga_len) memmove(fp + 1, (fold_T *)gap->ga_data + i, - sizeof(fold_T) * (gap->ga_len - i)); + sizeof(fold_T) * (size_t)(gap->ga_len - i)); gap->ga_len = gap->ga_len + 1 - cont; /* insert new fold */ @@ -1051,7 +1051,7 @@ static int foldFind(garray_T *gap, linenr_T lnum, fold_T **fpp) low = 0; high = gap->ga_len - 1; while (low <= high) { - int i = (low + high) / 2; + linenr_T i = (low + high) / 2; if (fp[i].fd_top > lnum) /* fold below lnum, adjust high */ high = i - 1; @@ -1292,7 +1292,6 @@ static void deleteFoldEntry(garray_T *gap, int idx, int recursive) { fold_T *fp; int i; - long moved; fold_T *nfp; fp = (fold_T *)gap->ga_data + idx; @@ -1301,12 +1300,12 @@ static void deleteFoldEntry(garray_T *gap, int idx, int recursive) deleteFoldRecurse(&fp->fd_nested); --gap->ga_len; if (idx < gap->ga_len) - memmove(fp, fp + 1, sizeof(fold_T) * (gap->ga_len - idx)); + memmove(fp, fp + 1, sizeof(fold_T) * (size_t)(gap->ga_len - idx)); } else { /* Move nested folds one level up, to overwrite the fold that is * deleted. */ - moved = fp->fd_nested.ga_len; - ga_grow(gap, (int)(moved - 1)); + int moved = fp->fd_nested.ga_len; + ga_grow(gap, moved - 1); { /* Get "fp" again, the array may have been reallocated. */ fp = (fold_T *)gap->ga_data + idx; @@ -1324,9 +1323,9 @@ static void deleteFoldEntry(garray_T *gap, int idx, int recursive) /* move the existing folds down to make room */ if (idx + 1 < gap->ga_len) memmove(fp + moved, fp + 1, - sizeof(fold_T) * (gap->ga_len - (idx + 1))); + sizeof(fold_T) * (size_t)(gap->ga_len - (idx + 1))); /* move the contained folds one level up */ - memmove(fp, nfp, (size_t)(sizeof(fold_T) * moved)); + memmove(fp, nfp, sizeof(fold_T) * (size_t)moved); free(nfp); gap->ga_len += moved - 1; } @@ -1584,17 +1583,16 @@ static void foldCreateMarkers(linenr_T start, linenr_T end) /* * Add "marker[markerlen]" in 'commentstring' to line "lnum". */ -static void foldAddMarker(linenr_T lnum, char_u *marker, int markerlen) +static void foldAddMarker(linenr_T lnum, char_u *marker, size_t markerlen) { char_u *cms = curbuf->b_p_cms; char_u *line; - int line_len; char_u *newline; char_u *p = (char_u *)strstr((char *)curbuf->b_p_cms, "%s"); /* Allocate a new line: old-line + 'cms'-start + marker + 'cms'-end */ line = ml_get(lnum); - line_len = (int)STRLEN(line); + size_t line_len = STRLEN(line); if (u_save(lnum - 1, lnum + 1) == OK) { newline = xmalloc(line_len + markerlen + STRLEN(cms) + 1); @@ -1629,8 +1627,8 @@ deleteFoldMarkers ( } } foldDelMarker(fp->fd_top + lnum_off, curwin->w_p_fmr, foldstartmarkerlen); - foldDelMarker(fp->fd_top + lnum_off + fp->fd_len - 1, - foldendmarker, foldendmarkerlen); + foldDelMarker(fp->fd_top + lnum_off + fp->fd_len - 1, foldendmarker, + foldendmarkerlen); } /* foldDelMarker() {{{2 */ @@ -1640,7 +1638,7 @@ deleteFoldMarkers ( * If the marker is not found, there is no error message. Could a missing * close-marker. */ -static void foldDelMarker(linenr_T lnum, char_u *marker, int markerlen) +static void foldDelMarker(linenr_T lnum, char_u *marker, size_t markerlen) { char_u *newline; char_u *cms = curbuf->b_p_cms; @@ -1652,7 +1650,7 @@ static void foldDelMarker(linenr_T lnum, char_u *marker, int markerlen) continue; } /* Found the marker, include a digit if it's there. */ - int len = markerlen; + size_t len = markerlen; if (VIM_ISDIGIT(p[len])) ++len; if (*cms != NUL) { @@ -1662,7 +1660,7 @@ static void foldDelMarker(linenr_T lnum, char_u *marker, int markerlen) && STRNCMP(p - (cms2 - cms), cms, cms2 - cms) == 0 && STRNCMP(p + len, cms2 + 2, STRLEN(cms2 + 2)) == 0) { p -= cms2 - cms; - len += (int)STRLEN(cms) - 2; + len += STRLEN(cms) - 2; } } if (u_save(lnum - 1, lnum + 1) == OK) { @@ -1781,27 +1779,23 @@ char_u *get_foldtext(win_T *wp, linenr_T lnum, linenr_T lnume, */ void foldtext_cleanup(char_u *str) { - char_u *cms_start; /* first part or the whole comment */ - int cms_slen = 0; /* length of cms_start */ - char_u *cms_end; /* last part of the comment or NULL */ - int cms_elen = 0; /* length of cms_end */ char_u *s; char_u *p; - int len; int did1 = FALSE; int did2 = FALSE; /* Ignore leading and trailing white space in 'commentstring'. */ - cms_start = skipwhite(curbuf->b_p_cms); - cms_slen = (int)STRLEN(cms_start); + char_u *cms_start = skipwhite(curbuf->b_p_cms); + size_t cms_slen = STRLEN(cms_start); while (cms_slen > 0 && vim_iswhite(cms_start[cms_slen - 1])) --cms_slen; /* locate "%s" in 'commentstring', use the part before and after it. */ - cms_end = (char_u *)strstr((char *)cms_start, "%s"); + char_u *cms_end = (char_u *)strstr((char *)cms_start, "%s"); + size_t cms_elen = 0; if (cms_end != NULL) { - cms_elen = cms_slen - (int)(cms_end - cms_start); - cms_slen = (int)(cms_end - cms_start); + cms_elen = cms_slen - (size_t)(cms_end - cms_start); + cms_slen = (size_t)(cms_end - cms_start); /* exclude white space before "%s" */ while (cms_slen > 0 && vim_iswhite(cms_start[cms_slen - 1])) @@ -1809,13 +1803,13 @@ void foldtext_cleanup(char_u *str) /* skip "%s" and white space after it */ s = skipwhite(cms_end + 2); - cms_elen -= (int)(s - cms_end); + cms_elen -= (size_t)(s - cms_end); cms_end = s; } parseMarker(curwin); for (s = str; *s != NUL; ) { - len = 0; + size_t len = 0; if (STRNCMP(s, curwin->w_p_fmr, foldstartmarkerlen) == 0) len = foldstartmarkerlen; else if (STRNCMP(s, foldendmarker, foldendmarkerlen) == 0) @@ -1830,7 +1824,7 @@ void foldtext_cleanup(char_u *str) ; if (p >= str + cms_slen && STRNCMP(p - cms_slen, cms_start, cms_slen) == 0) { - len += (int)(s - p) + cms_slen; + len += (size_t)(s - p) + cms_slen; s = p - cms_slen; } } else if (cms_end != NULL) { @@ -2035,8 +2029,8 @@ static void foldUpdateIEMS(win_T *wp, linenr_T top, linenr_T bot) if (fline.lvl > 0) { invalid_top = fline.lnum; invalid_bot = end; - end = foldUpdateIEMSRecurse(&wp->w_folds, - 1, start, &fline, getlevel, end, FD_LEVEL); + end = foldUpdateIEMSRecurse(&wp->w_folds, 1, start, &fline, getlevel, end, + FD_LEVEL); start = fline.lnum; } else { if (fline.lnum == wp->w_buffer->b_ml.ml_line_count) @@ -2095,7 +2089,7 @@ static linenr_T foldUpdateIEMSRecurse(garray_T *gap, int level, linenr_T startlnum, fline_T *flp, LevelGetter getlevel, linenr_T bot, - int topflags /* flags used by containing fold */ + char topflags /* containing fold flags */ ) { linenr_T ll; @@ -2333,8 +2327,8 @@ static linenr_T foldUpdateIEMSRecurse(garray_T *gap, int level, flp->off += fp->fd_top; i = (int)(fp - (fold_T *)gap->ga_data); bot = foldUpdateIEMSRecurse(&fp->fd_nested, level + 1, - startlnum2 - fp->fd_top, flp, getlevel, - bot - fp->fd_top, fp->fd_flags); + startlnum2 - fp->fd_top, flp, getlevel, + bot - fp->fd_top, fp->fd_flags); fp = (fold_T *)gap->ga_data + i; flp->lnum += fp->fd_top; flp->lnum_save += fp->fd_top; @@ -2468,7 +2462,7 @@ static void foldInsert(garray_T *gap, int i) fp = (fold_T *)gap->ga_data + i; if (i < gap->ga_len) - memmove(fp + 1, fp, sizeof(fold_T) * (gap->ga_len - i)); + memmove(fp + 1, fp, sizeof(fold_T) * (size_t)(gap->ga_len - i)); ++gap->ga_len; ga_init(&fp->fd_nested, (int)sizeof(fold_T), 10); } @@ -2649,9 +2643,7 @@ static void foldlevelIndent(fline_T *flp) } else flp->lvl = get_indent_buf(buf, lnum) / get_sw_value(curbuf); if (flp->lvl > flp->wp->w_p_fdn) { - flp->lvl = flp->wp->w_p_fdn; - if (flp->lvl < 0) - flp->lvl = 0; + flp->lvl = (int) MAX(0, flp->wp->w_p_fdn); } } @@ -2768,8 +2760,8 @@ static void foldlevelExpr(fline_T *flp) static void parseMarker(win_T *wp) { foldendmarker = vim_strchr(wp->w_p_fmr, ','); - foldstartmarkerlen = (int)(foldendmarker++ - wp->w_p_fmr); - foldendmarkerlen = (int)STRLEN(foldendmarker); + foldstartmarkerlen = (size_t)(foldendmarker++ - wp->w_p_fmr); + foldendmarkerlen = STRLEN(foldendmarker); } /* foldlevelMarker() {{{2 */ @@ -2822,9 +2814,8 @@ static void foldlevelMarker(fline_T *flp) ++flp->lvl_next; ++flp->start; } - } else if (*s == cend - && STRNCMP(s + 1, foldendmarker + 1, - foldendmarkerlen - 1) == 0) { + } else if (*s == cend && STRNCMP(s + 1, foldendmarker + 1, + foldendmarkerlen - 1) == 0) { /* found endmarker: set flp->lvl_next */ s += foldendmarkerlen; if (VIM_ISDIGIT(*s)) { diff --git a/src/nvim/fold.h b/src/nvim/fold.h index 1cbd7af5da..2ff10c0e91 100644 --- a/src/nvim/fold.h +++ b/src/nvim/fold.h @@ -1,14 +1,16 @@ #ifndef NVIM_FOLD_H #define NVIM_FOLD_H +#include "nvim/pos.h" + /* * Info used to pass info about a fold from the fold-detection code to the * code that displays the foldcolumn. */ typedef struct foldinfo { + linenr_T fi_lnum; /* line number where fold starts */ int fi_level; /* level of the fold; when this is zero the other fields are invalid */ - int fi_lnum; /* line number where fold starts */ int fi_low_level; /* lowest fold level that starts in the same line */ } foldinfo_T; diff --git a/src/nvim/indent_c.c b/src/nvim/indent_c.c index 8310f635c9..3b9214abc1 100644 --- a/src/nvim/indent_c.c +++ b/src/nvim/indent_c.c @@ -1332,7 +1332,7 @@ void parse_cino(buf_T *buf) char_u *l; int divider; int fraction = 0; - int sw = (int)get_sw_value(buf); + int sw = get_sw_value(buf); /* * Set the default values. diff --git a/src/nvim/misc1.c b/src/nvim/misc1.c index 5d8b88601e..e58ec71e77 100644 --- a/src/nvim/misc1.c +++ b/src/nvim/misc1.c @@ -796,7 +796,7 @@ open_line ( ) { ++curwin->w_cursor.lnum; if (did_si) { - int sw = (int)get_sw_value(curbuf); + int sw = get_sw_value(curbuf); if (p_sr) newindent -= newindent % sw; diff --git a/src/nvim/move.c b/src/nvim/move.c index 1ba064c65f..65f2853073 100644 --- a/src/nvim/move.c +++ b/src/nvim/move.c @@ -16,6 +16,7 @@ * The 'scrolloff' option makes this a bit complicated. */ +#include <assert.h> #include <inttypes.h> #include <stdbool.h> @@ -135,13 +136,13 @@ void update_topline(void) { long line_count; int halfheight; - int n; + long n; linenr_T old_topline; int old_topfill; linenr_T lnum; int check_topline = FALSE; int check_botline = FALSE; - int save_so = p_so; + long save_so = p_so; if (!screen_valid(TRUE)) return; @@ -342,9 +343,9 @@ void update_topline_win(win_T* win) */ static int scrolljump_value(void) { - if (p_sj >= 0) - return (int)p_sj; - return (curwin->w_height * -p_sj) / 100; + long result = p_sj >= 0 ? p_sj : (curwin->w_height * -p_sj) / 100; + assert(result <= INT_MAX); + return (int)result; } /* @@ -711,7 +712,7 @@ int win_col_off(win_T *wp) { return ((wp->w_p_nu || wp->w_p_rnu) ? number_width(wp) + 1 : 0) + (cmdwin_type == 0 || wp != curwin ? 0 : 1) - + wp->w_p_fdc + + (int)wp->w_p_fdc + (wp->w_buffer->b_signlist != NULL ? 2 : 0) ; } @@ -831,9 +832,9 @@ curs_columns ( * If we get closer to the edge than 'sidescrolloff', scroll a little * extra */ - off_left = (int)startcol - (int)curwin->w_leftcol - p_siso; - off_right = (int)endcol - (int)(curwin->w_leftcol + curwin->w_width - - p_siso) + 1; + assert(p_siso <= INT_MAX); + off_left = startcol - curwin->w_leftcol - (int)p_siso; + off_right = endcol - curwin->w_leftcol - curwin->w_width + (int)p_siso + 1; if (off_left < 0 || off_right > 0) { if (off_left < 0) diff = -off_left; @@ -845,8 +846,10 @@ curs_columns ( if (p_ss == 0 || diff >= textwidth / 2 || off_right >= off_left) new_leftcol = curwin->w_wcol - extra - textwidth / 2; else { - if (diff < p_ss) - diff = p_ss; + if (diff < p_ss) { + assert(p_ss <= INT_MAX); + diff = (int)p_ss; + } if (off_left < 0) new_leftcol = curwin->w_leftcol - diff; else @@ -902,8 +905,10 @@ curs_columns ( if (p_lines == 0) p_lines = plines_win(curwin, curwin->w_cursor.lnum, FALSE); --p_lines; - if (p_lines > curwin->w_wrow + p_so) - n = curwin->w_wrow + p_so; + if (p_lines > curwin->w_wrow + p_so) { + assert(p_so <= INT_MAX); + n = curwin->w_wrow + (int)p_so; + } else n = p_lines; if ((colnr_T)n >= curwin->w_height + curwin->w_skipcol / width) @@ -922,7 +927,8 @@ curs_columns ( curwin->w_skipcol = n * width; } else if (extra == 1) { /* less then 'scrolloff' lines above, decrease skipcol */ - extra = (curwin->w_skipcol + p_so * width - curwin->w_virtcol + assert(p_so <= INT_MAX); + extra = (curwin->w_skipcol + (int)p_so * width - curwin->w_virtcol + width - 1) / width; if (extra > 0) { if ((colnr_T)(extra * width) > curwin->w_skipcol) @@ -974,7 +980,7 @@ scrolldown ( int byfold /* TRUE: count a closed fold as one line */ ) { - long done = 0; /* total # of physical lines done */ + int done = 0; /* total # of physical lines done */ int wrow; int moved = FALSE; @@ -1331,7 +1337,8 @@ void scroll_cursor_top(int min_scroll, int always) linenr_T old_topline = curwin->w_topline; linenr_T old_topfill = curwin->w_topfill; linenr_T new_topline; - int off = p_so; + assert(p_so <= INT_MAX); + int off = (int)p_so; if (mouse_dragging > 0) off = mouse_dragging - 1; @@ -1472,7 +1479,7 @@ void scroll_cursor_bot(int min_scroll, int set_topbot) int old_topfill = curwin->w_topfill; int fill_below_window; linenr_T old_botline = curwin->w_botline; - linenr_T old_valid = curwin->w_valid; + int old_valid = curwin->w_valid; int old_empty_rows = curwin->w_empty_rows; linenr_T cln; /* Cursor Line Number */ @@ -1708,8 +1715,9 @@ void cursor_correct(void) * How many lines we would like to have above/below the cursor depends on * whether the first/last line of the file is on screen. */ - above_wanted = p_so; - below_wanted = p_so; + assert(p_so <= INT_MAX); + above_wanted = (int)p_so; + below_wanted = (int)p_so; if (mouse_dragging > 0) { above_wanted = mouse_dragging - 1; below_wanted = mouse_dragging - 1; @@ -2040,14 +2048,14 @@ void halfpage(bool flag, linenr_T Prenum) { long scrolled = 0; int i; - int n; int room; if (Prenum) curwin->w_p_scr = (Prenum > curwin->w_height) ? curwin->w_height : Prenum; - n = (curwin->w_p_scr <= curwin->w_height) ? - curwin->w_p_scr : curwin->w_height; + assert(curwin->w_p_scr <= INT_MAX); + int n = curwin->w_p_scr <= curwin->w_height ? (int)curwin->w_p_scr + : curwin->w_height; validate_botline(); room = curwin->w_empty_rows; diff --git a/src/nvim/ops.c b/src/nvim/ops.c index 5921e27282..4c5a002f81 100644 --- a/src/nvim/ops.c +++ b/src/nvim/ops.c @@ -278,7 +278,7 @@ shift_line ( { int count; int i, j; - int p_sw = (int)get_sw_value(curbuf); + int p_sw = get_sw_value(curbuf); count = get_indent(); /* get current indent */ @@ -321,7 +321,7 @@ static void shift_block(oparg_T *oap, int amount) int total; char_u *newp, *oldp; int oldcol = curwin->w_cursor.col; - int p_sw = (int)get_sw_value(curbuf); + int p_sw = get_sw_value(curbuf); int p_ts = (int)curbuf->b_p_ts; struct block_def bd; int incr; diff --git a/src/nvim/option.c b/src/nvim/option.c index 2d016d8350..929b96a3f8 100644 --- a/src/nvim/option.c +++ b/src/nvim/option.c @@ -7653,18 +7653,22 @@ int check_ff_value(char_u *p) * Return the effective shiftwidth value for current buffer, using the * 'tabstop' value when 'shiftwidth' is zero. */ -long get_sw_value(buf_T *buf) +int get_sw_value(buf_T *buf) { - return buf->b_p_sw ? buf->b_p_sw : buf->b_p_ts; + long result = buf->b_p_sw ? buf->b_p_sw : buf->b_p_ts; + assert(result >= 0 && result <= INT_MAX); + return (int)result; } /* * Return the effective softtabstop value for the current buffer, using the * 'tabstop' value when 'softtabstop' is negative. */ -long get_sts_value(void) +int get_sts_value(void) { - return curbuf->b_p_sts < 0 ? get_sw_value(curbuf) : curbuf->b_p_sts; + long result = curbuf->b_p_sts < 0 ? get_sw_value(curbuf) : curbuf->b_p_sts; + assert(result >= 0 && result <= INT_MAX); + return (int)result; } /* diff --git a/src/nvim/popupmnu.c b/src/nvim/popupmnu.c index 1ea12d6862..7ef962fa2f 100644 --- a/src/nvim/popupmnu.c +++ b/src/nvim/popupmnu.c @@ -2,6 +2,7 @@ /// /// Popup menu (PUM) // +#include <assert.h> #include <inttypes.h> #include <stdbool.h> @@ -101,7 +102,7 @@ redo: } if ((p_ph > 0) && (pum_height > p_ph)) { - pum_height = p_ph; + pum_height = (int)p_ph; } // Put the pum below "row" if possible. If there are few lines decide on @@ -126,8 +127,8 @@ redo: } if ((p_ph > 0) && (pum_height > p_ph)) { - pum_row += pum_height - p_ph; - pum_height = p_ph; + pum_row += pum_height - (int)p_ph; + pum_height = (int)p_ph; } } else { // pum below "row" @@ -148,7 +149,7 @@ redo: } if ((p_ph > 0) && (pum_height > p_ph)) { - pum_height = p_ph; + pum_height = (int)p_ph; } } @@ -219,7 +220,9 @@ redo: if (curwin->w_p_rl) { pum_width = pum_col - pum_scrollbar + 1; } else { - pum_width = Columns - pum_col - pum_scrollbar; + assert(Columns - pum_col - pum_scrollbar >= INT_MIN + && Columns - pum_col - pum_scrollbar <= INT_MAX); + pum_width = (int)(Columns - pum_col - pum_scrollbar); } if ((pum_width > max_width + kind_width + extra_width + 1) @@ -233,11 +236,13 @@ redo: } else if (Columns < def_width) { // not enough room, will use what we have if (curwin->w_p_rl) { - pum_col = Columns - 1; + assert(Columns - 1 >= INT_MIN); + pum_col = (int)(Columns - 1); } else { pum_col = 0; } - pum_width = Columns - 1; + assert(Columns - 1 >= INT_MIN); + pum_width = (int)(Columns - 1); } else { if (max_width > PUM_DEF_WIDTH) { // truncate @@ -247,7 +252,8 @@ redo: if (curwin->w_p_rl) { pum_col = max_width - 1; } else { - pum_col = Columns - max_width; + assert(Columns - max_width >= INT_MIN && Columns - max_width <= INT_MAX); + pum_col = (int)(Columns - max_width); } pum_width = max_width - pum_scrollbar; } @@ -345,7 +351,7 @@ void pum_redraw(void) // Display the text that fits or comes before a Tab. // First convert it to printable characters. char_u *st; - int saved = *p; + char_u saved = *p; *p = NUL; st = transstr(s); @@ -535,7 +541,7 @@ static int pum_set_selected(int n, int repeat) g_do_tagpreview = 3; if ((p_pvh > 0) && (p_pvh < g_do_tagpreview)) { - g_do_tagpreview = p_pvh; + g_do_tagpreview = (int)p_pvh; } RedrawingDisabled++; resized = prepare_tagpreview(false); |