+2003-04-16 Lars Gullik Bjønnes <larsbj@gullik.net>
+
+ * text2.C (setCharFont): adjust
+ (setCounter): adjust
+ (insertStringAsLines): adjust
+
+ * text.C (leftMargin): adjust
+ (setHeightOfRow): adjust
+
+ * rowpainter.C (paintFirst): adjust
+ (paintLast): adjust
+
+ * paragraph_funcs.C (depthHook): ParagraphList::iterators
+ (outerHook): ditto
+ (isFirstInSequence): ditto
+ (getEndLabel): ditto
+ (outerFont): adjust
+
+ * paragraph.C (getParLanguage): comment out some hard stuff.
+
+ * buffer.C (insertStringAsLines): take a ParagraphList as arg
+ (sgmlError): ditto
+ (simpleDocBookOnePar): ditto
+ (makeDocBookFile): use ParagraphList::iterator
+
+ * CutAndPaste.C (pasteSelection): adjust
+
2003-04-16 Lars Gullik Bjønnes <larsbj@gullik.net>
* text2.C (getFont): adjust
tmpbuf->erase(i--);
}
} else {
- LyXFont f1 = tmpbuf->getFont(current_view->buffer()->params, i, outerFont(tmpbuf, current_view->text->ownerParagraphs()));
+ LyXFont f1 = tmpbuf->getFont(current_view->buffer()->params, i, outerFont(tmpbuf, current_view->buffer()->paragraphs));
LyXFont f2 = f1;
if (!(*par)->checkInsertChar(f1)) {
tmpbuf->erase(i--);
// needed to insert the selection
-void Buffer::insertStringAsLines(Paragraph *& par, pos_type & pos,
+void Buffer::insertStringAsLines(ParagraphList::iterator & par, pos_type & pos,
LyXFont const & fn,string const & str)
{
LyXLayout_ptr const & layout = par->layout();
if (autobreakrows && (!par->empty() || layout->keepempty)) {
breakParagraph(params, paragraphs, par, pos,
layout->isEnvironment());
- par = par->next();
+ ++par;
pos = 0;
space_inserted = true;
} else {
// Print an error message.
-void Buffer::sgmlError(Paragraph * /*par*/, int /*pos*/,
+void Buffer::sgmlError(ParagraphList::iterator /*par*/, int /*pos*/,
string const & /*message*/) const
{
#ifdef WITH_WARNINGS
return;
}
- Paragraph * par = &*(paragraphs.begin());
-
niceFile = nice; // this will be used by Insetincludes.
LaTeXFeatures features(params);
string item_name;
string command_name;
- while (par) {
+ ParagraphList::iterator par = paragraphs.begin();
+ ParagraphList::iterator pend = paragraphs.end();
+
+ for (; par != pend; ++par) {
string sgmlparam;
string c_depth;
string c_params;
simpleDocBookOnePar(ofs, par, desc_on,
depth + 1 + command_depth);
- par = par->next();
string end_tag;
// write closing SGML tags
void Buffer::simpleDocBookOnePar(ostream & os,
- Paragraph * par, int & desc_on,
+ ParagraphList::iterator par, int & desc_on,
Paragraph::depth_type depth) const
{
bool emph_flag = false;
Paragraph::depth_type & depth);
///
- void insertStringAsLines(Paragraph *&, lyx::pos_type &,
+ void insertStringAsLines(ParagraphList::iterator &, lyx::pos_type &,
LyXFont const &, string const &);
///
Paragraph * getParFromID(int id) const;
bool only_preamble = false);
///
void simpleDocBookOnePar(std::ostream &,
- Paragraph * par, int & desc_on,
+ ParagraphList::iterator par, int & desc_on,
Paragraph::depth_type depth) const ;
///
void simpleLinuxDocOnePar(std::ostream & os, Paragraph * par,
void makeDocBookFile(string const & filename,
bool nice, bool only_body = false);
///
- void sgmlError(Paragraph * par, int pos, string const & message) const;
+ void sgmlError(ParagraphList::iterator par, int pos, string const & message) const;
/// returns the main language for the buffer (document)
Language const * getLanguage() const;
{
if (!empty()) {
return getFirstFontSettings().language();
- } else if (previous_)
+#warning FIXME we should check the prev par as well (Lgb)
+#if 0
+ } else if (previous_) {
return previous_->getParLanguage(bparams);
- else
+#endif
+ }else
return bparams.language;
}
}
-Paragraph * depthHook(Paragraph * par, Paragraph::depth_type depth)
+ParagraphList::iterator depthHook(ParagraphList::iterator pit,
+ ParagraphList const & plist,
+ Paragraph::depth_type depth)
{
- Paragraph * newpar = par;
+ ParagraphList::iterator newpit = pit;
+ ParagraphList::iterator beg = plist.begin();
- do {
- newpar = newpar->previous();
- } while (newpar && newpar->getDepth() > depth);
-
- if (!newpar) {
- if (par->previous() || par->getDepth())
- lyxerr << "ERROR (Paragraph::DepthHook): "
- "no hook." << endl;
- newpar = par;
+ if (newpit != beg)
+ --newpit;
+
+ while (newpit != beg && newpit->getDepth() > depth) {
+ --newpit;
}
- return newpar;
+ if (newpit->getDepth() > depth)
+ return pit;
+
+ return newpit;
}
-Paragraph * outerHook(Paragraph * par)
+ParagraphList::iterator outerHook(ParagraphList::iterator pit,
+ ParagraphList const & plist)
{
- if (!par->getDepth())
- return 0;
- return depthHook(par, Paragraph::depth_type(par->getDepth() - 1));
+ if (!pit->getDepth())
+ return plist.end();
+ return depthHook(pit, plist,
+ Paragraph::depth_type(pit->getDepth() - 1));
}
-bool isFirstInSequence(Paragraph * par)
+bool isFirstInSequence(ParagraphList::iterator pit,
+ ParagraphList const & plist)
{
- Paragraph const * dhook = depthHook(par, par->getDepth());
- return (dhook == par
- || dhook->layout() != par->layout()
- || dhook->getDepth() != par->getDepth());
+ ParagraphList::iterator dhook = depthHook(pit, plist, pit->getDepth());
+ return (dhook == pit
+ || dhook->layout() != pit->layout()
+ || dhook->getDepth() != pit->getDepth());
}
-int getEndLabel(Paragraph * p)
+int getEndLabel(ParagraphList::iterator p,
+ ParagraphList const & plist)
{
- Paragraph * par = p;
+ ParagraphList::iterator pit = p;
Paragraph::depth_type par_depth = p->getDepth();
- while (par) {
- LyXLayout_ptr const & layout = par->layout();
+ while (pit != plist.end()) {
+ LyXLayout_ptr const & layout = pit->layout();
int const endlabeltype = layout->endlabeltype;
if (endlabeltype != END_LABEL_NO_LABEL) {
- if (!p->next())
+ if (boost::next(p) == plist.end())
return endlabeltype;
- Paragraph::depth_type const next_depth = p->next()->getDepth();
+ Paragraph::depth_type const next_depth = boost::next(p)->getDepth();
if (par_depth > next_depth ||
- (par_depth == next_depth
- && layout != p->next()->layout()))
+ (par_depth == next_depth &&
+ layout != boost::next(p)->layout()))
return endlabeltype;
break;
}
if (par_depth == 0)
break;
- par = outerHook(par);
- if (par)
- par_depth = par->getDepth();
+ pit = outerHook(pit, plist);
+ if (pit != plist.end())
+ par_depth = pit->getDepth();
}
return END_LABEL_NO_LABEL;
}
LyXFont const outerFont(ParagraphList::iterator pit,
- ParagraphList const & /*plist*/)
+ ParagraphList const & plist)
{
Paragraph::depth_type par_depth = pit->getDepth();
LyXFont tmpfont(LyXFont::ALL_INHERIT);
// Resolve against environment font information
- Paragraph * par = &*pit;
- while (par && par_depth && !tmpfont.resolved()) {
- par = outerHook(par);
- if (par) {
- tmpfont.realize(par->layout()->font);
- par_depth = par->getDepth();
+ while (pit != plist.end() &&
+ par_depth && !tmpfont.resolved()) {
+ pit = outerHook(pit, plist);
+ if (pit != plist.end()) {
+ tmpfont.realize(pit->layout()->font);
+ par_depth = pit->getDepth();
}
}
ParagraphList & paragraphs,
ParagraphList::iterator par);
+
/// for the environments
-Paragraph * depthHook(Paragraph * par, Paragraph::depth_type depth);
+ParagraphList::iterator depthHook(ParagraphList::iterator pit,
+ ParagraphList const & plist,
+ Paragraph::depth_type depth);
-Paragraph * outerHook(Paragraph * par);
+ParagraphList::iterator outerHook(ParagraphList::iterator pit,
+ ParagraphList const & plist);
/// Is it the first par with same depth and layout?
-bool isFirstInSequence(Paragraph * par);
+bool isFirstInSequence(ParagraphList::iterator par,
+ ParagraphList const & plist);
/** Check if the current paragraph is the last paragraph in a
proof environment */
-int getEndLabel(Paragraph * para);
+int getEndLabel(ParagraphList::iterator pit,
+ ParagraphList const & plist);
void latexParagraphs(Buffer const * buf,
if (layout->labeltype >= LABEL_STATIC
&& (layout->labeltype != LABEL_STATIC
|| layout->latextype != LATEX_ENVIRONMENT
- || isFirstInSequence(&*pit_))) {
+ || isFirstInSequence(pit_, text_.ownerParagraphs()))) {
LyXFont font = getLabelFont();
if (!pit_->getLabelstring().empty()) {
// the labels at the top of an environment.
// More or less for bibliography
- } else if (isFirstInSequence(&*pit_) &&
+ } else if (isFirstInSequence(pit_, text_.ownerParagraphs()) &&
(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 = getEndLabel(&*pit_);
+ int const endlabel = getEndLabel(pit_, text_.ownerParagraphs());
// draw an endlabel
switch (endlabel) {
if (row.par()->layout() == tclass.defaultLayout()) {
// find the previous same level paragraph
if (row.par() != ownerParagraphs().begin()) {
- Paragraph * newpar =
- depthHook(&*row.par(), row.par()->getDepth());
- if (newpar &&
- newpar->layout()->nextnoindent)
+ ParagraphList::iterator newpit =
+ depthHook(row.par(), ownerParagraphs(),
+ row.par()->getDepth());
+ if (newpit == row.par() &&
+ newpit->layout()->nextnoindent)
parindent.erase();
}
}
} else {
// find the next level paragraph
- Paragraph * newpar = outerHook(&*row.par());
+ ParagraphList::iterator newpar = outerHook(row.par(),
+ ownerParagraphs());
// make a corresponding row. Needed to call leftMargin()
// check wether it is a sufficent paragraph
- if (newpar && newpar->layout()->isEnvironment()) {
+ if (newpar != ownerParagraphs().end() &&
+ newpar->layout()->isEnvironment()) {
Row dummyrow;
dummyrow.par(newpar);
dummyrow.pos(newpar->size());
x = leftMargin(dummyrow);
}
- if (newpar && row.par()->layout() == tclass.defaultLayout()) {
+ if (newpar != ownerParagraphs().end() &&
+ row.par()->layout() == tclass.defaultLayout()) {
if (newpar->params().noindent())
parindent.erase();
else {
// theorems (JMarc)
|| (layout->labeltype == LABEL_STATIC
&& layout->latextype == LATEX_ENVIRONMENT
- && !isFirstInSequence(&*row.par()))) {
+ && !isFirstInSequence(row.par(), ownerParagraphs()))) {
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
- && !isFirstInSequence(&*row.par())))
+ && !isFirstInSequence(row.par(), ownerParagraphs())))
&& 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)
- && isFirstInSequence(&*pit)
+ && isFirstInSequence(pit, ownerParagraphs())
&& !pit->getLabelstring().empty())
{
float spacing_val = 1.0;
+ layout->labelbottomsep * defaultRowHeight());
}
- // and now the layout spaces, for example before and after a section,
- // or between the items of a itemize or enumerate environment
+ // And now the layout spaces, for example before and after
+ // a section, or between the items of a itemize or enumerate
+ // environment.
if (!pit->params().pagebreakTop()) {
- Paragraph * prev = pit->previous();
- if (prev)
- prev = depthHook(&*pit, pit->getDepth());
- if (prev && prev->layout() == layout &&
+ ParagraphList::iterator prev =
+ depthHook(pit, ownerParagraphs(),
+ pit->getDepth());
+ if (prev != pit && prev->layout() == layout &&
prev->getDepth() == pit->getDepth() &&
prev->getLabelWidthString() == pit->getLabelWidthString())
{
layoutasc = (tmptop * defaultRowHeight());
}
- prev = outerHook(&*pit);
- if (prev) {
+ prev = outerHook(pit, ownerParagraphs());
+ if (prev != ownerParagraphs().end()) {
maxasc += int(prev->layout()->parsep * defaultRowHeight());
} else if (pit != ownerParagraphs().begin()) {
ParagraphList::iterator prior_pit = boost::prior(pit);
if (comparepit->getDepth() > nextpit->getDepth()) {
usual = (comparepit->layout()->bottomsep * defaultRowHeight());
- comparepit = depthHook(&*comparepit, nextpit->getDepth());
+ comparepit = depthHook(comparepit, ownerParagraphs(), nextpit->getDepth());
if (comparepit->layout()!= nextpit->layout()
|| nextpit->getLabelWidthString() !=
comparepit->getLabelWidthString())
// Realize against environment font information
if (pit->getDepth()) {
-#warning FIXME I think I hate this outerHood stuff.
- Paragraph * tp = &*pit;
- while (!layoutfont.resolved() && tp && tp->getDepth()) {
- tp = outerHook(tp);
- if (tp)
+ ParagraphList::iterator tp = pit;
+ while (!layoutfont.resolved() &&
+ tp != ownerParagraphs().end() &&
+ tp->getDepth()) {
+ tp = outerHook(tp, ownerParagraphs());
+ if (tp != ownerParagraphs().end())
layoutfont.realize(tp->layout()->font);
}
}
if (pit != ownerParagraphs().begin()
&& boost::prior(pit)->getDepth() > pit->getDepth()
&& layout->labeltype != LABEL_BIBLIO) {
- pit->enumdepth = depthHook(&*pit, pit->getDepth())->enumdepth;
+ pit->enumdepth = depthHook(pit, ownerParagraphs(),
+ pit->getDepth())->enumdepth;
}
if (!pit->params().labelString().empty()) {
// only to be sure, should not be neccessary
clearSelection();
- Paragraph * par = &*pit;
- bv()->buffer()->insertStringAsLines(par, pos, current_font, str);
+ bv()->buffer()->insertStringAsLines(pit, pos, current_font, str);
redoParagraphs(cursor, endpit);
setCursor(cursor.par(), cursor.pos());