[pango] Use non-deprecated libthai API when available



commit 63e1fc9b23b4f0e8eaacd151ad39403eaa2b48ef
Author: Khaled Hosny <khaledhosny eglug org>
Date:   Wed Apr 11 13:52:07 2018 +0200

    Use non-deprecated libthai API when available
    
    I’m assuming the new API is thread-safe as claimed.

 configure.ac       |    4 ++++
 meson.build        |    4 ++++
 pango/break-thai.c |   16 +++++++++++-----
 3 files changed, 19 insertions(+), 5 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index be20dce..5e879a8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -487,6 +487,10 @@ have_libthai=false
 PKG_CHECK_MODULES(LIBTHAI, libthai >= $LIBTHAI_REQUIRED_VERSION, have_libthai=true, :)
 if $have_libthai; then
        AC_DEFINE(HAVE_LIBTHAI, 1, [Whether libthai is available])
+       pango_save_libs=$LIBS
+       LIBS="$LIBS $LIBTHAI_LIBS"
+       AC_CHECK_FUNCS(th_brk_find_breaks)
+       LIBS=$pango_save_libs
 fi
 
 #
diff --git a/meson.build b/meson.build
index a00d4b0..9a5a4c7 100644
--- a/meson.build
+++ b/meson.build
@@ -216,6 +216,10 @@ thai_dep = dependency('libthai', version: libthai_req_version, required: false)
 if thai_dep.found()
   pango_conf.set('HAVE_LIBTHAI', 1)
   pango_deps += thai_dep
+
+  if cc.has_function('th_brk_find_breaks', dependencies: thai_dep)
+    pango_conf.set('HAVE_TH_BRK_FIND_BREAKS', 1)
+  endif
 endif
 
 # These are for the various .pc files so that things will link
diff --git a/pango/break-thai.c b/pango/break-thai.c
index c9bf3e8..4a6c427 100644
--- a/pango/break-thai.c
+++ b/pango/break-thai.c
@@ -27,12 +27,9 @@
 #include <thai/thwchar.h>
 #include <thai/thbrk.h>
 
-/* TODO
- * LibThai 0.1.23 claims to be thread-safe.
- * Check that and avoid locking?
- * http://linux.thai.net/node/286
- */
+#ifndef HAVE_TH_BRK_FIND_BREAKS
 G_LOCK_DEFINE_STATIC (th_brk);
+#endif
 
 /*
  * tis_text is assumed to be large enough to hold the converted string,
@@ -67,6 +64,9 @@ break_thai (const char          *text,
   thchar_t *tis_text;
   int *brk_pnts;
   int cnt;
+#ifdef HAVE_TH_BRK_FIND_BREAKS
+  ThBrk* brk;
+#endif
 
   cnt = pango_utf8_strlen (text, len) + 1;
 
@@ -82,9 +82,15 @@ break_thai (const char          *text,
 
   /* find line break positions */
 
+#ifdef HAVE_TH_BRK_FIND_BREAKS
+  brk = th_brk_new(NULL);
+  len = th_brk_find_breaks(brk, tis_text, brk_pnts, cnt);
+  th_brk_delete(brk);
+#else
   G_LOCK (th_brk);
   len = th_brk (tis_text, brk_pnts, cnt);
   G_UNLOCK (th_brk);
+#endif
   for (cnt = 0; cnt < len; cnt++)
     if (attrs[brk_pnts[cnt]].is_char_break)
     {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]