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

Reply via email to