]> git.lyx.org Git - lyx.git/blobdiff - src/paragraph.h
more ParagraphList::iterator usage
[lyx.git] / src / paragraph.h
index acca1ad1e87f9ebc31ef90a389f6c854ea61f48f..e7192c8d460da7faca797117ec0f4bb31e689e96 100644 (file)
@@ -9,10 +9,6 @@
 #ifndef PARAGRAPH_H
 #define PARAGRAPH_H
 
-#ifdef __GNUG__
-#pragma interface
-#endif
-
 #include "lyxlayout_ptr_fwd.h"
 #include "lyxfont.h" // Just for LyXFont::FONT_SIZE
 #include "InsetList.h"
 #include "insets/inset.h" // Just for Inset::Code
 
 #include "support/types.h"
+#include "changes.h"
 
 #include "LString.h"
 
 class BufferParams;
 class BufferView;
 class Counters;
-class InsetBibKey;
+class InsetBibitem;
 class Language;
 class LaTeXFeatures;
 class ParagraphParameters;
 class TexRow;
 
-// After 1.2.0 is released, during 1.3.0cvs, we enable this. And after
-// a while we verify that reading of 1.2.x files work perfectly we remove
-// this code completely. (Lgb)
-#define NO_PEXTRA_REALLY 1
-
 // Define this if you want to try out the new storage container for
 // paragraphs. (Lgb)
 // This is non working and far from finished.
@@ -45,28 +37,6 @@ class TexRow;
 /// A Paragraph holds all text, attributes and insets in a text paragraph
 class Paragraph  {
 public:
-#ifndef NO_PEXTRA_REALLY
-       ///
-       enum PEXTRA_TYPE {
-               ///
-               PEXTRA_NONE,
-               ///
-               PEXTRA_INDENT,
-               ///
-               PEXTRA_MINIPAGE,
-               ///
-               PEXTRA_FLOATFLT
-       };
-       ///
-       enum MINIPAGE_ALIGNMENT {
-               ///
-               MINIPAGE_ALIGN_TOP,
-               ///
-               MINIPAGE_ALIGN_MIDDLE,
-               ///
-               MINIPAGE_ALIGN_BOTTOM
-       };
-#endif
        ///
        enum META_KIND {
                ///
@@ -104,14 +74,14 @@ public:
        bool isMultiLingual(BufferParams const &);
 
        ///
-       string const asString(Buffer const *, bool label);
+       string const asString(Buffer const *, bool label) const;
        ///
        string const asString(Buffer const *, lyx::pos_type beg, lyx::pos_type end,
-                             bool label);
+                             bool label) const;
 
        ///
        void write(Buffer const *, std::ostream &, BufferParams const &,
-                      depth_type) const;
+                      depth_type & depth) const;
        ///
        void validate(LaTeXFeatures &) const;
 
@@ -120,11 +90,6 @@ public:
        ///
        void read();
 
-       ///
-       Paragraph * TeXOnePar(Buffer const *, BufferParams const &,
-                                std::ostream &, TexRow & texrow,
-                                bool moving_arg);
-
        ///
        int startTeXParParams(BufferParams const &, std::ostream &, bool) const;
 
@@ -137,9 +102,6 @@ public:
                             std::ostream &, TexRow & texrow, bool moving_arg);
 
        ///
-       Paragraph * TeXEnvironment(Buffer const *, BufferParams const &,
-                                     std::ostream &, TexRow & texrow);
-       ///
        bool hasSameLayout(Paragraph const * par) const;
 
        ///
@@ -181,7 +143,7 @@ public:
        char itemdepth;
 
        ///
-       InsetBibKey * bibkey;  // ale970302
+       InsetBibitem * bibitem();  // ale970302
 
 #ifndef NO_NEXT
        ///
@@ -199,6 +161,40 @@ public:
        ///
        Paragraph const * previous() const;
 #endif
