master hovercats/oakiss / repo / pango / patches / 0001-remove-fribidi-dependency.patch
  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