Mercurial > vim
diff src/evalfunc.c @ 17218:210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
commit https://github.com/vim/vim/commit/b60d8514b8813e2f3acefd454efcccbe04ac135a
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Jun 29 07:59:04 2019 +0200
patch 8.1.1608: the evalfunc.c file is too big
Problem: The evalfunc.c file is too big.
Solution: Move sign functionality to sign.c.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 29 Jun 2019 08:00:06 +0200 |
parents | 40c4cb095d53 |
children | a8fc7d97b54d |
line wrap: on
line diff
--- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -352,15 +352,6 @@ static void f_sha256(typval_T *argvars, #endif /* FEAT_CRYPT */ static void f_shellescape(typval_T *argvars, typval_T *rettv); static void f_shiftwidth(typval_T *argvars, typval_T *rettv); -#ifdef FEAT_SIGNS -static void f_sign_define(typval_T *argvars, typval_T *rettv); -static void f_sign_getdefined(typval_T *argvars, typval_T *rettv); -static void f_sign_getplaced(typval_T *argvars, typval_T *rettv); -static void f_sign_jump(typval_T *argvars, typval_T *rettv); -static void f_sign_place(typval_T *argvars, typval_T *rettv); -static void f_sign_undefine(typval_T *argvars, typval_T *rettv); -static void f_sign_unplace(typval_T *argvars, typval_T *rettv); -#endif static void f_simplify(typval_T *argvars, typval_T *rettv); #ifdef FEAT_FLOAT static void f_sin(typval_T *argvars, typval_T *rettv); @@ -1181,7 +1172,7 @@ non_zero_arg(typval_T *argvars) * Also accepts ".", "$", etc., but that only works for the current buffer. * Returns -1 on error. */ - static linenr_T + linenr_T tv_get_lnum(typval_T *argvars) { typval_T rettv; @@ -11609,359 +11600,6 @@ f_shiftwidth(typval_T *argvars UNUSED, t rettv->vval.v_number = get_sw_value(curbuf); } -#ifdef FEAT_SIGNS -/* - * "sign_define()" function - */ - static void -f_sign_define(typval_T *argvars, typval_T *rettv) -{ - char_u *name; - dict_T *dict; - char_u *icon = NULL; - char_u *linehl = NULL; - char_u *text = NULL; - char_u *texthl = NULL; - - rettv->vval.v_number = -1; - - name = tv_get_string_chk(&argvars[0]); - if (name == NULL) - return; - - if (argvars[1].v_type != VAR_UNKNOWN) - { - if (argvars[1].v_type != VAR_DICT) - { - emsg(_(e_dictreq)); - return; - } - - // sign attributes - dict = argvars[1].vval.v_dict; - if (dict_find(dict, (char_u *)"icon", -1) != NULL) - icon = dict_get_string(dict, (char_u *)"icon", TRUE); - if (dict_find(dict, (char_u *)"linehl", -1) != NULL) - linehl = dict_get_string(dict, (char_u *)"linehl", TRUE); - if (dict_find(dict, (char_u *)"text", -1) != NULL) - text = dict_get_string(dict, (char_u *)"text", TRUE); - if (dict_find(dict, (char_u *)"texthl", -1) != NULL) - texthl = dict_get_string(dict, (char_u *)"texthl", TRUE); - } - - if (sign_define_by_name(name, icon, linehl, text, texthl) == OK) - rettv->vval.v_number = 0; - - vim_free(icon); - vim_free(linehl); - vim_free(text); - vim_free(texthl); -} - -/* - * "sign_getdefined()" function - */ - static void -f_sign_getdefined(typval_T *argvars, typval_T *rettv) -{ - char_u *name = NULL; - - if (rettv_list_alloc_id(rettv, aid_sign_getdefined) != OK) - return; - - if (argvars[0].v_type != VAR_UNKNOWN) - name = tv_get_string(&argvars[0]); - - sign_getlist(name, rettv->vval.v_list); -} - -/* - * "sign_getplaced()" function - */ - static void -f_sign_getplaced(typval_T *argvars, typval_T *rettv) -{ - buf_T *buf = NULL; - dict_T *dict; - dictitem_T *di; - linenr_T lnum = 0; - int sign_id = 0; - char_u *group = NULL; - int notanum = FALSE; - - if (rettv_list_alloc_id(rettv, aid_sign_getplaced) != OK) - return; - - if (argvars[0].v_type != VAR_UNKNOWN) - { - // get signs placed in the specified buffer - buf = get_buf_arg(&argvars[0]); - if (buf == NULL) - return; - - if (argvars[1].v_type != VAR_UNKNOWN) - { - if (argvars[1].v_type != VAR_DICT || - ((dict = argvars[1].vval.v_dict) == NULL)) - { - emsg(_(e_dictreq)); - return; - } - if ((di = dict_find(dict, (char_u *)"lnum", -1)) != NULL) - { - // get signs placed at this line - (void)tv_get_number_chk(&di->di_tv, ¬anum); - if (notanum) - return; - lnum = tv_get_lnum(&di->di_tv); - } - if ((di = dict_find(dict, (char_u *)"id", -1)) != NULL) - { - // get sign placed with this identifier - sign_id = (int)tv_get_number_chk(&di->di_tv, ¬anum); - if (notanum) - return; - } - if ((di = dict_find(dict, (char_u *)"group", -1)) != NULL) - { - group = tv_get_string_chk(&di->di_tv); - if (group == NULL) - return; - if (*group == '\0') // empty string means global group - group = NULL; - } - } - } - - sign_get_placed(buf, lnum, sign_id, group, rettv->vval.v_list); -} - -/* - * "sign_jump()" function - */ - static void -f_sign_jump(typval_T *argvars, typval_T *rettv) -{ - int sign_id; - char_u *sign_group = NULL; - buf_T *buf; - int notanum = FALSE; - - rettv->vval.v_number = -1; - - // Sign identifier - sign_id = (int)tv_get_number_chk(&argvars[0], ¬anum); - if (notanum) - return; - if (sign_id <= 0) - { - emsg(_(e_invarg)); - return; - } - - // Sign group - sign_group = tv_get_string_chk(&argvars[1]); - if (sign_group == NULL) - return; - if (sign_group[0] == '\0') - sign_group = NULL; // global sign group - else - { - sign_group = vim_strsave(sign_group); - if (sign_group == NULL) - return; - } - - // Buffer to place the sign - buf = get_buf_arg(&argvars[2]); - if (buf == NULL) - goto cleanup; - - rettv->vval.v_number = sign_jump(sign_id, sign_group, buf); - -cleanup: - vim_free(sign_group); -} - -/* - * "sign_place()" function - */ - static void -f_sign_place(typval_T *argvars, typval_T *rettv) -{ - int sign_id; - char_u *group = NULL; - char_u *sign_name; - buf_T *buf; - dict_T *dict; - dictitem_T *di; - linenr_T lnum = 0; - int prio = SIGN_DEF_PRIO; - int notanum = FALSE; - - rettv->vval.v_number = -1; - - // Sign identifier - sign_id = (int)tv_get_number_chk(&argvars[0], ¬anum); - if (notanum) - return; - if (sign_id < 0) - { - emsg(_(e_invarg)); - return; - } - - // Sign group - group = tv_get_string_chk(&argvars[1]); - if (group == NULL) - return; - if (group[0] == '\0') - group = NULL; // global sign group - else - { - group = vim_strsave(group); - if (group == NULL) - return; - } - - // Sign name - sign_name = tv_get_string_chk(&argvars[2]); - if (sign_name == NULL) - goto cleanup; - - // Buffer to place the sign - buf = get_buf_arg(&argvars[3]); - if (buf == NULL) - goto cleanup; - - if (argvars[4].v_type != VAR_UNKNOWN) - { - if (argvars[4].v_type != VAR_DICT || - ((dict = argvars[4].vval.v_dict) == NULL)) - { - emsg(_(e_dictreq)); - goto cleanup; - } - - // Line number where the sign is to be placed - if ((di = dict_find(dict, (char_u *)"lnum", -1)) != NULL) - { - (void)tv_get_number_chk(&di->di_tv, ¬anum); - if (notanum) - goto cleanup; - lnum = tv_get_lnum(&di->di_tv); - } - if ((di = dict_find(dict, (char_u *)"priority", -1)) != NULL) - { - // Sign priority - prio = (int)tv_get_number_chk(&di->di_tv, ¬anum); - if (notanum) - goto cleanup; - } - } - - if (sign_place(&sign_id, group, sign_name, buf, lnum, prio) == OK) - rettv->vval.v_number = sign_id; - -cleanup: - vim_free(group); -} - -/* - * "sign_undefine()" function - */ - static void -f_sign_undefine(typval_T *argvars, typval_T *rettv) -{ - char_u *name; - - rettv->vval.v_number = -1; - - if (argvars[0].v_type == VAR_UNKNOWN) - { - // Free all the signs - free_signs(); - rettv->vval.v_number = 0; - } - else - { - // Free only the specified sign - name = tv_get_string_chk(&argvars[0]); - if (name == NULL) - return; - - if (sign_undefine_by_name(name) == OK) - rettv->vval.v_number = 0; - } -} - -/* - * "sign_unplace()" function - */ - static void -f_sign_unplace(typval_T *argvars, typval_T *rettv) -{ - dict_T *dict; - dictitem_T *di; - int sign_id = 0; - buf_T *buf = NULL; - char_u *group = NULL; - - rettv->vval.v_number = -1; - - if (argvars[0].v_type != VAR_STRING) - { - emsg(_(e_invarg)); - return; - } - - group = tv_get_string(&argvars[0]); - if (group[0] == '\0') - group = NULL; // global sign group - else - { - group = vim_strsave(group); - if (group == NULL) - return; - } - - if (argvars[1].v_type != VAR_UNKNOWN) - { - if (argvars[1].v_type != VAR_DICT) - { - emsg(_(e_dictreq)); - goto cleanup; - } - dict = argvars[1].vval.v_dict; - - if ((di = dict_find(dict, (char_u *)"buffer", -1)) != NULL) - { - buf = get_buf_arg(&di->di_tv); - if (buf == NULL) - goto cleanup; - } - if (dict_find(dict, (char_u *)"id", -1) != NULL) - sign_id = dict_get_number(dict, (char_u *)"id"); - } - - if (buf == NULL) - { - // Delete the sign in all the buffers - FOR_ALL_BUFFERS(buf) - if (sign_unplace(sign_id, group, buf, 0) == OK) - rettv->vval.v_number = 0; - } - else - { - if (sign_unplace(sign_id, group, buf, 0) == OK) - rettv->vval.v_number = 0; - } - -cleanup: - vim_free(group); -} -#endif - /* * "simplify()" function */