using namespace std;
using namespace lyx::support;
-// OSX clang, gcc < 4.8.0, and msvc < 2015 do not support C++11 thread_local
-#if defined(__APPLE__) || (defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 8)
+// OSX clang and msvc < 2015 do not support C++11 thread_local
+#if defined(__APPLE__)
#define THREAD_LOCAL_STATIC static __thread
#elif defined(_MSC_VER) && (_MSC_VER < 1900)
#define THREAD_LOCAL_STATIC static __declspec(thread)
speller_state_.increasePosAfterPos(pos);
// Update bookmarks
- theSession().bookmarks().adjustPosAfterPos(inset_owner_->buffer().fileName(),
- id_, pos, 1);
+ if (inset_owner_ && inset_owner_->isBufferValid())
+ theSession().bookmarks().adjustPosAfterPos(inset_owner_->buffer().fileName(),
+ id_, pos, 1);
}
d->speller_state_.refreshLast(size());
// Update bookmarks
- theSession().bookmarks().adjustPosAfterPos(d->inset_owner_->buffer().fileName(),
- d->id_, pos, -1);
+ if (d->inset_owner_ && d->inset_owner_->isBufferValid())
+ theSession().bookmarks().adjustPosAfterPos(d->inset_owner_->buffer().fileName(),
+ d->id_, pos, -1);
return true;
}
bool const cprotect = textinset
? textinset->hasCProtectContent(runparams.moving_arg)
&& !textinset->text().isMainText()
+ && inset->lyxCode() != BRANCH_CODE
: false;
unsigned int count2 = basefont.latexWriteStartChanges(os, bparams,
rp, running_font,
return inInset().isPassThru() || d->layout_->pass_thru;
}
+
+bool Paragraph::isPartOfTextSequence() const
+{
+ for (pos_type i = 0; i < size(); ++i) {
+ if (!isInset(i) || getInset(i)->isPartOfTextSequence())
+ return true;
+ }
+ return false;
+}
+
namespace {
// paragraphs inside floats need different alignment tags to avoid
(layout_->toggle_indent != ITOGGLE_NEVER) :
(layout_->toggle_indent == ITOGGLE_ALWAYS);
- if (canindent && params_.noindent() && !layout_->pass_thru) {
- os << "\\noindent ";
- column += 10;
- }
-
LyXAlignment const curAlign = params_.align();
+ // Do not output \\noindent for paragraphs
+ // 1. that cannot have indentation or are indented always,
+ // 2. that are not part of the immediate text sequence (e.g., contain only floats),
+ // 3. that are PassThru,
+ // 4. or that are centered.
+ if (canindent && params_.noindent()
+ && owner_->isPartOfTextSequence()
+ && !layout_->pass_thru
+ && curAlign != LYX_ALIGN_CENTER) {
+ if (!owner_->empty()
+ && (owner_->isInset(0)
+ && owner_->getInset(0)->lyxCode() == VSPACE_CODE))
+ // If the paragraph starts with a vspace, the \\noindent
+ // needs to come after that (as it leaves vmode).
+ // If the paragraph consists only of the vspace,
+ // \\noindent is not needed at all.
+ runparams.need_noindent = owner_->size() > 1;
+ else {
+ os << "\\noindent" << termcmd;
+ column += 10;
+ }
+ }
+
if (curAlign == layout_->align)
return column;
&& getInset(i)
&& getInset(i)->allowMultiPar()
&& getInset(i)->lyxCode() != ERT_CODE
- && getInset(i)->producesOutput();
+ && (getInset(i)->producesOutput()
+ // FIXME Something more general?
+ // Comments do not "produce output" but are still
+ // part of the TeX source and require font switches
+ // to be closed (otherwise LaTeX fails).
+ || getInset(i)->layoutName() == "Note:Comment");
bool closeLanguage = false;
bool lang_switched_at_inset = false;
bool const cprotect = textinset
? textinset->hasCProtectContent(runparams.moving_arg)
&& !textinset->text().isMainText()
+ && inInset().lyxCode() != BRANCH_CODE
: false;
column += current_font.latexWriteStartChanges(ots, bparams,
runparams, basefont, last_font, false,