X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fparagraph_pimpl.h;h=efb347c2494dfbdc341c305c42a8c9b325ec72cb;hb=35204f8f33d7400a5fefeffea533fb4cb4097211;hp=9a1ea617d6a0ddaff00f0bd8e8030a5d9e79a6b2;hpb=83e37d57dd3228814360a46cb5487ed4fb50ee6c;p=lyx.git diff --git a/src/paragraph_pimpl.h b/src/paragraph_pimpl.h index 9a1ea617d6..efb347c249 100644 --- a/src/paragraph_pimpl.h +++ b/src/paragraph_pimpl.h @@ -1,90 +1,69 @@ // -*- C++ -*- /** * \file paragraph_pimpl.h - * Copyright 1995-2003 the LyX Team - * Read the file COPYING + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author Lars Gullik Bjønnes + * \author Jean-Marc Lasgouttes + * \author John Levon + * \author André Pönitz + * + * Full author contact details are available in file CREDITS. */ #ifndef PARAGRAPH_PIMPL_H #define PARAGRAPH_PIMPL_H #include "paragraph.h" -#include "ParagraphParameters.h" + #include "changes.h" -#include "counters.h" +#include "lyxfont.h" +#include "ParagraphParameters.h" #include + +namespace lyx { + class LyXLayout; -struct Paragraph::Pimpl { - /// - typedef std::vector TextContainer; +class Paragraph::Pimpl { +public: /// Pimpl(Paragraph * owner); - /// Copy constructor + /// "Copy constructor" Pimpl(Pimpl const &, Paragraph * owner); - /// - lyx::pos_type size() const { - return text.size(); - } - /// - bool empty() const { - return text.empty(); - } - /// - void clear(); - /// - void setContentsFromPar(Paragraph const & par); - /// set tracking mode - void trackChanges(Change::Type type = Change::UNCHANGED); - /// stop tracking - void untrackChanges(); - /// set all text as new for change mode - void cleanChanges(); - /// look up change type at given pos - Change::Type lookupChange(lyx::pos_type pos) const; - /// look up change at given pos - Change const lookupChangeFull(lyx::pos_type pos) const; - /// is there a change in the given range ? - bool isChanged(lyx::pos_type start, lyx::pos_type end) const; - /// is there a non-addition in this range ? - bool isChangeEdited(lyx::pos_type start, lyx::pos_type end) const; - - /// set change at pos - void setChange(lyx::pos_type pos, Change::Type type); - - /// mark as erased - void markErased(); - /// accept change - void acceptChange(lyx::pos_type start, lyx::pos_type end); - - /// reject change - void rejectChange(lyx::pos_type start, lyx::pos_type end); - - /// are we tracking changes ? - bool tracking() const { - return changes_.get(); - } + // + // Change tracking + // + /// look up change at given pos + Change const lookupChange(pos_type pos) const; + /// is there a change within the given range ? + bool isChanged(pos_type start, pos_type end) const; + /// set change for the entire par + void setChange(Change const & change); + /// set change at given pos + void setChange(pos_type pos, Change const & change); + /// accept changes within the given range + void acceptChanges(pos_type start, pos_type end); + /// reject changes within the given range + void rejectChanges(pos_type start, pos_type end); /// - value_type getChar(lyx::pos_type pos) const; + value_type getChar(pos_type pos) const; /// - void setChar(lyx::pos_type pos, value_type c); + void insertChar(pos_type pos, value_type c, Change const & change); /// - void insertChar(lyx::pos_type pos, value_type c, LyXFont const & font, Change change = Change(Change::INSERTED)); + void insertInset(pos_type pos, InsetBase * inset, Change const & change); + /// (logically) erase the char at pos; return true if it was actually erased + bool eraseChar(pos_type pos, bool trackChanges); + /// (logically) erase the given range; return the number of chars actually erased + int eraseChars(pos_type start, pos_type end, bool trackChanges); /// - void insertInset(lyx::pos_type pos, Inset * inset, LyXFont const & font, Change change = Change(Change::INSERTED)); - /// definite erase - void eraseIntern(lyx::pos_type pos); - /// erase the given position. Returns true if it was actually erased - bool erase(lyx::pos_type pos); - /// erase the given range - int erase(lyx::pos_type start, lyx::pos_type end); - /// - Inset * inset_owner; + InsetBase * inset_owner; /** A font entry covers a range of positions. Notice that the entries in the list are inserted in random order. @@ -97,24 +76,23 @@ struct Paragraph::Pimpl { and font_i covers the chars in positions pos_{i-1}+1,...,pos_i (font_1 covers the chars 0,...,pos_1) (Dekel) */ - struct FontTable { + class FontTable { + public: /// - FontTable(lyx::pos_type p, LyXFont const & f) - : pos_(p) - { - font_ = container.get(f); - } + FontTable(pos_type p, LyXFont const & f) + : pos_(p), font_(f) + {} /// - lyx::pos_type pos() const { return pos_; } + pos_type pos() const { return pos_; } /// - void pos(lyx::pos_type p) { pos_ = p; } + void pos(pos_type p) { pos_ = p; } /// - LyXFont const & font() const { return *font_; } + LyXFont const & font() const { return font_; } /// - void font(LyXFont const & f) { font_ = container.get(f);} + void font(LyXFont const & f) { font_ = f;} private: /// End position of paragraph this font attribute covers - lyx::pos_type pos_; + pos_type pos_; /** Font. Interpretation of the font values: If a value is LyXFont::INHERIT_*, it means that the font attribute is inherited from either the layout of this @@ -124,16 +102,14 @@ struct Paragraph::Pimpl { The values LyXFont::IGNORE_* and LyXFont::TOGGLE are NOT allowed in these font tables. */ - boost::shared_ptr font_; - /// - static ShareContainer container; + LyXFont font_; }; /// - friend struct matchFT; + friend class matchFT; /// - struct matchFT { + class matchFT { + public: /// used by lower_bound and upper_bound - inline int operator()(FontTable const & a, FontTable const & b) const { return a.pos() < b.pos(); } @@ -145,22 +121,22 @@ struct Paragraph::Pimpl { FontList fontlist; /// - void simpleTeXBlanks(std::ostream &, TexRow & texrow, - lyx::pos_type const i, + void simpleTeXBlanks(odocstream &, TexRow & texrow, + pos_type const i, unsigned int & column, LyXFont const & font, LyXLayout const & style); /// - void simpleTeXSpecialChars(Buffer const *, BufferParams const &, - std::ostream &, TexRow & texrow, - LatexRunParams const &, + void simpleTeXSpecialChars(Buffer const &, BufferParams const &, + odocstream &, TexRow & texrow, + OutputParams const &, LyXFont & font, LyXFont & running_font, LyXFont & basefont, LyXFont const & outerfont, bool & open_font, Change::Type & running_change, LyXLayout const & style, - lyx::pos_type & i, + pos_type & i, unsigned int & column, value_type const c); /// @@ -175,16 +151,19 @@ struct Paragraph::Pimpl { ParagraphParameters params; private: + /// + pos_type size() const { return owner_->size(); } /// match a string against a particular point in the paragraph - bool isTextAt(string const & str, lyx::pos_type pos) const; + bool isTextAt(std::string const & str, pos_type pos) const; - /// for recording and looking up changes in revision tracking mode - boost::scoped_ptr changes_; + /// for recording and looking up changes + Changes changes_; /// Who owns us? Paragraph * owner_; - /// - TextContainer text; }; + +} // namespace lyx + #endif