X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fparagraph_pimpl.h;h=5ecd70bcf2df681072e6487eca0024b5745e6d07;hb=498f06d43a0f2000c3f704db1ea39fda3c819fe6;hp=66a178e8e3ccce3bb0df28721f684d63264b11b1;hpb=116dbc66eba9a0774db8cb318ea4802004c02ee9;p=lyx.git diff --git a/src/paragraph_pimpl.h b/src/paragraph_pimpl.h index 66a178e8e3..5ecd70bcf2 100644 --- a/src/paragraph_pimpl.h +++ b/src/paragraph_pimpl.h @@ -1,27 +1,20 @@ // -*- 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 -#ifdef __GNUG__ -#pragma interface -#endif - #include "paragraph.h" #include "ParagraphParameters.h" +#include "changes.h" #include "counters.h" -#include - +#include + class LyXLayout; struct Paragraph::Pimpl { @@ -44,34 +37,58 @@ struct Paragraph::Pimpl { 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 @@ -129,13 +146,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 &, @@ -143,29 +162,32 @@ 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; /// unsigned int id_; /// static unsigned int paragraph_id; /// ParagraphParameters params; - /// - Counters ctrs; 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) const; + /// for recording and looking up changes in revision tracking mode + boost::scoped_ptr changes_; + /// Who owns us? Paragraph * owner_; ///