]> git.lyx.org Git - lyx.git/blobdiff - src/Buffer.h
Amend 6c3447c8: FindAdv: sometimes a space is added on some math symbols
[lyx.git] / src / Buffer.h
index a917c6e9f74792d8185b6de18c18b08c4b9d4547..d9e7e325d4d9eae00e99a7d8b414a95b1fe4c25b 100644 (file)
@@ -12,6 +12,7 @@
 #ifndef BUFFER_H
 #define BUFFER_H
 
+#include "FuncCode.h"
 #include "OutputEnums.h"
 
 #include "support/unique_ptr.h"
@@ -38,7 +39,6 @@ class FuncRequest;
 class FuncStatus;
 class Inset;
 class InsetLabel;
-class Lexer;
 class Text;
 class LyXVC;
 class LaTeXFeatures;
@@ -66,6 +66,7 @@ namespace support {
 class DocFileName;
 class FileName;
 class FileNameList;
+class Lexer;
 } // namespace support
 
 namespace graphics {
@@ -153,7 +154,7 @@ public:
        /// Destructor
        ~Buffer();
 
-       /// Clones the entire structure of which this Buffer is part, 
+       /// Clones the entire structure of which this Buffer is part,
        /// cloning all the children, too.
        Buffer * cloneWithChildren() const;
        /// Just clones this single Buffer. For autosave.
@@ -161,6 +162,10 @@ public:
        ///
        bool isClone() const;
 
+       /// Helper method: dispatch this branch activation LFUN
+       /// Retunrs true if the function has been dispatched
+       bool branchActivationDispatch(FuncCode act, docstring const & branch);
+
        /** High-level interface to buffer functionality.
            This function parses a command string and executes it.
        */
@@ -169,9 +174,12 @@ public:
        /// Maybe we know the function already by number...
        void dispatch(FuncRequest const & func, DispatchResult & result);
 
+       /// Helper method: Is this buffer activation LFUN enabled?
+       bool branchActivationEnabled(FuncCode act, docstring const & branch) const;
+
        /// Can this function be exectued?
        /// \return true if we made a decision
-       bool getStatus(FuncRequest const & cmd, FuncStatus & flag);
+       bool getStatus(FuncRequest const & cmd, FuncStatus & flag) const;
 
        ///
        DocIterator getParFromID(int id) const;
@@ -218,9 +226,14 @@ public:
 //FIXME: The following function should be private
 //private:
        /// read the header, returns number of unknown tokens
-       int readHeader(Lexer & lex);
+       int readHeader(support::Lexer & lex);
 
        double fontScalingFactor() const;
+       /// check for active synctex support:
+       /// - either the document has synchronize output enabled or
+       /// - there is a converter to dvi or pdf defined with synctex command line argument
+       ///   this is the "expert mode", false positives are possible
+       bool isSyncTeXenabled() const;
 
 private:
        ///
@@ -234,14 +247,14 @@ private:
        /// Reads a file without header.
        /// \param par if != 0 insert the file.
        /// \return \c true if file is not completely read.
-       bool readDocument(Lexer &);
+       bool readDocument(support::Lexer &);
        /// Try to extract the file from a version control container
        /// before reading if the file cannot be found.
        /// \sa LyXVC::file_not_found_hook
        ReadStatus extractFromVC();
        /// Reads the first tag of a LyX File and
        /// returns the file format number.
-       ReadStatus parseLyXFormat(Lexer & lex, support::FileName const & fn,
+       ReadStatus parseLyXFormat(support::Lexer & lex, support::FileName const & fn,
                int & file_format) const;
        /// Convert the LyX file to the LYX_FORMAT using
        /// the lyx2lyx script and returns the filename
@@ -521,11 +534,9 @@ public:
        void invalidateCiteLabels() const;
        ///
        bool citeLabelsValid() const;
-       ///
-       void getLabelList(std::vector<docstring> &) const;
-
-       /// This removes the .aux and .bbl files from the temp dir.
-       void removeBiblioTempFiles() const;
+       /// three strings: plain label name, label as gui string, and
+       /// dereferenced label name
+       void getLabelList(std::vector<std::tuple<docstring, docstring, docstring>> &) const;
 
        ///
        void changeLanguage(Language const * from, Language const * to);
@@ -567,6 +578,8 @@ public:
        ParIterator par_iterator_end();
        ///
        ParConstIterator par_iterator_end() const;
+       /// Is document empty ?
+       bool empty() const;
 
        // Position of the child buffer where it appears first in the master.
        DocIterator firstChildPosition(Buffer const * child);
@@ -644,6 +657,8 @@ public:
 
        ///
        Undo & undo();
+       ///
+       Undo const & undo() const;
 
        /// This function is called when the buffer is changed.
        void changed(bool update_metrics) const;
@@ -659,6 +674,8 @@ public:
        void setBusy(bool on) const;
        /// Update window titles of all users.
        void updateTitles() const;
+       /// Schedule redraw of work areas
+       void scheduleRedrawWorkAreas() const;
        /// Reset autosave timers for all users.
        void resetAutosaveTimers() const;
        ///
@@ -684,6 +701,8 @@ private:
        ///
        ExportStatus doExport(std::string const & target, bool put_in_tempdir,
                std::string & result_file) const;
+       /// This removes the .aux and .bbl files from the temp dir.
+       void removeBiblioTempFiles() const;
        /// target is a format name optionally followed by a space
        /// and a destination file-name
        ExportStatus doExport(std::string const & target, bool put_in_tempdir,
@@ -726,13 +745,17 @@ public:
        /// Updates screen labels and some other information associated with
        /// insets and paragraphs. Actually, it's more like a general "recurse
        /// through the Buffer" routine, that visits all the insets and paragraphs.
-       void updateBuffer() const { updateBuffer(UpdateMaster, InternalUpdate); }
+       void updateBuffer() const;
        /// \param scope: whether to start with the master document or just
        /// do this one.
        /// \param output: whether we are preparing for output.
        void updateBuffer(UpdateScope scope, UpdateType utype) const;
        ///
        void updateBuffer(ParIterator & parit, UpdateType utype, bool const deleted = false) const;
+       /// Forces an updateBuffer() call
+       void forceUpdate() const;
+       /// Do we need to call updateBuffer()?
+       bool needUpdate() const;
 
        /// Spellcheck starting from \p from.
        /// \p from initial position, will then points to the next misspelled
@@ -742,6 +765,8 @@ public:
        /// \return progress if a new word was found.
        int spellCheck(DocIterator & from, DocIterator & to,
                WordLangTuple & word_lang, docstring_list & suggestions) const;
+       /// Marks the whole buffer to be checked (again)
+       void requestSpellcheck();
        ///
        void checkChildBuffers();
        ///
@@ -769,25 +794,31 @@ public:
        int wordCount() const;
        int charCount(bool with_blanks) const;
 
-       /// FIXME: dummy function for now
+       ///
        bool areChangesPresent() const;
 
        ///
        void registerBibfiles(docstring_list const & bf) const;
        ///
        support::FileName getBibfilePath(docstring const & bibid) const;
-
+       /// Return the list with all bibfiles in use (including bibfiles
+       /// of loaded child documents).
+       docstring_list const &
+               getBibfiles(UpdateScope scope = UpdateMaster) const;
+       ///
+       void scheduleBiblioTempRemoval() const { removeBiblioTemps = true; }
        /// routines for dealing with possible self-inclusion
        void pushIncludedBuffer(Buffer const * buf) const;
        void popIncludedBuffer() const;
        bool isBufferIncluded(Buffer const * buf) const;
 private:
        void clearIncludeList() const;
-
-private:
+       ///
        friend class MarkAsExporting;
        /// mark the buffer as busy exporting something, or not
        void setExportStatus(bool e) const;
+       ///
+       mutable bool removeBiblioTemps = false;
 
        ///
        References & getReferenceCache(docstring const & label);
@@ -799,10 +830,6 @@ private:
        /// last time we loaded the cache. Note that this does NOT update the
        /// cached information.
        void checkIfBibInfoCacheIsValid() const;
-       /// Return the list with all bibfiles in use (including bibfiles
-       /// of loaded child documents).
-       docstring_list const &
-               getBibfiles(UpdateScope scope = UpdateMaster) const;
        ///
        void collectChildren(ListOfBuffers & children, bool grand_children) const;