mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-25 10:58:52 +00:00
Add support for enchant 2.x
As of enchant 2.x, it is required to create a Broker instance instead of relying on a static one provided by the library. Add autoconf and cmake (courtesy of Kornel) tests that check whether one can indeed instantiate a Broker object, and act on the result in a new broker() helper function. Fixes bug #10986.
This commit is contained in:
parent
7e071f14b9
commit
63a4e82874
@ -23,7 +23,21 @@ AC_DEFUN([CHECK_WITH_ASPELL],
|
|||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
# Macro to add for using enchant spellchecker libraries! -*- sh -*-
|
AC_DEFUN([LYX_HAVE_ENCHANT2],
|
||||||
|
[
|
||||||
|
AC_MSG_CHECKING([whether enchant is version 2.x at least])
|
||||||
|
save_CXXFLAGS=$CXXFLAGS
|
||||||
|
CXXFLAGS="$ENCHANT_CFLAGS $AM_CXXFLAGS $CXXFLAGS"
|
||||||
|
|
||||||
|
AC_TRY_COMPILE([#include <enchant++.h>],
|
||||||
|
[enchant::Broker broker;],
|
||||||
|
[AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_ENCHANT2, 1, [Define to 1 if enchant 2.x is detected])
|
||||||
|
],
|
||||||
|
[AC_MSG_RESULT(no)])
|
||||||
|
CXXFLAGS=$save_CXXFLAGS
|
||||||
|
])
|
||||||
|
|
||||||
AC_DEFUN([CHECK_WITH_ENCHANT],
|
AC_DEFUN([CHECK_WITH_ENCHANT],
|
||||||
[
|
[
|
||||||
lyx_use_enchant=true
|
lyx_use_enchant=true
|
||||||
@ -36,6 +50,7 @@ AC_DEFUN([CHECK_WITH_ENCHANT],
|
|||||||
if $lyx_use_enchant ; then
|
if $lyx_use_enchant ; then
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(USE_ENCHANT, 1, [Define as 1 to use the enchant library])
|
AC_DEFINE(USE_ENCHANT, 1, [Define as 1 to use the enchant library])
|
||||||
|
LYX_HAVE_ENCHANT2
|
||||||
lyx_flags="$lyx_flags use-enchant"
|
lyx_flags="$lyx_flags use-enchant"
|
||||||
else
|
else
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
|
@ -195,6 +195,24 @@ check_cxx_source_compiles(
|
|||||||
"
|
"
|
||||||
LYX_USE_STD_CALL_ONCE)
|
LYX_USE_STD_CALL_ONCE)
|
||||||
|
|
||||||
|
if (ENCHANT_FOUND)
|
||||||
|
set(CMAKE_REQUIRED_INCLUDES ${ENCHANT_INCLUDE_DIR})
|
||||||
|
set(CMAKE_REQUIRED_LIBRARIES ${ENCHANT_LIBRARY})
|
||||||
|
# Check, whether enchant is version 2.x at least
|
||||||
|
check_cxx_source_compiles(
|
||||||
|
"
|
||||||
|
#include <enchant++.h>
|
||||||
|
enchant::Broker broker;
|
||||||
|
int main() {
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
"
|
||||||
|
HAVE_ENCHANT2)
|
||||||
|
if (HAVE_ENCHANT2)
|
||||||
|
message(STATUS "ENCHANT2 found")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
set(USE_LLVM_LIBCPP)
|
set(USE_LLVM_LIBCPP)
|
||||||
set(STD_STRING_USES_COW)
|
set(STD_STRING_USES_COW)
|
||||||
set(USE_GLIBCXX_CXX11_ABI)
|
set(USE_GLIBCXX_CXX11_ABI)
|
||||||
|
@ -88,6 +88,9 @@ ${Include_used_spellchecker}
|
|||||||
// Define to 1 if std::call_once is supported by the compiler
|
// Define to 1 if std::call_once is supported by the compiler
|
||||||
#cmakedefine LYX_USE_STD_CALL_ONCE 1
|
#cmakedefine LYX_USE_STD_CALL_ONCE 1
|
||||||
|
|
||||||
|
// Define to 1 if enchant is version 2.x at least
|
||||||
|
#cmakedefine HAVE_ENCHANT2 1
|
||||||
|
|
||||||
#endif // config.h guard
|
#endif // config.h guard
|
||||||
|
|
||||||
#define MYTHES_H_LOCATION <${MYTHES_DIR}/mythes.hxx>
|
#define MYTHES_H_LOCATION <${MYTHES_DIR}/mythes.hxx>
|
||||||
|
@ -30,6 +30,17 @@ namespace lyx {
|
|||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
enchant::Broker & broker()
|
||||||
|
{
|
||||||
|
#ifdef HAVE_ENCHANT2
|
||||||
|
static enchant::Broker thebroker;
|
||||||
|
return thebroker;
|
||||||
|
#else
|
||||||
|
return *enchant::Broker::instance();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
struct Speller {
|
struct Speller {
|
||||||
enchant::Dict * speller;
|
enchant::Dict * speller;
|
||||||
};
|
};
|
||||||
@ -68,12 +79,11 @@ EnchantChecker::Private::~Private()
|
|||||||
|
|
||||||
enchant::Dict * EnchantChecker::Private::addSpeller(string const & lang)
|
enchant::Dict * EnchantChecker::Private::addSpeller(string const & lang)
|
||||||
{
|
{
|
||||||
enchant::Broker * instance = enchant::Broker::instance();
|
|
||||||
Speller m;
|
Speller m;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
LYXERR(Debug::FILES, "request enchant speller for language " << lang);
|
LYXERR(Debug::FILES, "request enchant speller for language " << lang);
|
||||||
m.speller = instance->request_dict(lang);
|
m.speller = broker().request_dict(lang);
|
||||||
}
|
}
|
||||||
catch (enchant::Exception & e) {
|
catch (enchant::Exception & e) {
|
||||||
// FIXME error handling?
|
// FIXME error handling?
|
||||||
@ -186,8 +196,7 @@ bool EnchantChecker::hasDictionary(Language const * lang) const
|
|||||||
{
|
{
|
||||||
if (!lang)
|
if (!lang)
|
||||||
return false;
|
return false;
|
||||||
enchant::Broker * instance = enchant::Broker::instance();
|
return broker().dict_exists(lang->code());
|
||||||
return (instance->dict_exists(lang->code()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user