+
+       /// initialise tracking for this par
+       void trackChanges(Change::Type = Change::UNCHANGED);
+
+       /// stop tracking
+       void untrackChanges();
+
+       /// set entire paragraph to new text for change tracking
+       void cleanChanges();
+
+       /// look up change type at given pos
+       Change::Type lookupChange(lyx::pos_type pos) const;
+
+       /// look up change at given pos
+       Change const lookupChangeFull(lyx::pos_type pos) const;
+
+       /// is there a change within the given range ?
+       bool isChanged(lyx::pos_type start, lyx::pos_type end) const;
+
+       /// is there a non-addition in this range ?
+       bool isChangeEdited(lyx::pos_type start, lyx::pos_type end) const;
+
+       /// set change at pos
+       void setChange(lyx::pos_type pos, Change::Type type);
+
+       /// accept change
+       void acceptChange(lyx::pos_type start, lyx::pos_type end);
+
+       /// reject change
+       void rejectChange(lyx::pos_type start, lyx::pos_type end);
+
+       /// mark whole par as erased
+       void markErased();
+
        /// for the environments
        Paragraph * depthHook(depth_type depth);
        /// for the environments
@@ -224,9 +220,15 @@ public:
        depth_type getMaxDepthAfter() const;
        ///
        void applyLayout(LyXLayout_ptr const & new_layout);
-       ///
+
+       /// definite erase
+       void eraseIntern(lyx::pos_type pos);
+       /// erase the char at the given position
        void erase(lyx::pos_type pos);
-       /** Get unistantiated font setting. Returns the difference
+       /// erase the given range. Returns true if actually erased.
+       bool erase(lyx::pos_type start, lyx::pos_type end);
+
+       /** Get uninstantiated font setting. Returns the difference
            between the characters font and the layoutfont.
            This is what is stored in the fonttable
        */
@@ -261,13 +263,13 @@ public:
        ///
        void insertChar(lyx::pos_type pos, value_type c);
        ///
-       void insertChar(lyx::pos_type pos, value_type c, LyXFont const &);
+       void insertChar(lyx::pos_type pos, value_type c, LyXFont const &, Change change = Change(Change::INSERTED));
        ///
        bool checkInsertChar(LyXFont &);
        ///
        void insertInset(lyx::pos_type pos, Inset * inset);
        ///
-       void insertInset(lyx::pos_type pos, Inset * inset, LyXFont const &);
+       void insertInset(lyx::pos_type pos, Inset * inset, LyXFont const &, Change change = Change(Change::INSERTED));
        ///
        bool insetAllowed(Inset::Code code);
        ///
@@ -300,29 +302,12 @@ public:
        ///
        bool isWord(lyx::pos_type pos) const;
 
-       /** paste this paragraph with the next one
-           be carefull, this doesent make any check at all
-       */
-       void pasteParagraph(BufferParams const &);
-
        /// returns -1 if inset not found
        int getPositionOfInset(Inset const * inset) const;
 
-       /// some good comment here John?
-       Paragraph * getParFromID(int id) const;
-
        ///
        int stripLeadingSpaces();
 
-#ifndef NO_PEXTRA_REALLY
-       /* If I set a PExtra Indent on one paragraph of a ENV_LIST-TYPE
-          I have to set it on each of it's elements */
-       ///
-       void setPExtraType(BufferParams const &, int type,
-                          string const & width, string const & widthp);
-       ///
-       void unsetPExtraType(BufferParams const &);
-#endif
        ///
        bool isFreeSpacing() const;
 
@@ -333,8 +318,7 @@ public:
        ///
        InsetList insetlist;
        ///
-       Counters & counters();
-
+       //Counters & counters();
 private:
        ///
        LyXLayout_ptr layout_;
@@ -353,4 +337,16 @@ private:
        Pimpl * pimpl_;
 };
 
-#endif
+
+inline bool isInsertedText(Paragraph const & par, lyx::pos_type pos)
+{
+       return par.lookupChange(pos) == Change::INSERTED;
+}
+
+
+inline bool isDeletedText(Paragraph const & par, lyx::pos_type pos)
+{
+       return par.lookupChange(pos) == Change::DELETED;
+}
+
+#endif // PARAGRAPH_H