Paragraph const & par = pars_[pit];
- lyxerr[Debug::DEBUG]
+ LYXERR(Debug::DEBUG)
<< BOOST_CURRENT_FUNCTION
<< ": x: " << x
<< " y: " << y
for (; iit != iend; ++iit) {
InsetBase * inset = iit->inset;
#if 1
- lyxerr[Debug::DEBUG]
+ LYXERR(Debug::DEBUG)
<< BOOST_CURRENT_FUNCTION
<< ": examining inset " << inset << endl;
if (bv.coordCache().getInsets().has(inset))
- lyxerr[Debug::DEBUG]
+ LYXERR(Debug::DEBUG)
<< BOOST_CURRENT_FUNCTION
<< ": xo: " << inset->xo(bv) << "..."
<< inset->xo(bv) + inset->width()
<< inset->yo(bv) + inset->descent()
<< endl;
else
- lyxerr[Debug::DEBUG]
+ LYXERR(Debug::DEBUG)
<< BOOST_CURRENT_FUNCTION
<< ": inset has no cached position" << endl;
#endif
if (inset->covers(bv, x, y)) {
- lyxerr[Debug::DEBUG]
+ LYXERR(Debug::DEBUG)
<< BOOST_CURRENT_FUNCTION
<< ": Hit inset: " << inset << endl;
return inset;
}
}
- lyxerr[Debug::DEBUG]
+ LYXERR(Debug::DEBUG)
<< BOOST_CURRENT_FUNCTION
<< ": No inset hit. " << endl;
return 0;
LyXLayout_ptr const & lyxlayout = bufparams.getLyXTextClass()[layout];
for (pit_type pit = start; pit != end; ++pit) {
- pars_[pit].applyLayout(lyxlayout);
+ Paragraph & par = pars_[pit];
+ par.applyLayout(lyxlayout);
if (lyxlayout->margintype == MARGIN_MANUAL)
- pars_[pit].setLabelWidthString(buffer.translateLabel(lyxlayout->labelstring()));
+ par.setLabelWidthString(par.translateIfPossible(
+ lyxlayout->labelstring(), buffer.params()));
}
}
LyXLayout_ptr const & lyxlayout = params.getLyXTextClass()[layout];
if (lyxlayout->is_environment) {
// move everything in a new environment inset
- lyxerr[Debug::DEBUG] << "setting layout " << layout << endl;
+ LYXERR(Debug::DEBUG) << "setting layout " << layout << endl;
lyx::dispatch(FuncRequest(LFUN_LINE_BEGIN));
lyx::dispatch(FuncRequest(LFUN_LINE_END_SELECT));
lyx::dispatch(FuncRequest(LFUN_CUT));
}
// y is screen coordinate
-pit_type LyXText::getPitNearY(BufferView & bv, int y)
+pit_type LyXText::getPitNearY(BufferView & bv, int y) const
{
BOOST_ASSERT(!paragraphs().empty());
BOOST_ASSERT(bv.coordCache().getParPos().find(this) != bv.coordCache().getParPos().end());
CoordCache::InnerParPosCache const & cc = bv.coordCache().getParPos().find(this)->second;
- lyxerr[Debug::DEBUG]
+ LYXERR(Debug::DEBUG)
<< BOOST_CURRENT_FUNCTION
<< ": y: " << y << " cache size: " << cc.size()
<< endl;
}
for (; it != et; ++it) {
- lyxerr[Debug::DEBUG]
+ LYXERR(Debug::DEBUG)
<< BOOST_CURRENT_FUNCTION
<< " examining: pit: " << it->first
<< " y: " << it->second.y_
}
}
- lyxerr[Debug::DEBUG]
+ LYXERR(Debug::DEBUG)
<< BOOST_CURRENT_FUNCTION
<< ": found best y: " << yy << " for pit: " << pit
<< endl;
bool LyXText::deleteEmptyParagraphMechanism(LCursor & cur,
LCursor & old, bool & need_anchor_change)
{
- //lyxerr[Debug::DEBUG] << "DEPM: cur:\n" << cur << "old:\n" << old << endl;
+ //LYXERR(Debug::DEBUG) << "DEPM: cur:\n" << cur << "old:\n" << old << endl;
Paragraph & oldpar = old.paragraph();
&& oldpar.isLineSeparator(old.pos())
&& oldpar.isLineSeparator(old.pos() - 1)
&& !oldpar.isDeleted(old.pos() - 1)) {
- oldpar.eraseChar(old.pos() - 1, false); // do not track changes in DEPM
+ oldpar.eraseChar(old.pos() - 1, cur.buffer().params().trackChanges);
#ifdef WITH_WARNINGS
#warning This will not work anymore when we have multiple views of the same buffer
// In this case, we will have to correct also the cursors held by
return true;
}
- if (oldpar.stripLeadingSpaces())
+ if (oldpar.stripLeadingSpaces(cur.buffer().params().trackChanges)) {
need_anchor_change = true;
+ // We return true here because the Paragraph contents changed and
+ // we need a redraw before further action is processed.
+ return true;
+ }
return false;
}
+void LyXText::deleteEmptyParagraphMechanism(pit_type first, pit_type last, bool trackChanges)
+{
+ BOOST_ASSERT(first >= 0 && first <= last && last < (int) pars_.size());
+
+ for (pit_type pit = first; pit <= last; ++pit) {
+ Paragraph & par = pars_[pit];
+
+ // We allow all kinds of "mumbo-jumbo" when freespacing.
+ if (par.isFreeSpacing())
+ continue;
+
+ for (pos_type pos = 1; pos < par.size(); ++pos) {
+ if (par.isLineSeparator(pos) && par.isLineSeparator(pos - 1)
+ && !par.isDeleted(pos - 1)) {
+ if (par.eraseChar(pos - 1, trackChanges)) {
+ --pos;
+ }
+ }
+ }
+
+ // don't delete anything if this is the only remaining paragraph within the given range
+ // note: LyXText::acceptOrRejectChanges() sets the cursor to 'first' after calling DEPM
+ if (first == last)
+ continue;
+
+ // don't delete empty paragraphs with keepempty set
+ if (par.allowEmpty())
+ continue;
+
+ if (par.empty() || (par.size() == 1 && par.isLineSeparator(0))) {
+ pars_.erase(boost::next(pars_.begin(), pit));
+ --pit;
+ --last;
+ continue;
+ }
+
+ par.stripLeadingSpaces(trackChanges);
+ }
+}
+
+
void LyXText::recUndo(LCursor & cur, pit_type first, pit_type last) const
{
recordUndo(cur, Undo::ATOMIC, first, last);