#include "support/qstring_helpers.h"
#include <QDir>
-#include <QImage>
#include <QTemporaryFile>
#include "support/lassert.h"
}
-int iconScaleFactor(FileName const & image)
-{
- int imgsize = QImage(toqstr(image.absFileName())).height();
- if (imgsize <= 0)
- return 100;
-
- // default icon size
- int iconsize = 20;
-
- string dir = "images";
- FileName const fn = imageLibFileSearch(dir, "iconsize.png");
- if (!fn.empty())
- iconsize = QImage(toqstr(fn.absFileName())).height();
-
- return (100 * iconsize + imgsize / 2)/imgsize;
-}
-
-
string const commandPrep(string const & command_in)
{
static string const token_scriptpath = "$$s/";
// Return a command prefix for setting the environment of the TeX engine.
-string latexEnvCmdPrefix(string const & path)
+string latexEnvCmdPrefix(string const & path, string const & lpath)
{
- if (path.empty() || lyxrc.texinputs_prefix.empty())
+ bool use_lpath = !(lpath.empty() || lpath == "." || lpath == "./");
+
+ if (path.empty() || (lyxrc.texinputs_prefix.empty() && !use_lpath))
return string();
- string const texinputs_prefix = os::latex_path_list(
+ 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)
+ ? os::latex_path(lpath)
+ : os::latex_path(FileName(path + "/" + lpath).realPath());
+ if (texinputs_prefix.empty())
+ texinputs_prefix = abslpath;
+ else if (suffixIs(texinputs_prefix, sep))
+ texinputs_prefix.append(abslpath + sep);
+ else
+ texinputs_prefix.append(sep + abslpath);
+ }
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
-#ifndef USE_QPROCESS
- return "cmd /d /c set \"TEXINPUTS=."
- + sep + texinputs_prefix
- + sep + texinputs + "\"&";
-#else
- return "cmd /d /c set \"\"\"TEXINPUTS=."
- + sep + texinputs_prefix
- + sep + texinputs + "\"\"\"&";
-#endif
+ // 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 + "\" & "
+ + "set \"BIBINPUTS=." + sep + " "
+ + sep + allother_prefix
+ + sep + bibinputs + "\" & "
+ + "set \"BSTINPUTS=." + sep + " "
+ + sep + allother_prefix
+ + sep + bstinputs + "\" & "
+ + "set \"TEXFONTS=." + sep + " "
+ + sep + allother_prefix
+ + sep + texfonts + "\" & ";
}
if (dstr.empty()) {
// Yes, filename itself is too long.
// Pick the start and the end of the filename.
- dstr = from_utf8(onlyFileName(path));
- docstring const head = dstr.substr(0, threshold / 2 - 3);
-
- docstring::size_type len = dstr.length();
- docstring const tail =
- dstr.substr(len - threshold / 2 - 2, len - 1);
- dstr = head + from_ascii("...") + tail;
+ docstring fstr = from_utf8(onlyFileName(path));
+ dstr = fstr;
+ if (support::truncateWithEllipsis(dstr, threshold / 2))
+ dstr += fstr.substr(fstr.length() - threshold / 2 - 2,
+ docstring::npos);
}
return from_utf8(os::external_path(prefix + to_utf8(dstr)));
// variants ipstream, opstream
#if defined (_WIN32)
- int fno;
STARTUPINFO startup;
PROCESS_INFORMATION process;
SECURITY_ATTRIBUTES security;
0, 0, &startup, &process)) {
CloseHandle(process.hThread);
- fno = _open_osfhandle((long)in, _O_RDONLY);
+ int fno = _open_osfhandle((long)in, _O_RDONLY);
CloseHandle(out);
inf = _fdopen(fno, "r");
}
int fd = -1;
#if defined(HAVE_LOCKF)
fd = open(lock_file, O_CREAT|O_APPEND|O_SYNC|O_RDWR, 0666);
+ if (fd == -1)
+ return -1;
if (lockf(fd, F_LOCK, 0) != 0) {
close(fd);
- return(-1);
+ return -1;
}
#endif
- return(fd);
+ return fd;
}
+
void fileUnlock(int fd, const char * /* lock_file*/)
{
#if defined(HAVE_LOCKF)