#define PARAGRAPH_H
#include "FontEnums.h"
+#include "LayoutEnums.h"
#include "SpellChecker.h"
-#include "insets/InsetCode.h"
-
#include "support/strfwd.h"
#include "support/types.h"
class Inset;
class InsetBibitem;
class LaTeXFeatures;
-class Inset_code;
class InsetList;
class Language;
class Layout;
class Font;
-class Font_size;
class MetricsInfo;
class OutputParams;
class PainterInfo;
class ParagraphParameters;
-class TexRow;
-class Toc;
+class TocBackend;
class WordLangTuple;
class XHTMLStream;
class otexstream;
{
return first < s.first;
}
-
+
inline bool operator==(FontSpan const & s) const
{
return first == s.first && last == s.last;
}
- inline bool inside(pos_type p) const
+ inline bool contains(pos_type p) const
{
return first <= p && p <= last;
}
{
return empty() ? 0 : last - first;
}
-
+
inline FontSpan intersect(FontSpan const & f) const
{
FontSpan result = FontSpan();
- if (inside(f.first))
+ if (contains(f.first))
result.first = f.first;
- else if (f.inside(first))
+ else if (f.contains(first))
result.first = first;
else
return result;
- if (inside(f.last))
+ if (contains(f.last))
result.last = f.last;
- else if (f.inside(last))
+ else if (f.contains(last))
result.last = last;
return result;
}
-
+
inline bool empty() const
{
return first > last;
AS_STR_LABEL = 1, ///< Prefix with paragraph label.
AS_STR_INSETS = 2, ///< Go into insets.
AS_STR_NEWLINES = 4, ///< Get also newline characters.
- AS_STR_SKIPDELETE = 8 ///< Skip deleted text in change tracking.
+ AS_STR_SKIPDELETE = 8, ///< Skip deleted text in change tracking.
+ AS_STR_PLAINTEXT = 16 ///< Don't export formatting when descending into insets.
};
void setId(int id);
///
- void addChangesToToc(DocIterator const & cdit, Buffer const & buf) const;
+ void addChangesToToc(DocIterator const & cdit, Buffer const & buf,
+ bool output_active, TocBackend & backend) const;
+ /// set the buffer flag if there are changes in the paragraph
+ void addChangesToBuffer(Buffer const & buf) const;
+ ///
+ bool isChangeUpdateRequired() const;
///
Language const * getParLanguage(BufferParams const &) const;
///
/// asString(AS_STR_LABEL | AS_STR_INSETS)
/// asString(AS_STR_INSETS)
docstring asString(int options = AS_STR_NONE) const;
- ///
+
+ /// Convert the paragraph to a string.
+ /// \note If options includes AS_STR_PLAINTEXT, then runparams must be != 0
docstring asString(pos_type beg, pos_type end,
- int options = AS_STR_NONE) const;
+ int options = AS_STR_NONE,
+ const OutputParams *runparams = 0) const;
///
- void forToc(docstring &, size_t maxlen) 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 forOutliner(docstring &, size_t maxlen, bool shorten = true,
+ bool label = true) const;
///
void write(std::ostream &, BufferParams const &,
- depth_type & depth) const;
+ depth_type & depth) const;
///
void validate(LaTeXFeatures &) const;
/// \param force means: output even if layout.inpreamble is true.
void latex(BufferParams const &, Font const & outerfont, otexstream &,
- OutputParams const &, int start_pos = 0, int end_pos = -1,
- bool force = false) const;
+ OutputParams const &, int start_pos = 0, int end_pos = -1,
+ bool force = false) const;
/// Can we drop the standard paragraph wrapper?
bool emptyTag() const;
XHTMLStream & xs,
OutputParams const & runparams,
Font const & outerfont,
+ bool start_paragraph = true,
+ bool close_paragraph = true,
pos_type initial = 0) const;
///
/// Set label width string.
void setLabelWidthString(docstring const & s);
/// Actual paragraph alignment used
- char getAlign() const;
+ LyXAlignment getAlign() const;
/// The nesting depth of a paragraph
depth_type getDepth() const;
/// The maximal possible depth of a paragraph after this one
char_type getUChar(BufferParams const &, pos_type pos) const;
/// pos <= size() (there is a dummy font change at the end of each par)
void setFont(pos_type pos, Font const & font);
- /// Returns the height of the highest font in range
- FontSize highestFontInRange(pos_type startpos,
- pos_type endpos, FontSize def_size) const;
///
void insert(pos_type pos, docstring const & str,
Font const & font, Change const & change);
///
void insertChar(pos_type pos, char_type c,
Font const &, Change const & change);
- /// 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);
/// Insert \p inset at position \p pos with \p change traking status and
/// \p font.
/// \return true if successful.
///
InsetList const & insetList() const;
///
- void setBuffer(Buffer &);
+ void setInsetBuffers(Buffer &);
+ ///
+ void resetBuffer();
///
bool isHfill(pos_type pos) const;
bool isInset(pos_type pos) const;
///
bool isNewline(pos_type pos) const;
+ ///
+ bool isEnvSeparator(pos_type pos) const;
/// return true if the char is a word separator
bool isSeparator(pos_type pos) const;
///
/// return true if we allow this par to stay empty
bool allowEmpty() const;
///
- char_type transformChar(char_type c, pos_type pos) const;
- ///
ParagraphParameters & params();
///
ParagraphParameters const & params() const;
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;
///
/// \return true if one of the tested positions is misspelled.
bool isMisspelled(pos_type pos, bool check_boundary = false) const;
- /// \return true if both positions are inside the same
- /// spell range - i.e. the same word.
- /// use it for positions inside misspelled range only.
- bool isSameSpellRange(pos_type pos1, pos_type pos2) const;
+ /// \return the spell range (misspelled area) around position.
+ /// Range is empty if word at position is correctly spelled.
+ FontSpan const & getSpellRange(pos_type pos) const;
/// spell check of whole paragraph
/// remember results until call of requestSpellCheck()