namespace lyx {
+class DocIterator;
class LyXErr;
class MathAtom;
class Paragraph;
class Text;
class InsetIterator;
+class FontSpan;
+DocIterator doc_iterator_begin(Buffer const * buf, Inset const * inset = 0);
+DocIterator doc_iterator_end(Buffer const * buf, Inset const * inset = 0);
-// The public inheritance should go in favour of a suitable data member
-// (or maybe private inheritance) at some point of time.
-class DocIterator // : public std::vector<CursorSlice>
+
+class DocIterator
{
public:
/// type for cell number in inset
public:
///
DocIterator();
+ ///
+ explicit DocIterator(Buffer *buf);
+
+ /// access to owning buffer
+ Buffer * buffer() const { return buffer_; }
+ /// access to owning buffer
+ void setBuffer(Buffer * buf) { buffer_ = buf; }
+
+ /// Clone this for given \p buffer.
+ /// \p buffer must be a clone of buffer_.
+ DocIterator clone(Buffer * buffer) const;
/// access slice at position \p i
CursorSlice const & operator[](size_t i) const { return slices_[i]; }
bool empty() const { return slices_.empty(); }
/// is this the end position?
bool atEnd() const { return slices_.empty(); }
+ /// is this the last possible position?
+ bool atLastPos() const { return pit() == lastpit() && pos() == lastpos(); }
//
// access to slice at tip
/// are we in texted?.
bool inTexted() const
{ return !empty() && !inset().inMathed(); }
+ /// are we in regexp-mode ?
+ bool inRegexped() const;
//
// math-specific part
Paragraph & innerParagraph() const;
/// return the inner text slice.
CursorSlice const & innerTextSlice() const;
+ /// the first and last positions of a word at top cursor slice
+ /// \warning only works within text!
+ FontSpan locateWord(word_location const loc) const;
///
Text * text() const;
/// the containing inset or the cell, respectively
private:
friend class InsetIterator;
- friend DocIterator doc_iterator_begin(Inset & inset);
- friend DocIterator doc_iterator_end(Inset & inset);
+ friend DocIterator doc_iterator_begin(Buffer const * buf, Inset const * inset);
+ friend DocIterator doc_iterator_end(Buffer const * buf, Inset const * inset);
///
- explicit DocIterator(Inset & inset);
+ explicit DocIterator(Buffer * buf, Inset * inset);
/**
* Normally, when the cursor is at position i, it is painted *before*
* the character at position i. However, what if we want the cursor
*/
bool boundary_;
///
- std::vector<CursorSlice> const & internalData() const {
- return slices_;
- }
+ std::vector<CursorSlice> const & internalData() const { return slices_; }
///
std::vector<CursorSlice> slices_;
///
Inset * inset_;
+ ///
+ Buffer * buffer_;
};
-DocIterator doc_iterator_begin(Inset & inset);
-DocIterator doc_iterator_end(Inset & inset);
-
-
inline bool operator==(DocIterator const & di1, DocIterator const & di2)
{
return di1.slices_ == di2.slices_;
// (overwritten by 0...) part of the CursorSlice data items. So this thing
// is suitable for external storage, but not for iteration as such.
-class StableDocIterator {
+class StableDocIterator
+{
public:
///
StableDocIterator() {}
/// non-explicit intended
StableDocIterator(const DocIterator & it);
///
- DocIterator asDocIterator(Inset * start) const;
+ DocIterator asDocIterator(Buffer * buf) const;
///
size_t size() const { return data_.size(); }
/// return the position within the paragraph
std::vector<CursorSlice> data_;
};
-
} // namespace lyx
-#endif
+#endif // DOCITERATOR_H