X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fbuffer.h;h=ba3ec7c40c752569b620f5aad9b9cc11a6bd8aa4;hb=9ee46b846e5e84ad40ceda4f4af94aeb86cd90a2;hp=044fabd53e17aede489b09c39c20969dd8d07041;hpb=741064fa584d5f209a4b74bb4302c7d2fc1ea9dc;p=lyx.git diff --git a/src/buffer.h b/src/buffer.h index 044fabd53e..ba3ec7c40c 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -13,14 +13,14 @@ #define BUFFER_H #include "InsetList.h" -#include "ParagraphList_fwd.h" + +#include "dociterator.h" #include "support/limited_stack.h" #include "support/types.h" #include -#include -#include +#include #include #include @@ -31,28 +31,36 @@ class BufferParams; class ErrorItem; class FuncRequest; +class InsetBase; +class InsetText; class LyXFont; class LyXLex; class LyXRC; class LyXText; class LyXVC; class LaTeXFeatures; -class OutputParams; class Language; -class Messages; -class ParIterator; -class PosIterator; +class MacroData; +class OutputParams; +class ParagraphList; class ParConstIterator; +class ParIterator; class TeXErrors; class TexRow; class Undo; +class StableDocIterator; /** The buffer object. - This is the buffer object. It contains all the informations about - a document loaded into LyX. I am not sure if the class is complete or - minimal, probably not. - \author Lars Gullik Bjønnes + * This is the buffer object. It contains all the informations about + * a document loaded into LyX. + * The buffer object owns the LyXText (wrapped in an InsetText), which + * contains the individual paragraphs of the document. + * + * + * I am not sure if the class is complete or + * minimal, probably not. + * \author Lars Gullik Bjønnes */ class Buffer { public: @@ -85,8 +93,6 @@ public: /// load a new file bool readFile(std::string const & filename); - bool readFile(std::string const & filename, ParagraphList::iterator pit); - /// read the header, returns number of unknown tokens int readHeader(LyXLex & lex); @@ -94,36 +100,31 @@ public: \param par if != 0 insert the file. \return \c false if file is not completely read. */ - bool readBody(LyXLex &, ParagraphList::iterator pit); - - /// This parses a single token - int readParagraph(LyXLex &, std::string const & token, - ParagraphList & pars, - ParagraphList::iterator & pit, - lyx::depth_type & depth); + bool readDocument(LyXLex &); /// - void insertStringAsLines(ParagraphList::iterator &, lyx::pos_type &, - LyXFont const &, std::string const &); + void insertStringAsLines(ParagraphList & plist, + lyx::pit_type &, lyx::pos_type &, + LyXFont const &, std::string const &, bool); /// ParIterator getParFromID(int id) const; /// do we have a paragraph with this id? bool hasParWithID(int id) const; /// This signal is emitted when a parsing error shows up. - boost::signal1 error; + boost::signal error; /// This signal is emitted when some message shows up. - boost::signal1 message; + boost::signal message; /// This signal is emitted when the buffer busy status change. - boost::signal1 busy; + boost::signal busy; /// This signal is emitted when the buffer readonly status change. - boost::signal1 readonly; + boost::signal readonly; /// Update window titles of all users. - boost::signal0 updateTitles; + boost::signal updateTitles; /// Reset autosave timers for all users. - boost::signal0 resetAutosaveTimers; + boost::signal resetAutosaveTimers; /// This signal is emitting if the buffer is being closed. - boost::signal0 closing; + boost::signal closing; /** Save file. @@ -186,7 +187,7 @@ public: void setUnnamed(bool flag = true); /// - bool isUnnamed(); + bool isUnnamed() const; /// Mark this buffer as dirty. void markDirty(); @@ -212,6 +213,11 @@ public: /// Name of the document's parent void setParentName(std::string const &); + /** Get the document's master (or \c this if this is not a + child document) + */ + Buffer const * getMasterBuffer() const; + /// Is buffer read-only? bool isReadonly() const; @@ -253,7 +259,7 @@ public: void updateDocLang(Language const * nlang); /// - bool isMultiLingual(); + bool isMultiLingual() const; /// Does this mean that this is buffer local? limited_stack & undostack(); @@ -281,76 +287,10 @@ public: /// Where to put temporary files. std::string const & temppath() const; - /** If we are writing a nice LaTeX file or not. - While writing as LaTeX, tells whether we are - doing a 'nice' LaTeX file */ - bool & niceFile(); - bool niceFile() const; - /// Used when typesetting to place errorboxes. TexRow & texrow(); TexRow const & texrow() const; - class inset_iterator { - public: - typedef std::input_iterator_tag iterator_category; - typedef InsetOld value_type; - typedef ptrdiff_t difference_type; - typedef InsetOld * pointer; - typedef InsetOld & reference; - typedef ParagraphList::iterator base_type; - - /// - inset_iterator(); - /// - inset_iterator(base_type p, base_type e); - /// - inset_iterator(base_type p, lyx::pos_type pos, base_type e); - - /// prefix ++ - inset_iterator & operator++(); - /// postfix ++ - inset_iterator operator++(int); - /// - reference operator*(); - /// - pointer operator->(); - - /// - ParagraphList::iterator getPar() const; - /// - lyx::pos_type getPos() const; - /// - friend - bool operator==(inset_iterator const & iter1, - inset_iterator const & iter2); - private: - /// - void setParagraph(); - /// - ParagraphList::iterator pit; - /// - ParagraphList::iterator pend; - /// - InsetList::iterator it; - }; - - /// return an iterator to all *top-level* insets in the buffer - inset_iterator inset_iterator_begin(); - - /// return the end of all *top-level* insets in the buffer - inset_iterator inset_iterator_end(); - - /// return a const iterator to all *top-level* insets in the buffer - inset_iterator inset_const_iterator_begin() const; - - /// return the const end of all *top-level* insets in the buffer - inset_iterator inset_const_iterator_end() const; - - /// - PosIterator pos_iterator_begin(); - /// - PosIterator pos_iterator_end(); /// ParIterator par_iterator_begin(); /// @@ -368,16 +308,37 @@ public: /// Set by buffer_funcs' newFile. void fully_loaded(bool); - /// + /// Our main text (inside the top InsetText) LyXText & text() const; + /// Our top InsetText! + InsetBase & inset() const; + + // + // Macro handling + // + /// + void buildMacros(); + /// + bool hasMacro(std::string const & name) const; + /// + MacroData const & getMacro(std::string const & name) const; + /// + void insertMacro(std::string const & name, MacroData const & data); + /// + void saveCursor(StableDocIterator cursor, StableDocIterator anchor); + /// + StableDocIterator getCursor() const { return cursor_; } + /// + StableDocIterator getAnchor() const { return anchor_; } + /// + void changeRefsIfUnique(std::string const & from, std::string const & to); + private: /** Inserts a file into a document - \param par if != 0 insert the file. \return \c false if method fails. */ - bool readFile(LyXLex &, std::string const & filename, - ParagraphList::iterator pit); + bool readFile(LyXLex &, std::string const & filename); bool do_writeFile(std::ostream & ofs) const; @@ -385,12 +346,12 @@ private: class Impl; /// The pointer never changes although *pimpl_'s contents may. boost::scoped_ptr const pimpl_; -}; -bool operator==(Buffer::inset_iterator const & iter1, - Buffer::inset_iterator const & iter2); - -bool operator!=(Buffer::inset_iterator const & iter1, - Buffer::inset_iterator const & iter2); + /// Save the cursor Position on Buffer switch + /// this would not be needed if every Buffer would have + /// it's BufferView, this should be FIXED in future. + StableDocIterator cursor_; + StableDocIterator anchor_; +}; #endif