]> git.lyx.org Git - lyx.git/blobdiff - src/Paragraph.cpp
Do not scale statusbar icons
[lyx.git] / src / Paragraph.cpp
index 008ed0e46113ca2b87bfc10256517212a2d6a488..8ac87d31c2d2060cfa08f56d30d417a110c02023 100644 (file)
@@ -37,6 +37,7 @@
 #include "output_xhtml.h"
 #include "output_docbook.h"
 #include "ParagraphParameters.h"
+#include "Session.h"
 #include "SpellChecker.h"
 #include "texstream.h"
 #include "TexRow.h"
@@ -307,7 +308,7 @@ public:
        /// \return the number of characters written.
        int latexSurrogatePair(BufferParams const &, otexstream & os,
                               char_type c, char_type next,
-                              OutputParams const &);
+                              OutputParams const &) const;
 
        /// Output a space in appropriate formatting (or a surrogate pair
        /// if the next character is a combining character).
@@ -318,7 +319,7 @@ public:
                             pos_type i,
                             unsigned int & column,
                             Font const & font,
-                            Layout const & style);
+                            Layout const & style) const;
 
        /// This could go to ParagraphParameters if we want to.
        int startTeXParParams(BufferParams const &, otexstream &,
@@ -342,7 +343,7 @@ public:
                                   unsigned int & column,
                                   bool const fontswitch_inset,
                                   bool const closeLanguage,
-                                  bool const lang_switched_at_inset);
+                                  bool const lang_switched_at_inset) const;
 
        ///
        void latexSpecialChar(
@@ -354,7 +355,7 @@ public:
                                   Layout const & style,
                                   pos_type & i,
                                   pos_type end_pos,
-                                  unsigned int & column);
+                                  unsigned int & column) const;
 
        ///
        bool latexSpecialT1(
@@ -401,7 +402,7 @@ public:
                return speller_change_number > speller_state_.currentChangeNumber();
        }
 
-       bool ignoreWord(docstring const & word) const ;
+       bool ignoreWord(docstring const & word) const;
 
        void setMisspelled(pos_type from, pos_type to, SpellChecker::Result state)
        {
@@ -460,10 +461,11 @@ public:
                return numskips;
        }
 
-       void markMisspelledWords(pos_type const & first, pos_type const & last,
-                                                        SpellChecker::Result result,
-                                                        docstring const & word,
-                                                        SkipPositions const & skips);
+       void markMisspelledWords(Language const * lang,
+                                pos_type const & first, pos_type const & last,
+                                SpellChecker::Result result,
+                                docstring const & word,
+                                SkipPositions const & skips);
 
        InsetCode ownerCode() const
        {
@@ -831,6 +833,10 @@ void Paragraph::Private::insertChar(pos_type pos, char_type c,
 
        // Update list of misspelled positions
        speller_state_.increasePosAfterPos(pos);
+
+       // Update bookmarks
+       theSession().bookmarks().adjustPosAfterPos(inset_owner_->buffer().fileName(),
+                                                  id_, pos, 1);
 }
 
 
@@ -915,6 +921,10 @@ bool Paragraph::eraseChar(pos_type pos, bool trackChanges)
        d->speller_state_.decreasePosAfterPos(pos);
        d->speller_state_.refreshLast(size());
 
+       // Update bookmarks
+       theSession().bookmarks().adjustPosAfterPos(d->inset_owner_->buffer().fileName(),
+                                                  d->id_, pos, -1);
+
        return true;
 }
 
@@ -936,7 +946,7 @@ int Paragraph::eraseChars(pos_type start, pos_type end, bool trackChanges)
 // Handle combining characters
 int Paragraph::Private::latexSurrogatePair(BufferParams const & bparams,
                otexstream & os, char_type c, char_type next,
-               OutputParams const & runparams)
+               OutputParams const & runparams) const
 {
        // Writing next here may circumvent a possible font change between
        // c and next. Since next is only output if it forms a surrogate pair
@@ -973,7 +983,7 @@ bool Paragraph::Private::simpleTeXBlanks(BufferParams const & bparams,
                                       pos_type i,
                                       unsigned int & column,
                                       Font const & font,
-                                      Layout const & style)
+                                      Layout const & style) const
 {
        if (style.pass_thru || runparams.pass_thru)
                return false;
@@ -1026,7 +1036,7 @@ void Paragraph::Private::latexInset(BufferParams const & bparams,
                                    unsigned int & column,
                                    bool const fontswitch_inset,
                                    bool const closeLanguage,
-                                   bool const lang_switched_at_inset)
+                                   bool const lang_switched_at_inset) const
 {
        Inset * inset = owner_->getInset(i);
        LBUFERR(inset);
@@ -1192,7 +1202,7 @@ void Paragraph::Private::latexSpecialChar(otexstream & os,
                                          Layout const & style,
                                          pos_type & i,
                                          pos_type end_pos,
-                                         unsigned int & column)
+                                         unsigned int & column) const
 {
        char_type const c = owner_->getUChar(bparams, runparams, i);
 
@@ -4924,6 +4934,7 @@ void Paragraph::anonymize()
 
 
 void Paragraph::Private::markMisspelledWords(
+       Language const * lang,
        pos_type const & first, pos_type const & last,
        SpellChecker::Result result,
        docstring const & word,
@@ -4945,8 +4956,9 @@ void Paragraph::Private::markMisspelledWords(
                int wlen = 0;
                speller->misspelledWord(index, wstart, wlen);
                /// should not happen if speller supports range checks
-               if (!wlen) continue;
-               docstring const misspelled = word.substr(wstart, wlen);
+               if (!wlen)
+                       continue;
+               WordLangTuple const candidate(word.substr(wstart, wlen), lang);
                wstart += first + numskipped;
                if (snext < wstart) {
                        /// mark the range of correct spelling
@@ -4955,12 +4967,21 @@ void Paragraph::Private::markMisspelledWords(
                                wstart - 1, SpellChecker::WORD_OK);
                }
                snext = wstart + wlen;
+               // Check whether the candidate is in the document's local dict
+               SpellChecker::Result actresult = result;
+               if (inset_owner_->buffer().params().spellignored(candidate))
+                       actresult = SpellChecker::DOCUMENT_LEARNED_WORD;
                numskipped += countSkips(it, et, snext);
                /// mark the range of misspelling
-               setMisspelled(wstart, snext, result);
-               LYXERR(Debug::GUI, "misspelled word: \"" <<
-                          misspelled << "\" [" <<
-                          wstart << ".." << (snext-1) << "]");
+               setMisspelled(wstart, snext, actresult);
+               if (actresult == SpellChecker::DOCUMENT_LEARNED_WORD)
+                       LYXERR(Debug::GUI, "local dictionary word: \"" <<
+                                  candidate.word() << "\" [" <<
+                                  wstart << ".." << (snext-1) << "]");
+               else
+                       LYXERR(Debug::GUI, "misspelled word: \"" <<
+                                  candidate.word() << "\" [" <<
+                                  wstart << ".." << (snext-1) << "]");
                ++snext;
        }
        if (snext <= last) {
@@ -4992,7 +5013,7 @@ void Paragraph::spellCheck() const
                        BufferParams const & bparams = d->inset_owner_->buffer().params();
                        SpellChecker::Result result = !word.empty() ?
                                speller->check(wl, bparams.spellignore()) : SpellChecker::WORD_OK;
-                       d->markMisspelledWords(first, last, result, word, skips);
+                       d->markMisspelledWords(lang, first, last, result, word, skips);
                        first = ++last;
                }
        } else {