mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 01:59:02 +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
|
||||
])
|
||||
|
||||
# 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],
|
||||
[
|
||||
lyx_use_enchant=true
|
||||
@ -36,6 +50,7 @@ AC_DEFUN([CHECK_WITH_ENCHANT],
|
||||
if $lyx_use_enchant ; then
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(USE_ENCHANT, 1, [Define as 1 to use the enchant library])
|
||||
LYX_HAVE_ENCHANT2
|
||||
lyx_flags="$lyx_flags use-enchant"
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
|
@ -195,6 +195,24 @@ check_cxx_source_compiles(
|
||||
"
|
||||
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(STD_STRING_USES_COW)
|
||||
set(USE_GLIBCXX_CXX11_ABI)
|
||||
|
@ -88,6 +88,9 @@ ${Include_used_spellchecker}
|
||||
// Define to 1 if std::call_once is supported by the compiler
|
||||
#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
|
||||
|
||||
#define MYTHES_H_LOCATION <${MYTHES_DIR}/mythes.hxx>
|
||||
|
@ -30,6 +30,17 @@ namespace lyx {
|
||||
|
||||
namespace {
|
||||
|
||||
enchant::Broker & broker()
|
||||
{
|
||||
#ifdef HAVE_ENCHANT2
|
||||
static enchant::Broker thebroker;
|
||||
return thebroker;
|
||||
#else
|
||||
return *enchant::Broker::instance();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
struct Speller {
|
||||
enchant::Dict * speller;
|
||||
};
|
||||
@ -68,12 +79,11 @@ EnchantChecker::Private::~Private()
|
||||
|
||||
enchant::Dict * EnchantChecker::Private::addSpeller(string const & lang)
|
||||
{
|
||||
enchant::Broker * instance = enchant::Broker::instance();
|
||||
Speller m;
|
||||
|
||||
try {
|
||||
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) {
|
||||
// FIXME error handling?
|
||||
@ -186,8 +196,7 @@ bool EnchantChecker::hasDictionary(Language const * lang) const
|
||||
{
|
||||
if (!lang)
|
||||
return false;
|
||||
enchant::Broker * instance = enchant::Broker::instance();
|
||||
return (instance->dict_exists(lang->code()));
|
||||
return broker().dict_exists(lang->code());
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user