X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fparagraph_pimpl.h;h=9f03d866369e6c2e8b95b010868595485cd3b00f;hb=501f1dd61b6c0beb927151ecf331f78848261b59;hp=efbbd7046f66952e139a073d85a907a9213e770b;hpb=df279e7596b3a3f640f506d3681f9709dcd09e0a;p=lyx.git diff --git a/src/paragraph_pimpl.h b/src/paragraph_pimpl.h index efbbd7046f..9f03d86636 100644 --- a/src/paragraph_pimpl.h +++ b/src/paragraph_pimpl.h @@ -1,13 +1,9 @@ // -*- C++ -*- -/* This file is part of - * ====================================================== - * - * LyX, The Document Processor - * - * Copyright 1995 Matthias Ettrich - * Copyright 1995-2001 The LyX Team. - * - * ====================================================== */ +/** + * \file paragraph_pimpl.h + * Copyright 1995-2002 the LyX Team + * Read the file COPYING + */ #ifndef PARAGRAPH_PIMPL_H #define PARAGRAPH_PIMPL_H @@ -18,9 +14,11 @@ #include "paragraph.h" #include "ParagraphParameters.h" +#include "changes.h" +#include "counters.h" -#include - +#include + class LyXLayout; struct Paragraph::Pimpl { @@ -36,37 +34,65 @@ struct Paragraph::Pimpl { 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); - /// - void insertInset(lyx::pos_type pos, Inset * inset, LyXFont const & font); + 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 void erase(lyx::pos_type pos); + /// erase the given range + bool erase(lyx::pos_type start, lyx::pos_type end); /// LyXFont const realizeFont(LyXFont const & font, BufferParams const & bparams) const; /// Inset * inset_owner; - /// - boost::array counter_; - /// - 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 @@ -124,13 +150,15 @@ 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, + unsigned int & column, + LyXFont const & font, LyXLayout const & style); /// void simpleTeXSpecialChars(Buffer const *, BufferParams const &, @@ -138,9 +166,15 @@ struct Paragraph::Pimpl { bool moving_arg, LyXFont & font, LyXFont & running_font, LyXFont & basefont, bool & open_font, + Change::Type & running_change, LyXLayout const & style, lyx::pos_type & i, - int & column, value_type const c); + unsigned int & column, value_type const c); + + /// + void validate(LaTeXFeatures & features, + LyXLayout const & layout) const; + /// Paragraph * getParFromID(int id) const; /// @@ -149,10 +183,17 @@ struct Paragraph::Pimpl { static unsigned int paragraph_id; /// ParagraphParameters params; + private: + /// erase at the given position. Returns true if it was actually erased + bool erasePos(lyx::pos_type pos); + /// match a string against a particular point in the paragraph - bool isTextAt(string const & str, lyx::pos_type pos); + bool isTextAt(string const & str, lyx::pos_type pos) const; + /// for recording and looking up changes in revision tracking mode + boost::scoped_ptr changes_; + /// Who owns us? Paragraph * owner_; ///