1From 71162e019df5b27793def7db0f64bea94af54026 Mon Sep 17 00:00:00 2001
2From: hovercats <hovercatswithlasereyes@protonmail.com>
3Date: Sat, 4 May 2024 19:25:43 +0200
4Subject: [PATCH] remove fribidi dependency
5
6---
7 meson.build | 5 --
8 pango/pango-bidi-type.c | 144 ++++------------------------------------
9 2 files changed, 14 insertions(+), 135 deletions(-)
10
11diff --git a/meson.build b/meson.build
12index 066105a..72d3c16 100644
13--- a/meson.build
14+++ b/meson.build
15@@ -198,7 +198,6 @@ endif
16 pango_deps = []
17
18 glib_req_version = '>= 2.62'
19-fribidi_req_version = '>= 1.0.6'
20 libthai_req_version = '>= 0.1.9'
21 harfbuzz_req_version = '>= 2.6.0'
22 fontconfig_req_version = '>= 2.13.0'
23@@ -215,10 +214,6 @@ gobject_dep = dependency('gobject-2.0', version: glib_req_version)
24 gio_dep = dependency('gio-2.0', version: glib_req_version)
25 pango_deps += [glib_dep, gobject_dep, gio_dep]
26
27-fribidi_dep = dependency('fribidi', version: fribidi_req_version,
28- default_options: ['docs=false'])
29-pango_deps += fribidi_dep
30-
31 thai_dep = dependency('libthai', version: libthai_req_version, required: get_option('libthai'))
32 if thai_dep.found()
33 pango_conf.set('HAVE_LIBTHAI', 1)
34diff --git a/pango/pango-bidi-type.c b/pango/pango-bidi-type.c
35index 4277dc1..73d3476 100644
36--- a/pango/pango-bidi-type.c
37+++ b/pango/pango-bidi-type.c
38@@ -23,14 +23,21 @@
39
40 #include <string.h>
41
42-#include <fribidi.h>
43-
44 #undef PANGO_DISABLE_DEPRECATED
45
46 #include "pango-bidi-type.h"
47 #include "pango-utils.h"
48 #include "pango-utils-private.h"
49
50+typedef uint32_t FriBidiChar;
51+typedef uint32_t FriBidiCharType;
52+typedef uint32_t FriBidiBracketType;
53+typedef int FriBidiStrIndex;
54+typedef int FriBidiParType;
55+typedef signed char FriBidiLevel;
56+
57+#define FRIBIDI_PAR_LTR (0x00000010L | 0x00000100L)
58+
59 /**
60 * pango_bidi_type_for_unichar:
61 * @ch: a Unicode character
62@@ -49,41 +56,7 @@
63 PangoBidiType
64 pango_bidi_type_for_unichar (gunichar ch)
65 {
66- FriBidiCharType fribidi_ch_type;
67-
68- G_STATIC_ASSERT (sizeof (FriBidiChar) == sizeof (gunichar));
69-
70- fribidi_ch_type = fribidi_get_bidi_type (ch);
71-
72- switch (fribidi_ch_type)
73- {
74- case FRIBIDI_TYPE_LTR: return PANGO_BIDI_TYPE_L;
75- case FRIBIDI_TYPE_LRE: return PANGO_BIDI_TYPE_LRE;
76- case FRIBIDI_TYPE_LRO: return PANGO_BIDI_TYPE_LRO;
77- case FRIBIDI_TYPE_RTL: return PANGO_BIDI_TYPE_R;
78- case FRIBIDI_TYPE_AL: return PANGO_BIDI_TYPE_AL;
79- case FRIBIDI_TYPE_RLE: return PANGO_BIDI_TYPE_RLE;
80- case FRIBIDI_TYPE_RLO: return PANGO_BIDI_TYPE_RLO;
81- case FRIBIDI_TYPE_PDF: return PANGO_BIDI_TYPE_PDF;
82- case FRIBIDI_TYPE_EN: return PANGO_BIDI_TYPE_EN;
83- case FRIBIDI_TYPE_ES: return PANGO_BIDI_TYPE_ES;
84- case FRIBIDI_TYPE_ET: return PANGO_BIDI_TYPE_ET;
85- case FRIBIDI_TYPE_AN: return PANGO_BIDI_TYPE_AN;
86- case FRIBIDI_TYPE_CS: return PANGO_BIDI_TYPE_CS;
87- case FRIBIDI_TYPE_NSM: return PANGO_BIDI_TYPE_NSM;
88- case FRIBIDI_TYPE_BN: return PANGO_BIDI_TYPE_BN;
89- case FRIBIDI_TYPE_BS: return PANGO_BIDI_TYPE_B;
90- case FRIBIDI_TYPE_SS: return PANGO_BIDI_TYPE_S;
91- case FRIBIDI_TYPE_WS: return PANGO_BIDI_TYPE_WS;
92- case FRIBIDI_TYPE_ON: return PANGO_BIDI_TYPE_ON;
93- case FRIBIDI_TYPE_LRI: return PANGO_BIDI_TYPE_LRI;
94- case FRIBIDI_TYPE_RLI: return PANGO_BIDI_TYPE_RLI;
95- case FRIBIDI_TYPE_FSI: return PANGO_BIDI_TYPE_FSI;
96- case FRIBIDI_TYPE_PDI: return PANGO_BIDI_TYPE_PDI;
97- case _FRIBIDI_TYPE_SENTINEL:
98- default:
99- return PANGO_BIDI_TYPE_ON;
100- }
101+ return PANGO_BIDI_TYPE_L;
102 }
103
104 /* Some bidi-related functions */
105@@ -136,38 +109,14 @@ pango_log2vis_fill_embedding_levels (const gchar *text,
106 {
107 glong i;
108 const gchar *p;
109- FriBidiParType fribidi_base_dir;
110 FriBidiCharType *bidi_types;
111 FriBidiCharType bidi_types_[64];
112 FriBidiBracketType *bracket_types;
113 FriBidiBracketType bracket_types_[64];
114- FriBidiLevel max_level;
115- FriBidiCharType ored_types = 0;
116- FriBidiCharType anded_strongs = FRIBIDI_TYPE_RLE;
117
118 G_STATIC_ASSERT (sizeof (FriBidiLevel) == sizeof (guint8));
119 G_STATIC_ASSERT (sizeof (FriBidiChar) == sizeof (gunichar));
120
121- switch (*pbase_dir)
122- {
123- case PANGO_DIRECTION_LTR:
124- case PANGO_DIRECTION_TTB_RTL:
125- fribidi_base_dir = FRIBIDI_PAR_LTR;
126- break;
127- case PANGO_DIRECTION_RTL:
128- case PANGO_DIRECTION_TTB_LTR:
129- fribidi_base_dir = FRIBIDI_PAR_RTL;
130- break;
131- case PANGO_DIRECTION_WEAK_RTL:
132- fribidi_base_dir = FRIBIDI_PAR_WRTL;
133- break;
134- case PANGO_DIRECTION_WEAK_LTR:
135- case PANGO_DIRECTION_NEUTRAL:
136- default:
137- fribidi_base_dir = FRIBIDI_PAR_WLTR;
138- break;
139- }
140-
141 if (n_chars < 64)
142 {
143 bidi_types = bidi_types_;
144@@ -181,20 +130,11 @@ pango_log2vis_fill_embedding_levels (const gchar *text,
145
146 for (i = 0, p = text; p < text + length; p = g_utf8_next_char(p), i++)
147 {
148- gunichar ch = g_utf8_get_char (p);
149- FriBidiCharType char_type = fribidi_get_bidi_type (ch);
150-
151 if (i == n_chars)
152 break;
153
154- bidi_types[i] = char_type;
155- ored_types |= char_type;
156- if (FRIBIDI_IS_STRONG (char_type))
157- anded_strongs &= char_type;
158- if (G_UNLIKELY(bidi_types[i] == FRIBIDI_TYPE_ON))
159- bracket_types[i] = fribidi_get_bracket (ch);
160- else
161- bracket_types[i] = FRIBIDI_NO_BRACKET;
162+ bidi_types[i] = FRIBIDI_PAR_LTR;
163+ bracket_types[i] = 0;
164 }
165
166 /* Short-circuit (malloc-expensive) FriBidi call for unidirectional
167@@ -211,59 +151,14 @@ pango_log2vis_fill_embedding_levels (const gchar *text,
168 * o base_dir doesn't have an RTL taste.
169 * o there are letters, and base_dir is weak.
170 */
171- if (!FRIBIDI_IS_ISOLATE (ored_types) &&
172- !FRIBIDI_IS_RTL (ored_types) &&
173- !FRIBIDI_IS_ARABIC (ored_types) &&
174- (!FRIBIDI_IS_RTL (fribidi_base_dir) ||
175- (FRIBIDI_IS_WEAK (fribidi_base_dir) &&
176- FRIBIDI_IS_LETTER (ored_types))
177- ))
178- {
179- /* all LTR */
180- fribidi_base_dir = FRIBIDI_PAR_LTR;
181 memset (embedding_levels_list, 0, n_chars);
182- goto resolved;
183- }
184- /* The case that all resolved levels will be RTL is much more complex.
185- * No isolates, no numbers, all strongs are RTL, and one of
186- * the following:
187- *
188- * o base_dir has an RTL taste (may be weak).
189- * o there are letters, and base_dir is weak.
190- */
191- else if (!FRIBIDI_IS_ISOLATE (ored_types) &&
192- !FRIBIDI_IS_NUMBER (ored_types) &&
193- FRIBIDI_IS_RTL (anded_strongs) &&
194- (FRIBIDI_IS_RTL (fribidi_base_dir) ||
195- (FRIBIDI_IS_WEAK (fribidi_base_dir) &&
196- FRIBIDI_IS_LETTER (ored_types))
197- ))
198- {
199- /* all RTL */
200- fribidi_base_dir = FRIBIDI_PAR_RTL;
201- memset (embedding_levels_list, 1, n_chars);
202- goto resolved;
203- }
204-
205-
206- max_level = fribidi_get_par_embedding_levels_ex (bidi_types, bracket_types, n_chars,
207- &fribidi_base_dir,
208- (FriBidiLevel*)embedding_levels_list);
209-
210- if (G_UNLIKELY(max_level == 0))
211- {
212- /* fribidi_get_par_embedding_levels() failed. */
213- memset (embedding_levels_list, 0, length);
214- }
215-
216-resolved:
217 if (n_chars >= 64)
218 {
219 g_free (bidi_types);
220 g_free (bracket_types);
221 }
222
223- *pbase_dir = (fribidi_base_dir == FRIBIDI_PAR_LTR) ? PANGO_DIRECTION_LTR : PANGO_DIRECTION_RTL;
224+ *pbase_dir = PANGO_DIRECTION_LTR;
225 }
226
227 /**
228@@ -285,18 +180,7 @@ resolved:
229 PangoDirection
230 pango_unichar_direction (gunichar ch)
231 {
232- FriBidiCharType fribidi_ch_type;
233-
234- G_STATIC_ASSERT (sizeof (FriBidiChar) == sizeof (gunichar));
235-
236- fribidi_ch_type = fribidi_get_bidi_type (ch);
237-
238- if (!FRIBIDI_IS_STRONG (fribidi_ch_type))
239- return PANGO_DIRECTION_NEUTRAL;
240- else if (FRIBIDI_IS_RTL (fribidi_ch_type))
241- return PANGO_DIRECTION_RTL;
242- else
243- return PANGO_DIRECTION_LTR;
244+ return PANGO_DIRECTION_LTR;
245 }
246
247
248--
2492.44.0
250