]> git.lyx.org Git - lyx.git/blobdiff - src/Paragraph.cpp
Style. Enum names and typedefs are almost always CamelCase in the LyX
[lyx.git] / src / Paragraph.cpp
index 0266c2e6ff9cf19a5b7875a12ebee99a7fceed7e..bfaec69d14f825f5c269d3fbcede6cf3049a7060 100644 (file)
@@ -189,9 +189,8 @@ public:
        FontList fontlist_;
 
        ///
-       unsigned int id_;
-       ///
-       static unsigned int paragraph_id;
+       int id_;
+
        ///
        ParagraphParameters params_;
 
@@ -208,17 +207,14 @@ public:
        ///
        TextContainer text_;
        
-       typedef std::set<docstring> Words;
+       typedef set<docstring> Words;
        ///
-       Words words_;
+       map<Language, Words> words_;
        ///
        Layout const * layout_;
 };
 
 
-// Initialization of the counter for the paragraph id's,
-unsigned int Paragraph::Private::paragraph_id = 0;
-
 namespace {
 
 struct special_phrase {
@@ -240,20 +236,18 @@ size_t const phrases_nr = sizeof(special_phrases)/sizeof(special_phrase);
 
 
 Paragraph::Private::Private(Paragraph * owner, Layout const & layout)
-       : owner_(owner), inset_owner_(0), begin_of_body_(0), layout_(&layout)
+       : owner_(owner), inset_owner_(0), id_(-1), begin_of_body_(0), layout_(&layout)
 {
-       id_ = paragraph_id++;
        text_.reserve(100);
 }
 
 
 Paragraph::Private::Private(Private const & p, Paragraph * owner)
        : owner_(owner), inset_owner_(p.inset_owner_), fontlist_(p.fontlist_), 
-         params_(p.params_), changes_(p.changes_), insetlist_(p.insetlist_),
+         id_(p.id_), params_(p.params_), changes_(p.changes_), insetlist_(p.insetlist_),
          begin_of_body_(p.begin_of_body_), text_(p.text_), words_(p.words_),
          layout_(p.layout_)
 {
-       id_ = paragraph_id++;
 }
 
 
@@ -265,7 +259,6 @@ Paragraph::Private::Private(Private const & p, Paragraph * owner,
          begin_of_body_(p.begin_of_body_), words_(p.words_),
          layout_(p.layout_)
 {
-       id_ = paragraph_id++;
        if (beg >= pos_type(p.text_.size()))
                return;
        text_ = p.text_.substr(beg, end - beg);
@@ -2401,7 +2394,7 @@ docstring Paragraph::simpleLyXHTMLOnePar(Buffer const & buf,
 
        bool emph_flag = false;
        bool bold_flag = false;
-       std::string closing_tag;
+       string closing_tag;
 
        Layout const & style = *d->layout_;
 
@@ -2654,6 +2647,12 @@ int Paragraph::id() const
 }
 
 
+void Paragraph::setId(int id)
+{
+       d->id_ = id;
+}
+
+
 Layout const & Paragraph::layout() const
 {
        return *d->layout_;
@@ -3022,10 +3021,13 @@ bool Paragraph::isSeparator(pos_type pos) const
 
 void Paragraph::deregisterWords()
 {
+       map<Language, Private::Words>::const_iterator itl;
        Private::Words::const_iterator it;
-       WordList & wl = theWordList();
-       for (it = d->words_.begin(); it != d->words_.end(); ++it)
-               wl.remove(*it);
+       for (itl = d->words_.begin(); itl != d->words_.end(); ++itl) {
+               WordList * wl = theWordList(itl->first);
+               for (it = (itl->second).begin(); it != (itl->second).end(); ++it)
+                       wl->remove(*it);
+       }
        d->words_.clear();
 }
 
@@ -3077,7 +3079,11 @@ void Paragraph::collectWords()
                locateWord(from, pos, WHOLE_WORD);
                if (pos - from >= 6) {
                        docstring word = asString(from, pos, AS_STR_NONE);
-                       d->words_.insert(word);
+                       FontList::const_iterator cit = d->fontlist_.fontIterator(pos);
+                       if (cit == d->fontlist_.end())
+                               return;
+                       Language const * lang = cit->font().language();
+                       d->words_[*lang].insert(word);
                }
        }
 }
@@ -3085,10 +3091,13 @@ void Paragraph::collectWords()
 
 void Paragraph::registerWords()
 {
+       map<Language, Private::Words>::const_iterator itl;
        Private::Words::const_iterator it;
-       WordList & wl = theWordList();
-       for (it = d->words_.begin(); it != d->words_.end(); ++it)
-               wl.insert(*it);
+       for (itl = d->words_.begin(); itl != d->words_.end(); ++itl) {
+               WordList * wl = theWordList(itl->first);
+               for (it = (itl->second).begin(); it != (itl->second).end(); ++it)
+                       wl->insert(*it);
+       }
 }