X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fparagraph_pimpl.h;h=efb347c2494dfbdc341c305c42a8c9b325ec72cb;hb=35204f8f33d7400a5fefeffea533fb4cb4097211;hp=a29de09e2446db3415a0737e4132ef26936a7c0e;hpb=6894fa6008fcb92d385dade7168b09b3e4cb128f;p=lyx.git diff --git a/src/paragraph_pimpl.h b/src/paragraph_pimpl.h index a29de09e24..efb347c249 100644 --- a/src/paragraph_pimpl.h +++ b/src/paragraph_pimpl.h @@ -1,63 +1,70 @@ // -*- C++ -*- -/* This file is part of - * ====================================================== +/** + * \file paragraph_pimpl.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. * - * LyX, The Document Processor + * \author Lars Gullik Bjønnes + * \author Jean-Marc Lasgouttes + * \author John Levon + * \author André Pönitz * - * Copyright 1995 Matthias Ettrich - * Copyright 1995-2001 The LyX Team. - * - * ====================================================== */ + * Full author contact details are available in file CREDITS. + */ #ifndef PARAGRAPH_PIMPL_H #define PARAGRAPH_PIMPL_H -#ifdef __GNUG__ -#pragma interface -#endif - #include "paragraph.h" + +#include "changes.h" +#include "lyxfont.h" #include "ParagraphParameters.h" -#include "counters.h" + +#include + + +namespace lyx { class LyXLayout; -struct Paragraph::Pimpl { - /// - typedef std::vector TextContainer; +class Paragraph::Pimpl { +public: /// Pimpl(Paragraph * owner); - /// Copy constructor - Pimpl(Pimpl const &, Paragraph * owner, bool same_ids = false); - /// - lyx::pos_type size() const { - return text.size(); - } - /// - bool empty() const { - return text.empty(); - } - /// - void clear(); - /// - void setContentsFromPar(Paragraph const * par); - /// - value_type getChar(lyx::pos_type pos) const; - /// - void setChar(lyx::pos_type pos, value_type c); - /// - void insertChar(lyx::pos_type pos, value_type c, LyXFont const & font); + /// "Copy constructor" + Pimpl(Pimpl const &, Paragraph * owner); + + // + // 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); + /// - void insertInset(lyx::pos_type pos, Inset * inset, LyXFont const & font); + value_type getChar(pos_type pos) const; /// - void erase(lyx::pos_type pos); + void insertChar(pos_type pos, value_type c, Change const & change); /// - LyXFont const realizeFont(LyXFont const & font, - BufferParams const & bparams) const; + 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); /// - 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. I don't think it's worth the effort to implement a more effective @@ -69,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 @@ -96,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(); } @@ -115,30 +119,30 @@ struct Paragraph::Pimpl { typedef std::vector FontList; /// FontList fontlist; + /// - Paragraph * TeXDeeper(Buffer const *, BufferParams const &, - std::ostream &, TexRow & texrow); - /// - void simpleTeXBlanks(std::ostream &, TexRow & texrow, - lyx::pos_type const i, - int & column, LyXFont const & font, + 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, - bool moving_arg, + void simpleTeXSpecialChars(Buffer const &, BufferParams const &, + odocstream &, TexRow & texrow, + OutputParams const &, LyXFont & font, LyXFont & running_font, - LyXFont & basefont, bool & open_font, + LyXFont & basefont, + LyXFont const & outerfont, + bool & open_font, + Change::Type & running_change, LyXLayout const & style, - lyx::pos_type & i, - int & column, value_type const c); + pos_type & i, + unsigned int & column, value_type const c); /// void validate(LaTeXFeatures & features, LyXLayout const & layout) const; - /// - Paragraph * getParFromID(int id) const; /// unsigned int id_; /// @@ -147,13 +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 + Changes changes_; /// Who owns us? Paragraph * owner_; - /// - TextContainer text; }; + +} // namespace lyx + #endif