#include "support/lassert.h"
#include "support/convert.h"
#include "support/debug.h"
+#include "support/ExceptionMessage.h"
#include "support/gettext.h"
#include "support/lstrings.h"
#include "support/Messages.h"
/// This could go to ParagraphParameters if we want to.
int startTeXParParams(BufferParams const &, odocstream &, TexRow &,
- bool) const;
+ OutputParams const &) const;
/// This could go to ParagraphParameters if we want to.
int endTeXParParams(BufferParams const &, odocstream &, TexRow &,
- bool) const;
+ OutputParams const &) const;
///
void latexInset(BufferParams const &,
Paragraph * owner_;
/// In which Inset?
- Inset * inset_owner_;
+ Inset const * inset_owner_;
///
FontList fontlist_;
}
+void Paragraph::addChangesToToc(DocIterator const & cdit,
+ Buffer const & buf) const
+{
+ d->changes_.addToToc(cdit, buf);
+}
+
+
bool Paragraph::isChanged(pos_type start, pos_type end) const
{
LASSERT(start >= 0 && start <= size(), /**/);
bool Paragraph::eraseChar(pos_type pos, bool trackChanges)
{
- LASSERT(pos >= 0 && pos <= size(), /**/);
+ LASSERT(pos >= 0 && pos <= size(), return false);
// keep the logic here in sync with the logic of isMergedOnEndOfParDeletion()
}
-bool Paragraph::insetAllowed(InsetCode code)
-{
- return !d->inset_owner_ || d->inset_owner_->insetAllowed(code);
-}
-
-
void Paragraph::resetFonts(Font const & font)
{
d->fontlist_.clear();
bool Paragraph::forcePlainLayout() const
{
- Inset const * const inset = inInset();
- if (!inset)
- return true;
- return inset->forcePlainLayout();
+ return inInset().forcePlainLayout();
}
bool Paragraph::allowParagraphCustomization() const
{
- Inset const * const inset = inInset();
- if (!inset)
- return true;
- return inset->allowParagraphCustomization();
+ return inInset().allowParagraphCustomization();
}
bool Paragraph::usePlainLayout() const
{
- Inset const * const inset = inInset();
- if (!inset)
- return false;
- return inset->usePlainLayout();
+ return inInset().usePlainLayout();
}
bool noTrivlistCentering(InsetCode code)
{
- return code == FLOAT_CODE || code == WRAP_CODE;
+ return code == FLOAT_CODE
+ || code == WRAP_CODE
+ || code == CELL_CODE;
}
string const corrected_env(string const & suffix, string const & env,
- InsetCode code)
+ InsetCode code, bool const lastpar)
{
string output = suffix + "{";
- if (noTrivlistCentering(code))
+ if (noTrivlistCentering(code)) {
+ if (lastpar) {
+ // the last paragraph in non-trivlist-aligned
+ // context is special (to avoid unwanted whitespace)
+ if (suffix == "\\begin")
+ return "\\" + correction(env) + "{}";
+ return string();
+ }
output += correction(env);
- else
+ } else
output += env;
output += "}";
if (suffix == "\\begin")
int Paragraph::Private::startTeXParParams(BufferParams const & bparams,
odocstream & os, TexRow & texrow,
- bool moving_arg) const
+ OutputParams const & runparams) const
{
int column = 0;
case LYX_ALIGN_LEFT:
case LYX_ALIGN_RIGHT:
case LYX_ALIGN_CENTER:
- if (moving_arg) {
+ if (runparams.moving_arg) {
os << "\\protect";
column += 8;
}
break;
}
+ string const begin_tag = "\\begin";
+ InsetCode code = owner_->ownerCode();
+ bool const lastpar = runparams.isLastPar;
+
switch (curAlign) {
case LYX_ALIGN_NONE:
case LYX_ALIGN_BLOCK:
case LYX_ALIGN_LEFT: {
string output;
if (owner_->getParLanguage(bparams)->babel() != "hebrew")
- output = corrected_env("\\begin", "flushleft", owner_->ownerCode());
+ output = corrected_env(begin_tag, "flushleft", code, lastpar);
else
- output = corrected_env("\\begin", "flushright", owner_->ownerCode());
+ output = corrected_env(begin_tag, "flushright", code, lastpar);
os << from_ascii(output);
adjust_row_column(output, texrow, column);
break;
} case LYX_ALIGN_RIGHT: {
string output;
if (owner_->getParLanguage(bparams)->babel() != "hebrew")
- output = corrected_env("\\begin", "flushright", owner_->ownerCode());
+ output = corrected_env(begin_tag, "flushright", code, lastpar);
else
- output = corrected_env("\\begin", "flushleft", owner_->ownerCode());
+ output = corrected_env(begin_tag, "flushleft", code, lastpar);
os << from_ascii(output);
adjust_row_column(output, texrow, column);
break;
} case LYX_ALIGN_CENTER: {
string output;
- output = corrected_env("\\begin", "center", owner_->ownerCode());
+ output = corrected_env(begin_tag, "center", code, lastpar);
os << from_ascii(output);
adjust_row_column(output, texrow, column);
break;
int Paragraph::Private::endTeXParParams(BufferParams const & bparams,
odocstream & os, TexRow & texrow,
- bool moving_arg) const
+ OutputParams const & runparams) const
{
int column = 0;
case LYX_ALIGN_LEFT:
case LYX_ALIGN_RIGHT:
case LYX_ALIGN_CENTER:
- if (moving_arg) {
+ if (runparams.moving_arg) {
os << "\\protect";
column = 8;
}
break;
}
+ string const end_tag = "\n\\par\\end";
+ InsetCode code = owner_->ownerCode();
+ bool const lastpar = runparams.isLastPar;
+
switch (params_.align()) {
case LYX_ALIGN_NONE:
case LYX_ALIGN_BLOCK:
case LYX_ALIGN_LEFT: {
string output;
if (owner_->getParLanguage(bparams)->babel() != "hebrew")
- output = corrected_env("\n\\par\\end", "flushleft", owner_->ownerCode());
+ output = corrected_env(end_tag, "flushleft", code, lastpar);
else
- output = corrected_env("\n\\par\\end", "flushright", owner_->ownerCode());
+ output = corrected_env(end_tag, "flushright", code, lastpar);
os << from_ascii(output);
adjust_row_column(output, texrow, column);
break;
} case LYX_ALIGN_RIGHT: {
string output;
if (owner_->getParLanguage(bparams)->babel() != "hebrew")
- output = corrected_env("\n\\par\\end", "flushright", owner_->ownerCode());
+ output = corrected_env(end_tag, "flushright", code, lastpar);
else
- output = corrected_env("\n\\par\\end", "flushleft", owner_->ownerCode());
+ output = corrected_env(end_tag, "flushleft", code, lastpar);
os << from_ascii(output);
adjust_row_column(output, texrow, column);
break;
} case LYX_ALIGN_CENTER: {
string output;
- output = corrected_env("\n\\par\\end", "center", owner_->ownerCode());
+ output = corrected_env(end_tag, "center", code, lastpar);
os << from_ascii(output);
adjust_row_column(output, texrow, column);
break;
}
if (!asdefault)
column += d->startTeXParParams(bparams, os, texrow,
- runparams.moving_arg);
+ runparams);
}
for (pos_type i = 0; i < size(); ++i) {
if (!asdefault)
column += d->startTeXParParams(bparams, os,
texrow,
- runparams.moving_arg);
+ runparams);
}
Change const & change = runparams.inDeletedInset ? runparams.changeOfDeletedInset
if (!asdefault) {
column += d->endTeXParParams(bparams, os, texrow,
- runparams.moving_arg);
+ runparams);
}
LYXERR(Debug::LATEX, "SimpleTeXOnePar...done " << this);
}
-void Paragraph::setInsetOwner(Inset * inset)
+void Paragraph::setInsetOwner(Inset const * inset)
{
d->inset_owner_ = inset;
}
}
-Inset * Paragraph::inInset() const
+Inset const & Paragraph::inInset() const
{
- return d->inset_owner_;
+ LASSERT(d->inset_owner_, throw ExceptionMessage(BufferException,
+ _("Memory problem"), _("Paragraph not properly initiliazed")));
+ return *d->inset_owner_;
}