#ifndef PARAGRAPH_H
#define PARAGRAPH_H
-#include "FontEnums.h"
+#include "LayoutEnums.h"
#include "SpellChecker.h"
#include "support/strfwd.h"
#include "support/types.h"
#include <set>
+#include <vector>
namespace lyx {
class Buffer;
class BufferParams;
class Change;
-class Counters;
-class Cursor;
-class CursorSlice;
class DocIterator;
class docstring_list;
class DocumentClass;
class Inset;
-class InsetBibitem;
class LaTeXFeatures;
class InsetList;
class Language;
class Layout;
class Font;
-class MetricsInfo;
class OutputParams;
-class PainterInfo;
class ParagraphParameters;
+class TocBackend;
class WordLangTuple;
-class XHTMLStream;
+class XMLStream;
class otexstream;
+/// Inset identifier (above 0x10ffff, for ucs-4)
+char_type const META_INSET = 0x200001;
+
class FontSpan {
public:
/// Invalid font span containing no character
{
return first < s.first;
}
-
+
inline bool operator==(FontSpan const & s) const
{
return first == s.first && last == s.last;
{
return empty() ? 0 : last - first;
}
-
+
inline FontSpan intersect(FontSpan const & f) const
{
result.last = last;
return result;
}
-
+
inline bool empty() const
{
return first > last;
///
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;
+ bool output_active, TocBackend & backend) const;
///
Language const * getParLanguage(BufferParams const &) const;
///
int options = AS_STR_NONE,
const OutputParams *runparams = 0) const;
///
- void forOutliner(docstring &, size_t const maxlen,
- bool const shorten = true) const;
+ void forOutliner(docstring &, size_t maxlen, bool shorten = true,
+ bool label = true) const;
///
void write(std::ostream &, BufferParams const &,
std::string getID(Buffer const & buf, OutputParams const & runparams) const;
/// Output the first word of a paragraph, return the position where it left.
- pos_type firstWordDocBook(odocstream & os, OutputParams const & runparams) const;
+ pos_type firstWordDocBook(XMLStream & xs, OutputParams const & runparams) const;
/// Output the first word of a paragraph, return the position where it left.
- pos_type firstWordLyXHTML(XHTMLStream & xs, OutputParams const & runparams) const;
-
- /// Writes to stream the docbook representation
- void simpleDocBookOnePar(Buffer const & buf,
- odocstream &,
- OutputParams const & runparams,
- Font const & outerfont,
- pos_type initial = 0) const;
+ pos_type firstWordLyXHTML(XMLStream & xs, OutputParams const & runparams) const;
+
+ /// Outputs to stream the DocBook representation, one element per paragraph.
+ std::vector<docstring> simpleDocBookOnePar(Buffer const & buf,
+ OutputParams const & runparams,
+ Font const & outerfont,
+ pos_type initial = 0,
+ bool is_last_par = false,
+ bool ignore_fonts = false) const;
+
/// \return any material that has had to be deferred until after the
/// paragraph has closed.
docstring simpleLyXHTMLOnePar(Buffer const & buf,
- XHTMLStream & xs,
- OutputParams const & runparams,
- Font const & outerfont,
- bool start_paragraph = true,
- bool close_paragraph = true,
- pos_type initial = 0) const;
+ XMLStream & xs,
+ OutputParams const & runparams,
+ Font const & outerfont,
+ bool start_paragraph = true,
+ bool close_paragraph = true,
+ pos_type initial = 0) const;
///
bool hasSameLayout(Paragraph const & par) const;
/// look up change at given pos
Change const & lookupChange(pos_type pos) const;
- /// is there a change within the given range ?
+ /// is there a change within the given range (does not
+ /// check contained paragraphs)
bool isChanged(pos_type start, pos_type end) const;
+ /// Are there insets containing changes in the range?
+ bool hasChangedInsets(pos_type start, pos_type end) const;
/// is there an unchanged char at the given pos ?
bool isChanged(pos_type pos) const;
+ /// is there a change in the paragraph ?
+ bool isChanged() const;
+
/// is there an insertion at the given pos ?
bool isInserted(pos_type pos) const;
/// is there a deletion at the given pos ?
/// will the paragraph be physically merged with the next
/// one if the imaginary end-of-par character is logically deleted?
bool isMergedOnEndOfParDeletion(bool trackChanges) const;
+ /// Return Change form of paragraph break
+ Change parEndChange() const;
/// set change for the entire par
void setChange(Change const & change);
///
docstring expandLabel(Layout const &, BufferParams const &) const;
///
- docstring expandDocBookLabel(Layout const &, BufferParams const &) const;
- ///
docstring const & labelString() const;
/// the next two functions are for the manual labels
docstring const getLabelWidthString() const;
/// Set label width string.
void setLabelWidthString(docstring const & s);
/// Actual paragraph alignment used
- char getAlign() const;
+ LyXAlignment getAlign(BufferParams const &) const;
+ /// Default paragraph alignment as determined by layout
+ LyXAlignment getDefaultAlign(BufferParams const &) const;
/// The nesting depth of a paragraph
depth_type getDepth() const;
/// The maximal possible depth of a paragraph after this one
///
Font const & getFirstFontSettings(BufferParams const &) const;
- /** Get fully instantiated font. If pos == -1, use the layout
- font attached to this paragraph.
- If pos == -2, use the label font of the layout attached here.
- In all cases, the font is instantiated, i.e. does not have any
- attributes with values FONT_INHERIT, FONT_IGNORE or
- FONT_TOGGLE.
+ /** Get fully instantiated font, i.e., one that does not have any
+ attributes with values FONT_INHERIT, FONT_IGNORE or FONT_TOGGLE.
*/
Font const getFont(BufferParams const &, pos_type pos,
Font const & outerfont) const;
///
char_type getChar(pos_type pos) const;
/// Get the char, but mirror all bracket characters if it is right-to-left
- char_type getUChar(BufferParams const &, pos_type pos) const;
+ char_type getUChar(BufferParams const &, OutputParams 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);
///
///
InsetList const & insetList() const;
///
- void setBuffer(Buffer &);
+ void setInsetBuffers(Buffer &);
///
void resetBuffer();
bool isLineSeparator(pos_type pos) const;
/// True if the character/inset at this point is a word separator.
/// Note that digits in particular are not considered as word separator.
- bool isWordSeparator(pos_type pos) const;
+ bool isWordSeparator(pos_type pos, bool const ignore_deleted = false) 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
/// 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;
+ /// Return true if this paragraph has verbatim content that needs to be
+ /// protected by \cprotect
+ bool needsCProtection(bool const fragile = false) 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)
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;
+ word_location const loc, bool const ignore_deleted = false) const;
///
void updateWords();
/// presently used only in the XHTML output routines.
std::string magicLabel() const;
+ /// anonymizes the paragraph contents (but not the paragraphs
+ /// contained inside it. Does not handle undo.
+ void anonymize();
+
private:
/// Expand the counters for the labelstring of \c layout
docstring expandParagraphLabel(Layout const &, BufferParams const &,