diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2018-08-15 10:26:21 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-15 10:26:21 +0200 |
commit | bdcd3c31c6b264e5925eee28d6386fb72d14921b (patch) | |
tree | bf9e1345f1e446a06ccdf5f6b76a1b85b1fdb23c /src/nvim/eval.c | |
parent | 26506f14bc653a555b32e553bf458efc6402ed0b (diff) | |
parent | 538ace9aae0c3b9e7e1ef242e00c53df6ec2e7da (diff) | |
download | rneovim-bdcd3c31c6b264e5925eee28d6386fb72d14921b.tar.gz rneovim-bdcd3c31c6b264e5925eee28d6386fb72d14921b.tar.bz2 rneovim-bdcd3c31c6b264e5925eee28d6386fb72d14921b.zip |
Merge #8852 from janlazo/vim-8.1.0161
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r-- | src/nvim/eval.c | 65 |
1 files changed, 64 insertions, 1 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 22cb544f54..86f57ee5a2 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -9874,7 +9874,7 @@ static void f_getftype(typval_T *argvars, typval_T *rettv, FunPtr fptr) # endif # ifdef S_ISSOCK else if (S_ISSOCK(mode)) - t = "fifo"; + t = "socket"; # endif else t = "other"; @@ -17218,6 +17218,69 @@ error: return; } +// "trim({expr})" function +static void f_trim(typval_T *argvars, typval_T *rettv, FunPtr fptr) +{ + char buf1[NUMBUFLEN]; + char buf2[NUMBUFLEN]; + const char_u *head = (const char_u *)tv_get_string_buf_chk(&argvars[0], buf1); + const char_u *mask = NULL; + const char_u *tail; + const char_u *prev; + const char_u *p; + int c1; + + rettv->v_type = VAR_STRING; + if (head == NULL) { + rettv->vval.v_string = NULL; + return; + } + + if (argvars[1].v_type == VAR_STRING) { + mask = (const char_u *)tv_get_string_buf_chk(&argvars[1], buf2); + } + + while (*head != NUL) { + c1 = PTR2CHAR(head); + if (mask == NULL) { + if (c1 > ' ' && c1 != 0xa0) { + break; + } + } else { + for (p = mask; *p != NUL; MB_PTR_ADV(p)) { + if (c1 == PTR2CHAR(p)) { + break; + } + } + if (*p == NUL) { + break; + } + } + MB_PTR_ADV(head); + } + + for (tail = head + STRLEN(head); tail > head; tail = prev) { + prev = tail; + MB_PTR_BACK(head, prev); + c1 = PTR2CHAR(prev); + if (mask == NULL) { + if (c1 > ' ' && c1 != 0xa0) { + break; + } + } else { + for (p = mask; *p != NUL; MB_PTR_ADV(p)) { + if (c1 == PTR2CHAR(p)) { + break; + } + } + if (*p == NUL) { + break; + } + } + } + rettv->vval.v_string = vim_strnsave(head, (int)(tail - head)); +} + /* * "type(expr)" function */ |