X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetWrap.cpp;h=9155960c2f4f833f9c42b0712075e8ca3043ca38;hb=06254d11dfdf670fab3548dc2a2674e7a261262c;hp=8c72fc8571dee743455cec2c6e336601457d8f33;hpb=ed858d73e57ce7aa89e38c1bc4d799362edb0227;p=lyx.git diff --git a/src/insets/InsetWrap.cpp b/src/insets/InsetWrap.cpp index 8c72fc8571..9155960c2f 100644 --- a/src/insets/InsetWrap.cpp +++ b/src/insets/InsetWrap.cpp @@ -4,6 +4,7 @@ * Licence details can be found in the file COPYING. * * \author Dekel Tsur + * \author Uwe Stöhr * * Full author contact details are available in file CREDITS. */ @@ -17,41 +18,35 @@ #include "BufferView.h" #include "Counters.h" #include "Cursor.h" -#include "debug.h" +#include "support/debug.h" #include "DispatchResult.h" #include "Floating.h" #include "FloatList.h" #include "FuncRequest.h" #include "FuncStatus.h" -#include "gettext.h" +#include "support/gettext.h" #include "LaTeXFeatures.h" -#include "Color.h" #include "Lexer.h" #include "OutputParams.h" +#include "TextClass.h" #include "TocBackend.h" #include "support/convert.h" +#include "support/docstream.h" +using namespace std; namespace lyx { -using std::string; -using std::endl; -using std::istringstream; -using std::ostream; -using std::ostringstream; - InsetWrap::InsetWrap(BufferParams const & bp, string const & type) : InsetCollapsable(bp), name_(from_utf8(type)) { setLabel(_("wrap: ") + floatName(type, bp)); - Font font(Font::ALL_SANE); - font.decSize(); - font.decSize(); - font.setColor(Color::collapsable); - setLabelFont(font); params_.type = type; + params_.lines = 0; + params_.placement = "o"; + params_.overhang = Length(0, Length::PCW); params_.width = Length(50, Length::PCW); } @@ -68,8 +63,10 @@ void InsetWrap::doDispatch(Cursor & cur, FuncRequest & cmd) case LFUN_INSET_MODIFY: { InsetWrapParams params; InsetWrapMailer::string2params(to_utf8(cmd.argument()), params); + params_.lines = params.lines; params_.placement = params.placement; - params_.width = params.width; + params_.overhang = params.overhang; + params_.width = params.width; break; } @@ -126,10 +123,9 @@ void InsetWrap::updateLabels(Buffer const & buf, ParIterator const & it) void InsetWrapParams::write(ostream & os) const { os << "Wrap " << type << '\n'; - - if (!placement.empty()) - os << "placement " << placement << "\n"; - + os << "lines " << lines << "\n"; + os << "placement " << placement << "\n"; + os << "overhang " << overhang.asString() << "\n"; os << "width \"" << width.asString() << "\"\n"; } @@ -137,11 +133,35 @@ void InsetWrapParams::write(ostream & os) const void InsetWrapParams::read(Lexer & lex) { string token; + + lex >> token; + if (token == "lines") + lex >> lines; + else { + lyxerr << "InsetWrap::Read:: Missing 'lines'-tag!" + << endl; + // take countermeasures + lex.pushToken(token); + } + if (!lex) + return; lex >> token; if (token == "placement") lex >> placement; else { - // take countermeasures + lyxerr << "InsetWrap::Read:: Missing 'placement'-tag!" + << endl; + lex.pushToken(token); + } + if (!lex) + return; + lex >> token; + if (token == "overhang") { + lex.next(); + overhang = Length(lex.getString()); + } else { + lyxerr << "InsetWrap::Read:: Missing 'overhang'-tag!" + << endl; lex.pushToken(token); } if (!lex) @@ -153,7 +173,6 @@ void InsetWrapParams::read(Lexer & lex) } else { lyxerr << "InsetWrap::Read:: Missing 'width'-tag!" << endl; - // take countermeasures lex.pushToken(token); } } @@ -175,7 +194,7 @@ void InsetWrap::read(Buffer const & buf, Lexer & lex) void InsetWrap::validate(LaTeXFeatures & features) const { - features.require("floatflt"); + features.require("wrapfig"); InsetCollapsable::validate(features); } @@ -195,12 +214,18 @@ docstring const InsetWrap::editMessage() const int InsetWrap::latex(Buffer const & buf, odocstream & os, OutputParams const & runparams) const { - os << "\\begin{floating" << from_ascii(params_.type) << '}'; - if (!params_.placement.empty()) - os << '[' << from_ascii(params_.placement) << ']'; + os << "\\begin{wrap" << from_ascii(params_.type) << '}'; + // no optional argument when lines are zero + if (params_.lines != 0) + os << '[' << params_.lines << ']'; + os << '{' << from_ascii(params_.placement) << '}'; + Length over(params_.overhang); + // no optional argument when the value is zero + if (over.value() != 0) + os << '[' << from_ascii(params_.overhang.asLatexString()) << ']'; os << '{' << from_ascii(params_.width.asLatexString()) << "}%\n"; int const i = InsetText::latex(buf, os, runparams); - os << "\\end{floating" << from_ascii(params_.type) << "}%\n"; + os << "\\end{wrap" << from_ascii(params_.type) << "}%\n"; return i + 2; } @@ -227,7 +252,7 @@ int InsetWrap::docbook(Buffer const & buf, odocstream & os, } -bool InsetWrap::insetAllowed(Inset::Code code) const +bool InsetWrap::insetAllowed(InsetCode code) const { switch(code) { case FLOAT_CODE: