X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetInclude.cpp;h=fd673327d3ef6412e971533721a7b85c717c1eff;hb=2777b51c587cb061b3214c670a3cc4b357528e6c;hp=87488f0e6af8ea8b3e5044ecdea4fcbfcfc824a0;hpb=8b9d1b860187338e06e10261b391886d50423239;p=lyx.git diff --git a/src/insets/InsetInclude.cpp b/src/insets/InsetInclude.cpp index 87488f0e6a..fd673327d3 100644 --- a/src/insets/InsetInclude.cpp +++ b/src/insets/InsetInclude.cpp @@ -224,6 +224,7 @@ ParamInfo const & InsetInclude::findInfo(string const & /* cmdName */) if (param_info_.empty()) { param_info_.add("filename", ParamInfo::LATEX_REQUIRED); param_info_.add("lstparams", ParamInfo::LATEX_OPTIONAL); + param_info_.add("literal", ParamInfo::LYX_INTERNAL); } return param_info_; } @@ -611,43 +612,50 @@ void InsetInclude::latex(otexstream & os, OutputParams const & runparams) const string const opt = to_utf8(params()["lstparams"]); // opt is set in QInclude dialog and should have passed validation. InsetListingsParams lstparams(opt); - string parameters = lstparams.params(); - string language; - string caption; - string label; - string placement; + docstring parameters = from_utf8(lstparams.params()); + docstring language; + docstring caption; + docstring label; + docstring placement; bool isfloat = lstparams.isFloat(); - if (use_minted) { - // Get float placement, language, caption, and - // label, then remove the relative options. - vector opts = - getVectorFromString(parameters, ",", false); - for (size_t i = 0; i < opts.size(); ++i) { - if (prefixIs(opts[i], "float")) { - if (prefixIs(opts[i], "float=")) - placement = opts[i].substr(6); - opts.erase(opts.begin() + i--); - } else if (prefixIs(opts[i], "language=")) { - language = opts[i].substr(9); - opts.erase(opts.begin() + i--); - } else if (prefixIs(opts[i], "caption=")) { - caption = opts[i].substr(8); - opts.erase(opts.begin() + i--); - } else if (prefixIs(opts[i], "label=")) { - label = opts[i].substr(6); - opts.erase(opts.begin() + i--); - } + // Get float placement, language, caption, and + // label, then remove the relative options if minted. + vector opts = + getVectorFromString(parameters, from_ascii(","), false); + vector latexed_opts; + for (size_t i = 0; i < opts.size(); ++i) { + if (use_minted && prefixIs(opts[i], from_ascii("float"))) { + if (prefixIs(opts[i], from_ascii("float="))) + placement = opts[i].substr(6); + opts.erase(opts.begin() + i--); + } else if (use_minted && prefixIs(opts[i], from_ascii("language="))) { + language = opts[i].substr(9); + opts.erase(opts.begin() + i--); + } else if (prefixIs(opts[i], from_ascii("caption="))) { + caption = params().prepareCommand(runparams, trim(opts[i].substr(8), "{}"), + ParamInfo::HANDLING_LATEXIFY); + opts.erase(opts.begin() + i--); + if (!use_minted) + latexed_opts.push_back(from_ascii("caption=") + caption); + } else if (prefixIs(opts[i], from_ascii("label="))) { + label = params().prepareCommand(runparams, trim(opts[i].substr(6), "{}"), + ParamInfo::HANDLING_ESCAPE); + opts.erase(opts.begin() + i--); + if (!use_minted) + latexed_opts.push_back(from_ascii("label={") + label + "}"); } - if (!label.empty()) { + if (use_minted && !label.empty()) { if (isfloat || !caption.empty()) label = trim(label, "{}"); else - opts.push_back("label=" + label); + opts.push_back(from_ascii("label=") + label); } - parameters = getStringFromVector(opts, ","); } + if (!latexed_opts.empty()) + opts.insert(opts.end(), latexed_opts.begin(), latexed_opts.end()); + parameters = getStringFromVector(opts, from_ascii(",")); if (language.empty()) - language = "TeX"; + language = from_ascii("TeX"); if (use_minted && isfloat) { os << breakln << "\\begin{listing}"; if (!placement.empty()) @@ -780,8 +788,16 @@ void InsetInclude::latex(otexstream & os, OutputParams const & runparams) const runparams.par_begin = 0; runparams.par_end = tmp->paragraphs().size(); runparams.is_child = true; - if (!tmp->makeLaTeXFile(tmpwritefile, masterFileName(buffer()). - onlyPath().absFileName(), runparams, Buffer::OnlyBody)) { + Buffer::ExportStatus retval = + tmp->makeLaTeXFile(tmpwritefile, masterFileName(buffer()). + onlyPath().absFileName(), runparams, Buffer::OnlyBody); + if (retval == Buffer::ExportKilled && buffer().isClone() && + buffer().isExporting()) { + // We really shouldn't get here, I don't think. + LYXERR0("No conversion exception?"); + throw ConversionException(); + } + else if (retval != Buffer::ExportSuccess) { if (!runparams.silent) { docstring msg = bformat(_("Included file `%1$s' " "was not exported correctly.\n " @@ -790,10 +806,8 @@ void InsetInclude::latex(otexstream & os, OutputParams const & runparams) const ErrorList const & el = tmp->errorList("Export"); if (!el.empty()) msg = bformat(from_ascii("%1$s\n\n%2$s\n\n%3$s"), - msg, el.begin()->error, - el.begin()->description); - throw ExceptionMessage(ErrorException, _("Error: "), - msg); + msg, el.begin()->error, el.begin()->description); + throw ExceptionMessage(ErrorException, _("Error: "), msg); } } runparams.encoding = oldEnc; @@ -803,22 +817,23 @@ void InsetInclude::latex(otexstream & os, OutputParams const & runparams) const // If needed, use converters to produce a latex file from the child if (tmpwritefile != writefile) { ErrorList el; - bool const success = + Converters::RetVal const retval = theConverters().convert(tmp, tmpwritefile, writefile, - included_file, - inc_format, tex_format, el); - - if (!success && !runparams.silent) { + included_file, inc_format, tex_format, el); + if (retval == Converters::KILLED && buffer().isClone() && + buffer().isExporting()) { + // We really shouldn't get here, I don't think. + LYXERR0("No conversion exception?"); + throw ConversionException(); + } else if (retval != Converters::SUCCESS && !runparams.silent) { docstring msg = bformat(_("Included file `%1$s' " "was not exported correctly.\n " "LaTeX export is probably incomplete."), included_file.displayName()); if (!el.empty()) msg = bformat(from_ascii("%1$s\n\n%2$s\n\n%3$s"), - msg, el.begin()->error, - el.begin()->description); - throw ExceptionMessage(ErrorException, _("Error: "), - msg); + msg, el.begin()->error, el.begin()->description); + throw ExceptionMessage(ErrorException, _("Error: "), msg); } } } else {