]> git.lyx.org Git - lyx.git/blobdiff - src/Paragraph.cpp
Routines to retrieve HTML style information.
[lyx.git] / src / Paragraph.cpp
index 198b1182f9e589d214e46b40db62cdd38ab5a860..37d2957f8d8cfa8336a3b20738edc493a688052f 100644 (file)
@@ -52,7 +52,6 @@
 #include "insets/InsetLabel.h"
 
 #include "support/lassert.h"
-#include "support/convert.h"
 #include "support/debug.h"
 #include "support/ExceptionMessage.h"
 #include "support/gettext.h"
@@ -288,6 +287,15 @@ void Paragraph::addChangesToToc(DocIterator const & cdit,
 }
 
 
+bool Paragraph::isFullyDeleted(pos_type start, pos_type end) const
+{
+       LASSERT(start >= 0 && start <= size(), /**/);
+       LASSERT(end > start && end <= size() + 1, /**/);
+
+       return d->changes_.isFullyDeleted(start, end);
+}
+
+
 bool Paragraph::isChanged(pos_type start, pos_type end) const
 {
        LASSERT(start >= 0 && start <= size(), /**/);
@@ -1581,7 +1589,8 @@ docstring const & Paragraph::labelString() const
 // the next two functions are for the manual labels
 docstring const Paragraph::getLabelWidthString() const
 {
-       if (d->layout_->margintype == MARGIN_MANUAL)
+       if (d->layout_->margintype == MARGIN_MANUAL
+           || d->layout_->latextype == LATEX_BIB_ENVIRONMENT)
                return d->params_.labelWidthString();
        else
                return _("Senseless with this layout!");
@@ -2352,7 +2361,12 @@ bool Paragraph::isLetter(pos_type pos) const
        if (Inset const * inset = getInset(pos))
                return inset->isLetter();
        char_type const c = d->text_[pos];
-       return isLetterChar(c) || isDigit(c);
+    // We want to pass the ' and escape chars to the spellchecker
+       static docstring const quote = from_utf8(lyxrc.spellchecker_esc_chars + '\'');
+       return (isLetterChar(c) || isDigit(c) || contains(quote, c))
+               && (!d->inset_owner_ || d->inset_owner_->allowSpellCheck())
+               && pos != size()
+               && !isDeleted(pos);
 }
 
 
@@ -2912,8 +2926,6 @@ void Paragraph::collectWords()
        //lyxerr << "Words: ";
        pos_type n = size();
        for (pos_type pos = 0; pos < n; ++pos) {
-               if (isDeleted(pos))
-                       continue;
                if (!isLetter(pos))
                        continue;
                pos_type from = pos;
@@ -2962,4 +2974,32 @@ void Paragraph::updateWords()
        registerWords();
 }
 
+
+bool Paragraph::isMisspelled(pos_type pos) const
+{
+       SpellChecker * speller = theSpellChecker();
+       pos_type from = pos;
+       pos_type to = pos;
+       locateWord(from, to, WHOLE_WORD);
+       docstring word = asString(from, to, false);
+       if (!speller)
+               return false;
+               
+       string lang_code = lyxrc.spellchecker_use_alt_lang
+             ? lyxrc.spellchecker_alt_lang
+             : getFontSettings(d->inset_owner_->buffer().params(), from).language()->code();
+       WordLangTuple wl(word, lang_code);
+       SpellChecker::Result res = speller->check(wl);
+       // ... just ignore any error that the spellchecker reports.
+       if (!speller->error().empty())
+               return false;
+
+       bool const misspelled = res != SpellChecker::OK
+               && res != SpellChecker::IGNORED_WORD;
+       if (lyxrc.spellcheck_continuously)
+               d->fontlist_.setMisspelled(from, pos, misspelled);
+       return misspelled;
+}
+
+
 } // namespace lyx