+2003-04-14 Lars Gullik Bjønnes <larsbj@gullik.net>
+
+ * 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 <larsbj@gullik.net>
* text3.C (gotoNextInset): use separate tmp vars for par and pos.
#include "ParameterStruct.h"
#include "gettext.h"
#include "changes.h"
+#include "paragraph_funcs.h"
#include "insets/insetbibitem.h"
#include "insets/insetoptarg.h"
}
-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();
}
-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
{
}
-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;
///
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;
///
/// 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
}
-#if 0
Paragraph * depthHook(Paragraph * par, Paragraph::depth_type depth)
{
Paragraph * newpar = par;
if (!newpar) {
if (par->previous() || par->getDepth())
- lyxerr << "Error (depthHook): "
- << "no hook." << endl;
+ lyxerr << "ERROR (Paragraph::DepthHook): "
+ "no hook." << endl;
newpar = par;
}
+
return newpar;
}
{
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 {
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;
+}
#define PARAGRAPH_FUNCS_H
#include "ParagraphList.h"
+#include "paragraph.h"
#include "support/types.h"
class Buffer;
class BufferParams;
-class Paragraph;
class TexRow;
class LyXLex;
ParagraphList & paragraphs,
ParagraphList::iterator par);
-
-#if 0
/// for the environments
Paragraph * depthHook(Paragraph * par, Paragraph::depth_type depth);
/** 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,
/// 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
#include "encoding.h"
#include "lyxrc.h"
#include "debug.h"
+#include "paragraph_funcs.h"
#include "support/LAssert.h"
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();
#include "frontends/font_metrics.h"
#include "support/LAssert.h"
#include "paragraph.h"
+#include "paragraph_funcs.h"
#include "support/textutils.h"
#include "insets/insettext.h"
if (layout->labeltype >= LABEL_STATIC
&& (layout->labeltype != LABEL_STATIC
|| layout->latextype != LATEX_ENVIRONMENT
- || pit_->isFirstInSequence())) {
+ || isFirstInSequence(&*pit_))) {
LyXFont font = getLabelFont();
if (!pit_->getLabelstring().empty()) {
// 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)) {
}
bool const is_rtl = pit_->isRightToLeftPar(bv_.buffer()->params);
- int const endlabel = pit_->getEndLabel();
+ int const endlabel = getEndLabel(&*pit_);
// draw an endlabel
switch (endlabel) {
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();
} else {
// find the next level paragraph
- Paragraph * newpar = row.par()->outerHook();
+ Paragraph * newpar = outerHook(&*row.par());
// make a corresponding row. Needed to call leftMargin()
// 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
|| 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!
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;
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())
layoutasc = (tmptop * defaultRowHeight());
}
- prev = pit->outerHook();
+ prev = outerHook(&*pit);
if (prev) {
maxasc += int(prev->layout()->parsep * defaultRowHeight());
} else if (pit != ownerParagraphs().begin()) {
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())
#include "ParagraphParameters.h"
#include "counters.h"
#include "lyxrow_funcs.h"
+#include "paragraph_funcs.h"
#include "insets/insetbibitem.h"
#include "insets/insetfloat.h"
}
-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
#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);
}
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()) {