X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Ffiletools.cpp;h=12457cb3ae328a4c2c679887b4313d1949356286;hb=bf56e2c8e1afa857cd5e313c19948040e41b8227;hp=db07d56e61c7e736b5628e4679a4ffb0cc340b1c;hpb=b6aed54c45cf4a479cfd11e3e6851194f5a05947;p=lyx.git diff --git a/src/support/filetools.cpp b/src/support/filetools.cpp index db07d56e61..12457cb3ae 100644 --- a/src/support/filetools.cpp +++ b/src/support/filetools.cpp @@ -21,6 +21,7 @@ #include +#include "LyX.h" #include "LyXRC.h" #include "support/filetools.h" @@ -51,6 +52,7 @@ #endif #include +#include #include #include @@ -643,35 +645,6 @@ string const onlyFileName(string const & fname) } -// Create absolute path. If impossible, don't do anything -// Supports ./ and ~/. Later we can add support for ~logname/. (Asger) -string const expandPath(string const & path) -{ - // checks for already absolute path - string rTemp = replaceEnvironmentPath(path); - if (FileName::isAbsolute(rTemp)) - return rTemp; - - string temp; - string const copy = rTemp; - - // Split by next / - rTemp = split(rTemp, temp, '/'); - - if (temp == ".") - return FileName::getcwd().absFileName() + '/' + rTemp; - - if (temp == "~") - return Package::get_home_dir().absFileName() + '/' + rTemp; - - if (temp == "..") - return makeAbsPath(copy).absFileName(); - - // Don't know how to handle this - return copy; -} - - // Search the string for ${VAR} and $VAR and replace VAR using getenv. string const replaceEnvironmentPath(string const & path) { @@ -710,8 +683,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 +704,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 + "\" & "; } @@ -942,13 +934,11 @@ docstring const makeDisplayPath(string const & path, unsigned int threshold) 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))); @@ -1006,6 +996,11 @@ cmd_ret const runCommand(string const & cmd) // pstream (process stream), with the // variants ipstream, opstream + if (verbose) + lyxerr << "\nRunning: " << cmd << endl; + else + LYXERR(Debug::INFO,"Running: " << cmd); + #if defined (_WIN32) STARTUPINFO startup; PROCESS_INFORMATION process; @@ -1048,7 +1043,7 @@ cmd_ret const runCommand(string const & cmd) 0, 0, &startup, &process)) { CloseHandle(process.hThread); - int fno = _open_osfhandle((long)in, _O_RDONLY); + int fno = _open_osfhandle((intptr_t)in, _O_RDONLY); CloseHandle(out); inf = _fdopen(fno, "r"); } @@ -1076,10 +1071,14 @@ cmd_ret const runCommand(string const & cmd) #if defined (_WIN32) WaitForSingleObject(process.hProcess, INFINITE); + DWORD pret; + if (!GetExitCodeProcess(process.hProcess, &pret)) + pret = -1; if (!infile.empty()) CloseHandle(startup.hStdInput); CloseHandle(process.hProcess); - int const pret = fclose(inf); + if (fclose(inf) != 0) + pret = -1; #elif defined (HAVE_PCLOSE) int const pret = pclose(inf); #elif defined (HAVE__PCLOSE)