to_utf8(makeRelPath(from_utf8(outfile.absFileName()), from_utf8(path)));
string command = conv.command();
+ BufferParams const & bparams = buffer ? buffer->params() : defaultBufferParams();
command = subst(command, token_from, quoteName(infile2));
command = subst(command, token_base, quoteName(from_base));
command = subst(command, token_to, quoteName(outfile2));
command = subst(command, token_path, quoteName(onlyPath(infile.absFileName())));
command = subst(command, token_orig_path, quoteName(onlyPath(orig_from.absFileName())));
command = subst(command, token_orig_from, quoteName(onlyFileName(orig_from.absFileName())));
- command = subst(command, token_textclass,
- buffer ? quoteName(buffer->params().documentClass().name())
- : string());
- command = subst(command, token_modules,
- buffer ? quoteName(buffer->params().getModules().asString())
- : string());
- command = subst(command, token_encoding,
- buffer ? quoteName(buffer->params().encoding().iconvName())
- : string());
+ command = subst(command, token_textclass, quoteName(bparams.documentClass().name()));
+ string modules = bparams.getModules().asString();
+ // FIXME: remove when SystemCall uses QProcess with the list API.
+ // Currently the QProcess parser is not able to encode an
+ // empty argument as ""; work around this by passing a
+ // single comma, that will be interpreted as a list of two
+ // empty module names.
+ if (modules.empty())
+ modules = ",";
+ command = subst(command, token_modules, quoteName(modules));
+ command = subst(command, token_encoding, quoteName(bparams.encoding().iconvName()));
command = subst(command, token_python, os::python());
if (!conv.parselog().empty())
* The cleanest solution would be to have parsecmd() produce a
* QStringList for arguments, instead of transforming the string
* into something that the QProcess splitter accepts.
+ *
+ * Another reason for doing that is that the Qt parser ignores
+ * empty "" arguments, which are needed in some instances (see
+ * e.g. the work around for modules in Converter:convert. See
+ * QTBUG-80640 for a discussion.
*/
QStringList arguments = QProcess::splitCommand(toqstr(latexEnvCmdPrefix(path, lpath)) + cmd_);
QString command = (arguments.empty()) ? QString() : arguments.first();
int parse_module(string const & arg, string const &)
{
- if (arg.empty())
- error_message("Missing modules string after -m switch");
split(arg, preloaded_modules, ',');
return 1;
}
// Load preloaded modules.
// This needs to be done after the preamble is parsed, since the text
- // class may not be known before. It neds to be done before parsing
+ // class may not be known before. It needs to be done before parsing
// body, since otherwise the commands/environments provided by the
// modules would be parsed as ERT.
+ // Empty module names are silently skipped.
for (auto const & module : preloaded_modules) {
- if (!addModule(module)) {
+ if (!module.empty() && !addModule(module)) {
cerr << "Error: Could not load module \""
<< module << "\"." << endl;
return false;