#include "FontEnums.h"
#include "SpellChecker.h"
-#include "insets/InsetCode.h"
-
#include "support/strfwd.h"
#include "support/types.h"
class OutputParams;
class PainterInfo;
class ParagraphParameters;
-class TexRow;
class Toc;
class WordLangTuple;
class XHTMLStream;
+class otexstream;
class FontSpan {
public:
{
return first == s.first && last == s.last;
}
+
+ inline bool contains(pos_type p) const
+ {
+ return first <= p && p <= last;
+ }
+
+ inline size_t size() const
+ {
+ return empty() ? 0 : last - first;
+ }
+
+ inline FontSpan intersect(FontSpan const & f) const
+ {
+ FontSpan result = FontSpan();
+ if (contains(f.first))
+ result.first = f.first;
+ else if (f.contains(first))
+ result.first = first;
+ else
+ return result;
+ if (contains(f.last))
+ result.last = f.last;
+ else if (f.contains(last))
+ result.last = last;
+ return result;
+ }
+ inline bool empty() const
+ {
+ return first > last;
+ }
};
///
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.
+ AS_STR_NEWLINES = 4, ///< Get also newline characters.
+ 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) 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;
- ///
- 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;
+ /// 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 OutputParams *runparams = 0) const;
+ ///
+ void forOutliner(docstring &, size_t const maxlen,
+ bool const shorten = 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, odocstream &,
- TexRow & texrow, OutputParams const &,
- int start_pos = 0, int end_pos = -1, bool force = false) const;
+ void latex(BufferParams const &, Font const & outerfont, otexstream &,
+ OutputParams const &, int start_pos = 0, int end_pos = -1,
+ bool force = false) const;
/// Can we drop the standard paragraph wrapper?
bool emptyTag() const;
///
bool usePlainLayout() const;
///
+ bool isPassThru() const;
+ ///
pos_type size() const;
///
bool empty() const;
///
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.
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;
///
bool isChar(pos_type pos) const;
/// True if the element at this point is a space
bool isSpace(pos_type pos) const;
+ /// True if the element at this point is a hard hyphen or a apostrophe
+ /// If it is enclosed by spaces return false
+ bool isHardHyphenOrApostrophe(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)
/// 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;
+ /// Check whether a call to fixBiblio is needed.
+ bool brokenBiblio() const;
/// Check if we are in a Biblio environment and insert or
/// delete InsetBibitems as necessary.
/// \retval int 1, if we had to add an inset, in which case
/// 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(Buffer const & buffer);
+ int fixBiblio(Buffer const & buffer);
/// For each author, set 'used' to true if there is a change
/// by this author in the paragraph.
pos_type & right, TextCase action);
/// find \param str string inside Paragraph.
- /// \return true if the specified string is at the specified position
+ /// \return non-zero if the specified string is at the specified
+ /// position; returned value is the actual match length in positions
/// \param del specifies whether deleted strings in ct mode will be considered
- bool find(
+ int find(
docstring const & str, ///< string to search
bool cs, ///<
bool mw, ///<
bool check_learned = false) const;
/// Spell checker status at position \p pos.
- /// \return true if pointed position is misspelled.
- bool isMisspelled(pos_type pos) const;
+ /// If \p check_boundary is true the status of position immediately
+ /// before \p pos is tested too if it is at word boundary.
+ /// \return true if one of the tested positions is misspelled.
+ bool isMisspelled(pos_type pos, bool check_boundary = false) 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()