raqm: fix FriBiDi<1 support

This commit is contained in:
nulano 2020-11-25 19:10:37 +00:00 committed by Andrew Murray
parent b4a57d6fc5
commit 9c178435fb
3 changed files with 35 additions and 24 deletions

View File

@ -1397,10 +1397,10 @@ setup_module(PyObject *m) {
PyDict_SetItemString(d, "raqm_version", v);
#ifdef FRIBIDI_MAJOR_VERSION
a = strchr(fribidi_version_info, '1');
a = strchr(fribidi_version_info, ')');
b = strchr(fribidi_version_info, '\n');
if (a && b) {
v = PyUnicode_FromStringAndSize(a, b - a);
v = PyUnicode_FromStringAndSize(a + 2, b - a - 2);
} else {
v = Py_None;
}

View File

@ -11,7 +11,7 @@
#include "fribidi.h"
/* ..._ex adds bracket_types param, ignore and call legacy function */
/* FriBiDi>=1.0.0 adds bracket_types param, ignore and call legacy function */
FriBidiLevel fribidi_get_par_embedding_levels_ex_compat(
const FriBidiCharType *bidi_types,
const FriBidiBracketType *bracket_types,
@ -23,6 +23,14 @@ FriBidiLevel fribidi_get_par_embedding_levels_ex_compat(
bidi_types, len, pbase_dir, embedding_levels);
}
/* FriBiDi>=1.0.0 gets bracket types here, ignore */
void fribidi_get_bracket_types_compat(
const FriBidiChar *str,
const FriBidiStrIndex len,
const FriBidiCharType *types,
FriBidiBracketType *btypes)
{ /* no-op*/ }
int load_fribidi(void) {
int error = 0;
@ -58,19 +66,20 @@ int load_fribidi(void) {
return 1;
}
/* load ..._ex first to preserve error variable */
/* load FriBiDi>=1.0.0 functions first, use error to detect version */
LOAD_FUNCTION(fribidi_get_par_embedding_levels_ex);
LOAD_FUNCTION(fribidi_get_bracket_types);
if (error) {
/* using FriBiDi 0.x, emulate ..._ex function */
fribidi_get_par_embedding_levels_ex = &fribidi_get_par_embedding_levels_ex_compat;
/* using FriBiDi<1.0.0, ignore new parameters */
error = 0;
fribidi_get_par_embedding_levels_ex = &fribidi_get_par_embedding_levels_ex_compat;
fribidi_get_bracket_types = &fribidi_get_bracket_types_compat;
}
LOAD_FUNCTION(fribidi_get_bidi_types);
LOAD_FUNCTION(fribidi_get_bracket_types);
LOAD_FUNCTION(fribidi_get_par_embedding_levels);
LOAD_FUNCTION(fribidi_unicode_to_charset);
LOAD_FUNCTION(fribidi_charset_to_unicode);
LOAD_FUNCTION(fribidi_get_bidi_types);
LOAD_FUNCTION(fribidi_get_par_embedding_levels);
#ifndef _WIN32
fribidi_version_info = *(const char**)dlsym(p_fribidi, "fribidi_version_info");

View File

@ -72,27 +72,29 @@ typedef uint32_t FriBidiParType;
typedef ret (*t_##name) (__VA_ARGS__); \
FRIBIDI_ENTRY t_##name name;
FRIBIDI_FUNC(void, fribidi_get_bidi_types,
const FriBidiChar *, const FriBidiStrIndex, FriBidiCharType *);
FRIBIDI_FUNC(void, fribidi_get_bracket_types,
const FriBidiChar *, const FriBidiStrIndex, const FriBidiCharType *,
FriBidiBracketType *);
FRIBIDI_FUNC(FriBidiLevel, fribidi_get_par_embedding_levels_ex,
const FriBidiCharType *, const FriBidiBracketType *, const FriBidiStrIndex,
FriBidiParType *, FriBidiLevel *);
FRIBIDI_FUNC(FriBidiLevel, fribidi_get_par_embedding_levels,
const FriBidiCharType *, const FriBidiStrIndex, FriBidiParType *,
FriBidiLevel *);
FRIBIDI_FUNC(FriBidiStrIndex, fribidi_unicode_to_charset,
FriBidiCharSet, const FriBidiChar *, FriBidiStrIndex, char *);
FRIBIDI_FUNC(FriBidiStrIndex, fribidi_charset_to_unicode,
FriBidiCharSet, const char *, FriBidiStrIndex, FriBidiChar *);
FRIBIDI_FUNC(void, fribidi_get_bidi_types,
const FriBidiChar *, const FriBidiStrIndex, FriBidiCharType *);
FRIBIDI_FUNC(FriBidiLevel, fribidi_get_par_embedding_levels,
const FriBidiCharType *, const FriBidiStrIndex, FriBidiParType *,
FriBidiLevel *);
/* FriBiDi>=1.0.0 */
FRIBIDI_FUNC(FriBidiLevel, fribidi_get_par_embedding_levels_ex,
const FriBidiCharType *, const FriBidiBracketType *, const FriBidiStrIndex,
FriBidiParType *, FriBidiLevel *);
/* FriBiDi>=1.0.0 */
FRIBIDI_FUNC(void, fribidi_get_bracket_types,
const FriBidiChar *, const FriBidiStrIndex, const FriBidiCharType *,
FriBidiBracketType *);
#undef FRIBIDI_FUNC
/* constant, not a function */