diff --git a/src/aspell/rclaspell.cpp b/src/aspell/rclaspell.cpp index 67061bc8..2c1eca39 100644 --- a/src/aspell/rclaspell.cpp +++ b/src/aspell/rclaspell.cpp @@ -258,8 +258,11 @@ public: {} void newData() { while (m_db.termWalkNext(m_tit, *m_input)) { - if (!Rcl::Db::isSpellingCandidate(*m_input)) + LOGDEB2(("Aspell::buildDict: term: [%s]\n", m_input->c_str())); + if (!Rcl::Db::isSpellingCandidate(*m_input)) { + LOGDEB2(("Aspell::buildDict: SKIP\n")); continue; + } #ifndef RCL_INDEX_STRIPCHARS if (!o_index_stripchars) { string lower; @@ -270,7 +273,7 @@ public: #endif // Got a non-empty sort-of appropriate term, let's send it to // aspell - LOGDEB2(("ASpExecPv: [%s]\n", m_input->c_str())); + LOGDEB2(("Apell::buildDict: SEND\n")); m_input->append("\n"); return; } @@ -411,14 +414,13 @@ bool Aspell::suggest(Rcl::Db &db, const string &_term, AspellStringEnumeration *els = aapi.aspell_word_list_elements(wl); const char *word; while ((word = aapi.aspell_string_enumeration_next(els)) != 0) { - // stemDiffers checks that the word exists (we don't want - // aspell computed stuff, only exact terms from the dictionary), - // and that it stems differently to the base word (else it's not - // useful to expand the search). Or is it ? - // ******** This should depend if - // stemming is turned on or not for querying ******* - string sw(word); - if (db.termExists(sw) && db.stemDiffers("english", sw, mterm)) + // Check that the word exists in the index (we don't want + // aspell computed stuff, only exact terms from the + // dictionary). We used to also check that it stems + // differently from the base word but this is complicated + // (stemming on/off + language), so we now leave this to the + // caller. + if (db.termExists(word)) suggestions.push_back(word); } aapi.delete_aspell_string_enumeration(els); diff --git a/src/qtgui/reslist.cpp b/src/qtgui/reslist.cpp index 261c26a5..0e84e23d 100644 --- a/src/qtgui/reslist.cpp +++ b/src/qtgui/reslist.cpp @@ -190,32 +190,26 @@ void QtGuiResListPager::suggest(const vectoruterms, LOGERR(("QtGuiResListPager:: aspell not initialized\n")); return; } + for (vector::const_iterator uit = uterms.begin(); uit != uterms.end(); uit++) { list asuggs; string reason; - // If the term is in the index, we don't suggest alternatives. - // Actually, we may want to check the frequencies and propose something - // anyway if a possible variation is much more common (as google does) -#warning need to take case and diacs sensibility into account somehow - // Maybe use the xapian index instead ? How to retrieve the - // sensitivity flags ? - - // We used to call aspell->check() here and continue if it - // succeeded. but this does not work if we are in - // case-sensitive mode and the term was not found because of a - // case difference (our aspell is all lowercase). - // if (aspell->check(*uit, reason)) - // continue; - // else if (!reason.empty()) - // return; - + // If the term is in the dictionary, Aspell::suggest won't + // list alternatives. In fact we may want to check the + // frequencies and propose something anyway if a possible + // variation is much more common (as google does) ? if (!aspell->suggest(*rcldb, *uit, asuggs, reason)) { LOGERR(("QtGuiResListPager::suggest: aspell failed: %s\n", reason.c_str())); continue; } + + // We should check that the term stems differently from the + // base word (else it's not useful to expand the search). Or + // is it ? This should depend if stemming is turned on or not + if (!asuggs.empty()) { sugg[*uit] = vector(asuggs.begin(), asuggs.end()); if (sugg[*uit].size() > 5)