X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fparagraph_pimpl.h;h=3b8e0b0fab6f61c497caa39f47298994a20b69a5;hb=52eb91c94fb70d58dceef430659c8781de2eccda;hp=8d1977d8a347f7feb58add3cd29183509afea3af;hpb=e412a2a53ea60a327d6ea8b8b802cb1b169a7108;p=lyx.git diff --git a/src/paragraph_pimpl.h b/src/paragraph_pimpl.h index 8d1977d8a3..3b8e0b0fab 100644 --- a/src/paragraph_pimpl.h +++ b/src/paragraph_pimpl.h @@ -1,90 +1,73 @@ // -*- 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 Encoding; 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(); - } - - /// - 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, Change change = Change(Change::INSERTED)); - /// - 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); - /// - UpdatableInset * inset_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; + /// will the paragraph be physically merged with the next + /// one if the imaginary end-of-par character is logically deleted? + bool isMergedOnEndOfParDeletion(bool trackChanges) 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(BufferParams const & bparams, pos_type start, pos_type end); + /// reject changes within the given range + void rejectChanges(BufferParams const & bparams, pos_type start, pos_type end); + + /// + value_type getChar(pos_type pos) const; + /// + void insertChar(pos_type pos, value_type c, Change const & change); + /// + 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); + /// + 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 +80,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 +106,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(); } @@ -144,23 +124,30 @@ struct Paragraph::Pimpl { /// FontList fontlist; - /// - void simpleTeXBlanks(std::ostream &, TexRow & texrow, - lyx::pos_type const i, + /// Output the surrogate pair formed by \p c and \p next to \p os. + /// \return the number of characters written. + int latexSurrogatePair(odocstream & os, value_type c, value_type next, + Encoding const &); + /// Output a space in appropriate formatting (or a surrogate pair + /// if the next character is a combining character). + /// \return whether a surrogate pair was output. + bool simpleTeXBlanks(BufferParams const &, Encoding const &, + odocstream &, TexRow & texrow, + pos_type & 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 &, + Encoding 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 +162,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