]> git.lyx.org Git - lyx.git/blobdiff - src/buffer.h
spellchecker cleanup - fscked knows why pspell is broken, I am TOTALLY
[lyx.git] / src / buffer.h
index d46e715ef9ce590fff28ac73a8a799bef6c11695..dcb3fd17690188b779051b57dac497db1b0eff36 100644 (file)
@@ -1,15 +1,15 @@
 // -*- C++ -*-
 /* This file is part of
- * ====================================================== 
- * 
- *           LyX, The Document Processor        
+ * ======================================================
+ *
+ *           LyX, The Document Processor
  *           Copyright 1995 Matthias Ettrich
  *
  *           This file is Copyleft 1996
  *           Lars Gullik Bjønnes
  *
  * ====================================================== */
+
 #ifndef BUFFER_H
 #define BUFFER_H
 
 
 #include "LString.h"
 #include "undo.h"
-#include "undostack.h"
+#include "support/limited_stack.h"
+
 #include "lyxvc.h"
 #include "bufferparams.h"
 #include "texrow.h"
 #include "paragraph.h"
 
+#include <boost/shared_ptr.hpp>
+
 class BufferView;
 class LyXRC;
 class TeXErrors;
@@ -32,10 +35,7 @@ class LaTeXFeatures;
 class Language;
 class ParIterator;
 
-// When lyx 1.3.x starts we should enable this
-// btw. we should also test this with 1.2 so that we
-// do not get any surprises. (Lgb)
-//#define NO_COMPABILITY 1
+#define NO_COMPABILITY 1
 
 ///
 struct DEPCLEAN {
@@ -66,19 +66,19 @@ public:
            \param b  optional \c false by default
        */
        explicit Buffer(string const & file, bool b = false);
-       
+
        /// Destructor
        ~Buffer();
 
        /** High-level interface to buffer functionality.
            This function parses a command string and executes it
        */
-       bool dispatch(string const & command);
+       bool dispatch(string const & command, bool * result = 0);
 
        /// Maybe we know the function already by number...
-       bool dispatch(int ac, string const & argument);
+       bool dispatch(int ac, string const & argument, bool * result = 0);
 
-       /// 
+       ///
        void resizeInsets(BufferView *);
 
        /// Update window titles of all users.
@@ -97,19 +97,19 @@ public:
            Since we only can have one at the moment, we just reset it.
        */
        void delUser(BufferView *);
-       
+
        ///
        void redraw();
 
        /// Load the autosaved file.
        void loadAutoSaveFile();
-       
-       /** Reads a file. 
+
+       /** Reads a file.
            \param par if != 0 insert the file.
            \return \c false if method fails.
        */
        bool readFile(LyXLex &, Paragraph * par = 0);
-       
+
        /** Reads a file without header.
            \param par if != 0 insert the file.
            \return \c false if file is not completely read.
@@ -120,12 +120,14 @@ public:
        bool parseSingleLyXformat2Token(LyXLex &, Paragraph *& par,
                                        Paragraph *& return_par,
                                        string const & token, int & pos,
-                                       Paragraph::depth_type & depth, 
+                                       Paragraph::depth_type & depth,
                                        LyXFont &);
        ///
        void insertStringAsLines(Paragraph *&, lyx::pos_type &,
                                 LyXFont const &, string const &) const;
 #ifndef NO_COMPABILITY
+       ///
+       Inset * isErtInset(Paragraph * par, int pos) const;
        ///
        void insertErtContents(Paragraph * par, int & pos,
                               bool set_inactive = true);
@@ -141,32 +143,40 @@ public:
            Returns \c true if the save is successful, \c false otherwise.
        */
        bool save() const;
-       
+
        /// Write file. Returns \c false if unsuccesful.
-       bool writeFile(string const &, bool) const;
-       
+       bool writeFile(string const &) const;
+
        ///
        void writeFileAscii(string const & , int);
        ///
        void writeFileAscii(std::ostream &, int);
        ///
        string const asciiParagraph(Paragraph const *, unsigned int linelen,
-                                   bool noparbreak = false) const;
-       ///
+                                   bool noparbreak = false) const;
+       /// Just a wrapper for the method below, first creating the ofstream.
        void makeLaTeXFile(string const & filename,
                           string const & original_path,
-                          bool nice, bool only_body = false);
+                          bool nice,
+                          bool only_body = false,
+                          bool only_preamble = false);
+       ///
+       void makeLaTeXFile(std::ostream & os,
+                          string const & original_path,
+                          bool nice,
+                          bool only_body = false,
+                          bool only_preamble = false);
        /** LaTeX all paragraphs from par to endpar.
            \param \a endpar if == 0 then to the end
        */
        void latexParagraphs(std::ostream & os, Paragraph * par,
-                            Paragraph * endpar, TexRow & texrow) const;
+                            Paragraph * endpar, TexRow & texrow, bool moving_arg = false) const;
        ///
        void simpleDocBookOnePar(std::ostream &,
                                 Paragraph * par, int & desc_on,
                                 Paragraph::depth_type depth) const ;
        ///
