]> git.lyx.org Git - lyx.git/blobdiff - src/support/filetools.cpp
Set correctly the spacing between atoms in MathData
[lyx.git] / src / support / filetools.cpp
index db07d56e61c7e736b5628e4679a4ffb0cc340b1c..12457cb3ae328a4c2c679887b4313d1949356286 100644 (file)
@@ -21,6 +21,7 @@
 
 #include <config.h>
 
+#include "LyX.h"
 #include "LyXRC.h"
 
 #include "support/filetools.h"
@@ -51,6 +52,7 @@
 #endif
 
 #include <cerrno>
+#include <climits>
 #include <cstdlib>
 #include <cstdio>
 
@@ -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)