X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fparagraph_pimpl.h;h=5ecd70bcf2df681072e6487eca0024b5745e6d07;hb=498f06d43a0f2000c3f704db1ea39fda3c819fe6;hp=bda3bc960dac2e27948f62236b5a5bb6d724ff75;hpb=d1182f17daa1a164d9527ccbe6500840d7ac6bc8;p=lyx.git diff --git a/src/paragraph_pimpl.h b/src/paragraph_pimpl.h index bda3bc960d..5ecd70bcf2 100644 --- a/src/paragraph_pimpl.h +++ b/src/paragraph_pimpl.h @@ -1,69 +1,94 @@ // -*- 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 { + /// + typedef std::vector TextContainer; + /// Pimpl(Paragraph * owner); /// Copy constructor - Pimpl(Pimpl const &, Paragraph * owner); + Pimpl(Pimpl const &, Paragraph * owner, bool same_ids = false); /// - Paragraph::size_type size() const { + 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(); + } + /// - Paragraph::value_type - getChar(Paragraph::size_type pos) const; + value_type getChar(lyx::pos_type pos) const; /// - void setChar(Paragraph::size_type pos, Paragraph::value_type c); + void setChar(lyx::pos_type pos, value_type c); /// - void insertChar(Paragraph::size_type pos, - Paragraph::value_type c, - LyXFont const & font); + void insertChar(lyx::pos_type pos, value_type c, LyXFont const & font, Change change = Change(Change::INSERTED)); /// - void insertInset(Paragraph::size_type pos, - Inset * inset, - LyXFont const & font); + 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); /// - void erase(Paragraph::size_type pos); + 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()(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 @@ -77,29 +102,29 @@ struct Paragraph::Pimpl { */ struct FontTable { /// - FontTable(size_type p, LyXFont const & f) + FontTable(lyx::pos_type p, LyXFont const & f) : pos_(p) { font_ = container.get(f); } /// - size_type pos() const { return pos_; } + lyx::pos_type pos() const { return pos_; } /// - void pos(size_type p) { pos_ = p; } + void pos(lyx::pos_type p) { pos_ = p; } /// LyXFont const & font() const { return *font_; } /// void font(LyXFont const & f) { font_ = container.get(f);} private: /// End position of paragraph this font attribute covers - size_type pos_; + 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_; @@ -112,8 +137,7 @@ struct Paragraph::Pimpl { struct matchFT { /// 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,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, - size_type const i, - int & column, LyXFont const & font, + lyx::pos_type const i, + unsigned int & column, + LyXFont const & font, LyXLayout const & style); /// void simpleTeXSpecialChars(Buffer const *, BufferParams const &, @@ -136,16 +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, - size_type & i, - int & column, value_type const c); + lyx::pos_type & i, + unsigned int & column, value_type const c); + + /// + 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(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_; ///