#include "InsetCommand.h"
#include "Buffer.h"
+#include "BufferEncodings.h"
+#include "BufferParams.h"
#include "BufferView.h"
#include "Cursor.h"
#include "DispatchResult.h"
#include "FuncStatus.h"
#include "Lexer.h"
#include "MetricsInfo.h"
+#include "texstream.h"
#include "insets/InsetBox.h"
#include "insets/InsetBranch.h"
#include "support/debug.h"
#include "support/gettext.h"
+#include "support/lstrings.h"
#include "frontends/Application.h"
#include <sstream>
using namespace std;
+using namespace lyx::support;
namespace lyx {
-// FIXME Would it now be possible to use the InsetCode in
+// FIXME Would it now be possible to use the InsetCode in
// place of the mailer name and recover that information?
InsetCommand::InsetCommand(Buffer * buf, InsetCommandParams const & p)
: Inset(buf), p_(p)
{}
+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)
void InsetCommand::metrics(MetricsInfo & mi, Dimension & dim) const
{
- button_.update(screenLabel(), editable() || hasSettings());
+ button_.update(screenLabel(), editable() || clickable(*mi.base.bv, 0, 0),
+ inheritFont());
button_.metrics(mi, dim);
}
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;
}
-int InsetCommand::plaintext(odocstream & os, OutputParams const &) const
+int InsetCommand::plaintext(odocstringstream & os,
+ OutputParams const &, size_t) const
{
docstring const str = "[" + buffer().B_("LaTeX Command: ")
+ from_utf8(getCmdName()) + "]";
}
+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()) {
case LFUN_ERT_INSERT:
status.setEnabled(false);
return true;
-
+
// we handle these
case LFUN_INSET_MODIFY:
if (cmd.getArg(0) == "changetype") {
string const newtype = cmd.getArg(1);
status.setEnabled(p_.isCompatibleCommand(p_.code(), newtype));
status.setOnOff(newtype == p_.getCmdName());
- }
+ }
status.setEnabled(true);
return true;
-
+
case LFUN_INSET_DIALOG_UPDATE:
status.setEnabled(true);
return true;
-
+
default:
return Inset::getStatus(cur, cmd, status);
}
}
-docstring InsetCommand::contextMenuName() const
+string InsetCommand::contextMenuName() const
{
- return from_ascii("context-") + from_ascii(insetName(p_.code()));
+ return "context-" + insetName(p_.code());
}
break;
}
case ERT_CODE: {
- data = InsetERT::params2string(InsetCollapsable::Open);
+ data = InsetERT::params2string(InsetCollapsible::Open);
break;
}
case EXTERNAL_CODE: {
data = InsetGraphics::params2string(p, buffer);
break;
}
+ case MATH_SPACE_CODE: {
+ InsetSpaceParams p(true);
+ data = InsetSpace::params2string(p);
+ break;
+ }
case NOTE_CODE: {
InsetNoteParams p;
data = InsetNote::params2string(p);