X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fparagraph.C;h=5579d6deeea234e75227382628a16d643d69cfa7;hb=131eabe56c437ebb740950a17b6226914153f2df;hp=94b08a24f79731b31e0bc0c49e3962129cf84691;hpb=9bc730abdb60f9c7959f7d2bba5601e023983c23;p=lyx.git diff --git a/src/paragraph.C b/src/paragraph.C index 94b08a24f7..5579d6deee 100644 --- a/src/paragraph.C +++ b/src/paragraph.C @@ -64,7 +64,7 @@ namespace { char minibuffer_char; LyXFont minibuffer_font; -Inset * minibuffer_inset; +InsetOld * minibuffer_inset; } // namespace anon @@ -93,7 +93,7 @@ Paragraph::Paragraph(Paragraph const & lp) InsetList::iterator end = insetlist.end(); for (; it != end; ++it) { // currently we hold Inset*, not InsetBase* - it->inset = static_cast(it->inset->clone()); + it->inset = static_cast(it->inset->clone().release()); // tell the new inset who is the boss now it->inset->parOwner(this); } @@ -120,7 +120,7 @@ void Paragraph::operator=(Paragraph const & lp) InsetList::iterator it = insetlist.begin(); InsetList::iterator end = insetlist.end(); for (; it != end; ++it) { - it->inset = static_cast(it->inset->clone()); + it->inset = static_cast(it->inset->clone().release()); // tell the new inset who is the boss now it->inset->parOwner(this); } @@ -156,7 +156,7 @@ void Paragraph::write(Buffer const * buf, ostream & os, } // First write the layout - os << "\n\\layout " << layout()->name() << '\n'; + os << "\n\\begin_layout " << layout()->name() << '\n'; params().write(os); @@ -188,7 +188,7 @@ void Paragraph::write(Buffer const * buf, ostream & os, switch (c) { case META_INSET: { - Inset const * inset = getInset(i); + InsetOld const * inset = getInset(i); if (inset) if (inset->directWrite()) { // international char, let it write @@ -240,6 +240,8 @@ void Paragraph::write(Buffer const * buf, ostream & os, } Changes::lyxMarkChange(os, column, curtime, running_change, Change(Change::UNCHANGED)); + + os << "\n\\end_layout\n"; } @@ -259,7 +261,7 @@ void Paragraph::copyIntoMinibuffer(Buffer const & buffer, pos_type pos) const minibuffer_inset = 0; if (minibuffer_char == Paragraph::META_INSET) { if (getInset(pos)) { - minibuffer_inset = static_cast(getInset(pos)->clone()); + minibuffer_inset = static_cast(getInset(pos)->clone().release()); } else { minibuffer_inset = 0; minibuffer_char = ' '; @@ -284,25 +286,20 @@ void Paragraph::cutIntoMinibuffer(BufferParams const & bparams, pos_type pos) minibuffer_char = ' '; // This reflects what GetInset() does (ARRae) } - } - - // Erase(pos); now the caller is responsible for that. } bool Paragraph::insertFromMinibuffer(pos_type pos) { if (minibuffer_char == Paragraph::META_INSET) { - if (!insetAllowed(minibuffer_inset->lyxCode())) { + if (!insetAllowed(minibuffer_inset->lyxCode())) return false; - } insertInset(pos, minibuffer_inset, minibuffer_font); } else { LyXFont f = minibuffer_font; - if (!checkInsertChar(f)) { + if (!checkInsertChar(f)) return false; - } insertChar(pos, minibuffer_char, f); } return true; @@ -339,8 +336,7 @@ bool Paragraph::checkInsertChar(LyXFont & font) void Paragraph::insertChar(pos_type pos, Paragraph::value_type c) { - LyXFont const f(LyXFont::ALL_INHERIT); - insertChar(pos, c, f); + insertChar(pos, c, LyXFont(LyXFont::ALL_INHERIT)); } @@ -351,20 +347,19 @@ void Paragraph::insertChar(pos_type pos, Paragraph::value_type c, } -void Paragraph::insertInset(pos_type pos, Inset * inset) +void Paragraph::insertInset(pos_type pos, InsetOld * inset) { - LyXFont const f(LyXFont::ALL_INHERIT); - insertInset(pos, inset, f); + insertInset(pos, inset, LyXFont(LyXFont::ALL_INHERIT)); } -void Paragraph::insertInset(pos_type pos, Inset * inset, LyXFont const & font, Change change) +void Paragraph::insertInset(pos_type pos, InsetOld * inset, LyXFont const & font, Change change) { pimpl_->insertInset(pos, inset, font, change); } -bool Paragraph::insetAllowed(Inset::Code code) +bool Paragraph::insetAllowed(InsetOld::Code code) { //lyxerr << "Paragraph::InsertInsetAllowed" << endl; if (pimpl_->inset_owner) @@ -373,14 +368,14 @@ bool Paragraph::insetAllowed(Inset::Code code) } -Inset * Paragraph::getInset(pos_type pos) +InsetOld * Paragraph::getInset(pos_type pos) { Assert(pos < size()); return insetlist.get(pos); } -Inset const * Paragraph::getInset(pos_type pos) const +InsetOld const * Paragraph::getInset(pos_type pos) const { Assert(pos < size()); return insetlist.get(pos); @@ -395,20 +390,34 @@ LyXFont const Paragraph::getFontSettings(BufferParams const & bparams, Pimpl::FontList::const_iterator cit = pimpl_->fontlist.begin(); Pimpl::FontList::const_iterator end = pimpl_->fontlist.end(); - for (; cit != end; ++cit) { + for (; cit != end; ++cit) if (cit->pos() >= pos) break; - } - LyXFont retfont; if (cit != end) - retfont = cit->font(); - else if (pos == size() && !empty()) - retfont = getFontSettings(bparams, pos - 1); - else - retfont = LyXFont(LyXFont::ALL_INHERIT, getParLanguage(bparams)); + return cit->font(); + + if (pos == size() && !empty()) + return getFontSettings(bparams, pos - 1); - return retfont; + return LyXFont(LyXFont::ALL_INHERIT, getParLanguage(bparams)); +} + + +lyx::pos_type +Paragraph::getEndPosOfFontSpan(lyx::pos_type pos) const +{ + Assert(pos <= size()); + + Pimpl::FontList::const_iterator cit = pimpl_->fontlist.begin(); + Pimpl::FontList::const_iterator end = pimpl_->fontlist.end(); + for (; cit != end; ++cit) + if (cit->pos() >= pos) + return cit->pos(); + + // This should not happen, but if so, we take no chances. + lyxerr << "Pararaph::getEndPosOfFontSpan: This should not happen!\n"; + return pos; } @@ -445,34 +454,31 @@ LyXFont const Paragraph::getFont(BufferParams const & bparams, pos_type pos, LyXFont tmpfont = getFontSettings(bparams, pos); tmpfont.realize(layoutfont); tmpfont.realize(outerfont); + tmpfont.realize(bparams.getLyXTextClass().defaultfont()); - return realizeFont(tmpfont, bparams); + return tmpfont; } LyXFont const Paragraph::getLabelFont(BufferParams const & bparams, LyXFont const & outerfont) const { - LyXLayout_ptr const & lout = layout(); - - LyXFont tmpfont = lout->labelfont; + LyXFont tmpfont = layout()->labelfont; tmpfont.setLanguage(getParLanguage(bparams)); tmpfont.realize(outerfont); - - return realizeFont(tmpfont, bparams); + tmpfont.realize(bparams.getLyXTextClass().defaultfont()); + return tmpfont; } LyXFont const Paragraph::getLayoutFont(BufferParams const & bparams, LyXFont const & outerfont) const { - LyXLayout_ptr const & lout = layout(); - - LyXFont tmpfont = lout->font; + LyXFont tmpfont = layout()->font; tmpfont.setLanguage(getParLanguage(bparams)); tmpfont.realize(outerfont); - - return realizeFont(tmpfont, bparams); + tmpfont.realize(bparams.getLyXTextClass().defaultfont()); + return tmpfont; } @@ -735,7 +741,7 @@ int Paragraph::beginningOfBody() const // returns -1 if inset not found -int Paragraph::getPositionOfInset(Inset const * inset) const +int Paragraph::getPositionOfInset(InsetOld const * inset) const { // Find the entry. InsetList::const_iterator it = insetlist.begin(); @@ -750,7 +756,7 @@ int Paragraph::getPositionOfInset(Inset const * inset) const InsetBibitem * Paragraph::bibitem() const { InsetList::const_iterator it = insetlist.begin(); - if (it != insetlist.end() && it->inset->lyxCode() == Inset::BIBTEX_CODE) + if (it != insetlist.end() && it->inset->lyxCode() == InsetOld::BIBTEX_CODE) return static_cast(it->inset); return 0; } @@ -1080,7 +1086,7 @@ bool Paragraph::simpleTeXOnePar(Buffer const * buf, bool Paragraph::isHfill(pos_type pos) const { return IsInsetChar(getChar(pos)) - && getInset(pos)->lyxCode() == Inset::HFILL_CODE; + && getInset(pos)->lyxCode() == InsetOld::HFILL_CODE; } @@ -1093,7 +1099,7 @@ bool Paragraph::isInset(pos_type pos) const bool Paragraph::isNewline(pos_type pos) const { return IsInsetChar(getChar(pos)) - && getInset(pos)->lyxCode() == Inset::NEWLINE_CODE; + && getInset(pos)->lyxCode() == InsetOld::NEWLINE_CODE; } @@ -1141,15 +1147,10 @@ bool Paragraph::isWord(pos_type pos) const Language const * Paragraph::getParLanguage(BufferParams const & bparams) const { - if (!empty()) { + if (!empty()) return getFirstFontSettings().language(); #warning FIXME we should check the prev par as well (Lgb) -#if 0 - } else if (previous_) { - return previous_->getParLanguage(bparams); -#endif - }else - return bparams.language; + return bparams.language; } @@ -1158,7 +1159,7 @@ bool Paragraph::isRightToLeftPar(BufferParams const & bparams) const return lyxrc.rtl_support && getParLanguage(bparams)->RightToLeft() && !(inInset() && inInset()->owner() && - inInset()->owner()->lyxCode() == Inset::ERT_CODE); + inInset()->owner()->lyxCode() == InsetOld::ERT_CODE); } @@ -1204,7 +1205,7 @@ string const Paragraph::asString(Buffer const * buffer, bool label) const if (IsPrintable(c)) s += c; else if (c == META_INSET && - getInset(i)->lyxCode() == Inset::MATH_CODE) { + getInset(i)->lyxCode() == InsetOld::MATH_CODE) { ostringstream ost; getInset(i)->ascii(buffer, ost); s += subst(STRCONV(ost.str()),'\n',' '); @@ -1371,8 +1372,8 @@ void Paragraph::id(int i) LyXLayout_ptr const & Paragraph::layout() const { /* - Inset * inset = inInset(); - if (inset && inset->lyxCode() == Inset::ENVIRONMENT_CODE) + InsetOld * inset = inInset(); + if (inset && inset->lyxCode() == InsetOld::ENVIRONMENT_CODE) return static_cast(inset)->layout(); */ return layout_; @@ -1420,9 +1421,9 @@ bool Paragraph::isFreeSpacing() const return true; // for now we just need this, later should we need this in some - // other way we can always add a function to Inset::() too. + // other way we can always add a function to InsetOld::() too. if (pimpl_->inset_owner && pimpl_->inset_owner->owner()) - return (pimpl_->inset_owner->owner()->lyxCode() == Inset::ERT_CODE); + return (pimpl_->inset_owner->owner()->lyxCode() == InsetOld::ERT_CODE); return false; } @@ -1432,7 +1433,7 @@ bool Paragraph::allowEmpty() const if (layout()->keepempty) return true; if (pimpl_->inset_owner && pimpl_->inset_owner->owner()) - return (pimpl_->inset_owner->owner()->lyxCode() == Inset::ERT_CODE); + return (pimpl_->inset_owner->owner()->lyxCode() == InsetOld::ERT_CODE); return false; }