1999-09-27 18:44:28 +00:00
|
|
|
// -*- C++-*-
|
2002-09-25 10:03:41 +00:00
|
|
|
/**
|
|
|
|
* \file filetools.h
|
|
|
|
* This file is part of LyX, the document processor.
|
|
|
|
* Licence details can be found in the file COPYING.
|
|
|
|
*/
|
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
|
|
|
|
|
2000-11-08 09:39:46 +00:00
|
|
|
#include <vector>
|
2002-07-22 17:11:41 +00:00
|
|
|
#include <utility>
|
1999-09-27 18:44:28 +00:00
|
|
|
#include "LString.h"
|
|
|
|
|
|
|
|
|
|
|
|
///
|
2002-06-26 13:49:27 +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
|
|
|
|
|
|
|
///
|
2002-06-26 13:49:27 +00:00
|
|
|
string const CreateLyXTmpDir(string const & deflt);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
///
|
2002-06-26 13:49:27 +00:00
|
|
|
int DestroyBufferTmpDir(string const & tmpdir);
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
///
|
2002-06-26 13:49:27 +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".
|
|
|
|
*/
|
2002-06-26 13:49:27 +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).
|
|
|
|
*/
|
2002-03-21 17:09:55 +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?
|
2002-03-21 17:09:55 +00:00
|
|
|
returns
|
2001-08-01 10:08:53 +00:00
|
|
|
true: dir writeable
|
|
|
|
false: not writeable
|
2000-08-07 20:58:24 +00:00
|
|
|
*/
|
2001-08-01 10:08:53 +00:00
|
|
|
bool 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.
|
|
|
|
*/
|
2002-03-21 17:09:55 +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
|
2002-03-21 17:09:55 +00:00
|
|
|
name
|
1999-09-27 18:44:28 +00:00
|
|
|
*/
|
2000-08-05 05:17:18 +00:00
|
|
|
string const
|
2002-03-21 17:09:55 +00:00
|
|
|
i18nLibFileSearch(string const & dir, string const & name,
|
2000-08-05 05:17:18 +00:00
|
|
|
string const & ext = string());
|
1999-10-02 16:21:10 +00:00
|
|
|
|
2002-03-27 00:05:28 +00:00
|
|
|
/** Takes a command with arguments as input and tries to see whether
|
|
|
|
the command itself can be found in one of the scripts/ directories.
|
|
|
|
If it is found, return the command with fully qualified script name,
|
|
|
|
either return it unchanged */
|
|
|
|
string const LibScriptSearch(string const & command);
|
|
|
|
|
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
|
|
|
|
|
|
|
/// 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
|
|
|
|
2002-01-31 14:20:09 +00:00
|
|
|
/// Return the type of the file as an extension from contents
|
|
|
|
string const getExtFromContents(string const & name);
|
|
|
|
|
2002-02-05 12:19:32 +00:00
|
|
|
/// check for zipped file
|
|
|
|
bool zippedFile(string const & name);
|
|
|
|
|
2002-02-07 19:37:34 +00:00
|
|
|
/// unzip a file
|
|
|
|
string const unzipFile(string const & zipped_file);
|
|
|
|
|
2001-10-08 14:09:06 +00:00
|
|
|
/// Returns true is path is absolute
|
|
|
|
bool AbsolutePath(string const & path);
|
|
|
|
|
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.
|
|
|
|
*/
|
2002-03-21 17:09:55 +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
|
2002-06-26 13:49:27 +00:00
|
|
|
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
|
|
|
/** 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
|
|
|
|
2002-07-17 21:43:06 +00:00
|
|
|
/* Set \c link to the path \c file points to as a symbolic link.
|
|
|
|
If \c resolve is true, then \c link is an absolute path
|
2000-05-30 15:41:16 +00:00
|
|
|
Returns true if successful */
|
2002-07-17 21:43:06 +00:00
|
|
|
bool LyXReadLink(string const & file, string & link, bool resolve = false);
|
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);
|
|
|
|
|
2002-04-08 14:55:52 +00:00
|
|
|
/// read the BoundingBox entry from a ps/eps/pdf-file
|
|
|
|
string const readBB_from_PSFile(string const & file);
|
|
|
|
|
2002-07-22 17:11:41 +00:00
|
|
|
typedef std::pair<int, string> cmd_ret;
|
|
|
|
|
|
|
|
cmd_ret const RunCommand(string const & cmd);
|
2002-01-31 14:20:09 +00:00
|
|
|
|
1999-09-27 18:44:28 +00:00
|
|
|
#endif
|