X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fparagraph_pimpl.h;h=5ecd70bcf2df681072e6487eca0024b5745e6d07;hb=498f06d43a0f2000c3f704db1ea39fda3c819fe6;hp=922b52eb0503e972cb49c0f00c9478626ab33be1;hpb=b8e78dc35f527143f2d51ba1e5f103decdeae6ad;p=lyx.git diff --git a/src/paragraph_pimpl.h b/src/paragraph_pimpl.h index 922b52eb05..5ecd70bcf2 100644 --- a/src/paragraph_pimpl.h +++ b/src/paragraph_pimpl.h @@ -1,24 +1,21 @@ // -*- 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 +#include "changes.h" +#include "counters.h" + +#include + +class LyXLayout; struct Paragraph::Pimpl { /// @@ -33,37 +30,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 @@ -94,12 +119,12 @@ struct Paragraph::Pimpl { /// End position of paragraph this font attribute covers lyx::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_; @@ -121,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 &, @@ -135,21 +162,31 @@ 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); + /// - Paragraph * getParFromID(int id) const; + void validate(LaTeXFeatures & features, + LyXLayout const & layout) const; + /// unsigned int id_; /// 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(BufferParams const &, LyXFont &, - 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_;