]> git.lyx.org Git - lyx.git/blobdiff - src/Paragraph.cpp
bit of cleanup to avoid ambiguities (in the sense of cell vs column)
[lyx.git] / src / Paragraph.cpp
index 1aea2dde43ec4408f42b1016141e05052364477a..5ec2adfeefed9fc0f8c8d613900dd631441e5588 100644 (file)
@@ -208,8 +208,9 @@ public:
        TextContainer text_;
        
        typedef set<docstring> Words;
+       typedef map<Language, Words> LangWordsMap;
        ///
-       map<Language, Words> words_;
+       LangWordsMap words_;
        ///
        Layout const * layout_;
 };
@@ -846,9 +847,7 @@ void Paragraph::Private::latexInset(
        }
 
        if (tmp) {
-               for (int j = 0; j < tmp; ++j)
-                       texrow.newline();
-
+               texrow.newlines(tmp);
                texrow.start(owner_->id(), i + 1);
                column = 0;
        } else {
@@ -1850,6 +1849,7 @@ int Paragraph::Private::startTeXParParams(BufferParams const & bparams,
        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:
@@ -1870,6 +1870,7 @@ int Paragraph::Private::startTeXParParams(BufferParams const & bparams,
        case LYX_ALIGN_BLOCK:
        case LYX_ALIGN_LAYOUT:
        case LYX_ALIGN_SPECIAL:
+       case LYX_ALIGN_DECIMAL:
                break;
        case LYX_ALIGN_LEFT: {
                string output;
@@ -1918,6 +1919,7 @@ int Paragraph::Private::endTeXParParams(BufferParams const & bparams,
        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:
@@ -1938,6 +1940,7 @@ int Paragraph::Private::endTeXParParams(BufferParams const & bparams,
        case LYX_ALIGN_BLOCK:
        case LYX_ALIGN_LAYOUT:
        case LYX_ALIGN_SPECIAL:
+       case LYX_ALIGN_DECIMAL:
                break;
        case LYX_ALIGN_LEFT: {
                string output;
@@ -2641,8 +2644,8 @@ docstring Paragraph::asString(pos_type beg, pos_type end, int options) const
        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) {
@@ -3070,11 +3073,13 @@ bool Paragraph::isSeparator(pos_type pos) const
 
 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();
@@ -3120,13 +3125,16 @@ void Paragraph::locateWord(pos_type & from, pos_type & to,
 
 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())
@@ -3140,11 +3148,13 @@ void Paragraph::collectWords()
 
 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);
        }
 }
@@ -3165,11 +3175,18 @@ bool Paragraph::spellCheck(pos_type & from, pos_type & to, WordLangTuple & wl,
        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
@@ -3181,7 +3198,8 @@ bool Paragraph::spellCheck(pos_type & from, pos_type & to, WordLangTuple & wl,
                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.