X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fbuffer.h;h=280fc05c8d23b3eb5c279cd1e7115bb9c00f1fd0;hb=35204f8f33d7400a5fefeffea533fb4cb4097211;hp=b14fe2358407dc19c392409064fc8d1469c4bb7e;hpb=0d43ba149a41e8860dde316ccbd4336d6b0bbdfa;p=lyx.git diff --git a/src/buffer.h b/src/buffer.h index b14fe23584..280fc05c8d 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -12,21 +12,30 @@ #ifndef BUFFER_H #define BUFFER_H +#include "errorlist.h" #include "InsetList.h" +#include "dociterator.h" +#include "ParagraphList_fwd.h" + #include "support/limited_stack.h" #include "support/types.h" +#include "support/docstring.h" +#include "support/docstream.h" #include -#include -#include +#include #include +#include #include #include #include +namespace lyx { + + class BufferParams; class ErrorItem; class FuncRequest; @@ -39,21 +48,27 @@ class LyXText; class LyXVC; class LaTeXFeatures; class Language; -class Messages; +class MacroData; class OutputParams; -class ParagraphList; class ParConstIterator; class ParIterator; class TeXErrors; class TexRow; +class TocBackend; 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: @@ -86,8 +101,6 @@ public: /// load a new file bool readFile(std::string const & filename); - bool readFile(std::string const & filename, lyx::par_type pit); - /// read the header, returns number of unknown tokens int readHeader(LyXLex & lex); @@ -95,31 +108,33 @@ public: \param par if != 0 insert the file. \return \c false if file is not completely read. */ - bool readBody(LyXLex &); + bool readDocument(LyXLex &); /// void insertStringAsLines(ParagraphList & plist, - lyx::par_type &, lyx::pos_type &, - LyXFont const &, std::string const &); + pit_type &, pos_type &, + LyXFont const &, docstring 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; + /// This signal is emitted when the buffer is changed. + boost::signal changed; + /// This signal is emitted when some parsing error shows up. + boost::signal errors; /// 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. @@ -131,34 +146,32 @@ public: /// Write file. Returns \c false if unsuccesful. bool writeFile(std::string const &) const; - /// - void writeFileAscii(std::string const &, OutputParams const &); - /// - void writeFileAscii(std::ostream &, OutputParams const &); /// Just a wrapper for the method below, first creating the ofstream. - void makeLaTeXFile(std::string const & filename, + bool makeLaTeXFile(std::string const & filename, std::string const & original_path, OutputParams const &, bool output_preamble = true, bool output_body = true); /// - void makeLaTeXFile(std::ostream & os, + void writeLaTeXSource(odocstream & os, std::string const & original_path, OutputParams const &, bool output_preamble = true, bool output_body = true); /// - void makeLinuxDocFile(std::string const & filename, - OutputParams const & runparams_in, - bool only_body = false); - /// void makeDocBookFile(std::string const & filename, OutputParams const & runparams_in, bool only_body = false); + /// + void writeDocBookSource(odocstream & os, std::string const & filename, + OutputParams const & runparams_in, + bool only_body = false); /// returns the main language for the buffer (document) Language const * getLanguage() const; /// get l10n translated to the buffers language - std::string const B_(std::string const & l10n) const; + docstring const B_(std::string const & l10n) const; + /// translate \p label to the buffer language if possible + docstring const translateLabel(docstring const & label) const; /// int runChktex(); @@ -199,7 +212,7 @@ public: */ std::string const getLatexName(bool no_path = true) const; - /// Get the name and type of the log. + /// Get thee name and type of the log. std::pair const getLogName() const; /// Change name of buffer. Updates "read-only" flag. @@ -208,6 +221,15 @@ 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; + /** Get the document's master (or \c this if this is not a + child document) + */ + Buffer * getMasterBuffer(); + /// Is buffer read-only? bool isReadonly() const; @@ -216,13 +238,8 @@ public: /// returns \c true if the buffer contains a LaTeX document bool isLatex() const; - /// returns \c true if the buffer contains a LinuxDoc document - bool isLinuxDoc() const; /// returns \c true if the buffer contains a DocBook document bool isDocBook() const; - /** 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; @@ -239,8 +256,14 @@ public: /// return all bibkeys from buffer and its childs void fillWithBibKeys(std::vector > & keys) const; + /// Update the cache with all bibfiles in use (including bibfiles + /// of loaded child documents). + void updateBibfilesCache(); + /// Return the cache with all bibfiles in use (including bibfiles + /// of loaded child documents). + std::vector const & getBibfilesCache() const; /// - void getLabelList(std::vector &) const; + void getLabelList(std::vector &) const; /// void changeLanguage(Language const * from, Language const * to); @@ -281,58 +304,6 @@ public: TexRow & texrow(); TexRow const & texrow() const; - class inset_iterator { - public: - typedef std::input_iterator_tag iterator_category; - typedef InsetBase value_type; - typedef ptrdiff_t difference_type; - typedef InsetBase * pointer; - typedef InsetBase & reference; - typedef lyx::par_type base_type; - - /// - inset_iterator(ParagraphList & pars, base_type p); - - /// prefix ++ - inset_iterator & operator++(); - /// postfix ++ - inset_iterator operator++(int); - /// - reference operator*(); - /// - pointer operator->(); - - /// - lyx::par_type getPar() const; - /// - lyx::pos_type getPos() const; - /// - friend - bool operator==(inset_iterator const & iter1, - inset_iterator const & iter2); - private: - /// - void setParagraph(); - /// - lyx::par_type pit; - /// - InsetList::iterator it; - public: - ParagraphList * pars_; - }; - - /// 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; - /// ParIterator par_iterator_begin(); /// @@ -350,18 +321,53 @@ 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(docstring const & name) const; + /// + MacroData const & getMacro(docstring const & name) const; + /// + void insertMacro(docstring const & name, MacroData const & data); + + /// + void saveCursor(StableDocIterator cursor, StableDocIterator anchor); + /// + StableDocIterator getCursor() const { return cursor_; } + /// + StableDocIterator getAnchor() const { return anchor_; } + /// + void changeRefsIfUnique(docstring const & from, docstring const & to, + InsetBase::Code code); +/// 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); + + /// errorLists_ accessors. + //@{ + ErrorList const & errorList(std::string const & type) const; + ErrorList & errorList(std::string const & type); + //@} + + //@{ + TocBackend & tocBackend(); + TocBackend const & tocBackend() const; + //@} + 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, - lyx::par_type pit); + bool readFile(LyXLex &, std::string const & filename); bool do_writeFile(std::ostream & ofs) const; @@ -369,12 +375,21 @@ private: class Impl; /// The pointer never changes although *pimpl_'s contents may. boost::scoped_ptr const pimpl_; + + /// 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_; + /// A cache for the bibfiles (including bibfiles of loaded child + /// documents), needed for appropriate update of natbib labels. + std::vector bibfilesCache_; + + /// Container for all sort of Buffer dependant errors. + std::map errorLists_; }; -bool operator==(Buffer::inset_iterator const & iter1, - Buffer::inset_iterator const & iter2); -bool operator!=(Buffer::inset_iterator const & iter1, - Buffer::inset_iterator const & iter2); +} // namespace lyx #endif