]> git.lyx.org Git - lyx.git/blobdiff - src/changes.h
gettext support, fast_start option, scons all, mingw bug fix and some cleanup for...
[lyx.git] / src / changes.h
index 00429d94a1e6c661f9e9b18cdc02efc635a9b612..dabfdf80e818293eeb4689fa6f23cc97677890e8 100644 (file)
@@ -1,11 +1,14 @@
+// -*- C++ -*-
 /**
  * \file changes.h
- * Copyright 2002 the LyX Team
- * Read the file COPYING
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
  *
- * Record changes in a paragraph.
+ * \author John Levon
+ *
+ * Full author contact details are available in file CREDITS.
  *
- * \author John Levon <levon@movementarian.org>
+ * Record changes in a paragraph.
  */
 
 #ifndef CHANGES_H
 
 #include <vector>
 #include <iosfwd>
-#include <ctime>
 
-struct Change {
+
+class Change {
+public:
        /// the type of change
        enum Type {
                UNCHANGED, // no change
@@ -68,11 +72,8 @@ public:
        /// mark the given change and adjust
        void record(Change, lyx::pos_type pos);
 
-       /// return the change type at the given position
-       Change::Type lookup(lyx::pos_type pos) const;
-
        /// return the change at the given position
-       Change const lookupFull(lyx::pos_type pos) const;
+       Change const lookup(lyx::pos_type pos) const;
 
        /// return true if there is a change in the given range
        bool isChange(lyx::pos_type start, lyx::pos_type end) const;
@@ -80,19 +81,22 @@ public:
        /// return true if there is a deleted or unchanged range contained
        bool isChangeEdited(lyx::pos_type start, lyx::pos_type end) const;
 
-       /// remove the given entry
+       /// remove the given entry. This implies that a character was
+       /// deleted at pos, and will adjust all range bounds past it
        void erase(lyx::pos_type pos);
 
        /// output latex to mark a transition between two changetypes
        /// returns length of text outputted
-       static int latexMarkChange(std::ostream & os, Change::Type old, Change::Type change);
+       static int latexMarkChange(std::ostream & os, Change::Type old,
+               Change::Type change, bool const & output);
 
        /// output .lyx file format for transitions between changes
        static void lyxMarkChange(std::ostream & os, int & column,
                lyx::time_type curtime, Change const & old, Change const & change);
 
 private:
-       struct Range {
+       class Range {
+       public:
                Range(lyx::pos_type s, lyx::pos_type e)
                        : start(s), end(e) {}
 
@@ -103,7 +107,7 @@ private:
                bool contains(lyx::pos_type pos) const;
 
                // does this range contain pos, or can it be appended ?
-               bool loose_contains(lyx::pos_type pos) const;
+               bool containsOrPrecedes(lyx::pos_type pos) const;
 
                // is this range contained within r ?
                bool contained(Range const & r) const;
@@ -118,7 +122,8 @@ private:
        friend bool operator==(Range const & r1, Range const & r2);
        friend bool operator!=(Range const & r1, Range const & r2);
 
-       struct ChangeRange {
+       class ChangeRange {
+       public:
                ChangeRange(lyx::pos_type s, lyx::pos_type e, Change c)
                        : range(Range(s, e)), change(c) {}
                Range range;
@@ -127,22 +132,23 @@ private:
 
        typedef std::vector<ChangeRange> ChangeTable;
 
-       /// our table of changes
+       /// our table of changes, every row a range and change descriptor
        ChangeTable table_;
 
        /// change type for an empty paragraph
        Change::Type empty_type_;
 
-       /// handle a delete
+       /// handle a delete, either logical or physical (see erase)
        void del(Change change, ChangeTable::size_type pos);
 
-       /// handle an add
+       /// handle an add, adjusting range bounds past it
        void add(Change change, ChangeTable::size_type pos);
 
-       /// merge neighbouring ranges
+       /// merge neighbouring ranges, assuming that they are abutting
+       /// (as done by set())
        void merge();
 
-       /// consistency check
+       /// consistency check, needed before merge()
        void check() const;
 
 };