]> git.lyx.org Git - lyx.git/blobdiff - src/Text.cpp
Whitespace.
[lyx.git] / src / Text.cpp
index 9b38e9b15e11598ba98f29a102fa5cfb95ce9a0f..66c6090aa22c9abb40d8d9561fcdf82ddb7cbcb2 100644 (file)
@@ -170,6 +170,40 @@ void mergeParagraph(BufferParams const & bparams,
        pars.erase(boost::next(pars.begin(), par_offset + 1));
 }
 
+// Initialization of the counter for the paragraph id's,
+//
+// FIXME: There should be a more intelligent way to generate and use the
+// paragraph ids per buffer instead a global static counter for all InsetText
+// in the running program.
+static int paragraph_id = -1;
+
+Text::Text(InsetText * owner, bool use_default_layout)
+       : owner_(owner), autoBreakRows_(false), undo_counter_(0)
+{
+       pars_.push_back(Paragraph());
+       Paragraph & par = pars_.back();
+       par.setId(++paragraph_id);
+       par.setInsetOwner(owner);
+       DocumentClass const & dc = owner->buffer().params().documentClass();
+       if (use_default_layout)
+               par.setDefaultLayout(dc);
+       else
+               par.setPlainLayout(dc);
+}
+
+
+Text::Text(InsetText * owner, Text const & text)
+       : owner_(owner), autoBreakRows_(text.autoBreakRows_), undo_counter_(0)
+{
+       pars_ = text.pars_;
+       ParagraphList::iterator const end = pars_.end();
+       ParagraphList::iterator it = pars_.begin();
+       for (; it != end; ++it) {
+               it->setId(++paragraph_id);
+               it->setInsetOwner(owner);
+       }
+}
+
 
 pit_type Text::depthHook(pit_type pit, depth_type depth) const
 {
@@ -274,8 +308,8 @@ InsetText const & Text::inset() const
 void Text::readParToken(Paragraph & par, Lexer & lex,
        string const & token, Font & font, Change & change, ErrorList & errorList)
 {
-       Buffer const & buf = owner_->buffer();
-       BufferParams const & bp = buf.params();
+       Buffer * buf = const_cast<Buffer *>(&owner_->buffer());
+       BufferParams const & bp = buf->params();
 
        if (token[0] != '\\') {
                docstring dstr = lex.getDocString();
@@ -397,18 +431,18 @@ void Text::readParToken(Paragraph & par, Lexer & lex,
                auto_ptr<Inset> inset;
                inset.reset(new InsetSpecialChar);
                inset->read(lex);
-               inset->setBuffer(const_cast<Buffer &>(buf));
+               inset->setBuffer(*buf);
                par.insertInset(par.size(), inset.release(), font, change);
        } else if (token == "\\backslash") {
                par.appendChar('\\', font, change);
        } else if (token == "\\LyXTable") {
-               auto_ptr<Inset> inset(new InsetTabular(const_cast<Buffer &>(buf)));
+               auto_ptr<Inset> inset(new InsetTabular(buf));
                inset->read(lex);
                par.insertInset(par.size(), inset.release(), font, change);
        } else if (token == "\\lyxline") {
                auto_ptr<Inset> inset;
                inset.reset(new InsetLine);
-               inset->setBuffer(const_cast<Buffer &>(buf));
+               inset->setBuffer(*buf);
                par.insertInset(par.size(), inset.release(), font, change);
        } else if (token == "\\change_unchanged") {
                change = Change(Change::UNCHANGED);
@@ -485,8 +519,8 @@ class TextCompletionList : public CompletionList
 {
 public:
        ///
-       TextCompletionList(Cursor const & cur)
-               : buffer_(cur.buffer()), pos_(0)
+       TextCompletionList(Cursor const & cur, WordList const * list)
+               : buffer_(cur.buffer()), pos_(0), list_(list)
        {}
        ///
        virtual ~TextCompletionList() {}
@@ -496,12 +530,12 @@ public:
        ///
        virtual size_t size() const
        {
-               return theWordList().size();
+               return list_->size();
        }
        ///
        virtual docstring const & data(size_t idx) const
        {
-               return theWordList().word(idx);
+               return list_->word(idx);
        }
        
 private:
@@ -509,6 +543,8 @@ private:
        Buffer const * buffer_;
        ///
        size_t pos_;
+       ///
+       WordList const * list_;
 };
 
 
@@ -1123,9 +1159,11 @@ void Text::selectWord(Cursor & cur, word_location loc)
                setCursor(cur, from.pit(), from.pos());
        if (to == from)
                return;
-       cur.resetAnchor();
+       if (!cur.selection())
+               cur.resetAnchor();
        setCursor(cur, to.pit(), to.pos());
        cur.setSelection();
+       cur.setWordSelection(true);
 }
 
 
@@ -1986,7 +2024,8 @@ bool Text::completionSupported(Cursor const & cur) const
 
 CompletionList const * Text::createCompletionList(Cursor const & cur) const
 {
-       return new TextCompletionList(cur);
+       WordList const * list = theWordList(*cur.getFont().language());
+       return new TextCompletionList(cur, list);
 }