#include "FuncStatus.h"
#include "Lexer.h"
#include "MetricsInfo.h"
-#include "OutputParams.h"
-#include "output_xhtml.h"
+#include "xml.h"
#include "texstream.h"
#include "Text.h"
#include "TextMetrics.h"
namespace lyx {
- InsetNewpage::InsetNewpage() : Inset(0)
+ InsetNewpage::InsetNewpage() : Inset(nullptr)
{}
InsetNewpage::InsetNewpage(InsetNewpageParams const & params)
- : Inset(0), params_(params)
+ : Inset(nullptr), params_(params)
{}
case InsetNewpageParams::CLEARDOUBLEPAGE:
os << "cleardoublepage";
break;
+ case InsetNewpageParams::NOPAGEBREAK:
+ os << "nopagebreak";
+ break;
}
}
kind = InsetNewpageParams::CLEARPAGE;
else if (token == "cleardoublepage")
kind = InsetNewpageParams::CLEARDOUBLEPAGE;
+ else if (token == "nopagebreak")
+ kind = InsetNewpageParams::NOPAGEBREAK;
else
lex.printError("Unknown kind");
}
void InsetNewpage::metrics(MetricsInfo & mi, Dimension & dim) const
{
+ if (params_.kind == InsetNewpageParams::NOPAGEBREAK) {
+ frontend::FontMetrics const & fm = theFontMetrics(mi.base.font);
+ dim.asc = fm.maxAscent();
+ dim.des = fm.maxDescent();
+ dim.wid = 3 * fm.width('n');
+ return;
+ }
+
dim.asc = defaultRowHeight();
dim.des = defaultRowHeight();
dim.wid = mi.base.textwidth;
void InsetNewpage::draw(PainterInfo & pi, int x, int y) const
{
+ if (params_.kind == InsetNewpageParams::NOPAGEBREAK) {
+
+ FontInfo font;
+ font.setColor(ColorName());
+
+ frontend::FontMetrics const & fm = theFontMetrics(pi.base.font);
+ int const wid = 3 * fm.width('n');
+ int const asc = fm.maxAscent();
+
+ int xp[3];
+ int yp[3];
+
+ //left side arrow
+ yp[0] = int(y - 0.875 * asc * 0.75);
+ yp[1] = int(y - 0.500 * asc * 0.75);
+ yp[2] = int(y - 0.125 * asc * 0.75);
+ xp[0] = int(x + wid * 0.25);
+ xp[1] = int(x + wid * 0.4);
+ xp[2] = int(x + wid * 0.25);
+ pi.pain.lines(xp, yp, 3, ColorName());
+
+ yp[0] = yp[1] = int(y - 0.500 * asc * 0.75);
+ xp[0] = int(x + wid * 0.03);
+ xp[1] = int(x + wid * 0.4);
+ pi.pain.lines(xp, yp, 2, ColorName());
+
+ //right side arrow
+ yp[0] = int(y - 0.875 * asc * 0.75);
+ yp[1] = int(y - 0.500 * asc * 0.75);
+ yp[2] = int(y - 0.125 * asc * 0.75);
+ xp[0] = int(x + wid * 0.75);
+ xp[1] = int(x + wid * 0.6);
+ xp[2] = int(x + wid * 0.75);
+ pi.pain.lines(xp, yp, 3, ColorName());
+
+ yp[0] = yp[1] = int(y - 0.500 * asc * 0.75);
+ xp[0] = int(x + wid * 0.97);
+ xp[1] = int(x + wid * 0.6);
+ pi.pain.lines(xp, yp, 2, ColorName());
+
+ //mid-rule
+ xp[0] = xp[1] = int(x + wid * 0.5);
+ yp[0] = int(y - 0.875 * asc * 0.75);
+ yp[1] = int(y - 0.125 * asc * 0.75);
+ pi.pain.lines(xp, yp, 2, ColorName());
+ return;
+ }
+
using frontend::Painter;
FontInfo font;
InsetNewpageParams params;
string2params(to_utf8(cmd.argument()), params);
status.setOnOff(params_.kind == params.kind);
- }
+ }
status.setEnabled(true);
return true;
default:
switch (params_.kind) {
case InsetNewpageParams::NEWPAGE:
return _("New Page");
- break;
case InsetNewpageParams::PAGEBREAK:
return _("Page Break");
- break;
case InsetNewpageParams::CLEARPAGE:
return _("Clear Page");
- break;
case InsetNewpageParams::CLEARDOUBLEPAGE:
return _("Clear Double Page");
- break;
+ case InsetNewpageParams::NOPAGEBREAK:
+ return _("No Page Break");
default:
return _("New Page");
- break;
}
}
{
switch (params_.kind) {
case InsetNewpageParams::PAGEBREAK:
+ case InsetNewpageParams::NOPAGEBREAK:
return Color_pagebreak;
- break;
case InsetNewpageParams::NEWPAGE:
case InsetNewpageParams::CLEARPAGE:
case InsetNewpageParams::CLEARDOUBLEPAGE:
return Color_newpage;
- break;
}
// not really useful, but to avoids gcc complaints
return Color_newpage;
void InsetNewpage::latex(otexstream & os, OutputParams const & runparams) const
{
- switch (params_.kind) {
+ if (runparams.inDeletedInset) {
+ os << "\\mbox{}\\\\\\makebox[\\columnwidth]{\\dotfill\\ "
+ << insetLabel() << "\\ \\dotfill}";
+ } else {
+ switch (params_.kind) {
case InsetNewpageParams::NEWPAGE:
os << "\\newpage" << termcmd;
break;
case InsetNewpageParams::CLEARDOUBLEPAGE:
os << "\\cleardoublepage" << termcmd;
break;
+ case InsetNewpageParams::NOPAGEBREAK:
+ os << "\\nopagebreak" << termcmd;
+ break;
default:
os << "\\newpage" << termcmd;
break;
+ }
}
}
int InsetNewpage::plaintext(odocstringstream & os,
OutputParams const &, size_t) const
{
+ if (params_.kind == InsetNewpageParams::NOPAGEBREAK)
+ return 0;
os << '\n';
return PLAINTEXT_NEWLINE;
}
-int InsetNewpage::docbook(odocstream & os, OutputParams const &) const
+void InsetNewpage::docbook(XMLStream & os, OutputParams const &) const
{
- os << '\n';
- return 0;
+ if (params_.kind != InsetNewpageParams::NOPAGEBREAK)
+ os << xml::CR();
}
-docstring InsetNewpage::xhtml(XHTMLStream & xs, OutputParams const &) const
+docstring InsetNewpage::xhtml(XMLStream & xs, OutputParams const &) const
{
- xs << html::CompTag("br");
+ if (params_.kind != InsetNewpageParams::NOPAGEBREAK)
+ xs << xml::CompTag("br");
return docstring();
}