tex: do not reorder/highlight lines longer than lim - neatvi - [fork] simple vi-type editor with UTF-8 support
(HTM) git clone git://src.adamsgaard.dk/neatvi
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
---
(DIR) commit 73484384d37bca6602d718a7aa946a01af44a56a
(DIR) parent caead42d731b8e10d6401d6028f63be6962fb0b2
(HTM) Author: Ali Gholami Rudi <ali@rudi.ir>
Date: Thu, 17 Feb 2022 12:20:49 +0330
ex: do not reorder/highlight lines longer than lim
Diffstat:
M ex.c | 2 ++
M ren.c | 22 ++++++++++++++++++++--
M vi.h | 1 +
3 files changed, 23 insertions(+), 2 deletions(-)
---
(DIR) diff --git a/ex.c b/ex.c
t@@ -22,6 +22,7 @@ int xshape = 1; /* perform letter shaping */
int xorder = 1; /* change the order of characters */
int xkmap = 0; /* the current keymap */
int xkmap_alt = 1; /* the alternate keymap */
+int xlim = 256; /* do not process lines longer than this */
static char xkwd[EXLEN]; /* the last searched keyword */
static char xrep[EXLEN]; /* the last replacement */
static int xkwddir; /* the last search direction */
t@@ -769,6 +770,7 @@ static struct option {
{"order", "xorder", &xorder},
{"hl", "highlight", &xhl},
{"hll", "highlightline", &xhll},
+ {"lim", "linelimit", &xlim},
};
static char *cutword(char *s, char *d)
(DIR) diff --git a/ren.c b/ren.c
t@@ -5,8 +5,8 @@
#include <string.h>
#include "vi.h"
-/* specify the screen position of the characters in s */
-int *ren_position(char *s)
+/* specify the screen position of the characters in s; reordering version */
+int *ren_position_reorder(char *s)
{
int i, n;
char **chrs = uc_chop(s, &n);
t@@ -30,6 +30,24 @@ int *ren_position(char *s)
return pos;
}
+/* specify the screen position of the characters in s; fast version */
+int *ren_position(char *s)
+{
+ int cpos = 0;
+ int *pos;
+ int i;
+ int n = uc_slen(s);
+ if (n <= xlim && xorder)
+ return ren_position_reorder(s);
+ pos = malloc((n + 1) * sizeof(pos[0]));
+ for (i = 0; i < n; i++, s += uc_len(s)) {
+ pos[i] = cpos;
+ cpos += ren_cwid(s, cpos);
+ }
+ pos[i] = cpos;
+ return pos;
+}
+
int ren_wid(char *s)
{
int *pos = ren_position(s);
(DIR) diff --git a/vi.h b/vi.h
t@@ -213,3 +213,4 @@ extern int xhl;
extern int xhll;
extern int xkmap;
extern int xkmap_alt;
+extern int xlim;