Stop using deprecated hunspell API
This commit is contained in:
parent
81160b2ec0
commit
e4e04c9e87
4 changed files with 55 additions and 10 deletions
|
@ -547,6 +547,9 @@ if (HUNSPELL_FOUND)
|
||||||
target_link_libraries (Aegisub ${HUNSPELL_LIBRARIES})
|
target_link_libraries (Aegisub ${HUNSPELL_LIBRARIES})
|
||||||
add_definitions("-DWITH_HUNSPELL")
|
add_definitions("-DWITH_HUNSPELL")
|
||||||
target_sources(Aegisub PRIVATE src/spellchecker_hunspell.cpp)
|
target_sources(Aegisub PRIVATE src/spellchecker_hunspell.cpp)
|
||||||
|
if (HUNSPELL_HAS_STRING_API)
|
||||||
|
target_compile_definitions(Aegisub PRIVATE "HUNSPELL_HAS_STRING_API")
|
||||||
|
endif(HUNSPELL_HAS_STRING_API)
|
||||||
endif (HUNSPELL_FOUND)
|
endif (HUNSPELL_FOUND)
|
||||||
|
|
||||||
find_package(PulseAudio)
|
find_package(PulseAudio)
|
||||||
|
|
|
@ -4,16 +4,12 @@
|
||||||
# HUNSPELL_FOUND - system has Hunspell
|
# HUNSPELL_FOUND - system has Hunspell
|
||||||
# HUNSPELL_INCLUDE_DIR - the Hunspell include directory
|
# HUNSPELL_INCLUDE_DIR - the Hunspell include directory
|
||||||
# HUNSPELL_LIBRARIES - Link these to use Hunspell
|
# HUNSPELL_LIBRARIES - Link these to use Hunspell
|
||||||
|
# HUNSPELL_HAS_STRING_API - Hunspell has vector<string> api (>=1.5.1)
|
||||||
#
|
#
|
||||||
# Redistribution and use of this file is allowed according to the terms of the
|
# Redistribution and use of this file is allowed according to the terms of the
|
||||||
# MIT license. For details see the file COPYING-CMAKE-MODULES.
|
# MIT license. For details see the file COPYING-CMAKE-MODULES.
|
||||||
|
|
||||||
|
|
||||||
if ( HUNSPELL_INCLUDE_DIR AND HUNSPELL_LIBRARIES )
|
|
||||||
# in cache already
|
|
||||||
SET(Hunspell_FIND_QUIETLY TRUE)
|
|
||||||
endif ( HUNSPELL_INCLUDE_DIR AND HUNSPELL_LIBRARIES )
|
|
||||||
|
|
||||||
# use pkg-config to get the directories and then use these values
|
# use pkg-config to get the directories and then use these values
|
||||||
# in the FIND_PATH() and FIND_LIBRARY() calls
|
# in the FIND_PATH() and FIND_LIBRARY() calls
|
||||||
if( NOT WIN32 )
|
if( NOT WIN32 )
|
||||||
|
@ -45,9 +41,6 @@ FIND_LIBRARY(HUNSPELL_LIBRARIES NAMES hunspell-1.7 hunspell-1.6 hunspell-1.5 hun
|
||||||
include(FindPackageHandleStandardArgs)
|
include(FindPackageHandleStandardArgs)
|
||||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Hunspell DEFAULT_MSG HUNSPELL_LIBRARIES HUNSPELL_INCLUDE_DIR )
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Hunspell DEFAULT_MSG HUNSPELL_LIBRARIES HUNSPELL_INCLUDE_DIR )
|
||||||
|
|
||||||
# show the HUNSPELL_INCLUDE_DIR and HUNSPELL_LIBRARIES variables only in the advanced view
|
|
||||||
MARK_AS_ADVANCED(HUNSPELL_INCLUDE_DIR HUNSPELL_LIBRARIES )
|
|
||||||
|
|
||||||
add_library(hunspell UNKNOWN IMPORTED)
|
add_library(hunspell UNKNOWN IMPORTED)
|
||||||
set_target_properties(hunspell PROPERTIES IMPORTED_LOCATION ${HUNSPELL_LIBRARIES} INTERFACE_INCLUDE_DIRECTORIES ${HUNSPELL_INCLUDE_DIR})
|
set_target_properties(hunspell PROPERTIES IMPORTED_LOCATION ${HUNSPELL_LIBRARIES} INTERFACE_INCLUDE_DIRECTORIES ${HUNSPELL_INCLUDE_DIR})
|
||||||
if (NOT BUILD_SHARED_LIBS)
|
if (NOT BUILD_SHARED_LIBS)
|
||||||
|
@ -55,3 +48,19 @@ if (NOT BUILD_SHARED_LIBS)
|
||||||
# For other versions, it should not hurt
|
# For other versions, it should not hurt
|
||||||
set_target_properties(hunspell PROPERTIES INTERFACE_COMPILE_DEFINITIONS HUNSPELL_STATIC)
|
set_target_properties(hunspell PROPERTIES INTERFACE_COMPILE_DEFINITIONS HUNSPELL_STATIC)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
if (HUNSPELL_FOUND)
|
||||||
|
try_compile(HUNSPELL_HAS_STRING_API "${CMAKE_BINARY_DIR}/hunspell_string_api"
|
||||||
|
"${CMAKE_CURRENT_LIST_DIR}/hunspell_string_api.cpp"
|
||||||
|
LINK_LIBRARIES ${HUNSPELL_LIBRARIES}
|
||||||
|
CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${HUNSPELL_INCLUDE_DIR}" "-DLINK_LIBRARIES=${HUNSPELL_LIBRARIES}"
|
||||||
|
OUTPUT_VARIABLE debuggggg)
|
||||||
|
if (HUNSPELL_HAS_STRING_API)
|
||||||
|
message(STATUS "Hunspell has string API")
|
||||||
|
else(HUNSPELL_HAS_STRING_API)
|
||||||
|
message(STATUS "Hunspell does not have string API")
|
||||||
|
endif(HUNSPELL_HAS_STRING_API)
|
||||||
|
endif(HUNSPELL_FOUND)
|
||||||
|
|
||||||
|
# show the HUNSPELL_INCLUDE_DIR and HUNSPELL_LIBRARIES variables only in the advanced view
|
||||||
|
MARK_AS_ADVANCED(HUNSPELL_INCLUDE_DIR HUNSPELL_LIBRARIES HUNSPELL_HAS_STRING_API)
|
||||||
|
|
10
cmake/hunspell_string_api.cpp
Normal file
10
cmake/hunspell_string_api.cpp
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
#include <hunspell/hunspell.hxx>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
Hunspell hunspell(NULL, NULL);
|
||||||
|
std::string word = "";
|
||||||
|
hunspell.suggest(word);
|
||||||
|
hunspell.spell(word);
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -55,14 +55,18 @@ bool HunspellSpellChecker::CanAddWord(std::string const& word) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HunspellSpellChecker::CanRemoveWord(std::string const& word) {
|
bool HunspellSpellChecker::CanRemoveWord(std::string const& word) {
|
||||||
return !!customWords.count(word);
|
return customWords.count(word) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HunspellSpellChecker::AddWord(std::string const& word) {
|
void HunspellSpellChecker::AddWord(std::string const& word) {
|
||||||
if (!hunspell) return;
|
if (!hunspell) return;
|
||||||
|
|
||||||
// Add it to the in-memory dictionary
|
// Add it to the in-memory dictionary
|
||||||
|
#ifdef HUNSPELL_HAS_STRING_API
|
||||||
|
hunspell->add(conv->Convert(word));
|
||||||
|
#else
|
||||||
hunspell->add(conv->Convert(word).c_str());
|
hunspell->add(conv->Convert(word).c_str());
|
||||||
|
#endif
|
||||||
|
|
||||||
// Add the word
|
// Add the word
|
||||||
if (customWords.insert(word).second)
|
if (customWords.insert(word).second)
|
||||||
|
@ -73,7 +77,11 @@ void HunspellSpellChecker::RemoveWord(std::string const& word) {
|
||||||
if (!hunspell) return;
|
if (!hunspell) return;
|
||||||
|
|
||||||
// Remove it from the in-memory dictionary
|
// Remove it from the in-memory dictionary
|
||||||
|
#ifdef HUNSPELL_HAS_STRING_API
|
||||||
|
hunspell->remove(conv->Convert(word));
|
||||||
|
#else
|
||||||
hunspell->remove(conv->Convert(word).c_str());
|
hunspell->remove(conv->Convert(word).c_str());
|
||||||
|
#endif
|
||||||
|
|
||||||
auto word_iter = customWords.find(word);
|
auto word_iter = customWords.find(word);
|
||||||
if (word_iter != customWords.end()) {
|
if (word_iter != customWords.end()) {
|
||||||
|
@ -120,7 +128,11 @@ void HunspellSpellChecker::WriteUserDictionary() {
|
||||||
bool HunspellSpellChecker::CheckWord(std::string const& word) {
|
bool HunspellSpellChecker::CheckWord(std::string const& word) {
|
||||||
if (!hunspell) return true;
|
if (!hunspell) return true;
|
||||||
try {
|
try {
|
||||||
return hunspell->spell(conv->Convert(word).c_str()) == 1;
|
#ifdef HUNSPELL_HAS_STRING_API
|
||||||
|
return hunspell->spell(conv->Convert(word));
|
||||||
|
#else
|
||||||
|
return hunspell->spell(conv->Convert(word).c_str()) != 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
catch (agi::charset::ConvError const&) {
|
catch (agi::charset::ConvError const&) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -131,6 +143,12 @@ std::vector<std::string> HunspellSpellChecker::GetSuggestions(std::string const&
|
||||||
std::vector<std::string> suggestions;
|
std::vector<std::string> suggestions;
|
||||||
if (!hunspell) return suggestions;
|
if (!hunspell) return suggestions;
|
||||||
|
|
||||||
|
#ifdef HUNSPELL_HAS_STRING_API
|
||||||
|
std::vector<std::string> suggestions_dic_encoding = hunspell->suggest(conv->Convert(word));
|
||||||
|
suggestions.reserve(suggestions_dic_encoding.size());
|
||||||
|
for (std::string& result : suggestions_dic_encoding)
|
||||||
|
suggestions.push_back(rconv->Convert(result));
|
||||||
|
#else
|
||||||
char **results;
|
char **results;
|
||||||
int n = hunspell->suggest(&results, conv->Convert(word).c_str());
|
int n = hunspell->suggest(&results, conv->Convert(word).c_str());
|
||||||
|
|
||||||
|
@ -147,6 +165,7 @@ std::vector<std::string> HunspellSpellChecker::GetSuggestions(std::string const&
|
||||||
}
|
}
|
||||||
|
|
||||||
free(results);
|
free(results);
|
||||||
|
#endif
|
||||||
|
|
||||||
return suggestions;
|
return suggestions;
|
||||||
}
|
}
|
||||||
|
@ -212,7 +231,11 @@ void HunspellSpellChecker::OnLanguageChanged() {
|
||||||
|
|
||||||
for (auto const& word : customWords) {
|
for (auto const& word : customWords) {
|
||||||
try {
|
try {
|
||||||
|
#ifdef HUNSPELL_HAS_STRING_API
|
||||||
|
hunspell->add(conv->Convert(word));
|
||||||
|
#else
|
||||||
hunspell->add(conv->Convert(word).c_str());
|
hunspell->add(conv->Convert(word).c_str());
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
catch (agi::charset::ConvError const&) {
|
catch (agi::charset::ConvError const&) {
|
||||||
// Normally this shouldn't happen, but some versions of Aegisub
|
// Normally this shouldn't happen, but some versions of Aegisub
|
||||||
|
|
Loading…
Reference in a new issue