]> git.lyx.org Git - lyx.git/blobdiff - src/buffer.h
GUI-indep toolbar and menus mostly work !
[lyx.git] / src / buffer.h
index f60b0d8f6947d35251712afe00dcd67c1ca0c09d..1d5609a86e4177df95321d5abc6b128820ecf16a 100644 (file)
 #include "lyxvc.h"
 #include "bufferparams.h"
 #include "texrow.h"
-#include "support/filetools.h"
-#include "lyx_gui_misc.h"
 
 
 class LyXRC;
 class TeXErrors;
 class LaTeXFeatures;
-
-extern void updateAllVisibleBufferRelatedPopups();
+class auto_mem_buffer;
 
 ///
 struct DEPCLEAN {
@@ -62,7 +59,7 @@ public:
        /**@name Constructors and destructor */
        //@{
        ///
-       Buffer(string const & file, LyXRC * lyxrc = 0, bool b = false);
+       explicit Buffer(string const & file, bool b = false);
        
        ///
        ~Buffer();
@@ -82,17 +79,17 @@ public:
        /** high-level interface to buffer functionality
            This function parses a command string and executes it
        */
-       void Dispatch(const string & command);
+       bool Dispatch(string const & command);
 
        /// Maybe we know the function already by number...
-       void Dispatch(int ac, const string & argument);
+       bool Dispatch(int ac, string const & argument);
+
+       /// and have an xtl buffer to work with.
+       bool Dispatch(int, auto_mem_buffer &);
 
        /// should be changed to work for a list.
-       void resize() {
-               if (users) {
-                       users->resize();
-               }
-       }
+       void resize();
+       void resizeInsets(BufferView *);
 
        /// Update window titles of all users
        void updateTitles() const;
@@ -115,7 +112,7 @@ public:
        void redraw() {
                users->redraw(); 
                users->fitCursor(); 
-               users->updateScrollbar();
+               //users->updateScrollbar();
        }
 
        ///
@@ -131,11 +128,22 @@ public:
            If par is given, the file is inserted. */
        bool readLyXformat2(LyXLex &, LyXParagraph * par = 0);
 
+       /* This parses a single LyXformat-Token */
+       bool parseSingleLyXformat2Token(LyXLex &, LyXParagraph *& par,
+                                       LyXParagraph *& return_par,
+                                       string const & token, int & pos,
+                                       char & depth, LyXFont &
+#ifndef NEW_INSETS
+                                       ,LyXParagraph::footnote_flag &,
+                                       LyXParagraph::footnote_kind &
+#endif
+               );
+
        /** Save file
            Takes care of auto-save files and backup file if requested.
            Returns true if the save is successful, false otherwise.
        */
-       bool save(bool makeBackup) const;
+       bool save() const;
        
        /// Write file. Returns false if unsuccesful.
        bool writeFile(string const &, bool) const;
@@ -147,6 +155,12 @@ public:
        void makeLaTeXFile(string const & filename,
                           string const & original_path,
                           bool nice, bool only_body = false);
+       //
+       // LaTeX all paragraphs from par to endpar,
+       // if endpar == 0 then to the end
+       //
+       void latexParagraphs(std::ostream & os, LyXParagraph *par,
+                            LyXParagraph *endpar, TexRow & texrow) const;
 
        ///
        int runLaTeX();
@@ -161,9 +175,11 @@ public:
        int runChktex();
 
        ///
-       void makeLinuxDocFile(string const & filename, int column);
+       void makeLinuxDocFile(string const & filename,
+                             bool nice, bool only_body = false);
        ///
-       void makeDocBookFile(string const & filename, int column);
+       void makeDocBookFile(string const & filename,
+                            bool nice, bool only_body = false);
 
        /// returns the main language for the buffer (document)
        string GetLanguage() const {
@@ -173,9 +189,6 @@ public:
        ///
        bool isLyxClean() const { return lyx_clean; }
        
-       /// changed Heinrich Bauer, 23/03/98
-       bool isDviClean() const;
-       
         ///
         bool isNwClean() const { return nw_clean; }
        
@@ -196,9 +209,6 @@ public:
                bak_clean = true;
        }
 
-       /// changed Heinrich Bauer, 23/03/98
-       void markDviClean();
-       
         ///
         void markNwClean() { nw_clean = true; }
        
@@ -208,9 +218,6 @@ public:
        ///
        void markDepClean(string const & name);
        
-       ///
-       void markDviDirty();
-       
         ///
         void markNwDirty() { nw_clean = false; }
        
@@ -220,9 +227,7 @@ public:
                        lyx_clean = false;
                        updateTitles();
                }
