]> git.lyx.org Git - lyx.git/blobdiff - src/Buffer.h
* pl.po remerge by autotools
[lyx.git] / src / Buffer.h
index 97c339d198ea7bcafe7e1bf0495a54a447b7a7f7..fd17ac14f0a40ab611bd22a3d3413db1c07eea51 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;
@@ -130,8 +133,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
        };
 
        ///
@@ -164,26 +167,6 @@ public:
        /// \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 &);
-       
-       /// Reads the first tag of a LyX File and 
-       /// returns the file format number.
-       ReadStatus parseLyXFormat(Lexer & lex, 
-               support::FileName const & fn, int & file_format) const;
-       /// read the header, returns number of unknown tokens
-       int readHeader(Lexer & lex);
-       /** Reads a file without header.
-           \param par if != 0 insert the file.
-           \return \c true if file is not completely read.
-       */
-       bool readDocument(Lexer &);
-       /// Convert the LyX file to the LYX_FORMAT using
-       /// the lyx2lyx script and returns the filename
-       /// of the temporary file to be read
-       ReadStatus convertLyXFormat(support::FileName const & fn, 
-               support::FileName & tmpfile, int from_format);
-
        ///
        DocIterator getParFromID(int id) const;
        /// do we have a paragraph with this id?
@@ -197,35 +180,89 @@ public:
            Returns \c true if the save is successful, \c false otherwise.
        */
        bool save() const;
+       /// 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;
-       /// save emergency file
-       /// \return a status message towards the user.
-       docstring emergencyWrite();
-       /// Write file. Returns \c false if unsuccesful.
+       /// Write file. Returns \c false if unsuccessful.
        bool writeFile(support::FileName const &) const;
 
-       /// Loads a LyX file \c fn into the buffer. This function
+       /// \name Functions involved in reading files/strings.
+       //@{
+       /// Loads the LyX file into the buffer. This function
        /// tries to extract the file from version control if it
        /// cannot be found. If it can be found, it will try to
        /// read an emergency save file or an autosave file.
-       ReadStatus loadLyXFile(support::FileName const & fn);
+       /// \sa loadThisLyXFile
+       ReadStatus loadLyXFile();
+       /// Loads the LyX file \c fn into the buffer. If you want
+       /// to check for files in a version control container,
+       /// emergency or autosave files, one should use \c loadLyXFile.
+       /// /sa loadLyXFile
+       ReadStatus loadThisLyXFile(support::FileName const & fn);
+       /// read a new document from a string
+       bool readString(std::string const &);
+       /// Reloads the LyX file
+       ReadStatus reload();
+//FIXME: The following function should be private
+//private:
+       /// read the header, returns number of unknown tokens
+       int readHeader(Lexer & lex);
+
+private:
+       /// 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.
+       /// \param par if != 0 insert the file.
+       /// \return \c true if file is not completely read.
+       bool readDocument(Lexer &);
        /// Try to extract the file from a version control container
        /// before reading if the file cannot be found. This is only
        /// implemented for RCS.
        /// \sa LyXVC::file_not_found_hook
-       ReadStatus readFromVC(support::FileName const & fn);
-       /// Try to read an emergency file associated to \c fn. 
-       ReadStatus readEmergency(support::FileName const & fn);
-       /// Try to read an autosave file associated to \c fn.
-       ReadStatus readAutosave(support::FileName const & fn);
+       ReadStatus extractFromVC();
+       /// Reads the first tag of a LyX File and 
+       /// returns the file format number.
+       ReadStatus parseLyXFormat(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
+       /// of the temporary file to be read
+       ReadStatus convertLyXFormat(support::FileName const & fn, 
+               support::FileName & tmpfile, int from_format);
+       //@}
 
-       /// Reloads the LyX file
-       bool reload();
+public:
+       /// \name Functions involved in autosave and emergency files.
+       //@{
+       /// 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 function should be private
+//private:
+       ///
+       void removeAutosaveFile() const;
+       
+private:
+       /// Try to load an autosave file associated to \c fn.
+       ReadStatus loadAutosave();
+       /// Try to load an emergency file associated to \c fn. 
+       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:
        /// Fill in the ErrorList with the TeXErrors
        void bufferErrors(TeXErrors const &, ErrorList &) const;
 
@@ -243,19 +280,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,
@@ -291,9 +330,6 @@ public:
        /// whether or not disk file has been externally modified
        bool isExternallyModified(CheckMethod method) const;
 
-       /// save timestamp and checksum of the given file.
-       void saveCheckSum(support::FileName const & file) const;
-
        /// mark the main lyx file as not needing saving
        void markClean() const;
 
@@ -334,9 +370,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;
@@ -413,17 +446,20 @@ 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;
-       ///
-       void fillWithBibKeys(BiblioInfo & keys) 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 getLabelList(std::vector<docstring> &) const;
 
@@ -477,6 +513,11 @@ public:
        /// Set by buffer_funcs' newFile.
        void setFullyLoaded(bool);
 
+       /// Update the LaTeX preview snippets associated with this buffer
+       void updatePreviews() const;
+       /// Remove any previewed LaTeX snippets associated with this buffer
+       void removePreviews() const;
+
        /// Our main text (inside the top InsetText)
        Text & text() const;
 
@@ -505,7 +546,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.
@@ -514,8 +555,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
@@ -557,27 +598,15 @@ public:
        ///
        bool hasGuiDelegate() const;
 
-       ///
-       void autoSave() const;
-       ///
-       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;
-       /// Get the filename of the autosave file associated with \c fn
-       support::FileName getAutosaveFileNameFor(support::FileName const & fn)
-               const;
-       /// Get the filename of the emergency file associated with the Buffer
-       support::FileName getEmergencyFileName() const;
-       /// Get the filename of the emergency file associated with \c fn
-       support::FileName getEmergencyFileNameFor(support::FileName const & fn)
-               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;
+       /// return the output flavor of \p format or the default
+       OutputParams::FLAVOR getOutputFlavor(
+                 std::string const format = std::string()) const;
 
        ///
        bool doExport(std::string const & format, bool put_in_tempdir,
@@ -636,10 +665,20 @@ public:
        void checkChildBuffers();
 
 private:
+       /// Change name of buffer. Updates "read-only" flag.
+       void setFileName(support::FileName const & fname);
        ///
        std::vector<std::string> backends() const;
+       /// A cache for the default flavors
+       typedef std::map<std::string, OutputParams::FLAVOR> DefaultFlavorCache;
+       ///
+       mutable DefaultFlavorCache default_flavors_;
        ///
        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;