]> git.lyx.org Git - lyx.git/blobdiff - src/Buffer.h
Fix #7720: plain text export of branches should contain only content of the inset.
[lyx.git] / src / Buffer.h
index 35d1da1b42eec1df852b50685d7d7dc1e322d3e1..a6db5ec01076935d2cd58ae466487de75fbdcffd 100644 (file)
 #define BUFFER_H
 
 #include "OutputEnums.h"
+#include "OutputParams.h"
 
 #include "insets/InsetCode.h"
 
 #include "support/strfwd.h"
 #include "support/types.h"
 
+#include <map>
 #include <list>
 #include <set>
 #include <string>
@@ -28,6 +30,7 @@
 namespace lyx {
 
 class BiblioInfo;
+class BibTeXInfo;
 class BufferParams;
 class DispatchResult;
 class DocIterator;
@@ -69,6 +72,10 @@ class FileName;
 class FileNameList;
 }
 
+namespace graphics {
+class PreviewLoader;
+}
+
 
 class Buffer;
 typedef std::list<Buffer *> ListOfBuffers;
@@ -130,8 +137,8 @@ public:
         * FIXME: replace this method with support/FileMonitor.
         */
        enum CheckMethod {
-               checksum_method,  ///< Use file checksum
-               timestamp_method, ///< Use timestamp, and checksum if timestamp has changed
+               checksum_method, ///< Use file checksum
+               timestamp_method ///< Use timestamp, and checksum if timestamp has changed
        };
 
        ///
@@ -180,9 +187,9 @@ public:
        /// Renames and saves the buffer
        bool saveAs(support::FileName const & fn);
 
-       /// Write document to stream. Returns \c false if unsuccesful.
+       /// Write document to stream. Returns \c false if unsuccessful.
        bool write(std::ostream &) const;
-       /// Write file. Returns \c false if unsuccesful.
+       /// Write file. Returns \c false if unsuccessful.
        bool writeFile(support::FileName const &) const;
 
        /// \name Functions involved in reading files/strings.
@@ -202,14 +209,18 @@ public:
        bool readString(std::string const &);
        /// Reloads the LyX file
        ReadStatus reload();
-//FIXME: The following two functions should be private
+//FIXME: The following function should be private
 //private:
        /// read the header, returns number of unknown tokens
        int readHeader(Lexer & lex);
-       /// save timestamp and checksum of the given file.
-       void saveCheckSum() const;
 
 private:
+       ///
+       typedef std::map<Buffer const *, Buffer *> BufferMap;
+       ///
+       void clone(BufferMap &) const;
+       /// save timestamp and checksum of the given file.
+       void saveCheckSum() const;      
        /// read a new file
        ReadStatus readFile(support::FileName const & fn);
        /// Reads a file without header.
@@ -235,20 +246,16 @@ private:
 public:
        /// \name Functions involved in autosave and emergency files.
        //@{
-       ///
-       void autoSave() const;
+       /// Save an autosave file to #filename.lyx#
+       bool autoSave() const;  
        /// save emergency file
        /// \return a status message towards the user.
        docstring emergencyWrite();
 
-//FIXME:The following three functions should be private
+//FIXME:The following function should be private
 //private:
        ///
        void removeAutosaveFile() const;
-       ///
-       void moveAutosaveFile(support::FileName const & old) const;
-       /// Get the filename of the autosave file associated with the Buffer
-       support::FileName getAutosaveFileName() const;
        
 private:
        /// Try to load an autosave file associated to \c fn.
@@ -257,6 +264,10 @@ private:
        ReadStatus loadEmergency();
        /// Get the filename of the emergency file associated with the Buffer
        support::FileName getEmergencyFileName() const;
+       /// Get the filename of the autosave file associated with the Buffer
+       support::FileName getAutosaveFileName() const;
+       ///
+       void moveAutosaveFile(support::FileName const & old) const;
        //@}
 
 public:
@@ -277,19 +288,21 @@ public:
            method with a string stream if the output is supposed to go to a
            file. \code
            ofdocstream ofs;
+           otexstream os(ofs, texrow);
            ofs.open("test.tex");
-           writeLaTeXSource(ofs, ...);
+           writeLaTeXSource(os, ...);
            ofs.close();
            \endcode is NOT equivalent to \code
            odocstringstream oss;
-           writeLaTeXSource(oss, ...);
+           otexstream os(oss, texrow);
+           writeLaTeXSource(os, ...);
            ofdocstream ofs;
            ofs.open("test.tex");
            ofs << oss.str();
            ofs.close();
            \endcode
         */
