Introduction
Introduction Statistics Contact Development Disclaimer Help
tuc: optimise uc_code() and uc_slen() - neatvi - [fork] simple vi-type editor w…
git clone git://src.adamsgaard.dk/neatvi
Log
Files
Refs
README
---
commit 978c4c03d19f920e0d42ca972d27f94d1dfc5327
parent 603f76a42e718ed6fc92a886a4643df37ca113cd
Author: Ali Gholami Rudi <[email protected]>
Date: Sun, 14 Jun 2015 09:22:21 +0430
uc: optimise uc_code() and uc_slen()
Diffstat:
M uc.c | 28 ++++++++++++++++------------
1 file changed, 16 insertions(+), 12 deletions(-)
---
diff --git a/uc.c b/uc.c
t@@ -28,24 +28,28 @@ int uc_len(char *s)
/* the number of utf-8 characters in s */
int uc_slen(char *s)
{
- char *e = s + strlen(s);
- int i;
- for (i = 0; s < e; i++)
- s += uc_len(s);
- return i;
+ int n;
+ for (n = 0; *s; n++)
+ s = uc_end(s) + 1;
+ return n;
}
/* the unicode codepoint of the given utf-8 character */
int uc_code(char *s)
{
- int result;
- int l = uc_len(s);
- if (l <= 1)
- return (unsigned char) *s;
- result = (0x3f >> --l) & (unsigned char) *s++;
+ int c = (unsigned char) s[0];
+ int l;
+ if (!(c & 0x80))
+ return c;
+ if (!(c & 0x20))
+ return ((c & 0x1f) << 6) | (s[1] & 0x3f);
+ if (!(c & 0x10))
+ return ((c & 0x0f) << 12) | ((s[1] & 0x3f) << 6) | (s[2] & 0x3…
+ l = uc_len(s);
+ c = (0x3f >> --l) & (unsigned char) *s++;
while (l--)
- result = (result << 6) | ((unsigned char) *s++ & 0x3f);
- return result;
+ c = (c << 6) | ((unsigned char) *s++ & 0x3f);
+ return c;
}
/* find the beginning of the character at s[i] */
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.