-               dvi_clean_tmpd = false;
-               dvi_clean_orgd = false;
-                nw_clean = false;
+               nw_clean = false;
                bak_clean = false;
                DEPCLEAN * tmp = dep_clean;
                while (tmp) {
@@ -236,10 +241,7 @@ public:
 
        /** A transformed version of the file name, adequate for LaTeX  
            The path is stripped if no_path is true (default) */
-       string getLatexName(bool no_path = true) const {
-               return ChangeExtension(MakeLatexName(filename), 
-                                      ".tex", no_path); 
-       }
+       string getLatexName(bool no_path = true) const;
 
        /// Change name of buffer. Updates "read-only" flag.
        void fileName(string const & newfile);
@@ -251,16 +253,7 @@ public:
        bool isReadonly() const { return read_only; }
 
        /// Set buffer read-only flag
-       void setReadonly(bool flag = true) {
-               if (read_only != flag) {
-                       read_only = flag; 
-                       updateTitles();
-                       updateAllVisibleBufferRelatedPopups();
-               }
-               if (read_only) {
-                       WarnReadonly(filename);
-               }
-       }
+       void setReadonly(bool flag = true);
 
        /// returns true if the buffer contains a LaTeX document
        bool isLatex() const;
@@ -268,7 +261,8 @@ public:
        bool isLinuxDoc() const;
        /// returns true if the buffer contains a DocBook document
        bool isDocBook() const;
-       /// returns true if the buffer contains either a LinuxDoc or DocBook document
+       /** returns true if the buffer contains either a LinuxDoc
+           or DocBook document */
        bool isSGML() const;
         /// returns true if the buffer contains a Wed document
         bool isLiterate() const;
@@ -278,25 +272,50 @@ public:
 
        /** 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 commands
-           and packages need to be included in the LaTeX file. It (should)
-           also check that the needed constructs are there (i.e. that the \refs
-           points to coresponding \labels). It should perhaps inset "error"
-           insets to help the user correct obvious mistakes.
+           makeLaTeX and others. Its main use is to figure out what
+           commands and packages need to be included in the LaTeX file.
+           It (should) also check that the needed constructs are there
+           (i.e. that the \refs points to coresponding \labels). It
+           should perhaps inset "error" insets to help the user correct
+           obvious mistakes.
        */
        void validate(LaTeXFeatures &) const;
 
        ///
        string getIncludeonlyList(char delim = ',');
        ///
-       string getReferenceList(char delim = '|');
+       std::vector<std::pair<string,string> > getBibkeyList();
+       ///
+       struct TocItem {
+               LyXParagraph * par;
+               int depth;
+               string str;
+       };
+       ///
+       enum TocType {
+               ///
+               TOC_TOC = 0,
+               ///
+               TOC_LOF,
+               ///
+               TOC_LOT,
+               ///
+               TOC_LOA
+       };
        ///
-       string getBibkeyList(char delim = '|');
+       std::vector<std::vector<TocItem> > getTocList();
+       ///
+       std::vector<string> getLabelList();
 
        /** This will clearly have to change later. Later we can have more
            than one user per buffer. */
        BufferView * getUser() const { return users; }
 
+       ///
+       void ChangeLanguage(Language const * from, Language const * to);
+       ///
+       bool isMultiLingual();
+
         //@}
 
        /// Does this mean that this is buffer local?
@@ -328,59 +347,50 @@ public:
        /// Used when typesetting to place errorboxes.
        TexRow texrow;
 private:
+#ifndef NEW_INSETS
         ///
-        void linuxDocHandleFootnote(ostream & os,
+        void linuxDocHandleFootnote(std::ostream & os,
                                    LyXParagraph * & par, int const depth);
+#endif
         ///
-       void DocBookHandleCaption(ostream & os, string & inner_tag,
+       void DocBookHandleCaption(std::ostream & os, string & inner_tag,
                                  int const depth, int desc_on,
                                  LyXParagraph * & par);
+#ifndef NEW_INSETS
         ///
-       void DocBookHandleFootnote(ostream & os,
+       void DocBookHandleFootnote(std::ostream & os,
                                   LyXParagraph * & par, int const depth);
+#endif
        ///
-        void sgmlOpenTag(ostream & os, int depth,
+        void sgmlOpenTag(std::ostream & os, int depth,
                         string const & latexname) const;
         ///
-        void sgmlCloseTag(ostream & os, int depth,
+        void sgmlCloseTag(std::ostream & os, int depth,
                          string const & latexname) const;
        ///
        void LinuxDocError(LyXParagraph * par, int pos, char const * message);
         ///
-       void SimpleLinuxDocOnePar(ostream & os, LyXParagraph * par,
+       void SimpleLinuxDocOnePar(std::ostream & os, LyXParagraph * par,
                                  int desc_on, int const depth);
         ///
-       void SimpleDocBookOnePar(string & file, string & extra,
+       void SimpleDocBookOnePar(std::ostream &, string & extra,
                                 LyXParagraph * par, int & desc_on,
                                 int const depth);
 
        /// LinuxDoc.
-       void push_tag(ostream & os, char const * tag,
+       void push_tag(std::ostream & os, char const * tag,
                      int & pos, char stack[5][3]);
        
        /// LinuxDoc.
-       void pop_tag(ostream & os, char const * tag,
+       void pop_tag(std::ostream & os, char const * tag,
                     int & pos, char stack[5][3]);
 
-#if 0
-       ///
-       void RoffAsciiTable(ostream &, LyXParagraph * par);
-#endif
-       
        /// is save needed
        mutable bool lyx_clean;
        
        /// is autosave needed
        mutable bool bak_clean;
        
-       /** do we need to run LaTeX, changed 23/03/98, Heinrich Bauer
-           We have to distinguish between TeX-runs executed in the original
-           directory (in which the original LyX-file resides) and TeX-runs
-           executed in a temporary directory. The first situation is valid
-           for a dvi-export, the latter one for printing or previewing. */
-       bool dvi_clean_orgd;
-       bool dvi_clean_tmpd;
-
         /// do we need to run weave/tangle
         bool nw_clean;
 
@@ -404,6 +414,53 @@ private:
            of the buffers in the list of users to do a updateLayoutChoice.
        */
        BufferView * users;
+
+public:
+       class inset_iterator {
+       public:
+               inset_iterator() : par(0) /*, it(0)*/ {}
+               inset_iterator(LyXParagraph * paragraph) : par(paragraph) {
+                       SetParagraph();
+               }
+               inset_iterator(LyXParagraph * paragraph, LyXParagraph::size_type pos);
+               inset_iterator & operator++() {
+                       if (par) {
+                               ++it;
+                               if (it == par->inset_iterator_end()) {
+                                       par = par->next;
+                                       SetParagraph();
+                               }
+                       }
+                       return *this;
+               }
+               Inset * operator*() {return *it; }
+               LyXParagraph * getPar() { return par; }
+               LyXParagraph::size_type getPos() {return it.getPos(); }
+               friend
+               bool operator==(inset_iterator const & iter1,
+                               inset_iterator const & iter2) {
+                       return iter1.par == iter2.par
+                               && (iter1.par == 0 || iter1.it == iter2.it);
+               }
+               friend
+               bool operator!=(inset_iterator const & iter1,
+                               inset_iterator const & iter2) {
+                       return !(iter1 == iter2);
+               }
+       private:
+               void SetParagraph();
+               LyXParagraph * par;
+               LyXParagraph::inset_iterator it;
+       };
+
+       ///
+       inset_iterator inset_iterator_begin() {
+               return inset_iterator(paragraph);
+       }
+       ///
+       inset_iterator inset_iterator_end() {
+               return inset_iterator();
+       }
 };
 
 
@@ -413,4 +470,17 @@ 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) {
+       return !(a == b);
+       // No need to compare depth.
+}
+
 #endif