Michael Gerz wrote:
> Michael Gerz wrote:
>
>>
>> I changed the CT merge strategy according to the previous discussion.
>>
>> This patch merges two adjacent changes if they were made by the same
>> author (the change time is not regarded).
>>
>> OK to commit?
>>
>> Michael
>>
> Here comes this patch :-(
>
> Michael
>
>
> ------------------------------------------------------------------------
>
> Index: src/changes.C
> ===================================================================
> --- src/changes.C (Revision 15593)
> +++ src/changes.C (Arbeitskopie)
> @@ -31,30 +31,35 @@
> * Class Change has a changetime field that specifies the exact time at which
> * a specific change was made. The change time is used as a guidance for the
> * user while editing his document. Presently, it is not considered for LaTeX
> - * export. To avoid that every keystroke results in a separate change, a
> - * tolerance interval of 5 minutes is used. That means if there are two
> adjacent
> - * changes that only differ in their change time with abs(ct1 - ct2) < 300
> sec,
> - * they will be merged (and the later change time is preserved).
> - * Technically, the check for equality (or similarity) is made in
> operator==(...).
> - * The merging of similar changes happens in method merge().
> + * export.
> + * When merging two adjacent changes, the changetime is not considered,
> + * only the equality of the change type and author is checked (in method
> + * isSimilarTo(...)). If two changes are in fact merged (in method merge()),
> + * the later change time is preserved.
> */
>
> -bool operator==(Change const & l, Change const & r)
> +bool Change::isSimilarTo(Change const & change)
> {
> - if (l.type != r.type) {
> + if (type != change.type) {
> return false;
> }
>
> - if (l.type == Change::UNCHANGED) {
> + if (type == Change::UNCHANGED) {
> return true;
> }
>
> - return l.author == r.author
> - // both changes made within 5 minutes?
> - && abs(difftime(l.changetime, r.changetime)) < 300;
> + return author == change.author;
> }
then you could also remove #include <cmath>.
>
> +bool operator==(Change const & l, Change const & r)
> +{
> + return l.type == r.type &&
> + l.author == r.author &&
> + l.changetime == r.changetime;
> +}
> +
> +
> bool operator!=(Change const & l, Change const & r)
> {
> return !(l == r);
> @@ -293,7 +298,7 @@
> if (it + 1 == table_.end())
> break;
>
> - if (it->change == (it + 1)->change && it->range.end == (it +
> 1)->range.start) {
> + if (it->change.isSimilarTo((it + 1)->change) && it->range.end
> == (it + 1)->range.start) {
> if (lyxerr.debugging(Debug::CHANGES)) {
> lyxerr[Debug::CHANGES] << " merging ranges ("
> << it->range.start << ", "
> << it->range.end << ") and (" << (it +
> 1)->range.start << ", "
> Index: src/changes.h
> ===================================================================
> --- src/changes.h (Revision 15593)
> +++ src/changes.h (Arbeitskopie)
> @@ -36,6 +36,9 @@
> explicit Change(Type t, int a = 0, time_type ct = current_time())
> : type(t), author(a), changetime(ct) {}
>
> + /// is the change similar to the given change such that both can be
> merged?
> + bool isSimilarTo(Change const & change);
> +
> Type type;
>
> int author;
--
Peter Kümmel