mirror of
https://github.com/Dushistov/sdcv.git
synced 2025-12-15 17:31:56 +00:00
lookup: do not bail on first failed lookup with a word list
Due to the lack of deinflection support in StarDict, users might want to be able to create a list of possible deinflections and search each one to see if there is a dictionary entry for that deinflection. Being able to do this in one sdcv invocation is far more preferable to calling sdcv once for each candidate due to the performance cost of doing so. The most obvious language that would benefit from this is Japanese, but I'm sure other folks would prefer this. In order to make this use-case better supported -- try to look up every word in the provided list of words before existing with an error if any one of the words failed to be looked up. Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
This commit is contained in:
11
src/sdcv.cpp
11
src/sdcv.cpp
@@ -219,12 +219,15 @@ try {
|
||||
search_result rval = SEARCH_SUCCESS;
|
||||
gchar **p = get_impl(word_list);
|
||||
while (*p) {
|
||||
if ((rval = lib.process_phrase(*p++, *io, non_interactive)) != SEARCH_SUCCESS) {
|
||||
return rval;
|
||||
}
|
||||
search_result this_rval = lib.process_phrase(*p++, *io, non_interactive);
|
||||
// If we encounter any error, save it but continue through the word
|
||||
// list to check all requested words.
|
||||
if (rval == SEARCH_SUCCESS)
|
||||
rval = this_rval;
|
||||
}
|
||||
if (rval != SEARCH_SUCCESS)
|
||||
return rval;
|
||||
} else if (!non_interactive) {
|
||||
|
||||
std::string phrase;
|
||||
while (io->read(_("Enter word or phrase: "), phrase)) {
|
||||
if (lib.process_phrase(phrase.c_str(), *io) == SEARCH_FAILURE)
|
||||
|
||||
Reference in New Issue
Block a user