]> git.lyx.org Git - lyx.git/blobdiff - src/Buffer.h
Account for old versions of Pygments
[lyx.git] / src / Buffer.h
index 74507909df231224445ac5b0b0bd105363839613..d483de9a0839bccdc891456a46e144bc53e0f3e1 100644 (file)
@@ -13,8 +13,8 @@
 #define BUFFER_H
 
 #include "OutputEnums.h"
-#include "OutputParams.h"
 
+#include "support/unique_ptr.h"
 #include "support/strfwd.h"
 #include "support/types.h"
 
@@ -50,6 +50,7 @@ class MacroData;
 class MacroNameSet;
 class MacroSet;
 class OutputParams;
+class otexstream;
 class Paragraph;
 class ParConstIterator;
 class ParIterator;
@@ -66,12 +67,14 @@ class WorkAreaManager;
 }
 
 namespace support {
+class DocFileName;
 class FileName;
-class FileNameList;
+class FileNamePairList;
 }
 
 namespace graphics {
 class PreviewLoader;
+class Cache;
 }
 
 
@@ -141,24 +144,6 @@ public:
                PreviewError
        };
 
-       /// Method to check if a file is externally modified, used by
-       /// isExternallyModified()
-       /**
-        * timestamp is fast but inaccurate. For example, the granularity
-        * of timestamp on a FAT filesystem is 2 seconds. Also, various operations
-        * may touch the timestamp of a file even when its content is unchanged.
-        *
-        * checksum is accurate but slow, which can be a problem when it is
-        * frequently used, or used for a large file on a slow (network) file
-        * system.
-        *
-        * FIXME: replace this method with support/FileMonitor.
-        */
-       enum CheckMethod {
-               checksum_method, ///< Use file checksum
-               timestamp_method ///< Use timestamp, and checksum if timestamp has changed
-       };
-
        ///
        enum UpdateScope {
                UpdateMaster,
@@ -246,7 +231,7 @@ private:
        typedef std::map<Buffer const *, Buffer *> BufferMap;
        ///
        void cloneWithChildren(BufferMap &, CloneList *) const;
-       /// save timestamp and checksum of the given file.
+       /// save checksum of the given file.
        void saveCheckSum() const;
        /// read a new file
        ReadStatus readFile(support::FileName const & fn);
@@ -323,13 +308,13 @@ public:
            method with a string stream if the output is supposed to go to a
            file. \code
            ofdocstream ofs;
-           otexstream os(ofs, texrow);
+           otexstream os(ofs);
            ofs.open("test.tex");
            writeLaTeXSource(os, ...);
            ofs.close();
            \endcode is NOT equivalent to \code
            odocstringstream oss;
-           otexstream os(oss, texrow);
+           otexstream os(oss);
            writeLaTeXSource(os, ...);
            ofdocstream ofs;
            ofs.open("test.tex");
@@ -368,8 +353,15 @@ public:
        ///
        bool isDepClean(std::string const & name) const;
 
-       /// whether or not disk file has been externally modified
-       bool isExternallyModified(CheckMethod method) const;
+       /// Whether or not disk file has been externally modified. Uses a checksum
+       /// which is accurate but slow, which can be a problem when it is frequently
+       /// used, or used for a large file on a slow (network) file system.
+       bool isChecksumModified() const;
+
+       /// Flag set by the FileSystemWatcher.
+       /// Fast but (not so) inaccurate, can be cleared by the user.
+       bool notifiesExternalModification() const;
+       void clearExternalModification() const;
 
        /// mark the main lyx file as not needing saving
        void markClean() const;
@@ -405,12 +397,26 @@ public:
        /// It is always an absolute path.
        std::string filePath() const;
 
-       /** Returns the path where the document was last saved.
-        *  It may be different from filePath() if the document was later
-        *  manually moved to a different location.
-        *  It is always an absolute path.
+       /** Contructs a file name of a referenced file (child doc, included graphics etc).
+        *  Absolute names are returned as is. If the name is relative, it is
+        *  interpreted relative to filePath() if the file exists, otherwise
+        *  relative to the original path where the document was last saved.
+        *  The original path may be different from filePath() if the document was
+        *  later manually moved to a different location.
+        */
+       support::DocFileName getReferencedFileName(std::string const & fn) const;
+
+       /// Format a file name for LaTeX output (absolute or relative or filename only,
+       /// depending on file and context)
+       std::string const prepareFileNameForLaTeX(std::string const &,
+                                       std::string const &, bool nice) const;
+
+       /** Returns a vector of bibliography (*.bib) file paths suitable for the
+        *  output in the respective BibTeX/Biblatex macro
         */
-       std::string originFilePath() const;
+       std::vector<docstring> const prepareBibFilePaths(OutputParams const &,
+                                   support::FileNamePairList const bibfilelist,
+                                   bool const extension = true) const;
 
        /** Returns the path where a local layout file lives.
         *  An empty string is returned for standard system and user layouts.
@@ -465,9 +471,13 @@ public:
        /// thing from whichever Buffer it is called.
        ListOfBuffers allRelatives() const;
 
-       /// Is buffer read-only?
+       /// Is buffer read-only? True if it has either the read-only flag or the
+       /// externally modified flag.
        bool isReadonly() const;
 
+       /// Does the buffer have the read-only flag?
+       bool hasReadonlyFlag() const;
+
        /// Set buffer read-only flag
        void setReadonly(bool flag = true);
 
@@ -583,6 +593,8 @@ public:
        void updatePreviews() const;
        /// Remove any previewed LaTeX snippets associated with this buffer
        void removePreviews() const;
+       ///
+       graphics::Cache & graphicsCache() const;
 
        /// Our main text (inside the top InsetText)
        Text & text() const;
@@ -620,8 +632,8 @@ public:
 
        /// get source code (latex/docbook) for some paragraphs, or all paragraphs
        /// including preamble
-       /// returns NULL if Id to Row conversion is unsupported
-       std::auto_ptr<TexRow> getSourceCode(odocstream & os,
+       /// returns nullptr if Id to Row conversion is unsupported
+       unique_ptr<TexRow> getSourceCode(odocstream & os,
                        std::string const & format, pit_type par_begin,
                        pit_type par_end, OutputWhat output, bool master) const;
 
@@ -683,7 +695,7 @@ private:
        ExportStatus doExport(std::string const & target, bool put_in_tempdir,
                bool includeall, std::string & result_file) const;
        ///
-       ExportStatus preview(std::string const & format, bool includeall = false) const;
+       ExportStatus preview(std::string const & format, bool includeall) const;
        ///
        void setMathFlavor(OutputParams & op) const;
 
@@ -757,6 +769,12 @@ public:
        int wordCount() const;
        int charCount(bool with_blanks) const;
 
+       // this is const because it does not modify the buffer's real contents,
+       // only the mutable flag.
+       void setChangesPresent(bool) const;
+       bool areChangesPresent() const;
+       void updateChangesPresent() const;
+
 private:
        friend class MarkAsExporting;
        /// mark the buffer as busy exporting something, or not
@@ -777,7 +795,7 @@ private:
        void updateBibfilesCache(UpdateScope scope = UpdateMaster) const;
        /// Return the list with all bibfiles in use (including bibfiles
        /// of loaded child documents).
-       support::FileNameList const &
+       support::FileNamePairList const &
                getBibfilesCache(UpdateScope scope = UpdateMaster) const;
        ///
        void collectChildren(ListOfBuffers & children, bool grand_children) const;