From b94ed208a59158b594710ccba428d9a6c822b7ad Mon Sep 17 00:00:00 2001 From: =?utf8?q?Lars=20Gullik=20Bj=C3=B8nnes?= Date: Mon, 14 Apr 2003 18:35:29 +0000 Subject: [PATCH] parlist-10-a.diff + a bit more git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@6805 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/ChangeLog | 28 +++++++++++++ src/paragraph.C | 93 +------------------------------------------ src/paragraph.h | 15 ------- src/paragraph_funcs.C | 57 ++++++++++++++++++-------- src/paragraph_funcs.h | 12 +++--- src/paragraph_pimpl.C | 7 ++-- src/rowpainter.C | 7 ++-- src/text.C | 18 ++++----- src/text2.C | 35 ++-------------- 9 files changed, 97 insertions(+), 175 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index a410acfb3d..076290d7b9 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,31 @@ +2003-04-14 Lars Gullik Bjønnes + + * text2.C (setCharFont): adjust + (setCounter): adjust + + * text.C (leftMargin): adjust + (setHeightOfRow): adjust + + * rowpainter.C (paintFirst): adjust + (paintLast): adjust + + * paragraph_pimpl.C (realizeFont): adjust + + * paragraph.C (isFirstInSequence): move from here... + * paragraph_funcs.C (isFirstInSequence): ...to here + + * paragraph.C (outerHook): move from here... + * paragraph_funcs.C (outerHook): ...to here + + * paragraph.C (depthHook): move from here... + * paragraph_funcs.C (depthHook): ...to here + + * paragraph.C (getEndLabel): move from here... + * paragraph_funcs.C (getEndLabel): ...to here + + * text2.C (realizeFont): move from here... + * paragraph_funcs.C (realizeFont): ...to here + 2003-04-14 Lars Gullik Bjønnes * text3.C (gotoNextInset): use separate tmp vars for par and pos. diff --git a/src/paragraph.C b/src/paragraph.C index 25bf6ea63f..9d733a73b5 100644 --- a/src/paragraph.C +++ b/src/paragraph.C @@ -24,6 +24,7 @@ #include "ParameterStruct.h" #include "gettext.h" #include "changes.h" +#include "paragraph_funcs.h" #include "insets/insetbibitem.h" #include "insets/insetoptarg.h" @@ -689,35 +690,6 @@ bool Paragraph::hasSameLayout(Paragraph const * par) const } -int Paragraph::getEndLabel() const -{ - Paragraph const * par = this; - depth_type par_depth = getDepth(); - while (par) { - LyXLayout_ptr const & layout = par->layout(); - int const endlabeltype = layout->endlabeltype; - - if (endlabeltype != END_LABEL_NO_LABEL) { - if (!next_) - return endlabeltype; - - depth_type const next_depth = next_->getDepth(); - if (par_depth > next_depth || - (par_depth == next_depth - && layout != next_->layout())) - return endlabeltype; - break; - } - if (par_depth == 0) - break; - par = par->outerHook(); - if (par) - par_depth = par->getDepth(); - } - return END_LABEL_NO_LABEL; -} - - Paragraph::depth_type Paragraph::getDepth() const { return params().depth(); @@ -805,60 +777,6 @@ int Paragraph::beginningOfBody() const } -Paragraph * Paragraph::depthHook(depth_type depth) -{ - Paragraph * newpar = this; - - do { - newpar = newpar->previous(); - } while (newpar && newpar->getDepth() > depth); - - if (!newpar) { - if (previous() || getDepth()) - lyxerr << "ERROR (Paragraph::DepthHook): " - "no hook." << endl; - newpar = this; - } - - return newpar; -} - - -Paragraph const * Paragraph::depthHook(depth_type depth) const -{ - Paragraph const * newpar = this; - - do { - newpar = newpar->previous(); - } while (newpar && newpar->getDepth() > depth); - - if (!newpar) { - if (previous() || getDepth()) - lyxerr << "ERROR (Paragraph::DepthHook): " - "no hook." << endl; - newpar = this; - } - - return newpar; -} - - -Paragraph * Paragraph::outerHook() -{ - if (!getDepth()) - return 0; - return depthHook(depth_type(getDepth() - 1)); -} - - -Paragraph const * Paragraph::outerHook() const -{ - if (!getDepth()) - return 0; - return depthHook(depth_type(getDepth() - 1)); -} - - // returns -1 if inset not found int Paragraph::getPositionOfInset(Inset const * inset) const { @@ -1487,15 +1405,6 @@ void Paragraph::layout(LyXLayout_ptr const & new_layout) } -bool Paragraph::isFirstInSequence() const -{ - Paragraph const * dhook = depthHook(getDepth()); - return (dhook == this - || dhook->layout() != layout() - || dhook->getDepth() != getDepth()); -} - - Inset * Paragraph::inInset() const { return pimpl_->inset_owner; diff --git a/src/paragraph.h b/src/paragraph.h index faf75b9958..d26fccac2e 100644 --- a/src/paragraph.h +++ b/src/paragraph.h @@ -112,12 +112,6 @@ public: /// void makeSameLayout(Paragraph const * par); - /// Is it the first par with same depth and layout? - bool isFirstInSequence() const; - - /** Check if the current paragraph is the last paragraph in a - proof environment */ - int getEndLabel() const; /// Inset * inInset() const; /// @@ -200,15 +194,6 @@ public: /// mark whole par as erased void markErased(); - /// for the environments - Paragraph * depthHook(depth_type depth); - /// for the environments - Paragraph const * depthHook(depth_type depth) const; - /// - Paragraph * outerHook(); - /// - Paragraph const * outerHook() const; - /// Paragraphs can contain "manual labels", for example, Description environment. /// The text for this user-editable label is stored in the paragraph alongside /// the text of the rest of the paragraph (the body). This function returns diff --git a/src/paragraph_funcs.C b/src/paragraph_funcs.C index 1f807c05f9..d53501d18b 100644 --- a/src/paragraph_funcs.C +++ b/src/paragraph_funcs.C @@ -196,7 +196,6 @@ void mergeParagraph(BufferParams const & bparams, } -#if 0 Paragraph * depthHook(Paragraph * par, Paragraph::depth_type depth) { Paragraph * newpar = par; @@ -207,10 +206,11 @@ Paragraph * depthHook(Paragraph * par, Paragraph::depth_type depth) if (!newpar) { if (par->previous() || par->getDepth()) - lyxerr << "Error (depthHook): " - << "no hook." << endl; + lyxerr << "ERROR (Paragraph::DepthHook): " + "no hook." << endl; newpar = par; } + return newpar; } @@ -227,39 +227,38 @@ bool isFirstInSequence(Paragraph * par) { Paragraph const * dhook = depthHook(par, par->getDepth()); return (dhook == par - || dhook->getLayout() != par->getLayout() + || dhook->layout() != par->layout() || dhook->getDepth() != par->getDepth()); } -int getEndLabel(Paragraph * para, BufferParams const & bparams) +int getEndLabel(Paragraph * p) { - Paragraph * par = para; + Paragraph * par = p; + Paragraph::depth_type par_depth = p->getDepth(); while (par) { - Paragraph::depth_type par_depth = par->getDepth(); - layout_type layout = par->getLayout(); - int const endlabeltype = - textclasslist.Style(bparams.textclass, - layout).endlabeltype; + LyXLayout_ptr const & layout = par->layout(); + int const endlabeltype = layout->endlabeltype; + if (endlabeltype != END_LABEL_NO_LABEL) { - if (!para->next()) + if (!p->next()) return endlabeltype; - Paragraph::depth_type const next_depth = - para->next()->getDepth(); + Paragraph::depth_type const next_depth = p->next()->getDepth(); if (par_depth > next_depth || (par_depth == next_depth - && layout != para->next()->getLayout())) + && layout != p->next()->layout())) return endlabeltype; break; } if (par_depth == 0) break; par = outerHook(par); + if (par) + par_depth = par->getDepth(); } return END_LABEL_NO_LABEL; } -#endif namespace { @@ -1024,3 +1023,29 @@ int readParagraph(Buffer & buf, Paragraph & par, LyXLex & lex) return unknown; } + + +LyXFont const realizeFont(LyXFont const & font, + Buffer const * buf, + ParagraphList & /*plist*/, + ParagraphList::iterator pit) +{ + LyXTextClass const & tclass = buf->params.getLyXTextClass(); + LyXFont tmpfont(font); + Paragraph::depth_type par_depth = pit->getDepth(); + + Paragraph * par = &*pit; + + // Resolve against environment font information + while (par && par_depth && !tmpfont.resolved()) { + par = outerHook(par); + if (par) { + tmpfont.realize(par->layout()->font); + par_depth = par->getDepth(); + } + } + + tmpfont.realize(tclass.defaultfont()); + + return tmpfont; +} diff --git a/src/paragraph_funcs.h b/src/paragraph_funcs.h index abae9f7d93..fc92fac3ce 100644 --- a/src/paragraph_funcs.h +++ b/src/paragraph_funcs.h @@ -13,11 +13,11 @@ #define PARAGRAPH_FUNCS_H #include "ParagraphList.h" +#include "paragraph.h" #include "support/types.h" class Buffer; class BufferParams; -class Paragraph; class TexRow; class LyXLex; @@ -42,8 +42,6 @@ void mergeParagraph(BufferParams const & bparams, ParagraphList & paragraphs, ParagraphList::iterator par); - -#if 0 /// for the environments Paragraph * depthHook(Paragraph * par, Paragraph::depth_type depth); @@ -54,8 +52,7 @@ bool isFirstInSequence(Paragraph * par); /** Check if the current paragraph is the last paragraph in a proof environment */ -int getEndLabel(Paragraph * para, BufferParams const & bparams); -#endif +int getEndLabel(Paragraph * para); void latexParagraphs(Buffer const * buf, @@ -69,4 +66,9 @@ void latexParagraphs(Buffer const * buf, /// read a paragraph from a .lyx file. Returns number of unrecognised tokens int readParagraph(Buffer & buf, Paragraph & par, LyXLex & lex); +LyXFont const realizeFont(LyXFont const & font, + Buffer const * buf, + ParagraphList & /*plist*/, + ParagraphList::iterator pit); + #endif // PARAGRAPH_FUNCS_H diff --git a/src/paragraph_pimpl.C b/src/paragraph_pimpl.C index b9adef80c7..927a8242b6 100644 --- a/src/paragraph_pimpl.C +++ b/src/paragraph_pimpl.C @@ -18,6 +18,7 @@ #include "encoding.h" #include "lyxrc.h" #include "debug.h" +#include "paragraph_funcs.h" #include "support/LAssert.h" @@ -859,12 +860,12 @@ LyXFont const Paragraph::Pimpl::realizeFont(LyXFont const & font, LyXFont tmpfont(font); // check for environment font information - char par_depth = owner_->getDepth(); - Paragraph const * par = owner_; + depth_type par_depth = owner_->getDepth(); + Paragraph * par = owner_; LyXTextClass const & tclass = bparams.getLyXTextClass(); while (par && par->getDepth() && !tmpfont.resolved()) { - par = par->outerHook(); + par = outerHook(par); if (par) { tmpfont.realize(par->layout()->font); par_depth = par->getDepth(); diff --git a/src/rowpainter.C b/src/rowpainter.C index 3d909313b1..4e10bb0ab7 100644 --- a/src/rowpainter.C +++ b/src/rowpainter.C @@ -18,6 +18,7 @@ #include "frontends/font_metrics.h" #include "support/LAssert.h" #include "paragraph.h" +#include "paragraph_funcs.h" #include "support/textutils.h" #include "insets/insettext.h" @@ -673,7 +674,7 @@ void RowPainter::paintFirst() if (layout->labeltype >= LABEL_STATIC && (layout->labeltype != LABEL_STATIC || layout->latextype != LATEX_ENVIRONMENT - || pit_->isFirstInSequence())) { + || isFirstInSequence(&*pit_))) { LyXFont font = getLabelFont(); if (!pit_->getLabelstring().empty()) { @@ -721,7 +722,7 @@ void RowPainter::paintFirst() // the labels at the top of an environment. // More or less for bibliography - } else if (pit_->isFirstInSequence() && + } else if (isFirstInSequence(&*pit_) && (layout->labeltype == LABEL_TOP_ENVIRONMENT || layout->labeltype == LABEL_BIBLIO || layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT)) { @@ -796,7 +797,7 @@ void RowPainter::paintLast() } bool const is_rtl = pit_->isRightToLeftPar(bv_.buffer()->params); - int const endlabel = pit_->getEndLabel(); + int const endlabel = getEndLabel(&*pit_); // draw an endlabel switch (endlabel) { diff --git a/src/text.C b/src/text.C index 18c022eca1..228f46c4f4 100644 --- a/src/text.C +++ b/src/text.C @@ -538,8 +538,8 @@ int LyXText::leftMargin(Row const & row) const if (row.par()->layout() == tclass.defaultLayout()) { // find the previous same level paragraph if (row.par() != ownerParagraphs().begin()) { - Paragraph * newpar = row.par() - ->depthHook(row.par()->getDepth()); + Paragraph * newpar = + depthHook(&*row.par(), row.par()->getDepth()); if (newpar && newpar->layout()->nextnoindent) parindent.erase(); @@ -548,7 +548,7 @@ int LyXText::leftMargin(Row const & row) const } else { // find the next level paragraph - Paragraph * newpar = row.par()->outerHook(); + Paragraph * newpar = outerHook(&*row.par()); // make a corresponding row. Needed to call leftMargin() @@ -614,7 +614,7 @@ int LyXText::leftMargin(Row const & row) const // theorems (JMarc) || (layout->labeltype == LABEL_STATIC && layout->latextype == LATEX_ENVIRONMENT - && ! row.par()->isFirstInSequence())) { + && !isFirstInSequence(&*row.par()))) { x += font_metrics::signedWidth(layout->leftmargin, labelfont); } else if (layout->labeltype != LABEL_TOP_ENVIRONMENT @@ -679,7 +679,7 @@ int LyXText::leftMargin(Row const & row) const || layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT || (layout->labeltype == LABEL_STATIC && layout->latextype == LATEX_ENVIRONMENT - && ! row.par()->isFirstInSequence())) + && !isFirstInSequence(&*row.par()))) && align == LYX_ALIGN_BLOCK && !row.par()->params().noindent() // in tabulars and ert paragraphs are never indented! @@ -1153,7 +1153,7 @@ void LyXText::setHeightOfRow(RowList::iterator rit) if ((layout->labeltype == LABEL_TOP_ENVIRONMENT || layout->labeltype == LABEL_BIBLIO || layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT) - && pit->isFirstInSequence() + && isFirstInSequence(&*pit) && !pit->getLabelstring().empty()) { float spacing_val = 1.0; @@ -1180,7 +1180,7 @@ void LyXText::setHeightOfRow(RowList::iterator rit) if (!pit->params().pagebreakTop()) { Paragraph * prev = pit->previous(); if (prev) - prev = pit->depthHook(pit->getDepth()); + prev = depthHook(&*pit, pit->getDepth()); if (prev && prev->layout() == layout && prev->getDepth() == pit->getDepth() && prev->getLabelWidthString() == pit->getLabelWidthString()) @@ -1201,7 +1201,7 @@ void LyXText::setHeightOfRow(RowList::iterator rit) layoutasc = (tmptop * defaultRowHeight()); } - prev = pit->outerHook(); + prev = outerHook(&*pit); if (prev) { maxasc += int(prev->layout()->parsep * defaultRowHeight()); } else if (pit != ownerParagraphs().begin()) { @@ -1250,7 +1250,7 @@ void LyXText::setHeightOfRow(RowList::iterator rit) if (comparepit->getDepth() > nextpit->getDepth()) { usual = (comparepit->layout()->bottomsep * defaultRowHeight()); - comparepit = comparepit->depthHook(nextpit->getDepth()); + comparepit = depthHook(&*comparepit, nextpit->getDepth()); if (comparepit->layout()!= nextpit->layout() || nextpit->getLabelWidthString() != comparepit->getLabelWidthString()) diff --git a/src/text2.C b/src/text2.C index b9b4152cd6..e52abd1dbd 100644 --- a/src/text2.C +++ b/src/text2.C @@ -30,6 +30,7 @@ #include "ParagraphParameters.h" #include "counters.h" #include "lyxrow_funcs.h" +#include "paragraph_funcs.h" #include "insets/insetbibitem.h" #include "insets/insetfloat.h" @@ -99,36 +100,6 @@ void LyXText::init(BufferView * bview, bool reinit) } -namespace { - -LyXFont const realizeFont(LyXFont const & font, - Buffer const * buf, - ParagraphList & /*plist*/, - ParagraphList::iterator pit) -{ - LyXTextClass const & tclass = buf->params.getLyXTextClass(); - LyXFont tmpfont(font); - Paragraph::depth_type par_depth = pit->getDepth(); - - Paragraph * par = &*pit; - - // Resolve against environment font information - while (par && par_depth && !tmpfont.resolved()) { - par = par->outerHook(); - if (par) { - tmpfont.realize(par->layout()->font); - par_depth = par->getDepth(); - } - } - - tmpfont.realize(tclass.defaultfont()); - - return tmpfont; -} - -} - - // Gets the fully instantiated font at a given position in a paragraph // Basically the same routine as Paragraph::getFont() in paragraph.C. // The difference is that this one is used for displaying, and thus we @@ -251,7 +222,7 @@ void LyXText::setCharFont(Buffer const * buf, ParagraphList::iterator pit, #warning FIXME I think I hate this outerHood stuff. Paragraph * tp = &*pit; while (!layoutfont.resolved() && tp && tp->getDepth()) { - tp = tp->outerHook(); + tp = outerHook(tp); if (tp) layoutfont.realize(tp->layout()->font); } @@ -1091,7 +1062,7 @@ void LyXText::setCounter(Buffer const * buf, ParagraphList::iterator pit) if (pit != ownerParagraphs().begin() && boost::prior(pit)->getDepth() > pit->getDepth() && layout->labeltype != LABEL_BIBLIO) { - pit->enumdepth = pit->depthHook(pit->getDepth())->enumdepth; + pit->enumdepth = depthHook(&*pit, pit->getDepth())->enumdepth; } if (!pit->params().labelString().empty()) { -- 2.39.2