X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FChanges.cpp;h=7ed02657a6a64c4eb681c8c69eb32fc39226a238;hb=608603a31d6ae4e3d08ae4e9c18a11d9e705dcf4;hp=a7cd525dde3bf608f31b1d82861415aac26faae1;hpb=f630be890494c849981e4fb52ea4740506e92bed;p=lyx.git diff --git a/src/Changes.cpp b/src/Changes.cpp index a7cd525dde..7ed02657a6 100644 --- a/src/Changes.cpp +++ b/src/Changes.cpp @@ -15,6 +15,9 @@ #include "Changes.h" #include "debug.h" +#include "Author.h" +#include "BufferParams.h" +#include "LaTeXFeatures.h" #include @@ -34,7 +37,7 @@ using std::max; * 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. + * the later change time is preserved. */ bool Change::isSimilarTo(Change const & change) @@ -61,7 +64,7 @@ bool operator==(Change const & l, Change const & r) if (l.type == Change::UNCHANGED) { return true; } - + return l.author == r.author && l.changetime == r.changetime; } @@ -219,7 +222,7 @@ void Changes::insert(Change const & change, lyx::pos_type pos) Change const & Changes::lookup(pos_type const pos) const { static Change const noChange = Change(Change::UNCHANGED); - + ChangeTable::const_iterator it = table_.begin(); ChangeTable::const_iterator const end = table_.end(); @@ -279,7 +282,7 @@ void Changes::merge() (it + 1)->range.start = it->range.start; (it + 1)->change.changetime = max(it->change.changetime, - (it + 1)->change.changetime); + (it + 1)->change.changetime); table_.erase(it); // start again it = table_.begin(); @@ -291,46 +294,35 @@ void Changes::merge() } -int Changes::latexMarkChange(odocstream & os, - Change::Type const oldChangeType, Change::Type const changeType, - bool const & output) +int Changes::latexMarkChange(odocstream & os, BufferParams const & bparams, + Change const & oldChange, Change const & change) { - if (!output || oldChangeType == changeType) + if (!bparams.outputChanges || oldChange == change) return 0; - static docstring const start(from_ascii("\\changestart{}")); - static docstring const end(from_ascii("\\changeend{}")); - static docstring const son(from_ascii("\\overstrikeon{}")); - static docstring const soff(from_ascii("\\overstrikeoff{}")); - int column = 0; - if (oldChangeType == Change::DELETED) { - os << soff; - column += soff.length(); + if (oldChange.type != Change::UNCHANGED) { + os << '}'; // close \lyxadded or \lyxdeleted + column++; } - switch (changeType) { - case Change::UNCHANGED: - os << end; - column += end.length(); - break; - - case Change::DELETED: - if (oldChangeType == Change::UNCHANGED) { - os << start; - column += start.length(); - } - os << son; - column += son.length(); - break; - - case Change::INSERTED: - if (oldChangeType == Change::UNCHANGED) { - os << start; - column += start.length(); - } - break; + docstring chgTime; + chgTime += ctime(&change.changetime); + chgTime.erase(chgTime.end() - 1); // remove trailing '\n' + + if (change.type == Change::DELETED) { + docstring str = "\\lyxdeleted{" + + bparams.authors().get(change.author).name() + "}{" + + chgTime + "}{"; + os << str; + column += str.size(); + } else if (change.type == Change::INSERTED) { + docstring str = "\\lyxadded{" + + bparams.authors().get(change.author).name() + "}{" + + chgTime + "}{"; + os << str; + column += str.size(); } return column;