X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FParagraph.cpp;h=37e26a8b86683d125124c218e3e586cbefd4e07b;hb=81badf8550f2fd5e614a22261c4885d747a72106;hp=c551ea022cccce1c7799b19f18cdd8a5b5913c5a;hpb=ee7c4db72a9dd392d7e1e34463c3ae11fce670ee;p=lyx.git diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp index c551ea022c..37e26a8b86 100644 --- a/src/Paragraph.cpp +++ b/src/Paragraph.cpp @@ -96,7 +96,7 @@ public: /// void result(SpellChecker::Result r) { result_ = r; } /// - bool inside(pos_type pos) const { return range_.inside(pos); } + bool contains(pos_type pos) const { return range_.contains(pos); } /// bool covered(FontSpan const & r) const { @@ -104,8 +104,9 @@ public: // 2. last of new range inside current range or // 3. first of current range inside new range or // 4. last of current range inside new range - return range_.inside(r.first) || range_.inside(r.last) || - r.inside(range_.first) || r.inside(range_.last); + //FIXME: is this the same as !range_.intersect(r).empty() ? + return range_.contains(r.first) || range_.contains(r.last) || + r.contains(range_.first) || r.contains(range_.last); } /// void shift(pos_type pos, int offset) @@ -191,7 +192,7 @@ public: RangesIterator et = ranges_.end(); RangesIterator it = ranges_.begin(); for (; it != et; ++it) { - if(it->inside(pos)) { + if(it->contains(pos)) { return it->result(); } } @@ -205,7 +206,7 @@ public: RangesIterator et = ranges_.end(); RangesIterator it = ranges_.begin(); for (; it != et; ++it) { - if(it->inside(pos)) { + if(it->contains(pos)) { return it->range(); } } @@ -281,6 +282,10 @@ private: class Paragraph::Private { + // Enforce our own "copy" constructor by declaring the standard one and + // the assignment operator private without implementing them. + Private(Private const &); + Private & operator=(Private const &); public: /// Private(Paragraph * owner, Layout const & layout); @@ -1671,6 +1676,9 @@ void Paragraph::write(ostream & os, BufferParams const & bparams, 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 '\\': @@ -1706,6 +1714,9 @@ void Paragraph::write(ostream & os, BufferParams const & bparams, flushString(os, write_buffer); os << "\n\\end_layout\n"; + // FIXME This can be removed again once the mystery + // crash has been resolved. + os << flush; } @@ -1922,7 +1933,7 @@ FontSize Paragraph::highestFontInRange char_type Paragraph::getUChar(BufferParams const & bparams, pos_type pos) const { char_type c = d->text_[pos]; - if (!lyxrc.rtl_support || !getFontSettings(bparams, pos).isRightToLeft()) + if (!getFontSettings(bparams, pos).isRightToLeft()) return c; // FIXME: The arabic special casing is due to the difference of arabic @@ -2237,7 +2248,8 @@ int Paragraph::Private::startTeXParParams(BufferParams const & bparams, { int column = 0; - if (params_.noindent() && !layout_->pass_thru) { + if (params_.noindent() && !layout_->pass_thru + && (layout_->toggle_indent != ITOGGLE_NEVER)) { os << "\\noindent "; column += 10; } @@ -3193,8 +3205,7 @@ docstring Paragraph::simpleLyXHTMLOnePar(Buffer const & buf, bool Paragraph::isHfill(pos_type pos) const { Inset const * inset = getInset(pos); - return inset && (inset->lyxCode() == SPACE_CODE && - inset->isStretchableSpace()); + return inset && inset->isHfill(); } @@ -3298,8 +3309,7 @@ Paragraph::getParLanguage(BufferParams const & bparams) const bool Paragraph::isRTL(BufferParams const & bparams) const { - return lyxrc.rtl_support - && getParLanguage(bparams)->rightToLeft() + return getParLanguage(bparams)->rightToLeft() && !inInset().getLayout().forceLTR(); } @@ -3376,8 +3386,6 @@ docstring Paragraph::asString(pos_type beg, pos_type end, int options, const Out getInset(i)->plaintext(os, *runparams); } else { getInset(i)->toString(os); - if (getInset(i)->asInsetMath()) - os << " "; } } } @@ -3490,46 +3498,6 @@ bool Paragraph::allowEmpty() const } -char_type Paragraph::transformChar(char_type c, pos_type pos) const -{ - if (!Encodings::isArabicChar(c)) - return c; - - char_type prev_char = ' '; - char_type next_char = ' '; - - for (pos_type i = pos - 1; i >= 0; --i) { - char_type const par_char = d->text_[i]; - if (!Encodings::isArabicComposeChar(par_char)) { - prev_char = par_char; - break; - } - } - - for (pos_type i = pos + 1, end = size(); i < end; ++i) { - char_type const par_char = d->text_[i]; - if (!Encodings::isArabicComposeChar(par_char)) { - next_char = par_char; - break; - } - } - - if (Encodings::isArabicChar(next_char)) { - if (Encodings::isArabicChar(prev_char) && - !Encodings::isArabicSpecialChar(prev_char)) - return Encodings::transformChar(c, Encodings::FORM_MEDIAL); - else - return Encodings::transformChar(c, Encodings::FORM_INITIAL); - } else { - if (Encodings::isArabicChar(prev_char) && - !Encodings::isArabicSpecialChar(prev_char)) - return Encodings::transformChar(c, Encodings::FORM_FINAL); - else - return Encodings::transformChar(c, Encodings::FORM_ISOLATED); - } -} - - bool Paragraph::brokenBiblio() const { // there is a problem if there is no bibitem at position 0 or @@ -3845,7 +3813,16 @@ void Paragraph::collectWords() continue; pos_type from = pos; locateWord(from, pos, WHOLE_WORD); - if (pos < from + lyxrc.completion_minlength) + // 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())