X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FConverter.cpp;h=2f22030495139195f2d1c20fb05755cf6663cc33;hb=2a0e4c199c4f18d80ec5a2ab452f3cf18eafc56c;hp=f553858ace0324a40867eb0f9dd11107b5183543;hpb=830eb234bebea1f58170a38e17610c2d57e63719;p=lyx.git
diff --git a/src/Converter.cpp b/src/Converter.cpp
index f553858ace..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,41 +283,48 @@ bool Converters::checkAuth(Converter const & conv, string const & doc_fname)
{
if (!conv.need_auth())
return true;
+ 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(
- _("Potentially harmful external converters disabled"),
- _("Requested operation needs use of a potentially harmful external converter program, "
- "which is forbidden by default.\nThese converters are tagged by the 'needauth' option. "
- "In order to unlock execution of these converters,\nplease, go to "
- "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 char security_warning[] = "LyX is about to run converter '%1$s' which is launching an external program "
- "that normally acts as a picture/format converter. However, this external program 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.\n\nWould you like to run the converter?\n\n"
- "ANSWER RUN ONLY IF YOU TRUST THE ORIGIN/SENDER OF THE LYX DOCUMENT!";
+ static const docstring security_title =
+ _("An external converter requires your authorization");
int choice;
+ 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,
- bformat(_(security_warning), from_utf8(conv.command())),
- 0, 0, _("Do &NOT run"), _("&Run"), _("&Always run for this document"));
+ choice = frontend::Alert::prompt(security_title, security_warning2,
+ 0, 0, _("Do ¬ run"), _("&Run"), _("&Always run for this document"));
if (choice == 2)
auth_files.insert(doc_fname);
} else {
choice = 1;
}
} else {
- choice = frontend::Alert::prompt(security_title,
- bformat(_(security_warning), from_utf8(conv.command())),
- 0, 0, _("Do &NOT run"), _("&Run"));
+ choice = frontend::Alert::prompt(security_title, security_warning2,
+ 0, 0, _("Do ¬ run"), _("&Run"));
}
return choice != 0;
}
@@ -343,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()) +
@@ -391,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
@@ -450,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()) {
@@ -752,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);
@@ -776,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;
}
@@ -786,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);
}
@@ -801,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);
@@ -815,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));
}