X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetCommand.cpp;h=7693d08fd7c70010f323eddd24956697932d09fd;hb=71b8019d56142397994e0ef2d4244ada51f199d5;hp=319ab8a60b111a31352a6ee271d1e6365e073d24;hpb=84cca2dd944cf11f8c69532dff91e9d91c8b2ab3;p=lyx.git diff --git a/src/insets/InsetCommand.cpp b/src/insets/InsetCommand.cpp index 319ab8a60b..7693d08fd7 100644 --- a/src/insets/InsetCommand.cpp +++ b/src/insets/InsetCommand.cpp @@ -14,6 +14,8 @@ #include "InsetCommand.h" #include "Buffer.h" +#include "BufferEncodings.h" +#include "BufferParams.h" #include "BufferView.h" #include "Cursor.h" #include "DispatchResult.h" @@ -21,6 +23,7 @@ #include "FuncStatus.h" #include "Lexer.h" #include "MetricsInfo.h" +#include "texstream.h" #include "insets/InsetBox.h" #include "insets/InsetBranch.h" @@ -41,12 +44,14 @@ #include "support/debug.h" #include "support/gettext.h" +#include "support/lstrings.h" #include "frontends/Application.h" #include using namespace std; +using namespace lyx::support; namespace lyx { @@ -65,6 +70,20 @@ InsetCommand::InsetCommand(InsetCommand const & rhs) {} +InsetCommand & InsetCommand::operator=(InsetCommand const & rhs) +{ + if (&rhs == this) + return *this; + + Inset::operator=(rhs); + p_ = rhs.p_; + mouse_hover_.clear(); + button_ = RenderButton(); + + return *this; +} + + InsetCommand::~InsetCommand() { if (p_.code() != NO_CODE) @@ -80,7 +99,8 @@ InsetCommand::~InsetCommand() void InsetCommand::metrics(MetricsInfo & mi, Dimension & dim) const { - button_.update(screenLabel(), editable() || clickable(0, 0)); + button_.update(screenLabel(), editable() || clickable(*mi.base.bv, 0, 0), + inheritFont()); button_.metrics(mi, dim); } @@ -122,7 +142,11 @@ void InsetCommand::setParams(InsetCommandParams const & p) void InsetCommand::latex(otexstream & os, OutputParams const & runparams_in) const { OutputParams runparams = runparams_in; - os << getCommand(runparams); + docstring command = getCommand(runparams); + if (buffer().params().use_minted + && prefixIs(command, from_ascii("\\lstlistoflistings"))) + command.erase(1, 3); + os << command; } @@ -142,6 +166,26 @@ int InsetCommand::docbook(odocstream &, OutputParams const &) const } +void InsetCommand::validate(LaTeXFeatures & features) const +{ + if (params().info().hasParam("literal") + && params()["literal"] == "true") + return; + + ParamInfo::const_iterator it = params().info().begin(); + ParamInfo::const_iterator end = params().info().end(); + for (; it != end; ++it) { + if (it->handling() == ParamInfo::HANDLING_LATEXIFY) { + docstring const text = params()[it->name()]; + // Validate the contents (if we LaTeXify, specific + // macros might require packages) + for (pos_type i = 0; i < int(text.size()) ; ++i) + BufferEncodings::validate(text[i], features); + } + } +} + + void InsetCommand::doDispatch(Cursor & cur, FuncRequest & cmd) { switch (cmd.action()) { @@ -244,7 +288,7 @@ bool InsetCommand::string2params(string const & data, lex.setContext("InsetCommand::string2params"); lex >> name.c_str(); // check for name lex >> "CommandInset"; - params.read(lex, 0); + params.read(lex); return true; } @@ -305,7 +349,7 @@ bool decodeInsetParam(string const & name, string & data, break; } case ERT_CODE: { - data = InsetERT::params2string(InsetCollapsable::Open); + data = InsetERT::params2string(InsetCollapsible::Open); break; } case EXTERNAL_CODE: {