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
|
|
|
|
2000-11-08 09:39:46 +00:00
|
|
|
#include <vector>
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
///
|
2000-08-05 05:17:18 +00:00
|
|
|
string const 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
|
|
|
|
|
|
|
///
|
2000-08-05 05:17:18 +00:00
|
|
|
string const 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".
|
|
|
|
*/
|
2000-08-05 05:17:18 +00:00
|
|
|
string const FileOpenSearch (string const & path, string const & name,
|
1999-10-02 16:21:10 +00:00
|
|
|
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).
|
|
|
|
*/
|
2000-08-05 05:17:18 +00:00
|
|
|
string const FileSearch(string const & path, string const & name,
|
1999-10-02 16:21:10 +00:00
|
|
|
string const & ext = string());
|
1999-09-27 18:44:28 +00:00
|
|
|
|
2000-11-08 09:39:46 +00:00
|
|
|
/// Returns a vector of all files in directory dir having extension ext.
|
|
|
|
std::vector<string> const DirList(string const & dir,
|
|
|
|
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
|
2000-08-07 20:58:24 +00:00
|
|
|
*/
|
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
|
|
|
|
2000-11-13 15:43:36 +00:00
|
|
|
///
|
|
|
|
bool IsSGMLFilename(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.
|
|
|
|
*/
|
2000-08-05 05:17:18 +00:00
|
|
|
string const LibFileSearch(string const & dir, string const & name,
|
1999-10-02 16:21:10 +00:00
|
|
|
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
|
|
|
|
*/
|
2000-08-05 05:17:18 +00:00
|
|
|
string const
|
|
|
|
i18nLibFileSearch(string const & dir, string const & name,
|
|
|
|
string const & ext = string());
|
1999-10-02 16:21:10 +00:00
|
|
|
|
|
|
|
///
|
2000-08-05 05:17:18 +00:00
|
|
|
string const GetEnv(string const & envname);
|
1999-10-02 16:21:10 +00:00
|
|
|
|
|
|
|
/// A helper function.
|
2000-08-05 05:17:18 +00:00
|
|
|
string const GetEnvPath(string const & name);
|
1999-10-02 16:21:10 +00:00
|
|
|
|
|
|
|
///
|
|
|
|
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
|
2000-08-05 05:17:18 +00:00
|
|
|
string const MakeLatexName(string const & file);
|
1999-12-03 13:51:01 +00:00
|
|
|
|
|
|
|
/// Put the name in quotes suitable for the current shell
|
2000-08-05 05:17:18 +00:00
|
|
|
string const QuoteName(string const & file);
|
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.
|
2000-08-05 05:17:18 +00:00
|
|
|
string const 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
|
2000-08-05 05:17:18 +00:00
|
|
|
string const 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-08-05 05:17:18 +00:00
|
|
|
string const
|
|
|
|
ChangeExtension(string const & oldname, string const & extension);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
2000-08-30 03:40:51 +00:00
|
|
|
/// Return the extension of the file (not including the .)
|
2000-09-14 17:53:12 +00:00
|
|
|
string const GetExtension(string const & name);
|
2000-08-30 03:40:51 +00:00
|
|
|
|
1999-09-27 18:44:28 +00:00
|
|
|
/// Create absolute path. If impossible, don't do anything
|
2000-08-05 05:17:18 +00:00
|
|
|
string const ExpandPath(string const & path);
|
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.
|
|
|
|
*/
|
2000-08-05 05:17:18 +00:00
|
|
|
string const MakeAbsPath(string const & RelPath = string(),
|
2000-11-08 09:39:46 +00:00
|
|
|
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.
|
|
|
|
*/
|
2000-08-05 05:17:18 +00:00
|
|
|
string const
|
|
|
|
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!!!
|
|
|
|
*/
|
2000-08-05 05:17:18 +00:00
|
|
|
string const
|
|
|
|
MakeRelPath(string const & abspath, string const & basepath);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
/// Strip filename from path name
|
2000-08-05 05:17:18 +00:00
|
|
|
string const OnlyPath(string const & fname);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
/// Normalize a path. Constracts path/../path
|
2000-08-05 05:17:18 +00:00
|
|
|
string const NormalizePath(string const & path);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
/// Strips path from filename
|
2000-08-05 05:17:18 +00:00
|
|
|
string const OnlyFilename(string const & fname);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
2000-06-12 11:27:15 +00:00
|
|
|
/// Get the contents of a file as a huge string
|
2000-08-05 05:17:18 +00:00
|
|
|
string const GetFileContents(string const & fname);
|
2000-06-12 11:27:15 +00:00
|
|
|
|
1999-09-27 18:44:28 +00:00
|
|
|
/// Cleanup a path if necessary. Currently only useful with OS/2
|
2000-08-05 05:17:18 +00:00
|
|
|
string const 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]* '}'
|
|
|
|
*/
|
2000-08-05 05:17:18 +00:00
|
|
|
string const ReplaceEnvironmentPath(string const & path);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
2000-05-30 15:41:16 +00:00
|
|
|
/* Set Link to the path file points to as a symbolic link.
|
|
|
|
Returns true if successful */
|
1999-10-02 16:21:10 +00:00
|
|
|
bool LyXReadLink(string const & file, string & Link);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
2000-11-15 18:02:45 +00:00
|
|
|
/// Uses kpsewhich to find tex files
|
2000-08-05 05:17:18 +00:00
|
|
|
string const findtexfile(string const & fil, string const & format);
|
1999-11-24 22:14:46 +00:00
|
|
|
|
2000-11-15 18:02:45 +00:00
|
|
|
/// remove the autosave-file and give a Message if it can't be done
|
2000-08-08 15:36:25 +00:00
|
|
|
void removeAutosaveFile(string const & filename);
|
|
|
|
|
1999-09-27 18:44:28 +00:00
|
|
|
#endif
|