- Pimpl(Pimpl const &, Paragraph * 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, Inset * 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);
- ///
- Inset * inset_owner;
-
- /** 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
- datastructure, because the number of different fonts in a paragraph
- is limited. (Asger)
- Nevertheless, I decided to store fontlist using a sorted vector:
- fontlist = { {pos_1,font_1} , {pos_2,font_2} , ... } where
- pos_1 < pos_2 < ..., font_{i-1} != font_i for all i,
- and font_i covers the chars in positions pos_{i-1}+1,...,pos_i
- (font_1 covers the chars 0,...,pos_1) (Dekel)
- */
- class FontTable {
- public:
- ///
- FontTable(pos_type p, Font const & f)
- : pos_(p), font_(f)
- {}
- ///
- pos_type pos() const { return pos_; }
- ///
- void pos(pos_type p) { pos_ = p; }
- ///
- Font const & font() const { return font_; }
- ///
- void font(Font const & f) { font_ = f;}
- private:
- /// End position of paragraph this font attribute covers
- pos_type pos_;
- /** Font. Interpretation of the font values:
- If a value is Font::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
- resolved.
- The values Font::IGNORE_* and Font::TOGGLE are NOT
- allowed in these font tables.
- */
- Font font_;
- };
- ///
- friend class matchFT;
- ///
- class matchFT {
- public:
- /// used by lower_bound and upper_bound
- int operator()(FontTable const & a, FontTable const & b) const {
- return a.pos() < b.pos();
- }
- };