Introduction
Introduction Statistics Contact Development Disclaimer Help
tmot: fix lbuf_pair() in lines with multi-byte characters - neatvi - [fork] sim…
git clone git://src.adamsgaard.dk/neatvi
Log
Files
Refs
README
---
commit 0cda11bd3981b5cdf7c73774420019413e9fe032
parent e4391d06a150886b08bc2fa1965957a7bb27f12a
Author: Ali Gholami Rudi <[email protected]>
Date: Wed, 1 Sep 2021 19:02:16 +0430
mot: fix lbuf_pair() in lines with multi-byte characters
Reported and tested by Kyryl Melekhin <[email protected]>.
Diffstat:
M mot.c | 19 +++++++++----------
1 file changed, 9 insertions(+), 10 deletions(-)
---
diff --git a/mot.c b/mot.c
t@@ -194,21 +194,20 @@ int lbuf_wordend(struct lbuf *lb, int big, int dir, int …
int lbuf_pair(struct lbuf *lb, int *row, int *off)
{
int r = *row, o = *off;
- char *ln = lbuf_get(lb, *row);
char *pairs = "()[]{}";
- int p; /* index for pairs[] */
+ int pchr; /* parenthesis character */
+ int pidx; /* index into pairs[] */
int dep = 1; /* parenthesis depth */
- if (!ln || !ln[o])
+ while ((pchr = (unsigned char) lbuf_chr(lb, r, o)[0]) && !strchr(pairs…
+ o++;
+ if (!pchr)
return 1;
- while (!strchr(pairs, ln[o]))
- if (!ln[++o])
- return 1;
- p = strchr(pairs, ln[o]) - pairs;
- while (!lbuf_next(lb, (p & 1) ? -1 : +1, &r, &o)) {
+ pidx = strchr(pairs, pchr) - pairs;
+ while (!lbuf_next(lb, (pidx & 1) ? -1 : +1, &r, &o)) {
int c = (unsigned char) lbuf_chr(lb, r, o)[0];
- if (c == pairs[p ^ 1])
+ if (c == pairs[pidx ^ 1])
dep--;
- if (c == pairs[p])
+ if (c == pairs[pidx])
dep++;
if (!dep) {
*row = r;
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.