Paragraph: Add a partial copy ctor that will get used in next commit.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@26000 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Abdelrazak Younes 2008-07-30 09:07:32 +00:00
parent c157c1b809
commit 236460445a
2 changed files with 50 additions and 0 deletions

View File

@ -83,6 +83,8 @@ public:
Private(Paragraph * owner, Layout const & layout);
/// "Copy constructor"
Private(Private const &, Paragraph * owner);
/// Copy constructor from \p beg to \p end
Private(Private const &, Paragraph * owner, pos_type beg, pos_type end);
///
void insertChar(pos_type pos, char_type c, Change const & change);
@ -247,6 +249,43 @@ Paragraph::Private::Private(Private const & p, Paragraph * owner)
}
Paragraph::Private::Private(Private const & p, Paragraph * owner,
pos_type beg, pos_type end)
: owner_(owner), inset_owner_(p.inset_owner_), fontlist_(p.fontlist_),
params_(p.params_), changes_(p.changes_),
begin_of_body_(p.begin_of_body_), words_(p.words_),
layout_(p.layout_)
{
id_ = paragraph_id++;
if (beg >= pos_type(p.text_.size()))
return;
text_ = p.text_.substr(beg, end - beg);
InsetList::const_iterator icit = p.insetlist_.begin();
InsetList::const_iterator iend = p.insetlist_.end();
for (; icit != iend; ++icit) {
if (icit->pos < beg)
continue;
if (icit->pos >= end)
break;
// Add a new entry in the insetlist_.
insetlist_.insert(icit->inset, icit->pos - beg);
}
FontList::const_iterator fcit = fontlist_.begin();
FontList::const_iterator fend = fontlist_.end();
for (; fcit != fend; ++fcit) {
if (fcit->pos() < beg)
continue;
if (fcit->pos() >= end) {
// Add last entry in the fontlist_.
fontlist_.set(text_.size() - 1, fcit->font());
break;
}
// Add a new entry in the fontlist_.
fontlist_.set(fcit->pos() - beg, fcit->font());
}
}
bool Paragraph::isChanged(pos_type start, pos_type end) const
{
LASSERT(start >= 0 && start <= size(), /**/);
@ -1060,6 +1099,14 @@ Paragraph::Paragraph(Paragraph const & par)
}
Paragraph::Paragraph(Paragraph const & par, pos_type beg, pos_type end)
: itemdepth(par.itemdepth),
d(new Paragraph::Private(*par.d, this, beg, end))
{
registerWords();
}
Paragraph & Paragraph::operator=(Paragraph const & par)
{
// needed as we will destroy the private part before copying it

View File

@ -89,6 +89,9 @@ public:
Paragraph();
///
Paragraph(Paragraph const &);
/// Partial copy constructor.
/// Copy the Paragraph contents from \p beg to \p end (without end).
Paragraph(Paragraph const & par, pos_type beg, pos_type end);
///
Paragraph & operator=(Paragraph const &);
///