[pango/wip/khaled/fribidi] Try to use the new FriBiDi API when available
- From: Khaled Hosny <khaledh src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pango/wip/khaled/fribidi] Try to use the new FriBiDi API when available
- Date: Tue, 14 Nov 2017 13:55:53 +0000 (UTC)
commit 84a7e121ad97249abd20e4594a47a05a3ad23bf6
Author: Khaled Hosny <khaledhosny eglug org>
Date: Tue Nov 14 15:55:14 2017 +0200
Try to use the new FriBiDi API when available
pango/pango-bidi-type.c | 31 ++++++++++++++++++++++++++++++-
1 files changed, 30 insertions(+), 1 deletions(-)
---
diff --git a/pango/pango-bidi-type.c b/pango/pango-bidi-type.c
index f831d27..6f66709 100644
--- a/pango/pango-bidi-type.c
+++ b/pango/pango-bidi-type.c
@@ -47,6 +47,9 @@
#include "pango-utils.h"
+#if (FRIBIDI_MINOR_VERSION >= 19) && (FRIBIDI_MICRO_VERSION > 7)
+#define USE_FRIBIDI_EX_API
+#endif
/**
* pango_bidi_type_for_unichar:
* @ch: a Unicode character
@@ -147,6 +150,9 @@ pango_log2vis_get_embedding_levels (const gchar *text,
{
glong n_chars, i;
FriBidiCharType *types;
+#ifdef USE_FRIBIDI_EX_API
+ FriBidiBracketType *brackets;
+#endif
FriBidiLevel max_level;
const char *p;
@@ -156,14 +162,37 @@ pango_log2vis_get_embedding_levels (const gchar *text,
n_chars = g_utf8_strlen (text, length);
types = g_new (FriBidiCharType, n_chars);
+#ifdef USE_FRIBIDI_EX_API
+ brackets = g_new (FriBidiBracketType, n_chars);
+#endif
embedding_levels_list = g_new (guint8, n_chars);
for (i = 0, p = text; p < text + length; p = g_utf8_next_char(p), i++)
- types[i] = fribidi_get_bidi_type (g_utf8_get_char (p));
+ {
+ gunichar ch = g_utf8_get_char (p);
+ types[i] = fribidi_get_bidi_type (ch);
+#ifdef USE_FRIBIDI_EX_API
+ if (types[i] == FRIBIDI_TYPE_ON)
+ {
+ const FriBidiBracketType no_bracket = { 0, 0 };
+ brackets[i] = no_bracket;
+ }
+ else
+ {
+ brackets[i] = fribidi_get_bracket (ch);
+ }
+#endif
+ }
+#ifdef USE_FRIBIDI_EX_API
+ max_level = fribidi_get_par_embedding_levels_ex (types, brackets, n_chars,
+ &fribidi_base_dir,
+ (FriBidiLevel*)embedding_levels_list);
+#else
max_level = fribidi_get_par_embedding_levels (types, n_chars,
&fribidi_base_dir,
(FriBidiLevel*)embedding_levels_list);
+#endif
if (max_level == 0)
{
/* fribidi_get_par_embedding_levels failed, what should we do here? */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]