-       void writeLaTeXSource(odocstream & os,
+       void writeLaTeXSource(otexstream & os,
                           std::string const & original_path,
                           OutputParams const &,
                           bool output_preamble = true,
@@ -304,8 +317,7 @@ public:
                             bool only_body = false) const;
        ///
        void makeLyXHTMLFile(support::FileName const & filename,
-                            OutputParams const & runparams_in,
-                            bool only_body = false) const;
+                            OutputParams const & runparams_in) const;
        ///
        void writeLyXHTMLSource(odocstream & os,
                             OutputParams const & runparams_in,
@@ -365,9 +377,6 @@ public:
        /// Get the name and type of the log.
        std::string logName(LogType * type = 0) const;
 
-       /// Change name of buffer. Updates "read-only" flag.
-       void setFileName(std::string const & newfile);
-
        /// Set document's parent Buffer.
        void setParent(Buffer const *);
        Buffer const * parent() const;
@@ -407,13 +416,6 @@ public:
        /// Set buffer read-only flag
        void setReadonly(bool flag = true);
 
-       /// returns \c true if the buffer contains a LaTeX document
-       bool isLatex() const;
-       /// returns \c true if the buffer contains a DocBook document
-       bool isDocBook() const;
-       /// returns \c true if the buffer contains a Wed document
-       bool isLiterate() const;
-
        /** Validate a buffer for LaTeX.
            This validates the buffer, and returns a struct for use by
            #makeLaTeX# and others. Its main use is to figure out what
@@ -444,17 +446,22 @@ public:
        void invalidateBibinfoCache() const;
        /// This invalidates the cache of files we need to check.
        void invalidateBibfileCache() const;
-       /// Updates the cached bibliography information.
-       /// Note that you MUST call this method to update the cache. It will
-       /// not happen otherwise. (Currently, it is called at the start of
-       /// updateBuffer() and from GuiCitation.)
+       /// Updates the cached bibliography information, checking first to see
+       /// whether the cache is valid. If so, we do nothing. If not, then we
+       /// reload all the BibTeX info.
        /// Note that this operates on the master document.
-       void checkBibInfoCache() const;
+       void reloadBibInfoCache() const;
        /// \return the bibliography information for this buffer's master,
        /// or just for it, if it isn't a child.
        BiblioInfo const & masterBibInfo() const;
+       /// collect bibliography info from the various insets in this buffer.
+       void collectBibKeys() const;
+       /// add some BiblioInfo to our cache
+       void addBiblioInfo(BiblioInfo const & bi) const;
+       /// add a single piece of bibliography info to our cache
+       void addBibTeXInfo(docstring const & key, BibTeXInfo const & bi) const;
        ///
-       void fillWithBibKeys(BiblioInfo & keys) const;
+       bool citeLabelsValid() const;
        ///
        void getLabelList(std::vector<docstring> &) const;
 
@@ -508,6 +515,8 @@ public:
        /// Set by buffer_funcs' newFile.
        void setFullyLoaded(bool);
 
+       /// FIXME: Needed by RenderPreview.
+       graphics::PreviewLoader * loader() const;
        /// Update the LaTeX preview snippets associated with this buffer
        void updatePreviews() const;
        /// Remove any previewed LaTeX snippets associated with this buffer
@@ -525,7 +534,7 @@ public:
        /// Collect macro definitions in paragraphs
        void updateMacros() const;
        /// Iterate through the whole buffer and try to resolve macros
-       void updateMacroInstances() const;
+       void updateMacroInstances(UpdateType) const;
 
        /// List macro names of this buffer, the parent and the children
        void listMacroNames(MacroNameSet & macros) const;
@@ -541,7 +550,7 @@ public:
 
        /// Collect user macro names at loading time
        typedef std::set<docstring> UserMacroSet;
-       UserMacroSet usermacros;
+       mutable UserMacroSet usermacros;
 
        /// Replace the inset contents for insets which InsetCode is equal
        /// to the passed \p inset_code.
@@ -550,8 +559,8 @@ public:
 
        /// get source code (latex/docbook) for some paragraphs, or all paragraphs
        /// including preamble
-       void getSourceCode(odocstream & os, pit_type par_begin, pit_type par_end,
-               bool full_source) const;
+       void getSourceCode(odocstream & os, std::string const format,
+                          pit_type par_begin, pit_type par_end, bool full_source) const;
 
        /// Access to error list.
        /// This method is used only for GUI visualisation of Buffer related
@@ -595,11 +604,6 @@ public:
 
        
 
-       /// return the format of the buffer on a string
-       std::string bufferFormat() const;
-       /// return the default output format of the current backend
-       std::string getDefaultOutputFormat() const;
-
        ///
        bool doExport(std::string const & format, bool put_in_tempdir,
                bool includeall, std::string & result_file) const;
@@ -608,12 +612,6 @@ public:
                      bool includeall = false) const;
        ///
        bool preview(std::string const & format, bool includeall = false) const;
-       ///
-       bool isExportable(std::string const & format) const;
-       ///
-       std::vector<Format const *> exportableFormats(bool only_viewable) const;
-       ///
-       bool isExportableFormat(std::string const & format) const;
        /// mark the buffer as busy exporting something, or not
        void setExportStatus(bool e) const;
        ///
@@ -657,10 +655,14 @@ public:
        void checkChildBuffers();
 
 private:
-       ///
-       std::vector<std::string> backends() const;
+       /// Change name of buffer. Updates "read-only" flag.
+       void setFileName(support::FileName const & fname);
        ///
        void getLanguages(std::set<Language const *> &) const;
+       /// Checks whether any of the referenced bibfiles have changed since the
+       /// last time we loaded the cache. Note that this does NOT update the
+       /// cached information.
+       void checkIfBibInfoCacheIsValid() const;
        /// Update the list of all bibfiles in use (including bibfiles
        /// of loaded child documents).
        void updateBibfilesCache(UpdateScope scope = UpdateMaster) const;