* Licence details can be found in the file COPYING.
*
* \author Asger Alstrup
- * \author Lars Gullik Bjønnes
+ * \author Lars Gullik Bjønnes
* \author John Levon
- * \author André Pönitz
- * \author Jürgen Vigna
+ * \author André Pönitz
+ * \author Jürgen Vigna
*
* Full author contact details are available in file CREDITS.
*/
#define PARAGRAPH_H
#include "FontEnums.h"
-#include "LayoutPtr.h"
+#include "Layout.h"
#include "insets/InsetCode.h"
class BufferParams;
class Change;
class Counters;
+class Cursor;
+class CursorSlice;
+class DocIterator;
+class DocumentClass;
class Inset;
class InsetBibitem;
class LaTeXFeatures;
class PainterInfo;
class ParagraphParameters;
class TexRow;
-
+class Toc;
class FontSpan {
public:
};
+///
+enum AsStringParameter
+{
+ AS_STR_NONE = 0, ///< No option, only printable characters.
+ AS_STR_LABEL = 1, ///< Prefix with paragraph label.
+ AS_STR_INSETS = 2, ///< Go into insets.
+ AS_STR_NEWLINES = 4 ///< Get also newline characters.
+};
+
+
/// A Paragraph holds all text, attributes and insets in a text paragraph
class Paragraph
{
Paragraph();
///
Paragraph(Paragraph const &);
+ /// Partial copy constructor.
+ /// Copy the Paragraph contents from \p beg to \p end (without end).
+ Paragraph(Paragraph const & par, pos_type beg, pos_type end);
///
Paragraph & operator=(Paragraph const &);
///
///
int id() const;
+ ///
+ void addChangesToToc(DocIterator const & cdit, Buffer const & buf) const;
///
Language const * getParLanguage(BufferParams const &) const;
///
///
bool isMultiLingual(BufferParams const &) const;
+ /// Convert the paragraph to a string.
+ /// \param AsStringParameter options. This can contain any combination of
+ /// asStringParameter values. Valid examples:
+ /// asString(AS_STR_LABEL)
+ /// asString(AS_STR_LABEL | AS_STR_INSETS)
+ /// asString(AS_STR_INSETS)
+ docstring asString(int options = AS_STR_NONE) const;
///
- docstring const asString(Buffer const &, bool label) const;
- ///
- docstring const asString(Buffer const & buffer,
- pos_type beg,
- pos_type end,
- bool label) const;
+ docstring asString(pos_type beg, pos_type end,
+ int options = AS_STR_NONE) const;
+
+ /// Extract only the explicitly visible text (without any formatting),
+ /// descending into insets
+ docstring stringify(pos_type beg, pos_type end, int options, OutputParams & runparams) const;
///
- void write(Buffer const &, std::ostream &, BufferParams const &,
+ void write(std::ostream &, BufferParams const &,
depth_type & depth) const;
///
void validate(LaTeXFeatures &) const;
///
- bool latex(Buffer const &, BufferParams const &,
- Font const & outerfont, odocstream &,
- TexRow & texrow, OutputParams const &) const;
+ bool latex(BufferParams const &, Font const & outerfont, odocstream &,
+ TexRow & texrow, OutputParams const &,
+ int start_pos = 0, int end_pos = -1) const;
/// Can we drop the standard paragraph wrapper?
bool emptyTag() const;
/// Get the id of the paragraph, usefull for docbook
- std::string getID(Buffer const & buf,
- OutputParams const & runparams) const;
+ std::string getID(Buffer const & buf, OutputParams const & runparams) const;
/// Get the first word of a paragraph, return the position where it left
- pos_type getFirstWord(Buffer const & buf,
- odocstream & os,
- OutputParams const & runparams) const;
+ pos_type firstWord(odocstream & os, OutputParams const & runparams) const;
/// Writes to stream the docbook representation
void simpleDocBookOnePar(Buffer const & buf,
void makeSameLayout(Paragraph const & par);
///
- void setInsetOwner(Inset * inset);
+ void setInsetOwner(Inset const * inset);
///
- Inset * inInset() const;
+ Inset const & inInset() const;
///
InsetCode ownerCode() const;
///
- bool forceEmptyLayout() const;
+ bool forcePlainLayout() const;
///
bool allowParagraphCustomization() const;
///
- bool useEmptyLayout() const;
+ bool usePlainLayout() const;
///
pos_type size() const;
///
bool empty() const;
///
- LayoutPtr const & layout() const;
+ Layout const & layout() const;
+ /// Do not pass a temporary to this!
+ void setLayout(Layout const & layout);
+ ///
+ void setPlainOrDefaultLayout(DocumentClass const & tc);
///
- void layout(LayoutPtr const & new_layout);
+ void setDefaultLayout(DocumentClass const & tc);
+ ///
+ void setPlainLayout(DocumentClass const & tc);
/// This is the item depth, only used by enumerate and itemize
signed char itemdepth;
void setBeginOfBody();
///
- docstring const & getLabelstring() const;
+ docstring const & labelString() const;
/// the next two functions are for the manual labels
docstring const getLabelWidthString() const;
docstring const translateIfPossible(docstring const & label,
BufferParams const & bparams) const;
/// Expand the counters for the labelstring of \c layout
- docstring expandLabel(LayoutPtr const &, BufferParams const &,
+ docstring expandLabel(Layout const &, BufferParams const &,
bool process_appendix = true) const;
/// Actual paragraph alignment used
char getAlign() const;
/// The maximal possible depth of a paragraph after this one
depth_type getMaxDepthAfter() const;
///
- void applyLayout(LayoutPtr const & new_layout);
+ void applyLayout(Layout const & new_layout);
/// (logically) erase the char at pos; return true if it was actually erased
bool eraseChar(pos_type pos, bool trackChanges);
between the characters font and the layoutfont.
This is what is stored in the fonttable
*/
- Font const
+ Font const &
getFontSettings(BufferParams const &, pos_type pos) const;
///
- Font const getFirstFontSettings(BufferParams const &) const;
+ Font const & getFirstFontSettings(BufferParams const &) const;
/** Get fully instantiated font. If pos == -1, use the layout
font attached to this paragraph.
///
void insertChar(pos_type pos, char_type c,
Font const &, Change const & change);
- ///
- void insertInset(pos_type pos, Inset * inset,
+ /// Insert \p inset at position \p pos with \p change traking status.
+ /// \return true if successful.
+ bool insertInset(pos_type pos, Inset * inset,
Change const & change);
- ///
- void insertInset(pos_type pos, Inset * inset,
- Font const &, Change const & change);
- ///
- bool insetAllowed(InsetCode code);
+ /// Insert \p inset at position \p pos with \p change traking status and
+ /// \p font.
+ /// \return true if successful.
+ bool insertInset(pos_type pos, Inset * inset,
+ Font const & font, Change const & change);
///
Inset * getInset(pos_type pos);
///
///
InsetList const & insetList() const;
+ ///
+ void setBuffer(Buffer &);
///
bool isHfill(pos_type pos) const;
/// True if the character/inset at this point can be part of a word.
/// Note that digits in particular are considered as letters
bool isLetter(pos_type pos) const;
+ /// True if the element at this point is a character that is not a letter.
+ bool isChar(pos_type pos) const;
+ /// True if the element at this point is a space
+ bool isSpace(pos_type pos) const;
/// returns true if at least one line break or line separator has been deleted
/// at the beginning of the paragraph (either physically or logically)
/// an inset, in which case pos is the position from which the inset
/// was deleted, and the cursor will need to be moved back one if it
/// was previously past that position. Return 0 otherwise.
- int checkBiblio(bool track_changes);
+ int checkBiblio(Buffer const & buffer);
/// For each author, set 'used' to true if there is a change
/// by this author in the paragraph.
bool mw, ///<
pos_type pos, ///< start from here.
bool del = true) const;
+
+ void locateWord(pos_type & from, pos_type & to,
+ word_location const loc) const;
+ ///
+ void updateWords();
private:
+ ///
+ void deregisterWords();
+ ///
+ void collectWords();
+ ///
+ void registerWords();
+
/// Pimpl away stuff
class Private;
///