X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fchanges.h;h=dabfdf80e818293eeb4689fa6f23cc97677890e8;hb=e94889a041628203c50b66b9a4add63210de6928;hp=00429d94a1e6c661f9e9b18cdc02efc635a9b612;hpb=1583baeb34c3b5f1cd1c239cf8471132fd5c406a;p=lyx.git diff --git a/src/changes.h b/src/changes.h index 00429d94a1..dabfdf80e8 100644 --- a/src/changes.h +++ b/src/changes.h @@ -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 + * Record changes in a paragraph. */ #ifndef CHANGES_H @@ -16,9 +19,10 @@ #include #include -#include -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 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; };