#include "support/unique_ptr.h"
#include "support/strfwd.h"
#include "support/types.h"
-#include "support/FileNameList.h"
#include <map>
#include <list>
class FuncStatus;
class Inset;
class InsetLabel;
-class InsetRef;
-class Font;
-class Format;
class Lexer;
class Text;
class LyXVC;
class MacroSet;
class OutputParams;
class otexstream;
-class Paragraph;
-class ParConstIterator;
-class ParIterator;
class ParagraphList;
+class ParIterator;
+class ParConstIterator;
class TeXErrors;
class TexRow;
class TocBackend;
namespace support {
class DocFileName;
class FileName;
+class FileNameList;
} // namespace support
namespace graphics {
typedef std::list<Buffer *> ListOfBuffers;
/// a list of Buffers we cloned
typedef std::set<Buffer *> CloneList;
+typedef std::shared_ptr<CloneList> CloneList_ptr;
/** The buffer object.
* \author Lars Gullik Bjønnes
*/
-class MarkAsExporting;
-
class Buffer {
public:
/// What type of log will \c getLogName() return?
/// Constructor
explicit Buffer(std::string const & file, bool readonly = false,
- Buffer const * cloned_buffer = 0);
+ Buffer const * cloned_buffer = nullptr);
/// Destructor
~Buffer();
///
typedef std::map<Buffer const *, Buffer *> BufferMap;
///
- void cloneWithChildren(BufferMap &, CloneList *) const;
+ void cloneWithChildren(BufferMap &, CloneList_ptr) const;
/// save checksum of the given file.
void saveCheckSum() const;
/// read a new file
bool autoSave() const;
/// save emergency file
/// \return a status message towards the user.
- docstring emergencyWrite();
+ docstring emergencyWrite() const;
//FIXME:The following function should be private
//private:
OutputParams const & runparams_in,
OutputWhat output = FullSource) const;
///
- ExportStatus writeDocBookSource(odocstream & os, std::string const & filename,
- OutputParams const & runparams_in,
- OutputWhat output = FullSource) const;
+ ExportStatus writeDocBookSource(odocstream & os,
+ OutputParams const & runparams_in,
+ OutputWhat output = FullSource) const;
///
ExportStatus makeLyXHTMLFile(support::FileName const & filename,
OutputParams const & runparams_in) const;
/// returns the main language for the buffer (document)
Language const * language() const;
/// get l10n translated to the buffers language
- docstring const B_(std::string const & l10n) const;
+ docstring B_(std::string const & l10n) const;
///
int runChktex();
std::string latexName(bool no_path = true) const;
/// Get the name and type of the log.
- std::string logName(LogType * type = 0) const;
+ std::string logName(LogType * type = nullptr) const;
/// Set document's parent Buffer.
void setParent(Buffer const *);
void invalidateCiteLabels() const;
///
bool citeLabelsValid() const;
- ///
- void getLabelList(std::vector<docstring> &) const;
+ /// two strings: plain label name and label as gui string
+ void getLabelList(std::vector<std::pair<docstring, docstring>> &) const;
/// This removes the .aux and .bbl files from the temp dir.
void removeBiblioTempFiles() const;
ParIterator par_iterator_end();
///
ParConstIterator par_iterator_end() const;
+ /// Is document empty ?
+ bool empty() const;
// Position of the child buffer where it appears first in the master.
DocIterator firstChildPosition(Buffer const * child);
mutable UserMacroSet usermacros;
/// Replace the inset contents for insets which InsetCode is equal
- /// to the passed \p inset_code.
+ /// to the passed \p inset_code. Handles undo.
void changeRefsIfUnique(docstring const & from, docstring const & to);
/// get source code (latex/docbook) for some paragraphs, or all paragraphs
/// Updates screen labels and some other information associated with
/// insets and paragraphs. Actually, it's more like a general "recurse
/// through the Buffer" routine, that visits all the insets and paragraphs.
- void updateBuffer() const { updateBuffer(UpdateMaster, InternalUpdate); }
+ void updateBuffer() const;
/// \param scope: whether to start with the master document or just
/// do this one.
/// \param output: whether we are preparing for output.
void updateBuffer(UpdateScope scope, UpdateType utype) const;
///
- void updateBuffer(ParIterator & parit, UpdateType utype) const;
+ void updateBuffer(ParIterator & parit, UpdateType utype, bool const deleted = false) const;
+ /// Forces an updateBuffer() call
+ void forceUpdate() const;
+ /// Do we need to call updateBuffer()?
+ bool needUpdate() const;
/// Spellcheck starting from \p from.
/// \p from initial position, will then points to the next misspelled
/// \return progress if a new word was found.
int spellCheck(DocIterator & from, DocIterator & to,
WordLangTuple & word_lang, docstring_list & suggestions) const;
+ /// Marks the whole buffer to be checked (again)
+ void requestSpellcheck();
///
void checkChildBuffers();
///
int wordCount() const;
int charCount(bool with_blanks) const;
- /// FIXME: dummy function for now
- bool areChangesPresent() const { return true; }
+ ///
+ bool areChangesPresent() const;
///
void registerBibfiles(docstring_list const & bf) const;
///
support::FileName getBibfilePath(docstring const & bibid) const;
+ /// Return the list with all bibfiles in use (including bibfiles
+ /// of loaded child documents).
+ docstring_list const &
+ getBibfiles(UpdateScope scope = UpdateMaster) const;
+
+ /// routines for dealing with possible self-inclusion
+ void pushIncludedBuffer(Buffer const * buf) const;
+ void popIncludedBuffer() const;
+ bool isBufferIncluded(Buffer const * buf) const;
+private:
+ void clearIncludeList() const;
private:
friend class MarkAsExporting;
/// last time we loaded the cache. Note that this does NOT update the
/// cached information.
void checkIfBibInfoCacheIsValid() const;
- /// Return the list with all bibfiles in use (including bibfiles
- /// of loaded child documents).
- docstring_list const &
- getBibfiles(UpdateScope scope = UpdateMaster) const;
///
void collectChildren(ListOfBuffers & children, bool grand_children) const;