#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(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
must_exist,
/// Only do file name expansion, return the complete name even if
/// the file does not exist
- may_not_exist
+ may_not_exist,
+ /// The (image) file may be present with hi-dpi resolution -
+ /// the lookup checks for a file named "image" + "@2x" + ".ext" first.
+ /// If found it will return e.g. "image@2x.png" instead of "image.png".
+ /// Otherwise it will work as must_exist.
+ check_hidpi
};
/** Returns the real name of file name in directory path, with optional
*/
bool isValidDVIFileName(std::string const & filename);
+/// check whether the file has binary contents
+bool isBinaryFile(FileName const & filename);
+
/** Returns the path of a library data file.
Search the file name.ext in the subdirectory dir of
-# user_lyxdir
*/
FileName const libFileSearch(std::string const & dir,
std::string const & name,
- std::string const & ext = std::string());
+ std::string const & ext = std::string(),
+ search_mode mode = must_exist);
/** Same as libFileSearch(), but tries first to find an
internationalized version of the file by prepending $LANG_ to the
*/
FileName const
imageLibFileSearch(std::string & dir, std::string const & name,
- std::string const & ext = std::string());
+ std::string const & ext = std::string(),
+ search_mode mode = must_exist);
/// How to quote a filename
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';
* command will still fail, but the error message will make some sort of
* sense ;-)
*/
-std::string const libScriptSearch(std::string const & command,
- quote_style style = quote_shell);
+std::string const commandPrep(std::string const & command);
enum latex_path_extension {
PROTECT_EXTENSION,
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.
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]* '}'
*/
/**
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
* \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,
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);
+int fileLock(const char * lock_file);
+void fileUnlock(int fd, const char * lock_file);
} // namespace support
} // namespace lyx