TextContainer text_;
typedef set<docstring> Words;
+ typedef map<Language, Words> LangWordsMap;
///
- map<Language, Words> words_;
+ LangWordsMap words_;
///
Layout const * layout_;
};
}
if (tmp) {
- for (int j = 0; j < tmp; ++j)
- texrow.newline();
-
+ texrow.newlines(tmp);
texrow.start(owner_->id(), i + 1);
column = 0;
} else {
case LYX_ALIGN_BLOCK:
case LYX_ALIGN_LAYOUT:
case LYX_ALIGN_SPECIAL:
+ case LYX_ALIGN_DECIMAL:
break;
case LYX_ALIGN_LEFT:
case LYX_ALIGN_RIGHT:
case LYX_ALIGN_BLOCK:
case LYX_ALIGN_LAYOUT:
case LYX_ALIGN_SPECIAL:
+ case LYX_ALIGN_DECIMAL:
break;
case LYX_ALIGN_LEFT: {
string output;
case LYX_ALIGN_BLOCK:
case LYX_ALIGN_LAYOUT:
case LYX_ALIGN_SPECIAL:
+ case LYX_ALIGN_DECIMAL:
break;
case LYX_ALIGN_LEFT:
case LYX_ALIGN_RIGHT:
case LYX_ALIGN_BLOCK:
case LYX_ALIGN_LAYOUT:
case LYX_ALIGN_SPECIAL:
+ case LYX_ALIGN_DECIMAL:
break;
case LYX_ALIGN_LEFT: {
string output;
odocstringstream os;
if (beg == 0
- && options & AS_STR_LABEL
- && !d->params_.labelString().empty())
+ && options & AS_STR_LABEL
+ && !d->params_.labelString().empty())
os << d->params_.labelString() << ' ';
for (pos_type i = beg; i < end; ++i) {
void Paragraph::deregisterWords()
{
- map<Language, Private::Words>::const_iterator itl;
- Private::Words::const_iterator it;
- for (itl = d->words_.begin(); itl != d->words_.end(); ++itl) {
+ Private::LangWordsMap::const_iterator itl = d->words_.begin();
+ Private::LangWordsMap::const_iterator ite = d->words_.end();
+ for (; itl != ite; ++itl) {
WordList * wl = theWordList(itl->first);
- for (it = (itl->second).begin(); it != (itl->second).end(); ++it)
+ Private::Words::const_iterator it = (itl->second).begin();
+ Private::Words::const_iterator et = (itl->second).end();
+ for (; it != et; ++it)
wl->remove(*it);
}
d->words_.clear();
void Paragraph::collectWords()
{
+ // This is the value that needs to be exposed in the preferences
+ // to resolve bug #6760.
+ static int minlength = 6;
pos_type n = size();
for (pos_type pos = 0; pos < n; ++pos) {
if (isWordSeparator(pos))
continue;
pos_type from = pos;
locateWord(from, pos, WHOLE_WORD);
- if (pos - from >= 6) {
+ if (pos - from >= minlength) {
docstring word = asString(from, pos, AS_STR_NONE);
FontList::const_iterator cit = d->fontlist_.fontIterator(pos);
if (cit == d->fontlist_.end())
void Paragraph::registerWords()
{
- map<Language, Private::Words>::const_iterator itl;
- Private::Words::const_iterator it;
- for (itl = d->words_.begin(); itl != d->words_.end(); ++itl) {
+ Private::LangWordsMap::const_iterator itl = d->words_.begin();
+ Private::LangWordsMap::const_iterator ite = d->words_.end();
+ for (; itl != ite; ++itl) {
WordList * wl = theWordList(itl->first);
- for (it = (itl->second).begin(); it != (itl->second).end(); ++it)
+ Private::Words::const_iterator it = (itl->second).begin();
+ Private::Words::const_iterator et = (itl->second).end();
+ for (; it != et; ++it)
wl->insert(*it);
}
}
if (!speller)
return false;
+ if (!d->layout_->spellcheck || !inInset().allowSpellCheck())
+ return false;
+
locateWord(from, to, WHOLE_WORD);
if (from == to || from >= pos_type(d->text_.size()))
return false;
docstring word = asString(from, to, AS_STR_INSETS);
+ // Ignore words with digits
+ // FIXME: make this customizable
+ // (note that hunspell ignores words with digits by default)
+ bool const ignored = hasDigit(word);
Language * lang = const_cast<Language *>(getFontSettings(
d->inset_owner_->buffer().params(), from).language());
if (lang == d->inset_owner_->buffer().params().language
lang->setVariety(lang_variety);
}
wl = WordLangTuple(word, lang);
- SpellChecker::Result res = speller->check(wl);
+ SpellChecker::Result res = ignored ?
+ SpellChecker::OK : speller->check(wl);
#if 0
// FIXME: the code below makes aspell abort if a word in an unknown
// language is checked.
return false;
#endif
- bool misspelled = res != SpellChecker::OK
+ bool const misspelled = res != SpellChecker::OK
&& res != SpellChecker::IGNORED_WORD;
if (lyxrc.spellcheck_continuously)