X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ftext2.C;h=16c056c7b6d603483af90cf51ad2ec0044176fed;hb=501f1dd61b6c0beb927151ecf331f78848261b59;hp=027e38bf2af9ca8f833215035302e7193fe695ed;hpb=53274e31ec1cc715c0b48921ee67818790c2e99a;p=lyx.git diff --git a/src/text2.C b/src/text2.C index 027e38bf2a..16c056c7b6 100644 --- a/src/text2.C +++ b/src/text2.C @@ -45,6 +45,8 @@ #include "support/textutils.h" #include "support/lstrings.h" +#include "BoostFormat.h" + using std::vector; using std::copy; using std::endl; @@ -1037,33 +1039,29 @@ void LyXText::toggleFree(BufferView * bview, string LyXText::getStringToIndex(BufferView * bview) { - string idxstring; - // Try implicit word selection // If there is a change in the language the implicit word selection // is disabled. LyXCursor const reset_cursor = cursor; bool const implicitSelection = selectWordWhenUnderCursor(bview, PREVIOUS_WORD); - if (!selection.set()) { + string idxstring; + if (!selection.set()) bview->owner()->message(_("Nothing to index!")); - return string(); - } - if (selection.start.par() != selection.end.par()) { + else if (selection.start.par() != selection.end.par()) bview->owner()->message(_("Cannot index more than one paragraph!")); - return string(); - } + else + idxstring = selectionAsString(bview->buffer(), false); - idxstring = selectionAsString(bview->buffer(), false); + // Reset cursors to their original position. + cursor = reset_cursor; + setCursor(bview, cursor.par(), cursor.pos()); + selection.cursor = cursor; - // Implicit selections are cleared afterwards - //and cursor is set to the original position. - if (implicitSelection) { + // Clear the implicit selection. + if (implicitSelection) clearSelection(); - cursor = reset_cursor; - setCursor(bview, cursor.par(), cursor.pos()); - selection.cursor = cursor; - } + return idxstring; } @@ -1218,30 +1216,24 @@ void LyXText::setCounter(Buffer const * buf, Paragraph * par) const // is it a layout that has an automatic label? if (layout->labeltype >= LABEL_COUNTER_CHAPTER) { + int const i = layout->labeltype - LABEL_COUNTER_CHAPTER; - int i = layout->labeltype - LABEL_COUNTER_CHAPTER; - string numbertype; - string langtype; ostringstream s; if (i >= 0 && i <= buf->params.secnumdepth) { + string numbertype; + string langtype; textclass.counters().step(layout->latexname()); // Is there a label? Useful for Chapter layout if (!par->params().appendix()) { - if (!layout->labelstring().empty()) - par->params().labelString(layout->labelstring()); - else - par->params().labelString(string()); + s << layout->labelstring(); } else { - if (!layout->labelstring_appendix().empty()) - par->params().labelString(layout->labelstring_appendix()); - else - par->params().labelString(string()); + s << layout->labelstring_appendix(); } - // Use if an integer is here less than elegant. For now. + // Use of an integer is here less than elegant. For now. int head = textclass.maxcounter() - LABEL_COUNTER_CHAPTER; if (!par->params().appendix()) { numbertype = "sectioning"; @@ -1257,8 +1249,7 @@ void LyXText::setCounter(Buffer const * buf, Paragraph * par) const .numberLabel(layout->latexname(), numbertype, langtype, head); - par->params().labelString(par->params().labelString() - + STRCONV(s.str())); + par->params().labelString(STRCONV(s.str())); // reset enum counters textclass.counters().reset("enum"); @@ -1289,8 +1280,7 @@ void LyXText::setCounter(Buffer const * buf, Paragraph * par) const textclass.counters().step(enumcounter); s << textclass.counters() - .numberLabel(enumcounter, - "enumeration", langtype); + .numberLabel(enumcounter, "enumeration"); par->params().labelString(STRCONV(s.str())); } } else if (layout->labeltype == LABEL_BIBLIO) {// ale970302 @@ -1331,15 +1321,22 @@ void LyXText::setCounter(Buffer const * buf, Paragraph * par) const textclass.counters().step(fl.type()); // Doesn't work... yet. +#warning use boost.format +#if USE_BOOST_FORMAT + s = boost::io::str(boost::format(_("%1$s #:")) % fl.name()); + // s << boost::format(_("%1$s %1$d:") + // % fl.name() + // % buf->counters().value(fl.name()); +#else ostringstream o; //o << fl.name() << ' ' << buf->counters().value(fl.name()) << ":"; o << fl.name() << " #:"; s = STRCONV(o.str()); +#endif } else { // par->SetLayout(0); // s = layout->labelstring; - s = (par->getParLanguage(buf->params)->lang() == "hebrew") - ? " :úåòîùî øñç" : "Senseless: "; + s = _("Senseless: "); } } par->params().labelString(s); @@ -1365,10 +1362,8 @@ void LyXText::setCounter(Buffer const * buf, Paragraph * par) const // Updates all counters. Paragraphs with changed label string will be rebroken void LyXText::updateCounters(BufferView * bview) const { - Paragraph * par; - Row * row = firstrow; - par = row->par(); + Paragraph * par = row->par(); // CHECK if this is really needed. (Lgb) bview->buffer()->params.getLyXTextClass().counters().reset(); @@ -1379,6 +1374,7 @@ void LyXText::updateCounters(BufferView * bview) const string const oldLabel = par->params().labelString(); + // setCounter can potentially change the labelString. setCounter(bview->buffer(), par); string const & newLabel = par->params().labelString(); @@ -1423,7 +1419,9 @@ void LyXText::copyEnvironmentType() void LyXText::pasteEnvironmentType(BufferView * bview) { - setLayout(bview, copylayouttype); + // do nothing if there has been no previous copyEnvironmentType() + if (!copylayouttype.empty()) + setLayout(bview, copylayouttype); } @@ -1495,7 +1493,8 @@ void LyXText::cutSelection(BufferView * bview, bool doclear, bool realcut) // cutSelection can invalidate the cursor so we need to set // it anew. (Lgb) - cursor = selection.start; + // we prefer the end for when tracking changes + cursor = selection.end; // need a valid cursor. (Lgb) clearSelection(); @@ -1559,14 +1558,13 @@ void LyXText::pasteSelection(BufferView * bview) } -// sets the selection over the number of characters of string, no check!! -void LyXText::setSelectionOverString(BufferView * bview, string const & str) +void LyXText::setSelectionRange(BufferView * bview, lyx::pos_type length) { - if (str.empty()) + if (!length) return; selection.cursor = cursor; - for (string::size_type i = 0; i < str.length(); ++i) + while (length--) cursorRight(bview); setSelection(bview); } @@ -1803,7 +1801,11 @@ void LyXText::setCursor(BufferView * bview, LyXCursor & cur, Paragraph * par, pos_type last = rowLastPrintable(old_row); - if (pos > last + 1) { + // None of these should happen, but we're scaredy-cats + if (pos > par->size()) { + pos = 0; + cur.pos(0); + } else if (pos > last + 1) { // This shouldn't happen. pos = last + 1; cur.pos(pos);