X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fparagraph_pimpl.h;h=efb347c2494dfbdc341c305c42a8c9b325ec72cb;hb=35204f8f33d7400a5fefeffea533fb4cb4097211;hp=393a6397e3246b3a9761981f898d719e47a6fc3f;hpb=cd6e293ed7c588748fe0cf5927f46dc5e9ae6e35;p=lyx.git diff --git a/src/paragraph_pimpl.h b/src/paragraph_pimpl.h index 393a6397e3..efb347c249 100644 --- a/src/paragraph_pimpl.h +++ b/src/paragraph_pimpl.h @@ -1,69 +1,70 @@ // -*- C++ -*- -/* This file is part of - * ====================================================== - * - * LyX, The Document Processor - * - * Copyright 1995 Matthias Ettrich - * Copyright 1995-2001 The LyX Team. +/** + * \file paragraph_pimpl.h + * 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 -#ifdef __GNUG__ -#pragma interface -#endif - #include "paragraph.h" + +#include "changes.h" +#include "lyxfont.h" #include "ParagraphParameters.h" -#include -struct Paragraph::Pimpl { - /// - typedef std::vector TextContainer; +#include + + +namespace lyx { + +class LyXLayout; + +class Paragraph::Pimpl { +public: /// Pimpl(Paragraph * owner); - /// Copy constructor - Pimpl(Pimpl const &, Paragraph * owner, bool same_ids = false); - /// - pos_type size() const { - return text.size(); - } - /// - void clear(); - /// - void setContentsFromPar(Paragraph const * par); + /// "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); + /// value_type getChar(pos_type pos) const; /// - void setChar(pos_type pos, value_type c); - /// - void insertChar(pos_type pos, value_type c, LyXFont const & font); - /// - void insertInset(pos_type pos, Inset * inset, LyXFont const & font); - /// - void erase(pos_type pos); - /// - LyXFont const realizeFont(LyXFont const & font, - BufferParams const & bparams) const; + void insertChar(pos_type pos, value_type c, Change const & change); /// - Inset * inset_owner; + 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); /// - boost::array counter_; + InsetBase * inset_owner; - /// - friend struct matchIT; - /// - struct matchIT { - /// used by lower_bound and upper_bound - inline - int operator()(InsetTable const & a, InsetTable const & b) const { - return a.pos < b.pos; - } - }; /** 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 @@ -75,43 +76,40 @@ 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(pos_type p, LyXFont const & f) - : pos_(p) - { - font_ = container.get(f); - } + : pos_(p), font_(f) + {} /// pos_type pos() const { return pos_; } /// 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 pos_type pos_; /** Font. Interpretation of the font values: - If a value is LyXFont::INHERIT_*, it means that the font + If a value is LyXFont::INHERIT_*, it means that the font attribute is inherited from either the layout of this - paragraph or, in the case of nested paragraphs, from the - layout in the environment one level up until completely + paragraph or, in the case of nested paragraphs, from the + layout in the environment one level up until completely resolved. - The values LyXFont::IGNORE_* and LyXFont::TOGGLE are NOT + 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(); } @@ -121,39 +119,51 @@ 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, + void simpleTeXBlanks(odocstream &, TexRow & texrow, pos_type const i, - int & column, LyXFont const & font, + 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, pos_type & i, - int & column, value_type const c); + unsigned int & column, value_type const c); + /// - Paragraph * getParFromID(int id) const; + void validate(LaTeXFeatures & features, + LyXLayout const & layout) const; + /// unsigned int id_; /// static unsigned int paragraph_id; /// 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, pos_type pos); - + 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