X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fbuffer.h;h=1d5609a86e4177df95321d5abc6b128820ecf16a;hb=4b2a999762c83627476428e595d3c1e3704a3da0;hp=f60b0d8f6947d35251712afe00dcd67c1ca0c09d;hpb=ba5e47f1a92c3688d16f76f654fd3768672ebb50;p=lyx.git diff --git a/src/buffer.h b/src/buffer.h index f60b0d8f69..1d5609a86e 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -32,15 +32,12 @@ #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 > 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 > getTocList(); + /// + std::vector 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