1999-09-27 18:44:28 +00:00
|
|
|
// -*- C++-*-
|
|
|
|
/* lyx-filetool.h : tools functions for file/path handling
|
|
|
|
this file is part of LyX, the High Level Word Processor
|
2000-03-16 04:29:22 +00:00
|
|
|
Copyright 1995-2000, Matthias Ettrich and the LyX Team
|
1999-09-27 18:44:28 +00:00
|
|
|
*/
|
|
|
|
|
1999-10-02 16:21:10 +00:00
|
|
|
#ifndef LYX_FILETOOL_H
|
|
|
|
#define LYX_FILETOOL_H
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
#ifdef __GNUG__
|
|
|
|
#pragma interface
|
|
|
|
#endif
|
|
|
|
|
1999-10-02 16:21:10 +00:00
|
|
|
#include <cstdlib>
|
1999-09-27 18:44:28 +00:00
|
|
|
#include <fcntl.h>
|
1999-10-02 16:21:10 +00:00
|
|
|
#include <cerrno>
|
2000-01-06 02:44:26 +00:00
|
|
|
|
1999-10-07 18:44:17 +00:00
|
|
|
#include "debug.h"
|
1999-09-27 18:44:28 +00:00
|
|
|
#include "LString.h"
|
1999-10-02 16:21:10 +00:00
|
|
|
#include "support/lstrings.h"
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
|
|
|
|
///
|
1999-10-02 16:21:10 +00:00
|
|
|
string CreateBufferTmpDir (string const & pathfor = string());
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
/// Creates directory. Returns true on succes.
|
1999-10-02 16:21:10 +00:00
|
|
|
bool createDirectory(string const & name, int permissions);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
///
|
1999-10-02 16:21:10 +00:00
|
|
|
string CreateLyXTmpDir (string const & deflt);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
///
|
1999-10-02 16:21:10 +00:00
|
|
|
int DestroyBufferTmpDir (string const & tmpdir);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
///
|
1999-10-02 16:21:10 +00:00
|
|
|
int DestroyLyXTmpDir (string const & tmpdir);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
/** Find file by searching several directories.
|
|
|
|
Uses a string of paths separated by ";"s to find a file to open.
|
|
|
|
Can't cope with pathnames with a ';' in them. Returns full path to file.
|
|
|
|
If path entry begins with $$LyX/, use system_lyxdir.
|
|
|
|
If path entry begins with $$User/, use user_lyxdir.
|
|
|
|
Example: "$$User/doc;$$LyX/doc".
|
|
|
|
*/
|
1999-10-02 16:21:10 +00:00
|
|
|
string FileOpenSearch (string const & path, string const & name,
|
|
|
|
string const & ext = string());
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
/** Returns the real name of file name in directory path, with optional
|
|
|
|
extension ext.
|
|
|
|
The file is searched in the given path (unless it is an absolute
|
|
|
|
file name), first directly, and then with extension .ext (if given).
|
|
|
|
*/
|
1999-10-02 16:21:10 +00:00
|
|
|
string FileSearch(string const & path, string const & name,
|
|
|
|
string const & ext = string());
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
/** Is directory read only?
|
|
|
|
returns
|
|
|
|
1: dir writeable
|
|
|
|
0: not writeable
|
|
|
|
-1: error- couldn't find out, or unsure
|
|
|
|
*/
|
1999-10-02 16:21:10 +00:00
|
|
|
int IsDirWriteable (string const & path);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
/** Is a file readable ?
|
|
|
|
Returns true if the file `path' is readable.
|
|
|
|
*/
|
1999-10-02 16:21:10 +00:00
|
|
|
bool IsFileReadable (string const & path);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
/** Is file read only?
|
|
|
|
returns
|
|
|
|
1: read-write
|
|
|
|
0: read_only
|
|
|
|
-1: error (doesn't exist, no access, anything else)
|
|
|
|
*/
|
1999-10-02 16:21:10 +00:00
|
|
|
int IsFileWriteable (string const & path);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
///
|
1999-10-02 16:21:10 +00:00
|
|
|
bool IsLyXFilename(string const & filename);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
/** Returns the path of a library data file.
|
|
|
|
Search the file name.ext in the subdirectory dir of
|
|
|
|
\begin{enumerate}
|
|
|
|
\item user_lyxdir
|
|
|
|
\item build_lyxdir (if not empty)
|
|
|
|
\item system_lyxdir
|
|
|
|
\end{enumerate}
|
|
|
|
The third parameter `ext' is optional.
|
|
|
|
*/
|
1999-10-02 16:21:10 +00:00
|
|
|
string LibFileSearch(string const & dir, string const & name,
|
|
|
|
string const & ext = string());
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
/** Same as LibFileSearch(), but tries first to find an
|
|
|
|
internationalized version of the file by prepending $LANG_ to the
|
|
|
|
name
|
|
|
|
*/
|
1999-10-02 16:21:10 +00:00
|
|
|
string i18nLibFileSearch(string const & dir, string const & name,
|
|
|
|
string const & ext = string());
|
|
|
|
|
|
|
|
///
|
|
|
|
string GetEnv(string const & envname);
|
|
|
|
|
|
|
|
/// A helper function.
|
|
|
|
string GetEnvPath(string const & name);
|
|
|
|
|
|
|
|
///
|
|
|
|
bool PutEnv(string const & envstr);
|
|
|
|
|
|
|
|
///
|
|
|
|
bool PutEnvPath(string const & envstr);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
1999-12-03 13:51:01 +00:00
|
|
|
/// Substitutes active latex characters with underscores in filename
|
|
|
|
string MakeLatexName(string const & file);
|
|
|
|
|
|
|
|
/// Put the name in quotes suitable for the current shell
|
|
|
|
string QuoteName(string const & file);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
/** Returns an unique name to be used as a temporary file. If given,
|
|
|
|
'mask' should the prefix to the temporary file, the rest of the
|
|
|
|
temporary filename will be made from the pid and three letters.
|
|
|
|
*/
|
1999-10-02 16:21:10 +00:00
|
|
|
string TmpFileName(string const & dir = string(),
|
|
|
|
string const & mask = "lyx_tmp");
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
/// Is a filename/path absolute?
|
1999-10-02 16:21:10 +00:00
|
|
|
bool AbsolutePath(string const & path);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
/// Add a filename to a path. Any path from filename is stripped first.
|
1999-10-02 16:21:10 +00:00
|
|
|
string AddName(string const & path, string const & fname);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
/// Append sub-directory(ies) to path in an intelligent way
|
1999-10-02 16:21:10 +00:00
|
|
|
string AddPath(string const & path, string const & path2);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
/** Change extension of oldname to extension.
|
|
|
|
If oldname does not have an extension, it is appended.
|
|
|
|
If the extension is empty, any extension is removed from the name.
|
|
|
|
*/
|
2000-05-11 16:12:46 +00:00
|
|
|
string ChangeExtension(string const & oldname, string const & extension);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
/// Create absolute path. If impossible, don't do anything
|
1999-10-02 16:21:10 +00:00
|
|
|
string ExpandPath(string const & path);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
/// gets current working directory
|
1999-10-02 16:21:10 +00:00
|
|
|
string GetCWD();
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
|
|
|
|
/** Convert relative path into absolute path based on a basepath.
|
|
|
|
If relpath is absolute, just use that.
|
|
|
|
If basepath doesn't exist use CWD.
|
|
|
|
*/
|
1999-10-02 16:21:10 +00:00
|
|
|
string MakeAbsPath(string const & RelPath = string(),
|
|
|
|
string const & BasePath = string());
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
/** Creates a nice compact path for displaying. The parameter
|
|
|
|
threshold, if given, specifies the maximal length of the path.
|
|
|
|
*/
|
1999-11-15 10:54:16 +00:00
|
|
|
string MakeDisplayPath(string const & path, unsigned int threshold= 1000);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
/** Makes relative path out of absolute path.
|
|
|
|
If it is deeper than basepath,
|
|
|
|
it's easy. If basepath and abspath share something (they are all deeper
|
|
|
|
than some directory), it'll be rendered using ..'s. If they are completely
|
|
|
|
different, then the absolute path will be used as relative path
|
|
|
|
WARNING: the absolute path and base path must really be absolute paths!!!
|
|
|
|
*/
|
1999-10-02 16:21:10 +00:00
|
|
|
string MakeRelPath(string const & abspath, string const & basepath);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
/// Strip filename from path name
|
1999-10-02 16:21:10 +00:00
|
|
|
string OnlyPath(string const & fname);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
/// Normalize a path. Constracts path/../path
|
1999-10-02 16:21:10 +00:00
|
|
|
string NormalizePath(string const & path);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
/// Strips path from filename
|
1999-10-02 16:21:10 +00:00
|
|
|
string OnlyFilename(string const & fname);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
/// Cleanup a path if necessary. Currently only useful with OS/2
|
1999-10-02 16:21:10 +00:00
|
|
|
string CleanupPath(string const & path) ;
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
/** Check and Replace Environmentvariables ${NAME} in Path.
|
|
|
|
Replaces all occurences of these, if they are found in the
|
|
|
|
environment.
|
|
|
|
Variables are defined by Var := '${' [a-zA-Z_][a-zA-Z_0-9]* '}'
|
|
|
|
*/
|
1999-10-02 16:21:10 +00:00
|
|
|
string ReplaceEnvironmentPath(string const & path);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
/* Set Link to the path File Points to as a symbolic link.
|
|
|
|
Return True if succesfull, False other wise */
|
1999-10-02 16:21:10 +00:00
|
|
|
bool LyXReadLink(string const & file, string & Link);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
1999-11-24 22:14:46 +00:00
|
|
|
/* Uses kpsewhich to find tex files */
|
|
|
|
string findtexfile(string const & fil, string const & format);
|
|
|
|
|
1999-09-27 18:44:28 +00:00
|
|
|
#endif
|