X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetNewline.cpp;h=92f94eaaa76e34913118e1e0b667696812b8ffc7;hb=90f7007a2e6c78ffd031e4636ff909ab1bc2ddec;hp=72faac733bc590ceeb8c845819b762ab5e987baf;hpb=c876a2e7c720a8dc4bc92ff4a437b769f327e904;p=lyx.git diff --git a/src/insets/InsetNewline.cpp b/src/insets/InsetNewline.cpp index 72faac733b..92f94eaaa7 100644 --- a/src/insets/InsetNewline.cpp +++ b/src/insets/InsetNewline.cpp @@ -4,7 +4,7 @@ * Licence details can be found in the file COPYING. * * \author John Levon - * \author Jürgen Spitzmüller + * \author Jürgen Spitzmüller * * Full author contact details are available in file CREDITS. */ @@ -13,27 +13,31 @@ #include "InsetNewline.h" +#include "Cursor.h" +#include "Dimension.h" #include "FuncRequest.h" #include "FuncStatus.h" -#include "Dimension.h" #include "Lexer.h" #include "MetricsInfo.h" #include "OutputParams.h" +#include "output_xhtml.h" +#include "frontends/Application.h" #include "frontends/FontMetrics.h" #include "frontends/Painter.h" #include "support/debug.h" -#include "support/docstring.h" #include "support/docstream.h" +#include "support/docstring.h" using namespace std; namespace lyx { -InsetNewline::InsetNewline() +InsetNewline::InsetNewline() : Inset(0) {} + void InsetNewlineParams::write(ostream & os) const { string command; @@ -50,23 +54,15 @@ void InsetNewlineParams::write(ostream & os) const void InsetNewlineParams::read(Lexer & lex) { - lex.next(); - string const command = lex.getString(); - - if (command == "newline") + string token; + lex.setContext("InsetNewlineParams::read"); + lex >> token; + if (token == "newline") kind = InsetNewlineParams::NEWLINE; - else if (command == "linebreak") + else if (token == "linebreak") kind = InsetNewlineParams::LINEBREAK; else - lex.printError("InsetNewline: Unknown kind: `$$Token'"); - - string token; - lex >> token; - if (!lex) - return; - if (token != "\\end_inset") - lex.printError("Missing \\end_inset at this point. " - "Read: `$$Token'"); + lex.printError("Unknown kind: `$$Token'"); } @@ -80,6 +76,7 @@ void InsetNewline::write(ostream & os) const void InsetNewline::read(Lexer & lex) { params_.read(lex); + lex >> "\\end_inset"; } @@ -94,11 +91,12 @@ void InsetNewline::metrics(MetricsInfo & mi, Dimension & dim) const void InsetNewline::doDispatch(Cursor & cur, FuncRequest & cmd) { - switch (cmd.action) { + switch (cmd.action()) { case LFUN_INSET_MODIFY: { InsetNewlineParams params; - InsetNewlineMailer::string2params(to_utf8(cmd.argument()), params); + cur.recordUndo(); + string2params(to_utf8(cmd.argument()), params); params_.kind = params.kind; break; } @@ -113,15 +111,15 @@ void InsetNewline::doDispatch(Cursor & cur, FuncRequest & cmd) bool InsetNewline::getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus & status) const { - switch (cmd.action) { + switch (cmd.action()) { // we handle these case LFUN_INSET_MODIFY: if (cmd.getArg(0) == "newline") { InsetNewlineParams params; - InsetNewlineMailer::string2params(to_utf8(cmd.argument()), params); + string2params(to_utf8(cmd.argument()), params); status.setOnOff(params_.kind == params.kind); - } else - status.enabled(true); + } + status.setEnabled(true); return true; default: return Inset::getStatus(cur, cmd, status); @@ -138,18 +136,20 @@ ColorCode InsetNewline::ColorName() const case InsetNewlineParams::LINEBREAK: return Color_pagebreak; break; - default: - return Color_eolmarker; - break; } + // not really useful, but to avoids gcc complaints + return Color_eolmarker; } -int InsetNewline::latex(odocstream & os, OutputParams const &) const +void InsetNewline::latex(otexstream & os, OutputParams const & rp) const { switch (params_.kind) { case InsetNewlineParams::NEWLINE: - os << "\\\\\n"; + if (rp.inTableCell == OutputParams::PLAIN) + os << "\\newline\n"; + else + os << "\\\\\n"; break; case InsetNewlineParams::LINEBREAK: os << "\\linebreak{}\n"; @@ -158,7 +158,6 @@ int InsetNewline::latex(odocstream & os, OutputParams const &) const os << "\\\\\n"; break; } - return 0; } @@ -176,6 +175,13 @@ int InsetNewline::docbook(odocstream & os, OutputParams const &) const } +docstring InsetNewline::xhtml(XHTMLStream & xs, OutputParams const &) const +{ + xs << html::CR() << html::CompTag("br") << html::CR(); + return docstring(); +} + + void InsetNewline::draw(PainterInfo & pi, int x, int y) const { FontInfo font; @@ -253,49 +259,30 @@ void InsetNewline::draw(PainterInfo & pi, int x, int y) const } -docstring InsetNewline::contextMenu(BufferView const &, int, int) const -{ - return from_ascii("context-newline"); -} - - -string const InsetNewlineMailer::name_ = "newline"; - - -InsetNewlineMailer::InsetNewlineMailer(InsetNewline & inset) - : inset_(inset) -{} - - -string const InsetNewlineMailer::inset2string(Buffer const &) const +string InsetNewline::contextMenuName() const { - return params2string(inset_.params()); + return "context-newline"; } -void InsetNewlineMailer::string2params(string const & in, InsetNewlineParams & params) +void InsetNewline::string2params(string const & in, InsetNewlineParams & params) { params = InsetNewlineParams(); if (in.empty()) return; - istringstream data(in); - Lexer lex(0,0); + Lexer lex; lex.setStream(data); - - string name; - lex >> name; - if (!lex || name != name_) - return print_mailer_error("InsetNewlineMailer", in, 1, name_); - + lex.setContext("InsetNewline::string2params"); + lex >> "newline"; params.read(lex); } -string const InsetNewlineMailer::params2string(InsetNewlineParams const & params) +string InsetNewline::params2string(InsetNewlineParams const & params) { ostringstream data; - data << name_ << ' '; + data << "newline" << ' '; params.write(data); return data.str(); }