#ifndef BUFFER_H
#define BUFFER_H
+#include "FuncCode.h"
#include "OutputEnums.h"
#include "support/unique_ptr.h"
class FuncStatus;
class Inset;
class InsetLabel;
-class Lexer;
class Text;
class LyXVC;
class LaTeXFeatures;
class MacroSet;
class OutputParams;
class otexstream;
-class ParConstIterator;
-class ParIterator;
class ParagraphList;
+class ParIterator;
+class ParConstIterator;
class TeXErrors;
class TexRow;
class TocBackend;
class DocFileName;
class FileName;
class FileNameList;
+class Lexer;
} // namespace support
namespace graphics {
* \author Lars Gullik Bjønnes
*/
-class MarkAsExporting;
-
class Buffer {
public:
/// What type of log will \c getLogName() return?
/// Destructor
~Buffer();
- /// Clones the entire structure of which this Buffer is part,
+ /// Clones the entire structure of which this Buffer is part,
/// cloning all the children, too.
Buffer * cloneWithChildren() const;
/// Just clones this single Buffer. For autosave.
///
bool isClone() const;
+ /// Helper method: dispatch this branch activation LFUN
+ /// Retunrs true if the function has been dispatched
+ bool branchActivationDispatch(FuncCode act, docstring const & branch);
+
/** High-level interface to buffer functionality.
This function parses a command string and executes it.
*/
/// Maybe we know the function already by number...
void dispatch(FuncRequest const & func, DispatchResult & result);
+ /// Helper method: Is this buffer activation LFUN enabled?
+ bool branchActivationEnabled(FuncCode act, docstring const & branch) const;
+
/// Can this function be exectued?
/// \return true if we made a decision
- bool getStatus(FuncRequest const & cmd, FuncStatus & flag);
+ bool getStatus(FuncRequest const & cmd, FuncStatus & flag) const;
///
DocIterator getParFromID(int id) const;
//FIXME: The following function should be private
//private:
/// read the header, returns number of unknown tokens
- int readHeader(Lexer & lex);
+ int readHeader(support::Lexer & lex);
double fontScalingFactor() const;
+ /// check for active synctex support:
+ /// - either the document has synchronize output enabled or
+ /// - there is a converter to dvi or pdf defined with synctex command line argument
+ /// this is the "expert mode", false positives are possible
+ bool isSyncTeXenabled() const;
private:
///
/// Reads a file without header.
/// \param par if != 0 insert the file.
/// \return \c true if file is not completely read.
- bool readDocument(Lexer &);
+ bool readDocument(support::Lexer &);
/// Try to extract the file from a version control container
/// before reading if the file cannot be found.
/// \sa LyXVC::file_not_found_hook
ReadStatus extractFromVC();
/// Reads the first tag of a LyX File and
/// returns the file format number.
- ReadStatus parseLyXFormat(Lexer & lex, support::FileName const & fn,
+ ReadStatus parseLyXFormat(support::Lexer & lex, support::FileName const & fn,
int & file_format) const;
/// Convert the LyX file to the LYX_FORMAT using
/// the lyx2lyx script and returns the filename
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:
void invalidateCiteLabels() const;
///
bool citeLabelsValid() const;
- ///
- void getLabelList(std::vector<docstring> &) const;
-
- /// This removes the .aux and .bbl files from the temp dir.
- void removeBiblioTempFiles() const;
+ /// three strings: plain label name, label as gui string, and
+ /// dereferenced label name
+ void getLabelList(std::vector<std::tuple<docstring, docstring, docstring>> &) const;
///
void changeLanguage(Language const * from, Language const * to);
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);
///
Undo & undo();
+ ///
+ Undo const & undo() const;
/// This function is called when the buffer is changed.
void changed(bool update_metrics) const;
void setBusy(bool on) const;
/// Update window titles of all users.
void updateTitles() const;
+ /// Schedule redraw of work areas
+ void scheduleRedrawWorkAreas() const;
/// Reset autosave timers for all users.
void resetAutosaveTimers() const;
///
///
ExportStatus doExport(std::string const & target, bool put_in_tempdir,
std::string & result_file) const;
+ /// This removes the .aux and .bbl files from the temp dir.
+ void removeBiblioTempFiles() const;
/// target is a format name optionally followed by a space
/// and a destination file-name
ExportStatus doExport(std::string const & target, bool put_in_tempdir,
/// 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, 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;
///
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;
+ ///
+ void scheduleBiblioTempRemoval() const { removeBiblioTemps = true; }
/// 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;
/// mark the buffer as busy exporting something, or not
void setExportStatus(bool e) const;
+ ///
+ mutable bool removeBiblioTemps = false;
///
References & getReferenceCache(docstring const & label);
/// 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;