X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Ffiletools.h;h=6d717a58c66783794d9fe45b66f36377c4713fdc;hb=848c89564fce9c4bfec79b915746dc6bc47abc3d;hp=abf637ca84091f1e6e7ef73b22daf35f28311ecf;hpb=95579c2a71cfff99e4bc01c9193dc3f7d4e3fda8;p=lyx.git diff --git a/src/support/filetools.h b/src/support/filetools.h index abf637ca84..6d717a58c6 100644 --- a/src/support/filetools.h +++ b/src/support/filetools.h @@ -13,7 +13,7 @@ #define LYX_FILETOOL_H #include "support/docstring.h" -#include "support/filename.h" +#include "support/FileName.h" #include #include @@ -29,7 +29,7 @@ bool destroyDir(FileName const & tmpdir); std::string const createBufferTmpDir(); /// Creates directory. Returns true on success -bool createDirectory(std::string const & name, int permissions); +bool createDirectory(FileName const & name, int permissions); /** Creates the global LyX temp dir. \p deflt can be an existing directory name. In this case a new directory @@ -39,6 +39,8 @@ bool createDirectory(std::string const & name, int permissions); */ FileName const createLyXTmpDir(FileName const & deflt); +#if 0 +// FIXME unused. Should this be deleted or resurrected? /** 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. @@ -49,6 +51,16 @@ FileName const createLyXTmpDir(FileName const & deflt); FileName const fileOpenSearch(std::string const & path, std::string const & name, std::string const & ext = std::string()); +#endif + +/// How to search files +enum search_mode { + // The file must exist (return an empty file name otherwise) + standard_mode, + /// Only do file name expansion, return the complete name even if + /// the file does not exist + allow_unreadable +}; /** Returns the real name of file name in directory path, with optional extension ext. @@ -57,10 +69,11 @@ FileName const fileOpenSearch(std::string const & path, */ FileName const fileSearch(std::string const & path, std::string const & name, - std::string const & ext = std::string()); + std::string const & ext = std::string(), + search_mode mode = standard_mode); /// Returns a vector of all files in directory dir having extension ext. -std::vector const dirList(FileName const & dir, +std::vector const dirList(FileName const & dir, std::string const & ext = std::string()); /** Is directory read only? @@ -68,7 +81,7 @@ std::vector const dirList(FileName const & dir, true: dir writeable false: not writeable */ -bool isDirWriteable(std::string const & path); +bool isDirWriteable(FileName const & path); /** Is a file readable ? Returns true if the file `path' is readable. @@ -81,6 +94,9 @@ bool isLyXFilename(std::string const & filename); /// bool isSGMLFilename(std::string const & filename); +/// +bool isValidLaTeXFilename(std::string const & filename); + /** Returns the path of a library data file. Search the file name.ext in the subdirectory dir of -# user_lyxdir @@ -180,6 +196,14 @@ changeExtension(std::string const & oldname, std::string const & extension); /// Remove the extension from \p name std::string const removeExtension(std::string const & name); +/** Add the extension \p ext to \p name. + Use this instead of changeExtension if you know that \p name is without + extension, because changeExtension would wrongly interpret \p name if it + contains a dot. + */ +std::string const +addExtension(std::string const & name, std::string const & extension); + /// Return the extension of the file (not including the .) std::string const getExtension(std::string const & name); @@ -203,7 +227,7 @@ std::string const unzippedFileName(std::string const & zipped_file); Will overwrite an already existing unzipped file without warning. */ FileName const unzipFile(FileName const & zipped_file, - std::string const & unzipped_file = std::string()); + std::string const & unzipped_file = std::string()); /// Returns true is path is absolute bool absolutePath(std::string const & path); @@ -215,7 +239,7 @@ std::string const expandPath(std::string const & path); If relpath is absolute, just use that. If basepath doesn't exist use CWD. */ -std::string const makeAbsPath(std::string const & RelPath = std::string(), +FileName const makeAbsPath(std::string const & RelPath = std::string(), std::string const & BasePath = std::string()); /** Creates a nice compact path for displaying. The parameter @@ -231,8 +255,8 @@ makeDisplayPath(std::string const & path, unsigned int threshold = 1000); different, then the absolute path will be used as relative path WARNING: the absolute path and base path must really be absolute paths!!! */ -std::string const -makeRelPath(std::string const & abspath, std::string const & basepath); +docstring const +makeRelPath(docstring const & abspath, docstring const & basepath); /// Strip filename from path name std::string const onlyPath(std::string const & fname); @@ -255,14 +279,19 @@ std::string const getFileContents(FileName const & fname); */ std::string const replaceEnvironmentPath(std::string const & path); -/* 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 - Returns true if successful */ -bool readLink(std::string const & file, - std::string & link, - bool resolve = false); +/** Set \c link to the path \c file points to as a symbolic link. + \return true if successful. + */ +bool readLink(FileName const & file, FileName & link); -/// Uses kpsewhich to find tex files +/** + * Search a TeX file in all locations the latex compiler would search it, + * with the help of kpsewhich. + * The current working directory must be set correctly, so that relative + * names work. + * \param fil The filename to search + * \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);