aboutsummaryrefslogtreecommitdiff
path: root/wayland/imv/patches
diff options
context:
space:
mode:
Diffstat (limited to 'wayland/imv/patches')
-rw-r--r--wayland/imv/patches/0001-support-libgrapheme.patch129
-rw-r--r--wayland/imv/patches/0002-console-update-libgrapheme-API-to-version-1.patch39
-rw-r--r--wayland/imv/patches/0003-console-update-libgrapheme-API-to-version-2.0.0.patch38
3 files changed, 206 insertions, 0 deletions
diff --git a/wayland/imv/patches/0001-support-libgrapheme.patch b/wayland/imv/patches/0001-support-libgrapheme.patch
new file mode 100644
index 00000000..693a8921
--- /dev/null
+++ b/wayland/imv/patches/0001-support-libgrapheme.patch
@@ -0,0 +1,129 @@
+From a83304d4d673aae6efed51da1986bd7315a4d642 Mon Sep 17 00:00:00 2001
+From: Cem Keylan <cem@ckyln.com>
+Date: Tue, 7 Dec 2021 14:40:57 +0100
+Subject: [PATCH] Add support for libgrapheme as an icu replacement
+
+---
+ meson.build | 11 ++++++++++-
+ meson_options.txt | 8 ++++++++
+ src/console.c | 28 ++++++++++++++++++++++++++++
+ 3 files changed, 46 insertions(+), 1 deletion(-)
+
+diff --git a/meson.build b/meson.build
+index 7cf64b5..26ee0a1 100644
+--- a/meson.build
++++ b/meson.build
+@@ -38,6 +38,15 @@ else
+ target_single_ws = false
+ endif
+
++_unicode = get_option('unicode')
++if _unicode == 'icu'
++ unicode_lib = dependency('icu-io')
++ add_project_arguments('-DIMV_USE_ICU', language: 'c')
++elif _unicode == 'grapheme'
++ unicode_lib = cc.find_library('grapheme')
++ add_project_arguments('-DIMV_USE_GRAPHEME', language: 'c')
++endif
++
+ gl_dep = dependency('gl', required: false)
+ if not gl_dep.found()
+ # libglvnd fallback for pure-wayland systems
+@@ -49,7 +58,7 @@ deps_for_imv = [
+ gl_dep,
+ dependency('threads'),
+ dependency('xkbcommon'),
+- dependency('icu-io'),
++ unicode_lib,
+ dependency('inih', fallback : ['inih', 'inih_dep']),
+ m_dep,
+ ]
+diff --git a/meson_options.txt b/meson_options.txt
+index 389b7fd..c13ef7a 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -8,6 +8,14 @@ option('windows',
+ description : 'window system to use'
+ )
+
++# Unicode backend - default is ICU
++option('unicode',
++ type: 'combo',
++ value: 'icu',
++ choices : ['icu', 'grapheme'],
++ description : 'unicode library to use'
++)
++
+ option('test',
+ type : 'feature',
+ description : 'enable tests'
+diff --git a/src/console.c b/src/console.c
+index 073274f..323383f 100644
+--- a/src/console.c
++++ b/src/console.c
+@@ -6,8 +6,15 @@
+ #include <ctype.h>
+ #include <stdlib.h>
+ #include <string.h>
++
++#ifdef IMV_USE_ICU
+ #include <unicode/utext.h>
+ #include <unicode/ubrk.h>
++#endif
++
++#ifdef IMV_USE_GRAPHEME
++#include <grapheme.h>
++#endif
+
+ struct imv_console {
+ char *buffer;
+@@ -25,6 +32,7 @@ struct imv_console {
+ /* Iterates forwards over characters in a UTF-8 string */
+ static size_t next_char(char *buffer, size_t position)
+ {
++ #if defined(IMV_USE_ICU)
+ size_t result = position;
+ UErrorCode status = U_ZERO_ERROR;
+ UText *ut = utext_openUTF8(NULL, buffer, -1, &status);
+@@ -42,11 +50,19 @@ static size_t next_char(char *buffer, size_t position)
+ utext_close(ut);
+ assert(U_SUCCESS(status));
+ return result;
++ #elif defined(IMV_USE_GRAPHEME)
++ if (buffer[position] != 0) {
++ return position + grapheme_bytelen(buffer + position);
++ } else {
++ return position;
++ }
++ #endif
+ }
+
+ /* Iterates backwards over characters in a UTF-8 string */
+ static size_t prev_char(char *buffer, size_t position)
+ {
++ #if defined(IMV_USE_ICU)
+ size_t result = position;
+ UErrorCode status = U_ZERO_ERROR;
+ UText *ut = utext_openUTF8(NULL, buffer, -1, &status);
+@@ -64,6 +80,18 @@ static size_t prev_char(char *buffer, size_t position)
+ utext_close(ut);
+ assert(U_SUCCESS(status));
+ return result;
++
++ #elif defined(IMV_USE_GRAPHEME)
++ size_t result = 0;
++ size_t step;
++ do {
++ step = grapheme_bytelen(buffer + result);
++ if (result + step >= position)
++ break;
++ result += step;
++ } while (step > 0);
++ return result;
++ #endif
+ }
+
+ static void add_to_history(struct list *history, const char *line)
+--
+2.32.0
+
diff --git a/wayland/imv/patches/0002-console-update-libgrapheme-API-to-version-1.patch b/wayland/imv/patches/0002-console-update-libgrapheme-API-to-version-1.patch
new file mode 100644
index 00000000..d92eaef2
--- /dev/null
+++ b/wayland/imv/patches/0002-console-update-libgrapheme-API-to-version-1.patch
@@ -0,0 +1,39 @@
+From 3e76c68e6de460e0b49402962eee47555e2711ce Mon Sep 17 00:00:00 2001
+From: Cem Keylan <cem@ckyln.com>
+Date: Wed, 22 Dec 2021 18:45:43 +0100
+Subject: [PATCH imv] console: update libgrapheme API to version 1
+
+---
+libgrapheme has recently seen its first release, along with some API
+changes. I have updated the functions to match the current API. The
+dedicated page for the library is now on
+<https://libs.suckless.org/libgrapheme>.
+
+ src/console.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/console.c b/src/console.c
+index 323383f..9db18e7 100644
+--- a/src/console.c
++++ b/src/console.c
+@@ -52,7 +52,7 @@ static size_t next_char(char *buffer, size_t position)
+ return result;
+ #elif defined(IMV_USE_GRAPHEME)
+ if (buffer[position] != 0) {
+- return position + grapheme_bytelen(buffer + position);
++ return position + grapheme_next_character_break(buffer + position, SIZE_MAX);
+ } else {
+ return position;
+ }
+@@ -85,7 +85,7 @@ static size_t prev_char(char *buffer, size_t position)
+ size_t result = 0;
+ size_t step;
+ do {
+- step = grapheme_bytelen(buffer + result);
++ step = grapheme_next_character_break(buffer + result, SIZE_MAX);
+ if (result + step >= position)
+ break;
+ result += step;
+--
+2.34.1
+
diff --git a/wayland/imv/patches/0003-console-update-libgrapheme-API-to-version-2.0.0.patch b/wayland/imv/patches/0003-console-update-libgrapheme-API-to-version-2.0.0.patch
new file mode 100644
index 00000000..3afdf52d
--- /dev/null
+++ b/wayland/imv/patches/0003-console-update-libgrapheme-API-to-version-2.0.0.patch
@@ -0,0 +1,38 @@
+From 10ddb6571e811be121ed62d5725ddaf40e3923dc Mon Sep 17 00:00:00 2001
+From: Cem Keylan <cem@ckyln.com>
+Date: Fri, 7 Oct 2022 13:03:15 +0200
+Subject: [PATCH] console: update libgrapheme API to version 2.0.0
+
+libgrapheme recently saw its second major version which was "refactored
+for correctness and conformance"[1].
+
+[1]: http://lists.suckless.org/news/2210/0036.html
+---
+ src/console.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/console.c b/src/console.c
+index 9db18e7..22803e1 100644
+--- a/src/console.c
++++ b/src/console.c
+@@ -52,7 +52,7 @@ static size_t next_char(char *buffer, size_t position)
+ return result;
+ #elif defined(IMV_USE_GRAPHEME)
+ if (buffer[position] != 0) {
+- return position + grapheme_next_character_break(buffer + position, SIZE_MAX);
++ return position + grapheme_next_character_break_utf8(buffer + position, SIZE_MAX);
+ } else {
+ return position;
+ }
+@@ -85,7 +85,7 @@ static size_t prev_char(char *buffer, size_t position)
+ size_t result = 0;
+ size_t step;
+ do {
+- step = grapheme_next_character_break(buffer + result, SIZE_MAX);
++ step = grapheme_next_character_break_utf8(buffer + result, SIZE_MAX);
+ if (result + step >= position)
+ break;
+ result += step;
+--
+2.38.0
+