Fix bugs #2645 (export BIBINPUTS) and #6634 (Better support for external files in ERT)

Other than BIBINPUTS, also BSTINPUTS and TEXFONTS are exported.
They do not replicate the setting for TEXINPUTS but are set such
that the current dir (i.e., the temp dir) and the document dir
are also searched for bibtex and fonts related files.
This commit is contained in:
Enrico Forestieri 2015-11-03 23:28:36 +01:00
parent 4db3bd4e0a
commit 76dfde36d4
4 changed files with 82 additions and 20 deletions

View File

@ -710,8 +710,12 @@ string latexEnvCmdPrefix(string const & path, string const & lpath)
string texinputs_prefix = lyxrc.texinputs_prefix.empty() ? string()
: os::latex_path_list(
replaceCurdirPath(path, lyxrc.texinputs_prefix));
string const allother_prefix = os::latex_path_list(path);
string const sep = string(1, os::path_separator(os::TEXENGINE));
string const texinputs = getEnv("TEXINPUTS");
string const bibinputs = getEnv("BIBINPUTS");
string const bstinputs = getEnv("BSTINPUTS");
string const texfonts = getEnv("TEXFONTS");
if (use_lpath) {
string const abslpath = FileName::isAbsolute(lpath)
@ -727,13 +731,28 @@ string latexEnvCmdPrefix(string const & path, string const & lpath)
if (os::shell() == os::UNIX)
return "env TEXINPUTS=\"." + sep + texinputs_prefix
+ sep + texinputs + "\" ";
+ sep + texinputs + "\" "
+ "BIBINPUTS=\"." + sep + allother_prefix
+ sep + bibinputs + "\" "
+ "BSTINPUTS=\"." + sep + allother_prefix
+ sep + bstinputs + "\" "
+ "TEXFONTS=\"." + sep + allother_prefix
+ sep + texfonts + "\" ";
else
// NOTE: the dummy blank dir is necessary to force the
// NOTE: the dummy blank dirs are necessary to force the
// QProcess parser to quote the argument (see bug 9453)
return "cmd /d /c set \"TEXINPUTS=." + sep + " "
+ sep + texinputs_prefix
+ sep + texinputs + "\" & ";
+ sep + texinputs_prefix
+ sep + texinputs + "\" & "
+ "set \"BIBINPUTS=." + sep + " "
+ sep + allother_prefix
+ sep + bibinputs + "\" & "
+ "set \"BSTINPUTS=." + sep + " "
+ sep + allother_prefix
+ sep + bstinputs + "\" & "
+ "set \"TEXFONTS=." + sep + " "
+ sep + allother_prefix
+ sep + texfonts + "\" & ";
}

View File

