X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fbuffer.h;h=ba3ec7c40c752569b620f5aad9b9cc11a6bd8aa4;hb=9ee46b846e5e84ad40ceda4f4af94aeb86cd90a2;hp=d2fd7ec4c2397859f0888d910283f091c7743a75;hpb=e835c9477b521fb191d29b44742565aec1525122;p=lyx.git diff --git a/src/buffer.h b/src/buffer.h index d2fd7ec4c2..ba3ec7c40c 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -13,45 +13,54 @@ #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 "support/std_string.h" #include #include #include #include -class AuthorList; class BufferParams; class ErrorItem; +class FuncRequest; +class InsetBase; +class InsetText; class LyXFont; class LyXLex; class LyXRC; +class LyXText; class LyXVC; class LaTeXFeatures; -class LatexRunParams; class Language; -class Messages; -class ParIterator; +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: @@ -65,7 +74,7 @@ public: \param file \param b optional \c false by default */ - explicit Buffer(string const & file, bool b = false); + explicit Buffer(std::string const & file, bool b = false); /// Destructor ~Buffer(); @@ -73,18 +82,16 @@ public: /** High-level interface to buffer functionality. This function parses a command string and executes it */ - bool dispatch(string const & command, bool * result = 0); + bool dispatch(std::string const & command, bool * result = 0); /// Maybe we know the function already by number... - bool dispatch(int ac, string const & argument, bool * result = 0); + bool dispatch(FuncRequest const & func, bool * result = 0); /// Load the autosaved file. void loadAutoSaveFile(); /// load a new file - bool readFile(string const & filename); - - bool readFile(string const & filename, ParagraphList::iterator pit); + bool readFile(std::string const & filename); /// read the header, returns number of unknown tokens int readHeader(LyXLex & lex); @@ -93,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 &, string const & token, - ParagraphList & pars, - ParagraphList::iterator & pit, - lyx::depth_type & depth); + bool readDocument(LyXLex &); /// - void insertStringAsLines(ParagraphList::iterator &, lyx::pos_type &, - LyXFont const &, 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. @@ -132,46 +134,36 @@ public: bool save() const; /// Write file. Returns \c false if unsuccesful. - bool writeFile(string const &) const; + bool writeFile(std::string const &) const; /// - void writeFileAscii(string const &, int); + void writeFileAscii(std::string const &, OutputParams const &); /// - void writeFileAscii(std::ostream &, int); - /// - string const asciiParagraph(Paragraph const &, unsigned int linelen, - bool noparbreak = false) const; + void writeFileAscii(std::ostream &, OutputParams const &); /// Just a wrapper for the method below, first creating the ofstream. - void makeLaTeXFile(string const & filename, - string const & original_path, - LatexRunParams const &, + void 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, - string const & original_path, - LatexRunParams const &, + std::string const & original_path, + OutputParams const &, bool output_preamble = true, bool output_body = true); /// - void simpleDocBookOnePar(std::ostream &, - ParagraphList::iterator par, - int & desc_on, - lyx::depth_type depth) const; - /// - void simpleLinuxDocOnePar(std::ostream & os, - ParagraphList::iterator par, - lyx::depth_type depth) const; + void makeLinuxDocFile(std::string const & filename, + OutputParams const & runparams_in, + bool only_body = false); /// - void makeLinuxDocFile(string const & filename, - bool nice, bool only_body = false); - /// - void makeDocBookFile(string const & filename, - bool nice, bool only_body = false); + void makeDocBookFile(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 - string const B_(string const & l10n) const; + std::string const B_(std::string const & l10n) const; /// int runChktex(); @@ -180,7 +172,7 @@ public: /// bool isBakClean() const; /// - bool isDepClean(string const & name) const; + bool isDepClean(std::string const & name) const; /// mark the main lyx file as not needing saving void markClean() const; @@ -189,37 +181,42 @@ public: void markBakClean(); /// - void markDepClean(string const & name); + void markDepClean(std::string const & name); /// void setUnnamed(bool flag = true); /// - bool isUnnamed(); + bool isUnnamed() const; /// Mark this buffer as dirty. void markDirty(); /// Returns the buffer's filename. It is always an absolute path. - string const & fileName() const; + std::string const & fileName() const; /// Returns the the path where the buffer lives. /// It is always an absolute path. - string const & filePath() const; + std::string const & filePath() const; /** A transformed version of the file name, adequate for LaTeX. \param no_path optional if \c true then the path is stripped. */ - string const getLatexName(bool no_path = true) const; + std::string const getLatexName(bool no_path = true) const; /// Get the name and type of the log. - std::pair const getLogName() const; + std::pair const getLogName() const; /// Change name of buffer. Updates "read-only" flag. - void setFileName(string const & newfile); + void setFileName(std::string const & newfile); /// Name of the document's parent - void setParentName(string const &); + 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; @@ -251,9 +248,9 @@ public: void validate(LaTeXFeatures &) const; /// return all bibkeys from buffer and its childs - void fillWithBibKeys(std::vector > & keys) const; + void fillWithBibKeys(std::vector > & keys) const; /// - void getLabelList(std::vector &) const; + void getLabelList(std::vector &) const; /// void changeLanguage(Language const * from, Language const * to); @@ -262,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(); @@ -288,78 +285,12 @@ public: LyXVC const & lyxvc() const; /// Where to put temporary files. - 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; + std::string const & temppath() const; /// Used when typesetting to place errorboxes. TexRow & texrow(); TexRow const & texrow() const; - /// the author list for the document - AuthorList & authors(); - - /// - 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; - /// ParIterator par_iterator_begin(); /// @@ -369,16 +300,45 @@ public: /// ParConstIterator par_iterator_end() const; + /** \returns true only when the file is fully loaded. + * Used to prevent the premature generation of previews + * and by the citation inset. + */ + bool fully_loaded() const; + /// 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; /// - InsetOld * getInsetFromID(int id_arg) 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 &, string const & filename, - ParagraphList::iterator pit); + bool readFile(LyXLex &, std::string const & filename); bool do_writeFile(std::ostream & ofs) const; @@ -386,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