}
// FIXME: move this to InsetNewline::latex
- if (inset->lyxCode() == NEWLINE_CODE) {
+ if (inset->lyxCode() == NEWLINE_CODE || inset->lyxCode() == SEPARATOR_CODE) {
// newlines are handled differently here than
// the default in simpleTeXSpecialChars().
if (!style.newline_allowed) {
os << "\n\\end_inset\n\n";
column = 0;
}
+ // FIXME This can be removed again once the mystery
+ // crash has been resolved.
+ os << flush;
}
break;
case '\\':
flushString(os, write_buffer);
os << "\n\\end_layout\n";
+ // FIXME This can be removed again once the mystery
+ // crash has been resolved.
+ os << flush;
}
// remove unnecessary getChar() calls
pos_type i = 0;
pos_type end = size();
- if (i < end && !isNewline(i)) {
+ if (i < end && !(isNewline(i) || isEnvSeparator(i))) {
++i;
char_type previous_char = 0;
char_type temp = 0;
if (i < end) {
previous_char = d->text_[i];
- if (!isNewline(i)) {
+ if (!(isNewline(i) || isEnvSeparator(i))) {
++i;
while (i < end && previous_char != ' ') {
temp = d->text_[i];
- if (isNewline(i))
+ if (isNewline(i) || isEnvSeparator(i))
break;
++i;
previous_char = temp;
{
int column = 0;
- if (params_.noindent() && !layout_->pass_thru) {
+ if (params_.noindent() && !layout_->pass_thru
+ && (layout_->toggle_indent != ITOGGLE_NEVER)) {
os << "\\noindent ";
column += 10;
}
}
+bool Paragraph::isEnvSeparator(pos_type pos) const
+{
+ Inset const * inset = getInset(pos);
+ return inset && inset->lyxCode() == SEPARATOR_CODE;
+}
+
+
bool Paragraph::isLineSeparator(pos_type pos) const
{
char_type const c = d->text_[pos];
void Paragraph::collectWords()
{
- pos_type n = size();
- for (pos_type pos = 0; pos < n; ++pos) {
+ for (pos_type pos = 0; pos < size(); ++pos) {
if (isWordSeparator(pos))
continue;
pos_type from = pos;
locateWord(from, pos, WHOLE_WORD);
- if ((pos - from) >= (int)lyxrc.completion_minlength) {
- docstring word = asString(from, pos, AS_STR_NONE);
- FontList::const_iterator cit = d->fontlist_.fontIterator(pos);
- if (cit == d->fontlist_.end())
- return;
- Language const * lang = cit->font().language();
- d->words_[lang->lang()].insert(word);
- }
+ // Work around MSVC warning: The statement
+ // if (pos < from + lyxrc.completion_minlength)
+ // triggers a signed vs. unsigned warning.
+ // I don't know why this happens, it could be a MSVC bug, or
+ // related to LLP64 (windows) vs. LP64 (unix) programming
+ // model, or the C++ standard might be ambigous in the section
+ // defining the "usual arithmetic conversions". However, using
+ // a temporary variable is safe and works on all compilers.
+ pos_type const endpos = from + lyxrc.completion_minlength;
+ if (pos < endpos)
+ continue;
+ FontList::const_iterator cit = d->fontlist_.fontIterator(from);
+ if (cit == d->fontlist_.end())
+ return;
+ Language const * lang = cit->font().language();
+ docstring const word = asString(from, pos, AS_STR_NONE);
+ d->words_[lang->lang()].insert(word);
}
}