@ -438,11 +438,21 @@ bool autoOpenFile(string const & filename, auto_open_mode const mode,
{
string const texinputs = os::latex_path_list(
replaceCurdirPath(path, lyxrc.texinputs_prefix));
string const otherinputs = os::latex_path_list(path);
string const sep = windows_style_tex_paths_ ? ";" : ":";
string const oldval = getEnv("TEXINPUTS");
string const newval = "." + sep + texinputs + sep + oldval;
string const oldtexinputs = getEnv("TEXINPUTS");
string const newtexinputs = "." + sep + texinputs + sep + oldtexinputs;
string const oldbibinputs = getEnv("BIBINPUTS");
string const newbibinputs = "." + sep + otherinputs + sep + oldbibinputs;
string const oldbstinputs = getEnv("BSTINPUTS");
string const newbstinputs = "." + sep + otherinputs + sep + oldbstinputs;
string const oldtexfonts = getEnv("TEXFONTS");
string const newtexfonts = "." + sep + otherinputs + sep + oldtexfonts;
if (!path.empty() && !lyxrc.texinputs_prefix.empty()) {
setEnv("TEXINPUTS", newval);
setEnv("TEXINPUTS", newtexinputs);
setEnv("BIBINPUTS", newbibinputs);
setEnv("BSTINPUTS", newbstinputs);
setEnv("TEXFONTS", newtexfonts);
cygwin_internal(CW_SYNC_WINENV);
}
@ -453,7 +463,10 @@ bool autoOpenFile(string const & filename, auto_open_mode const mode,
win_path.c_str(), NULL, NULL, 1)) > 32;
if (!path.empty() && !lyxrc.texinputs_prefix.empty()) {
setEnv("TEXINPUTS", oldval);
setEnv("TEXINPUTS", oldtexinputs);
setEnv("BIBINPUTS", oldbibinputs);
setEnv("BSTINPUTS", oldbstinputs);
setEnv("TEXFONTS", oldtexfonts);
cygwin_internal(CW_SYNC_WINENV);
}
return success;

View File

@ -298,14 +298,29 @@ bool autoOpenFile(string const & filename, auto_open_mode const mode,
string const texinputs = os::latex_path_list(
replaceCurdirPath(path, lyxrc.texinputs_prefix));
string const oldval = getEnv("TEXINPUTS");
string const newval = ".:" + texinputs + ":" + oldval;
if (!path.empty() && !lyxrc.texinputs_prefix.empty())
setEnv("TEXINPUTS", newval);
string const otherinputs = os::latex_path_list(path);
string const oldtexinputs = getEnv("TEXINPUTS");
string const newtexinputs = ".:" + texinputs + ":" + oldtexinputs;
string const oldbibinputs = getEnv("BIBINPUTS");
string const newbibinputs = ".:" + otherinputs + ":" + oldbibinputs;
string const oldbstinputs = getEnv("BSTINPUTS");
string const newbstinputs = ".:" + otherinputs + ":" + oldbstinputs;
string const oldtexfonts = getEnv("TEXFONTS");
string const newtexfonts = ".:" + otherinputs + ":" + oldtexfonts;
if (!path.empty() && !lyxrc.texinputs_prefix.empty()) {
setEnv("TEXINPUTS", newtexinputs);
setEnv("BIBINPUTS", newbibinputs);
setEnv("BSTINPUTS", newbstinputs);
setEnv("TEXFONTS", newtexfonts);
}
status = LSOpenFromURLSpec (&launchUrlSpec, NULL);
CFRelease(launchItems);
if (!path.empty() && !lyxrc.texinputs_prefix.empty())
setEnv("TEXINPUTS", oldval);
if (!path.empty() && !lyxrc.texinputs_prefix.empty()) {
setEnv("TEXINPUTS", oldtexinputs);
setEnv("BIBINPUTS", oldbibinputs);
setEnv("BSTINPUTS", oldbstinputs);
setEnv("TEXFONTS", oldtexfonts);
}
return status == 0;
#else
// silence compiler warnings

View File

@ -544,19 +544,34 @@ bool autoOpenFile(string const & filename, auto_open_mode const mode,
{
string const texinputs = os::latex_path_list(
replaceCurdirPath(path, lyxrc.texinputs_prefix));
string const otherinputs = os::latex_path_list(path);
string const sep = windows_style_tex_paths_ ? ";" : ":";
string const oldval = getEnv("TEXINPUTS");
string const newval = "." + sep + texinputs + sep + oldval;
if (!path.empty() && !lyxrc.texinputs_prefix.empty())
setEnv("TEXINPUTS", newval);
string const oldtexinputs = getEnv("TEXINPUTS");
string const newtexinputs = "." + sep + texinputs + sep + oldtexinputs;
string const oldbibinputs = getEnv("BIBINPUTS");
string const newbibinputs = "." + sep + otherinputs + sep + oldbibinputs;
string const oldbstinputs = getEnv("BSTINPUTS");
string const newbstinputs = "." + sep + otherinputs + sep + oldbstinputs;
string const oldtexfonts = getEnv("TEXFONTS");
string const newtexfonts = "." + sep + otherinputs + sep + oldtexfonts;
if (!path.empty() && !lyxrc.texinputs_prefix.empty()) {
setEnv("TEXINPUTS", newtexinputs);
setEnv("BIBINPUTS", newbibinputs);
setEnv("BSTINPUTS", newbstinputs);
setEnv("TEXFONTS", newtexfonts);
}
// reference: http://msdn.microsoft.com/en-us/library/bb762153.aspx
char const * action = (mode == VIEW) ? "open" : "edit";
bool success = reinterpret_cast<int>(ShellExecute(NULL, action,
to_local8bit(from_utf8(filename)).c_str(), NULL, NULL, 1)) > 32;
if (!path.empty() && !lyxrc.texinputs_prefix.empty())
setEnv("TEXINPUTS", oldval);
if (!path.empty() && !lyxrc.texinputs_prefix.empty()) {
setEnv("TEXINPUTS", oldtexinputs);
setEnv("BIBINPUTS", oldbibinputs);
setEnv("BSTINPUTS", oldbstinputs);
setEnv("TEXFONTS", oldtexfonts);
}
return success;
}