]> git.lyx.org Git - lyx.git/blobdiff - src/support/FileName.h
C++ style to avoid compiler warning for non-NLS implementation of Messages::available
[lyx.git] / src / support / FileName.h
index 51c149ff9e5d708396096b30213fa89682c2730f..e1bc0de83d45a3b9e06e57d114a4d4eef40ec951 100644 (file)
@@ -12,6 +12,7 @@
 #ifndef FILENAME_H
 #define FILENAME_H
 
+#include "support/os.h"
 #include "support/strfwd.h"
 
 #include <ctime>
@@ -63,7 +64,7 @@ public:
        static bool isAbsolute(std::string const & name);
 
        /// get the absolute file name in UTF-8 encoding
-       std::string absFilename() const;
+       std::string absFileName() const;
 
        /** returns an absolute pathname (whose resolution does not involve
          * '.', '..', or symbolic links) in UTF-8 encoding
@@ -72,12 +73,29 @@ public:
 
        /**
         * Get the file name in the encoding used by the file system.
-        * Only use this for accessing the file, e.g. with an fstream.
+        * Only use this for passing file names to external commands.
+        * Warning: On Windows this is not unicode safe and should not
+        * be used for accessing files with an fstream, for example.
         */
        std::string toFilesystemEncoding() const;
 
+       /**
+        * Get the file name in a unicode safe encoding used by the file system.
+        * Only use this for accessing the file with standard I/O functions
+        * non explicitly unicode aware, e.g. with an fstream. This can also
+        * be used for passing file names to external commands, but only if
+        * you are sure that the stem of the name will not be used for
+        * producing derivative files. For example, don't use this for passing
+        * file names to LaTeX, as the stem of the .dvi file will not correspond
+        * to the stem of the .tex file anymore.
+        * Use os::CREATE if the file is to be accessed for writing.
+        */
+       std::string toSafeFilesystemEncoding(os::file_access how = os::EXISTING) const;
+
        /// returns true if the file exists
        bool exists() const;
+       /// refreshes the file info
+       void refresh() const;
        /// \return true if this object points to a symbolic link.
        bool isSymLink() const;
        /// \return true if the file is empty.
@@ -151,21 +169,12 @@ public:
        */
        void changeExtension(std::string const & extension);
 
-       /** Guess the file format name (as in Format::name()) from contents.
-        Normally you don't want to use this directly, but rather
-        Formats::getFormatFromFile().
-        */
-       std::string guessFormatFromContents() const;
-
-       /// check for zipped file
-       bool isZippedFile() const;
-
        static FileName fromFilesystemEncoding(std::string const & name);
        /// (securely) create a temporary file with the given mask.
        /// \p mask must be in filesystem encoding, if it contains a
        /// relative path, the template file will be created in the global
        /// temporary directory as given by 'package().temp_dir()'.
-       static FileName tempName(std::string const & mask = empty_string());
+       static FileName tempName(std::string const & mask);
        static FileName tempName(FileName const & temp_dir,
                std::string const & mask);
 
@@ -185,6 +194,9 @@ public:
        bool hasExtension(const std::string & ext);
        /// path without file name
        FileName onlyPath() const;
+       /// path of parent directory
+       /// returns empty path for root directory
+       FileName parentPath() const;
        /// used for display in the Gui
        docstring displayName(int threshold = 1000) const;
 
@@ -245,9 +257,9 @@ public:
        ///
        bool saveAbsPath() const { return save_abs_path_; }
        /// \param buffer_path if empty, uses `pwd`
-       std::string relFilename(std::string const & buffer_path = empty_string()) const;
+       std::string relFileName(std::string const & buffer_path = empty_string()) const;
        /// \param buf_path if empty, uses `pwd`
-       std::string outputFilename(std::string const & buf_path = empty_string()) const;
+       std::string outputFileName(std::string const & buf_path = empty_string()) const;
        
        /** @returns a mangled representation of the absolute file name
         *  suitable for use in the temp dir when, for example, converting
@@ -270,21 +282,15 @@ public:
         *  with @c dir.
         */
        std::string
-       mangledFilename(std::string const & dir = empty_string()) const;
+       mangledFileName(std::string const & dir = empty_string()) const;
 
-       /// \return true if the file is compressed.
-       bool isZipped() const;
        /// \return the absolute file name without its .gz, .z, .Z extension
-       std::string unzippedFilename() const;
+       std::string unzippedFileName() const;
 
 private:
        /// Records whether we should save (or export) the filename as a relative
        /// or absolute path.
        bool save_abs_path_;
-       /// Cache for isZipped() because zippedFile() is expensive
-       mutable bool zipped_;
-       /// Is zipped_ valid?
-       mutable bool zipped_valid_;
 };