]> git.lyx.org Git - lyx.git/blobdiff - src/Paragraph.cpp
Workaround for #6865: smarter FontList::setMisspelled implementation
[lyx.git] / src / Paragraph.cpp
index 75e0f343696ffe320ed5980744718a5561078af0..86b3d5ab0801592073cc9c1fa9685e141d5c591b 100644 (file)
@@ -584,7 +584,7 @@ bool Paragraph::Private::simpleTeXBlanks(OutputParams const & runparams,
                                       Font const & font,
                                       Layout const & style)
 {
-       if (style.pass_thru || runparams.verbatim)
+       if (style.pass_thru || runparams.pass_thru)
                return false;
 
        if (i + 1 < int(text_.size())) {
@@ -716,19 +716,18 @@ bool Paragraph::Private::isTextAt(string const & str, pos_type pos) const
 }
 
 
-void Paragraph::Private::latexInset(
-                                            BufferParams const & bparams,
-                                            odocstream & os,
-                                            TexRow & texrow,
-                                            OutputParams & runparams,
-                                            Font & running_font,
-                                            Font & basefont,
-                                            Font const & outerfont,
-                                            bool & open_font,
-                                            Change & running_change,
-                                            Layout const & style,
-                                            pos_type & i,
-                                            unsigned int & column)
+void Paragraph::Private::latexInset(BufferParams const & bparams,
+                                   odocstream & os,
+                                   TexRow & texrow,
+                                   OutputParams & runparams,
+                                   Font & running_font,
+                                   Font & basefont,
+                                   Font const & outerfont,
+                                   bool & open_font,
+                                   Change & running_change,
+                                   Layout const & style,
+                                   pos_type & i,
+                                   unsigned int & column)
 {
        Inset * inset = owner_->getInset(i);
        LASSERT(inset, /**/);
@@ -870,7 +869,7 @@ void Paragraph::Private::latexSpecialChar(
 {
        char_type const c = text_[i];
 
-       if (style.pass_thru) {
+       if (style.pass_thru || runparams.pass_thru) {
                if (c != '\0')
                        // FIXME UNICODE: This can fail if c cannot
                        // be encoded in the current encoding.
@@ -878,13 +877,6 @@ void Paragraph::Private::latexSpecialChar(
                return;
        }
 
-       if (runparams.verbatim) {
-               // FIXME UNICODE: This can fail if c cannot
-               // be encoded in the current encoding.
-               os.put(c);
-               return;
-       }
-
        // If T1 font encoding is used, use the special
        // characters it provides.
        // NOTE: some languages reset the font encoding
@@ -1980,7 +1972,7 @@ int Paragraph::Private::endTeXParParams(BufferParams const & bparams,
 
 
 // This one spits out the text of the paragraph
-bool Paragraph::latex(BufferParams const & bparams,
+void Paragraph::latex(BufferParams const & bparams,
        Font const & outerfont,
        odocstream & os, TexRow & texrow,
        OutputParams const & runparams,
@@ -1994,9 +1986,7 @@ bool Paragraph::latex(BufferParams const & bparams,
                bparams.documentClass().plainLayout() : *d->layout_;
 
        if (!force && style.inpreamble)
-               return false;
-
-       bool return_value = false;
+               return;
 
        bool const allowcust = allowParagraphCustomization();
 
@@ -2129,7 +2119,7 @@ bool Paragraph::latex(BufferParams const & bparams,
                }
 
                // Switch file encoding if necessary (and allowed)
-               if (!runparams.verbatim && 
+               if (!runparams.pass_thru && !style.pass_thru &&
                    runparams.encoding->package() != Encoding::none &&
                    font.language()->encoding()->package() != Encoding::none) {
                        pair<bool, int> const enc_switch = switchEncoding(os, bparams,
@@ -2256,7 +2246,6 @@ bool Paragraph::latex(BufferParams const & bparams,
        // Needed if there is an optional argument but no contents.
        if (body_pos > 0 && body_pos == size()) {
                os << "}]~";
-               return_value = false;
        }
 
        if (allowcust && d->endTeXParParams(bparams, os, texrow, runparams)
@@ -2267,7 +2256,6 @@ bool Paragraph::latex(BufferParams const & bparams,
        }
 
        LYXERR(Debug::LATEX, "Paragraph::latex... done " << this);
-       return return_value;
 }
 
 
@@ -3173,19 +3161,19 @@ void Paragraph::updateWords()
 }
 
 
-bool Paragraph::spellCheck(pos_type & from, pos_type & to, WordLangTuple & wl,
+SpellChecker::Result Paragraph::spellCheck(pos_type & from, pos_type & to, WordLangTuple & wl,
        docstring_list & suggestions, bool do_suggestion) const
 {
        SpellChecker * speller = theSpellChecker();
        if (!speller)
-               return false;
+               return SpellChecker::WORD_OK;
 
        if (!d->layout_->spellcheck || !inInset().allowSpellCheck())
-               return false;
+               return SpellChecker::WORD_OK;
 
        locateWord(from, to, WHOLE_WORD);
        if (from == to || from >= pos_type(d->text_.size()))
-               return false;
+               return SpellChecker::WORD_OK;
 
        docstring word = asString(from, to, AS_STR_INSETS);
        // Ignore words with digits
@@ -3204,29 +3192,19 @@ bool Paragraph::spellCheck(pos_type & from, pos_type & to, WordLangTuple & wl,
        }
        wl = WordLangTuple(word, lang);
        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.
-       // Just ignore any error that the spellchecker reports.
-       // FIXME: we should through out an exception and catch it in the GUI to
-       // display the error.
-       if (!speller->error().empty())
-               return false;
-#endif
+               SpellChecker::WORD_OK : speller->check(wl);
 
-       bool const misspelled = res != SpellChecker::OK
-               && res != SpellChecker::IGNORED_WORD;
+       bool const misspelled_ = SpellChecker::misspelled(res) ;
 
        if (lyxrc.spellcheck_continuously)
-               d->fontlist_.setMisspelled(from, to, misspelled);
+               d->fontlist_.setMisspelled(from, to, misspelled_);
 
-       if (misspelled && do_suggestion)
+       if (misspelled_ && do_suggestion)
                speller->suggest(wl, suggestions);
        else
                suggestions.clear();
 
-       return misspelled;
+       return res;
 }
 
 
@@ -3236,7 +3214,8 @@ bool Paragraph::isMisspelled(pos_type pos) const
        pos_type to = pos;
        WordLangTuple wl;
        docstring_list suggestions;
-       return spellCheck(from, to, wl, suggestions, false);
+       SpellChecker::Result res = spellCheck(from, to, wl, suggestions, false);
+       return SpellChecker::misspelled(res) ;
 }