X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FConverter.cpp;h=2f22030495139195f2d1c20fb05755cf6663cc33;hb=a48581f48c93b3981ffd3e058f57e3ed95b53641;hp=14b18ddca063e1d0e5a644fdd0b3f7fec4d95953;hpb=c636ded2b979f6c019bf5c26489cbc79719061cd;p=lyx.git
diff --git a/src/Converter.cpp b/src/Converter.cpp
index 14b18ddca0..2f22030495 100644
--- a/src/Converter.cpp
+++ b/src/Converter.cpp
@@ -134,7 +134,7 @@ void Converter::readFlags()
need_auth_ = true;
}
if (!result_dir_.empty() && result_file_.empty())
- result_file_ = "index." + formats.extension(to_);
+ result_file_ = "index." + theFormats().extension(to_);
//if (!contains(command, token_from))
// latex = true;
}
@@ -168,8 +168,8 @@ int Converters::getNumber(string const & from, string const & to) const
void Converters::add(string const & from, string const & to,
string const & command, string const & flags)
{
- formats.add(from);
- formats.add(to);
+ theFormats().add(from);
+ theFormats().add(to);
ConverterList::iterator it = find_if(converterlist_.begin(),
converterlist_.end(),
ConverterEqual(from , to));
@@ -283,29 +283,40 @@ bool Converters::checkAuth(Converter const & conv, string const & doc_fname)
{
if (!conv.need_auth())
return true;
- const docstring security_warning = bformat(_("Requested operation needs use of converter '%1$s' from %2$s to %3$s, "
- "which is tagged with the 'needauth' option. This is an external program normally acting as a picture/format "
- "converter, but which is known to be able to execute arbitrary actions on the system on behalf of the user, "
- "including dangerous ones such as deleting files, if instructed to do so by a maliciously crafted .lyx document."),
- from_utf8(conv.command()), from_utf8(conv.from()), from_utf8(conv.to()));
+ const docstring security_warning = bformat(
+ _("
The requested operation requires the use of a converter from "
+ "%2$s to %3$s:
"
+ "%1$s
"
+ "This external program can execute arbitrary commands on your "
+ "system, including dangerous ones, if instructed to do so by a "
+ "maliciously crafted .lyx document.
"),
+ from_utf8(conv.command()), from_utf8(conv.from()),
+ from_utf8(conv.to()));
if (lyxrc.use_converter_needauth_forbidden) {
- frontend::Alert::warning(_("Launch of external converter is forbidden"), security_warning + _("\n\n"
- "This is forbidden by default. In order to unlock execution of these converters, please, go to\n"
- "Preferences->File Handling->Converters and uncheck Security->Forbid needauth converters."), true);
+ frontend::Alert::error(
+ _("An external converter is disabled for security reasons"),
+ security_warning + _(
+ "Your current preference settings forbid its execution.
"
+ "(To change this setting, go to Preferences ▹ File "
+ "Handling ▹ Converters and uncheck Security ▹ "
+ "Forbid needauth converters.)"), false);
return false;
}
if (!lyxrc.use_converter_needauth)
return true;
- static const docstring security_title = _("Launch of external converter needs user authorization");
+ static const docstring security_title =
+ _("An external converter requires your authorization");
int choice;
- const docstring security_warning2 = security_warning + _("\n\nWould you like to run the converter?\n\n"
- "ANSWER RUN ONLY IF YOU TRUST THE ORIGIN/SENDER OF THE LYX DOCUMENT!");
+ const docstring security_warning2 = security_warning +
+ _("
Would you like to run this converter?
"
+ "Only run if you trust the origin/sender of the LyX "
+ "document!
");
if (!doc_fname.empty()) {
LYXERR(Debug::FILES, "looking up: " << doc_fname);
std::set & auth_files = theSession().authFiles().authFiles();
if (auth_files.find(doc_fname) == auth_files.end()) {
choice = frontend::Alert::prompt(security_title, security_warning2,
- 0, 0, _("Do &NOT run"), _("&Run"), _("&Always run for this document"));
+ 0, 0, _("Do ¬ run"), _("&Run"), _("&Always run for this document"));
if (choice == 2)
auth_files.insert(doc_fname);
} else {
@@ -313,7 +324,7 @@ bool Converters::checkAuth(Converter const & conv, string const & doc_fname)
}
} else {
choice = frontend::Alert::prompt(security_title, security_warning2,
- 0, 0, _("Do &NOT run"), _("&Run"));
+ 0, 0, _("Do ¬ run"), _("&Run"));
}
return choice != 0;
}
@@ -339,8 +350,8 @@ bool Converters::convert(Buffer const * buffer,
// default one from ImageMagic.
string const from_ext = from_format.empty() ?
getExtension(from_file.absFileName()) :
- formats.extension(from_format);
- string const to_ext = formats.extension(to_format);
+ theFormats().extension(from_format);
+ string const to_ext = theFormats().extension(to_format);
string const command =
os::python() + ' ' +
quoteName(libFileSearch("scripts", "convertDefault.py").toFilesystemEncoding()) +
@@ -387,11 +398,13 @@ bool Converters::convert(Buffer const * buffer,
buffer->params().bufferFormat() == "latex"
&& buffer->params().encoding().package() == Encoding::japanese;
runparams.use_indices = buffer->params().use_indices;
- runparams.bibtex_command = (buffer->params().bibtex_command == "default") ?
- string() : buffer->params().bibtex_command;
+ runparams.bibtex_command = buffer->params().bibtexCommand();
runparams.index_command = (buffer->params().index_command == "default") ?
string() : buffer->params().index_command;
runparams.document_language = buffer->params().language->babel();
+ runparams.only_childbibs = !buffer->params().useBiblatex()
+ && !buffer->params().useBibtopic()
+ && buffer->params().multibib == "child";
}
// Some converters (e.g. lilypond) can only output files to the
@@ -446,7 +459,7 @@ bool Converters::convert(Buffer const * buffer,
"tmpfile.out"));
}
- if (!checkAuth(conv, buffer->absFileName()))
+ if (!checkAuth(conv, buffer ? buffer->absFileName() : string()))
return false;
if (conv.latex()) {
@@ -748,15 +761,15 @@ bool Converters::runLaTeX(Buffer const & buffer, string const & command,
void Converters::buildGraph()
{
// clear graph's data structures
- G_.init(formats.size());
+ G_.init(theFormats().size());
// each of the converters knows how to convert one format to another
// so, for each of them, we create an arrow on the graph, going from
// the one to the other
ConverterList::iterator it = converterlist_.begin();
ConverterList::iterator const end = converterlist_.end();
for (; it != end ; ++it) {
- int const from = formats.getNumber(it->from());
- int const to = formats.getNumber(it->to());
+ int const from = theFormats().getNumber(it->from());
+ int const to = theFormats().getNumber(it->to());
LASSERT(from >= 0, continue);
LASSERT(to >= 0, continue);
G_.addEdge(from, to);
@@ -772,7 +785,7 @@ FormatList const Converters::intToFormat(vector const & input)
vector::const_iterator const end = input.end();
FormatList::iterator rit = result.begin();
for ( ; it != end; ++it, ++rit) {
- *rit = &formats.get(*it);
+ *rit = &theFormats().get(*it);
}
return result;
}
@@ -782,7 +795,7 @@ FormatList const Converters::getReachableTo(string const & target,
bool const clear_visited)
{
vector const & reachablesto =
- G_.getReachableTo(formats.getNumber(target), clear_visited);
+ G_.getReachableTo(theFormats().getNumber(target), clear_visited);
return intToFormat(reachablesto);
}
@@ -797,10 +810,10 @@ FormatList const Converters::getReachable(string const & from,
set::const_iterator sit = excludes.begin();
set::const_iterator const end = excludes.end();
for (; sit != end; ++sit)
- excluded_numbers.insert(formats.getNumber(*sit));
+ excluded_numbers.insert(theFormats().getNumber(*sit));
vector const & reachables =
- G_.getReachable(formats.getNumber(from),
+ G_.getReachable(theFormats().getNumber(from),
only_viewable,
clear_visited,
excluded_numbers);
@@ -811,15 +824,15 @@ FormatList const Converters::getReachable(string const & from,
bool Converters::isReachable(string const & from, string const & to)
{
- return G_.isReachable(formats.getNumber(from),
- formats.getNumber(to));
+ return G_.isReachable(theFormats().getNumber(from),
+ theFormats().getNumber(to));
}
Graph::EdgePath Converters::getPath(string const & from, string const & to)
{
- return G_.getPath(formats.getNumber(from),
- formats.getNumber(to));
+ return G_.getPath(theFormats().getNumber(from),
+ theFormats().getNumber(to));
}