tren: use ren_placeholder() to find character width - 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 0d6850fad63e1064e503cda0b3f072e771eeaced
 (DIR) parent 6b277fa8365863fddf94654a739152959a10e3ee
 (HTM) Author: Ali Gholami Rudi <ali@rudi.ir>
       Date:   Mon,  8 Feb 2021 00:05:38 +0330
       
       ren: use ren_placeholder() to find character width
       
       Diffstat:
         M ren.c                               |      21 ++++++++++-----------
       
       1 file changed, 10 insertions(+), 11 deletions(-)
       ---
 (DIR) diff --git a/ren.c b/ren.c
       t@@ -125,13 +125,14 @@ int ren_next(char *s, int p, int dir)
                return s && uc_chr(s, ren_off(s, p))[0] != '\n' ? p : -1;
        }
        
       -static char *ren_placeholder(char *s)
       +static char *ren_placeholder(char *s, int *wid)
        {
                char *src, *dst;
       -        int wid, i;
       -        int c = uc_code(s);
       -        for (i = 0; !conf_placeholder(i, &src, &dst, &wid); i++)
       -                if (uc_code(src) == c)
       +        int i;
       +        if (wid)
       +                *wid = 1;
       +        for (i = 0; !conf_placeholder(i, &src, &dst, wid); i++)
       +                if (src[0] == s[0] && uc_code(src) == uc_code(s))
                                return dst;
                if (uc_iscomb(s)) {
                        static char buf[16];
       t@@ -147,18 +148,16 @@ static char *ren_placeholder(char *s)
        
        int ren_cwid(char *s, int pos)
        {
       -        char *src, *dst;
       -        int wid, i;
       +        int wid;
                if (s[0] == '\t')
                        return 8 - (pos & 7);
       -        for (i = 0; !conf_placeholder(i, &src, &dst, &wid); i++)
       -                if (uc_code(src) == uc_code(s))
       -                        return wid;
       +        if (ren_placeholder(s, &wid))
       +                return wid;
                return uc_wid(s);
        }
        
        char *ren_translate(char *s, char *ln)
        {
       -        char *p = ren_placeholder(s);
       +        char *p = ren_placeholder(s, NULL);
                return p || !xshape ? p : uc_shape(ln, s);
        }