X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fparagraph_pimpl.h;h=efb347c2494dfbdc341c305c42a8c9b325ec72cb;hb=35204f8f33d7400a5fefeffea533fb4cb4097211;hp=628f20d5e9e976d4055674968a438f2f245a4280;hpb=7521b5d20f42102cf444e3fd8718a088a60d0098;p=lyx.git diff --git a/src/paragraph_pimpl.h b/src/paragraph_pimpl.h index 628f20d5e9..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 { +#include + + +namespace lyx { + +class LyXLayout; + + +class Paragraph::Pimpl { +public: /// Pimpl(Paragraph * owner); - /// Copy constructor - Pimpl(Pimpl const &, Paragraph * owner, bool same_ids = false); - /// - Paragraph::size_type size() const { - return text.size(); - } - /// - void clear(); - /// - void setContentsFromPar(Paragraph const * par); - /// - Paragraph::value_type - getChar(Paragraph::size_type pos) const; - /// - void setChar(Paragraph::size_type pos, Paragraph::value_type c); - /// - void insertChar(Paragraph::size_type pos, - Paragraph::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(Paragraph::size_type pos, - Inset * inset, - LyXFont const & font); + value_type getChar(pos_type pos) const; /// - void erase(Paragraph::size_type pos); + 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()(Paragraph::InsetTable const & a, - Paragraph::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,45 +76,41 @@ 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(size_type p, LyXFont const & f) - : pos_(p) - { - font_ = container.get(f); - } + FontTable(pos_type p, LyXFont const & f) + : pos_(p), font_(f) + {} /// - size_type pos() const { return pos_; } + pos_type pos() const { return pos_; } /// - void pos(size_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 - size_type pos_; + 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()(Paragraph::Pimpl::FontTable const & a, - Paragraph::Pimpl::FontTable const & b) const { + int operator()(FontTable const & a, FontTable const & b) const { return a.pos() < b.pos(); } }; @@ -122,36 +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, - size_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, - size_type & i, - int & column, value_type const c); + pos_type & i, + 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(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