Introduction
Introduction Statistics Contact Development Disclaimer Help
use libgrapheme instead of libutf - lchat - A line oriented chat front end for …
git clone git://git.suckless.org/lchat
Log
Files
Refs
README
---
commit dbc8751dc6c034967d2b3133a58a627834992e8c
parent 2222d76e1a740862f8ba5da876910876abb0a50a
Author: Jan Klemkow <[email protected]>
Date: Sun, 2 Oct 2022 00:59:19 +0200
use libgrapheme instead of libutf
Diffstat:
M config.mk | 2 +-
M slackline.c | 31 ++++++++---------------------…
2 files changed, 9 insertions(+), 24 deletions(-)
---
diff --git a/config.mk b/config.mk
@@ -9,7 +9,7 @@ CFLAGS = -std=c99 -pedantic -Wall -Wextra -g
# utf.h
CFLAGS += -I/usr/local/include
-LIBS = -L/usr/local/lib -lutf
+LIBS = -L/usr/local/lib -lgrapheme
# For sbase users:
#CFLAGS += -I../sbase
diff --git a/slackline.c b/slackline.c
@@ -19,7 +19,7 @@
#include <stdlib.h>
#include <string.h>
-#include <utf.h>
+#include <grapheme.h>
#include "slackline.h"
@@ -74,15 +74,8 @@ sl_postobyte(struct slackline *sl, size_t pos)
char *ptr = &sl->buf[0];
size_t byte = 0;
- for (;pos > 0; pos--) {
- for (size_t i = 0;; i++) {
- if (fullrune(ptr, i) == 1) {
- ptr += i;
- byte += i;
- break;
- }
- }
- }
+ for (;pos > 0; pos--)
+ byte += grapheme_next_character_break(ptr+byte, sl->blen-byte);
return byte;
}
@@ -90,18 +83,7 @@ sl_postobyte(struct slackline *sl, size_t pos)
static char *
sl_postoptr(struct slackline *sl, size_t pos)
{
- char *ptr = &sl->buf[0];
-
- for (;pos > 0; pos--) {
- for (size_t i = 0;; i++) {
- if (fullrune(ptr, i) == 1) {
- ptr += i;
- break;
- }
- }
- }
-
- return ptr;
+ return &sl->buf[sl_postobyte(sl, pos)];
}
static void
@@ -131,6 +113,8 @@ sl_backspace(struct slackline *sl)
int
sl_keystroke(struct slackline *sl, int key)
{
+ uint_least32_t cp;
+
if (sl == NULL || sl->rlen < sl->rcur)
return -1;
@@ -245,7 +229,8 @@ sl_keystroke(struct slackline *sl, int key)
compose:
/* byte-wise composing of UTF-8 runes */
sl->ubuf[sl->ubuf_len++] = key;
- if (fullrune(sl->ubuf, sl->ubuf_len) == 0)
+ if (grapheme_decode_utf8(sl->ubuf, sl->ubuf_len, &cp) > sl->ubuf_len ||
+ cp == GRAPHEME_INVALID_CODEPOINT)
return 0;
if (sl->blen + sl->ubuf_len >= sl->bufsize) {
You are viewing proxied material from suckless.org. 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.