]> git.lyx.org Git - lyx.git/blobdiff - src/Paragraph.h
Fix bug 5374
[lyx.git] / src / Paragraph.h
index 03e88d51d8d3dcd08463f08f5785e0a6d25e8cbf..9d7e5f1d4c86063c990994a60f3c2c87302bdbd1 100644 (file)
@@ -17,7 +17,7 @@
 #define PARAGRAPH_H
 
 #include "FontEnums.h"
-#include "LayoutPtr.h"
+#include "Layout.h"
 
 #include "insets/InsetCode.h"
 
@@ -33,6 +33,8 @@ class Change;
 class Counters;
 class Cursor;
 class CursorSlice;
+class DocIterator;
+class DocumentClass;
 class Inset;
 class InsetBibitem;
 class LaTeXFeatures;
@@ -45,9 +47,8 @@ class MetricsInfo;
 class OutputParams;
 class PainterInfo;
 class ParagraphParameters;
-class TextClass;
 class TexRow;
-
+class Toc;
 
 class FontSpan {
 public:
@@ -72,6 +73,16 @@ enum TextCase {
 };
 
 
+///
+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
 {
@@ -80,6 +91,9 @@ public:
        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 &);
        ///
@@ -87,6 +101,8 @@ public:
        ///
        int id() const;
 
+       ///
+       void addChangesToToc(DocIterator const & cdit, Buffer const & buf) const;
        ///
        Language const * getParLanguage(BufferParams const &) const;
        ///
@@ -97,36 +113,35 @@ public:
        ///
        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;
 
        ///
-       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 &) 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,
@@ -142,28 +157,28 @@ public:
        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;
-       ///
-       void setLayout(LayoutPtr const & layout);
+       Layout const & layout() const;
+       /// Do not pass a temporary to this!
+       void setLayout(Layout const & layout);
        ///
-       void setEmptyOrDefaultLayout(TextClass const & tc);
+       void setPlainOrDefaultLayout(DocumentClass const & tc);
 
        /// This is the item depth, only used by enumerate and itemize
        signed char itemdepth;
@@ -216,7 +231,7 @@ public:
        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;
@@ -225,7 +240,7 @@ public:
        /// 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);
@@ -239,10 +254,10 @@ public:
            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.
@@ -290,14 +305,15 @@ public:
        ///
        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);
        ///
@@ -311,6 +327,8 @@ public:
 
        ///
        InsetList const & insetList() const;
+       ///
+       void setBuffer(Buffer &);
 
        ///
        bool isHfill(pos_type pos) const;
@@ -326,6 +344,10 @@ public:
        /// 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)
@@ -350,7 +372,7 @@ public:
        /// 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.
@@ -371,13 +393,13 @@ public:
                bool del = true) const;
        
        ///
-       void updateWords(Buffer const & buf, CursorSlice const & sl);
+       void updateWords(CursorSlice const & sl);
 
 private:
        ///
        void deregisterWords();
        ///
-       void collectWords(Buffer const & buf, CursorSlice const & sl);
+       void collectWords(CursorSlice const & sl);
        ///
        void registerWords();