+bool InsetCommandParams::writeEmptyOptional(ParamInfo::const_iterator ci) const
+{
+ if (!ci->isOptional()) {
+ LASSERT(false, /**/);
+ }
+ ++ci; // we want to start with the next one
+ ParamInfo::const_iterator end = info_.end();
+ for (; ci != end; ++ci) {
+ switch (ci->type()) {
+ case ParamInfo::LYX_INTERNAL:
+ break;
+
+ case ParamInfo::LATEX_REQUIRED:
+ return false;
+
+ case ParamInfo::LATEX_OPTIONAL: {
+ std::string const & name = ci->name();
+ docstring const & data = (*this)[name];
+ if (!data.empty())
+ return true;
+ break;
+ }
+
+ } //end switch
+ }
+ return false;
+}
+
+
+docstring InsetCommandParams::prepareCommand(OutputParams const & runparams,
+ docstring const & command,
+ ParamInfo::ParamHandling handling) const
+{
+ docstring result;
+ switch (handling) {
+ case ParamInfo::HANDLING_LATEXIFY: {
+ docstring uncodable;
+ for (size_t n = 0; n < command.size(); ++n) {
+ try {
+ char_type const c = command[n];
+ docstring const latex = runparams.encoding->latexChar(c);
+ result += latex;
+ if (latex.length() > 1 && latex[latex.length() - 1] != '}') {
+ // Prevent eating of a following
+ // space or command corruption by
+ // following characters
+ result += "{}";
+ }
+ } catch (EncodingException & /* e */) {
+ LYXERR0("Uncodable character in command inset!");
+ if (runparams.dryrun) {
+ result += "<" + _("LyX Warning: ")
+ + _("uncodable character") + " '";
+ result += docstring(1, command[n]);
+ result += "'>";
+ } else
+ uncodable += command[n];
+ }
+ }
+ if (!uncodable.empty()) {
+ // issue a warning about omitted characters
+ // FIXME: should be passed to the error dialog
+ frontend::Alert::warning(_("Uncodable characters"),
+ bformat(_("The following characters that are used in the inset %1$s are not\n"
+ "representable in the current encoding and therefore have been omitted:\n%2$s."),
+ from_utf8(insetType()), uncodable));
+ }
+ break;
+ }
+ case ParamInfo::HANDLING_ESCAPE:
+ result = escape(command);
+ break;
+ case ParamInfo::HANDLING_NONE:
+ result = command;
+ break;
+ } // switch
+
+ return result;
+}
+
+
+docstring InsetCommandParams::getCommand(OutputParams const & runparams) const