-       void simpleLinuxDocOnePar(std::ostream & os, Paragraph * par, 
+       void simpleLinuxDocOnePar(std::ostream & os, Paragraph * par,
                                  Paragraph::depth_type depth);
        ///
        void makeLinuxDocFile(string const & filename,
@@ -175,10 +185,10 @@ public:
        void makeDocBookFile(string const & filename,
                             bool nice, bool only_body = false);
        /// Open SGML/XML tag.
-       void sgmlOpenTag(std::ostream & os, Paragraph::depth_type depth,
+       int sgmlOpenTag(std::ostream & os, Paragraph::depth_type depth, bool mixcont,
                string const & latexname) const;
        /// Closes SGML/XML tag.
-       void sgmlCloseTag(std::ostream & os, Paragraph::depth_type depth,
+       int sgmlCloseTag(std::ostream & os, Paragraph::depth_type depth, bool mixcont,
                string const & latexname) const;
        ///
        void sgmlError(Paragraph * par, int pos, string const & message) const;
@@ -187,22 +197,22 @@ public:
        Language const * getLanguage() const;
        ///
        int runChktex();
-       ///
-       bool isLyxClean() const;
+       /// return true if the main lyx file does not need saving
+       bool isClean() const;
        ///
        bool isBakClean() const;
        ///
        bool isDepClean(string const & name) const;
-       
-       ///
-       void markLyxClean() const;
+
+       /// mark the main lyx file as not needing saving
+       void markClean() const;
 
        ///
        void markBakClean();
-       
+
        ///
        void markDepClean(string const & name);
-       
+
        ///
        void setUnnamed(bool flag = true);
 
@@ -216,7 +226,7 @@ public:
        string const & fileName() const;
 
        /// Returns the the path where the buffer lives.
-       /// It is always an absolute path. 
+       /// It is always an absolute path.
        string const & filePath() const;
 
        /** A transformed version of the file name, adequate for LaTeX.
@@ -226,7 +236,7 @@ public:
 
        /// Get the name and type of the log.
        std::pair<LogType, string> const getLogName() const;
+
        /// Change name of buffer. Updates "read-only" flag.
        void setFileName(string const & newfile);
 
@@ -248,8 +258,8 @@ public:
        /** returns \c true if the buffer contains either a LinuxDoc
            or DocBook document */
        bool isSGML() const;
-        /// returns \c true if the buffer contains a Wed document
-        bool isLiterate() 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
@@ -265,24 +275,7 @@ public:
        ///
        string const getIncludeonlyList(char delim = ',');
        ///
-       std::vector<std::pair<string, string> > const getBibkeyList();
-       ///
-       struct TocItem {
-               TocItem(Paragraph * p, int d, string const & s)
-                       : par(p), depth(d), str(s) {}
-               ///
-               Paragraph * par;
-               ///
-               int depth;
-               ///
-               string str;
-       };
-       ///
-       typedef std::vector<TocItem> SingleList;
-       ///
-       typedef std::map<string, SingleList> Lists;
-       ///
-       Lists const getLists() const;
+       std::vector<std::pair<string, string> > const getBibkeyList() const;
        ///
        std::vector<string> const getLabelList();
 
@@ -296,14 +289,14 @@ public:
        bool isMultiLingual();
 
        /// Does this mean that this is buffer local?
-       UndoStack undostack;
-       
-       /// Does this mean that this is buffer local? 
-       UndoStack redostack;
-       
+       limited_stack<boost::shared_ptr<Undo> > undostack;
+
+       /// Does this mean that this is buffer local?
+       limited_stack<boost::shared_ptr<Undo> > redostack;
+
        ///
        BufferParams params;
-       
+
        /** The list of paragraphs.
            This is a linked list of paragraph, this list holds the
            whole contents of the document.
@@ -326,10 +319,10 @@ public:
 private:
        /// is save needed
        mutable bool lyx_clean;
-       
+
        /// is autosave needed
        mutable bool bak_clean;
-       
+
        /// is this a unnamed file (New...)
        bool unnamed;
 
@@ -365,8 +358,8 @@ public:
                typedef ptrdiff_t difference_type;
                typedef Inset * pointer;
                typedef Inset & reference;
-               
-               
+
+
                ///
                inset_iterator() : par(0) /*, it(0)*/ {}
                //
@@ -398,9 +391,10 @@ public:
                        }
                        return tmp;
                }
+
                ///
                Inset * operator*() { return *it; }
-               
+
                ///
                Paragraph * getPar() { return par; }
                ///
@@ -457,21 +451,21 @@ void Buffer::delUser(BufferView *)
 {
        users = 0;
 }
-       
+
 
 inline
 Language const * Buffer::getLanguage() const
 {
        return params.language;
 }
-       
+
 
 inline
-bool Buffer::isLyxClean() const
+bool Buffer::isClean() const
 {
        return lyx_clean;
 }
-       
+
 
 inline
 bool Buffer::isBakClean() const
@@ -481,14 +475,14 @@ bool Buffer::isBakClean() const
 
 
 inline
-void Buffer::markLyxClean() const
-{ 
+void Buffer::markClean() const
+{
        if (!lyx_clean) {
-               lyx_clean = true; 
+               lyx_clean = true;
                updateTitles();
        }
        // if the .lyx file has been saved, we don't need an
-       // autosave 
+       // autosave
        bak_clean = true;
 }
 
@@ -558,28 +552,10 @@ BufferView * Buffer::getUser() const
 }
 
 
-inline  
-void Buffer::setParentName(string const & name)
-{
-       params.parentname = name;    
-}
-
-
-///
-inline
-bool operator==(Buffer::TocItem const & a, Buffer::TocItem const & b)
-{
-       return a.par == b.par && a.str == b.str;
-       // No need to compare depth.
-}
-
-
-///
 inline
-bool operator!=(Buffer::TocItem const & a, Buffer::TocItem const & b)
+void Buffer::setParentName(string const & name)
 {
-       return !(a == b);
-       // No need to compare depth.
+       params.parentname = name;
 }