mirror of
https://github.com/neovim/neovim.git
synced 2024-12-31 17:13:26 -07:00
refactor(option.c): factor out option name parsing
This commit is contained in:
parent
9a9129c60b
commit
2c601787ab
@ -1192,18 +1192,18 @@ static int get_option_prefix(char **argp)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void do_set_option(int opt_flags, char **argp, bool *did_show, char *errbuf,
|
/// @param[in] arg Pointer to start option name
|
||||||
size_t errbuflen, char **errmsg)
|
/// @param[out] opt_idxp Option index in options[] table.
|
||||||
|
/// @param[out] keyp
|
||||||
|
/// @param[out] len Length of option name
|
||||||
|
/// @return FAIL if an error is detected, OK otherwise
|
||||||
|
static int parse_option_name(char *arg, int *keyp, int *lenp, int *opt_idxp)
|
||||||
{
|
{
|
||||||
// 1: nothing, 0: "no", 2: "inv" in front of name
|
|
||||||
int prefix = get_option_prefix(argp);
|
|
||||||
|
|
||||||
char *arg = *argp;
|
|
||||||
|
|
||||||
// find end of name
|
// find end of name
|
||||||
int key = 0;
|
int key = 0;
|
||||||
int len;
|
int len;
|
||||||
int opt_idx;
|
int opt_idx;
|
||||||
|
|
||||||
if (*arg == '<') {
|
if (*arg == '<') {
|
||||||
opt_idx = -1;
|
opt_idx = -1;
|
||||||
// look out for <t_>;>
|
// look out for <t_>;>
|
||||||
@ -1216,8 +1216,7 @@ static void do_set_option(int opt_flags, char **argp, bool *did_show, char *errb
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (arg[len] != '>') {
|
if (arg[len] != '>') {
|
||||||
*errmsg = e_invarg;
|
return FAIL;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
if (arg[1] == 't' && arg[2] == '_') { // could be term code
|
if (arg[1] == 't' && arg[2] == '_') { // could be term code
|
||||||
opt_idx = findoption_len((const char *)arg + 1, (size_t)(len - 1));
|
opt_idx = findoption_len((const char *)arg + 1, (size_t)(len - 1));
|
||||||
@ -1242,6 +1241,30 @@ static void do_set_option(int opt_flags, char **argp, bool *did_show, char *errb
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*keyp = key;
|
||||||
|
*lenp = len;
|
||||||
|
*opt_idxp = opt_idx;
|
||||||
|
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void do_set_option(int opt_flags, char **argp, bool *did_show, char *errbuf,
|
||||||
|
size_t errbuflen, char **errmsg)
|
||||||
|
{
|
||||||
|
// 1: nothing, 0: "no", 2: "inv" in front of name
|
||||||
|
int prefix = get_option_prefix(argp);
|
||||||
|
|
||||||
|
char *arg = *argp;
|
||||||
|
|
||||||
|
// find end of name
|
||||||
|
int key = 0;
|
||||||
|
int len;
|
||||||
|
int opt_idx;
|
||||||
|
if (parse_option_name(arg, &key, &len, &opt_idx) == FAIL) {
|
||||||
|
*errmsg = e_invarg;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// remember character after option name
|
// remember character after option name
|
||||||
int afterchar = (uint8_t)arg[len];
|
int afterchar = (uint8_t)arg[len];
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user