]> git.lyx.org Git - lyx.git/blobdiff - src/Buffer.h
* Add possibility to append active branch names to the output file name (#3105).
[lyx.git] / src / Buffer.h
index db5f9737e2af97b8b5dc188ae85fc9d44c8b6aa5..6cb04bb7c0b72693b0bfe5a299554fb471ccaae6 100644 (file)
 #ifndef BUFFER_H
 #define BUFFER_H
 
+#include "update_flags.h"
+
 #include "insets/InsetCode.h"
 
 #include "support/strfwd.h"
 #include "support/types.h"
 #include "support/SignalSlot.h"
 
+#include <list>
 #include <string>
 #include <vector>
 
@@ -26,10 +29,14 @@ namespace lyx {
 
 class BiblioInfo;
 class BufferParams;
+class BufferSet;
+class DispatchResult;
 class DocIterator;
+class docstring_list;
 class ErrorItem;
 class ErrorList;
 class FuncRequest;
+class FuncStatus;
 class Inset;
 class InsetRef;
 class InsetLabel;
@@ -53,6 +60,7 @@ class TeXErrors;
 class TexRow;
 class TocBackend;
 class Undo;
+class WordLangTuple;
 
 namespace frontend {
 class GuiBufferDelegate;
@@ -109,25 +117,29 @@ public:
                timestamp_method, ///< Use timestamp, and checksum if timestamp has changed
        };
 
-       /** Constructor
-           \param file
-           \param b  optional \c false by default
-       */
+       ///
+       enum UpdateScope {
+               UpdateMaster,
+               UpdateChildOnly
+       };
+
+       /// Constructor
        explicit Buffer(std::string const & file, bool b = false);
 
        /// Destructor
        ~Buffer();
 
        /** High-level interface to buffer functionality.
-           This function parses a command string and executes it
+           This function parses a command string and executes it.
        */
-       bool dispatch(std::string const & command, bool * result = 0);
+       void dispatch(std::string const & command, DispatchResult & result);
 
        /// Maybe we know the function already by number...
-       bool dispatch(FuncRequest const & func, bool * result = 0);
+       void dispatch(FuncRequest const & func, DispatchResult & result);
 
-       /// Load the autosaved file.
-       void loadAutoSaveFile();
+       /// Can this function be exectued?
+       /// \return true if we made a decision
+       bool getStatus(FuncRequest const & cmd, FuncStatus & flag);
 
        /// read a new document from a string
        bool readString(std::string const &);
@@ -139,7 +151,7 @@ public:
 
        /** Reads a file without header.
            \param par if != 0 insert the file.
-           \return \c false if file is not completely read.
+           \return \c true if file is not completely read.
        */
        bool readDocument(Lexer &);
 
@@ -166,7 +178,7 @@ public:
        /// Write file. Returns \c false if unsuccesful.
        bool writeFile(support::FileName const &) const;
 
-  /// Loads LyX file \c filename into buffer, *  and \return success
+       /// Loads LyX file \c filename into buffer, *  and \return success
        bool loadLyXFile(support::FileName const & s);
 
        /// Fill in the ErrorList with the TeXErrors
@@ -211,6 +223,14 @@ public:
        void writeDocBookSource(odocstream & os, std::string const & filename,
                             OutputParams const & runparams_in,
                             bool only_body = false) const;
+       ///
+       void makeLyXHTMLFile(support::FileName const & filename,
+                            OutputParams const & runparams_in,
+                            bool only_body = false) const;
+       ///
+       void writeLyXHTMLSource(odocstream & os,
+                            OutputParams const & runparams_in,
+                            bool only_body = false) const;
        /// returns the main language for the buffer (document)
        Language const * language() const;
        /// get l10n translated to the buffers language
@@ -264,7 +284,7 @@ public:
        */
        std::string latexName(bool no_path = true) const;
 
-       /// Get thee name and type of the log.
+       /// Get the name and type of the log.
        std::string logName(LogType * type = 0) const;
 
        /// Change name of buffer. Updates "read-only" flag.
@@ -272,7 +292,10 @@ public:
 
        /// Set document's parent Buffer.
        void setParent(Buffer const *);
-       Buffer const * parent();
+       Buffer const * parent() const;
+
+       // Collect all relative buffer
+       std::vector<Buffer const *> allRelatives() const;
 
        /** Get the document's master (or \c this if this is not a
            child document)
@@ -281,6 +304,9 @@ public:
 
        /// \return true if \p child is a child of this \c Buffer.
        bool isChild(Buffer * child) const;
+       
+       /// return a vector with all children and grandchildren
+       std::vector<Buffer *> getChildren() const;
 
        /// Is buffer read-only?
        bool isReadonly() const;
@@ -308,12 +334,13 @@ public:
 
        /// Update the cache with all bibfiles in use (including bibfiles
        /// of loaded child documents).
-       void updateBibfilesCache() const;
+       void updateBibfilesCache(UpdateScope scope = UpdateMaster) const;
        ///
        void invalidateBibinfoCache();
        /// Return the cache with all bibfiles in use (including bibfiles
        /// of loaded child documents).
-       support::FileNameList const & getBibfilesCache() const;
+       support::FileNameList const & 
+               getBibfilesCache(UpdateScope scope = UpdateMaster) const;
        /// \return the bibliography information for this buffer's master,
        /// or just for it, if it isn't a child.
        BiblioInfo const & masterBibInfo() const;
@@ -359,6 +386,9 @@ public:
        ///
        ParConstIterator par_iterator_end() const;
 
+       // Position of the child buffer where it appears first in the master.
+       DocIterator firstChildPosition(Buffer const * child);
+
        /** \returns true only when the file is fully loaded.
         *  Used to prevent the premature generation of previews
         *  and by the citation inset.
@@ -426,7 +456,7 @@ public:
        /// This function is called when the buffer structure is changed.
        void structureChanged() const;
        /// This function is called when some parsing error shows up.
-       void errors(std::string const & err) const;
+       void errors(std::string const & err, bool from_master = false) const;
        /// This function is called when the buffer busy status change.
        void setBusy(bool on) const;
        /// This function is called when the buffer readonly status change.
@@ -438,13 +468,24 @@ public:
        ///
        void message(docstring const & msg) const;
 
+       ///
        void setGuiDelegate(frontend::GuiBufferDelegate * gui);
+       ///
+       bool hasGuiDelegate() const;
 
        ///
        void autoSave() const;
+       ///
+       void removeAutosaveFile() const;
+       ///
+       void moveAutosaveFile(support::FileName const & old) const;
+       ///
+       support::FileName getAutosaveFilename() const;
 
        /// 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,
@@ -466,9 +507,26 @@ public:
        void setInsetLabel(docstring const & label, InsetLabel const * il);
        InsetLabel const * insetLabel(docstring const & label) const;
 
-       // FIXME: buf should should be const because updateLabels() modifies
-       // the contents of the paragraphs.
-       void updateLabels(bool childonly = false) const;
+       /// return a list of all used branches (also in children)
+       void getUsedBranches(std::list<docstring> &, bool const from_master = false) const;
+
+       /// sets the buffer_ member for every inset in this buffer.
+       // FIXME This really shouldn't be needed, but at the moment it's not
+       // clear how to do it just for the individual pieces we need.
+       void setBuffersForInsets() const;
+       ///
+       void updateLabels(UpdateScope = UpdateMaster) const;
+       ///
+       void updateLabels(ParIterator & parit) const;
+
+       /// Spellcheck starting from \p from.
+       /// \p from initial position, will then points to the next misspelled
+       ///    word.
+       /// \p to will points to the end of the next misspelled word.
+       /// \p word_lang will contain the found misspelled word.
+       /// \return progress if a new word was found.
+       int spellCheck(DocIterator & from, DocIterator & to,
+               WordLangTuple & word_lang, docstring_list & suggestions) const;
 
 private:
        /// search for macro in local (buffer) table or in children
@@ -480,6 +538,9 @@ private:
        void updateMacros(DocIterator & it,
                                     DocIterator & scope) const;
 
+       ///
+       void collectRelatives(BufferSet & bufs) const;
+
        ///
        bool readFileHelper(support::FileName const & s);
        ///
@@ -490,6 +551,11 @@ private:
        ReadStatus readFile(Lexer &, support::FileName const & filename,
                            bool fromString = false);
 
+       /** If we have branches that use the file suffix
+           feature, return the file name with suffix appended.
+       */
+       support::FileName exportFileName() const;
+
        /// Use the Pimpl idiom to hide the internals.
        class Impl;
        /// The pointer never changes although *pimpl_'s contents may.