]> git.lyx.org Git - lyx.git/blobdiff - src/support/filetools.h
More requires --> required, for C++2a.
[lyx.git] / src / support / filetools.h
index dc3bddab23e57c69e94496e4d341901c121e125c..1ac0edf15b45cf40a93f53bc5c27ca0d4467e5a9 100644 (file)
 
 #include <utility>
 #include <string>
+#include <set>
 
 namespace lyx {
 namespace support {
 
 class FileName;
 
+/// Record used temp file names
+static std::set<std::string> tmp_names_;
+
+/// Get a temporary file name.
+/**
+* The actual temp file (QTemporaryFile object) is immediately
+* destroyed after the name has been generated, so a new file
+* has to be created manually from the name.
+* This is needed if the temp file has to be manually removed
+* (e.g., when temp files are used as conversion target, and the initial
+* file only serves as a placeholder), since QTemporaryFile objects
+* cannot be manually removed at least on Windows (they are always
+* kept open internally even after close()).
+* In order to avoid race conditions due to duplicate names, we record
+* all used temp file names.
+* If you don't have to remove the temp file manually, use TempFile instead!
+*/
+FileName const tempFileName(FileName, bool const dir = false);
+/// Get temporary file name with custom path
+FileName const tempFileName(FileName, std::string const &, bool const dir = false);
+/// Get temporary file name with default path
+FileName const tempFileName(std::string const &, bool const dir = false);
+
+/// Remove and unregister a temporary file.
+void removeTempFile(FileName const &);
+
 /** Creates the global LyX temp dir.
   \p deflt can be an existing directory name. In this case a new directory
   inside \p deflt is created. If \p deflt does not exist yet, \p deflt is
@@ -120,6 +147,9 @@ enum quote_style {
        /** Quote for the (OS dependant) shell. This is needed for command
            line arguments of subprocesses. */
        quote_shell,
+       /** Quote a file name for the (OS dependant) shell. This is needed
+           for file names as command line arguments of subprocesses. */
+       quote_shell_filename,
        /** Quote for python. Use this if you want to store a filename in a
            python script. Example: \code
            os << "infile = " << quoteName(filename) << '\\n';
@@ -217,9 +247,6 @@ std::string const unzippedFileName(std::string const & zipped_file);
 FileName const unzipFile(FileName const & zipped_file,
                         std::string const & unzipped_file = std::string());
 
-/// Create absolute path. If impossible, don't do anything
-std::string const expandPath(std::string const & path);
-
 /** Convert relative path into absolute path based on a basepath.
   If relpath is absolute, just use that.
   If basepath doesn't exist use CWD.
@@ -250,7 +277,7 @@ std::string const onlyPath(std::string const & fname);
 std::string const onlyFileName(std::string const & fname);
 
 /** Check and Replace Environmentvariables ${NAME} in Path.
-    Replaces all occurences of these, if they are found in the
+    Replaces all occurrences of these, if they are found in the
     environment.
     Variables are defined by Var := '${' [a-zA-Z_][a-zA-Z_0-9]* '}'
 */
@@ -258,9 +285,9 @@ std::string const replaceEnvironmentPath(std::string const & path);
 
 /**
    Return a string to be used as a prefix to a command for setting the
-   environment of the TeX engine with respect to the path \p path.
+   environment of the TeX engine with respect to the paths \p path and \p lpath.
  */
-std::string latexEnvCmdPrefix(std::string const & path);
+std::string latexEnvCmdPrefix(std::string const &path, std::string const & lpath);
 
 /** Replace all references to a current directory (a lonely '.' or
     the prefix "./") in \c pathlist with \c path. Also prefixes
@@ -282,7 +309,8 @@ bool readLink(FileName const & file, FileName & link);
  * \param format The file format as used by kpsewhich, e.g. "bib", "bst" etc.
  */
 FileName const findtexfile(std::string const & fil,
-                             std::string const & format);
+                                                  std::string const & format,
+                                                  bool const onlykpse = false);
 
 /** \param file1, file2 the two files to be compared. Must have absolute paths.
  *  \returns 1 if \c file1 has a more recent timestamp than \c file2,
@@ -297,6 +325,9 @@ int compare_timestamps(FileName const & file1, FileName const & file2);
 bool prefs2prefs(FileName const & filename, FileName const & tempfile,
                  bool lfuns);
 
+/// Does file \p file need to be updated by configure.py?
+bool configFileNeedsUpdate(std::string const & file);
+
 typedef std::pair<int, std::string> cmd_ret;
 
 cmd_ret const runCommand(std::string const & cmd);