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