]> git.lyx.org Git - lyx.git/blobdiff - src/Changes.cpp
Disable changebar checkbox if show changes in output is off
[lyx.git] / src / Changes.cpp
index 8d4933c55fc353f76e262aaa9c94b86069c468de..f8f70e1da8e721b513c6fc1157f0899f0467ab16 100644 (file)
@@ -72,19 +72,19 @@ Color Change::color() const
        Color color = Color_none;
        switch (author % 5) {
                case 0:
-                       color = Color_changedtextauthor1;
+                       color = Color_addedtextauthor1;
                        break;
                case 1:
-                       color = Color_changedtextauthor2;
+                       color = Color_addedtextauthor2;
                        break;
                case 2:
-                       color = Color_changedtextauthor3;
+                       color = Color_addedtextauthor3;
                        break;
                case 3:
-                       color = Color_changedtextauthor4;
+                       color = Color_addedtextauthor4;
                        break;
                case 4:
-                       color = Color_changedtextauthor5;
+                       color = Color_addedtextauthor5;
                        break;
        }
 
@@ -338,7 +338,7 @@ void Changes::merge()
 
 namespace {
 
-docstring getLaTeXMarkup(docstring const & macro, docstring const & author,
+docstring getLaTeXMarkup(docstring const & macro, Author const & author,
                         docstring const & chgTime,
                         OutputParams const & runparams)
 {
@@ -348,18 +348,52 @@ docstring getLaTeXMarkup(docstring const & macro, docstring const & author,
        docstring uncodable_author;
        odocstringstream ods;
 
+       docstring const author_name = author.name();
+       docstring const author_initials = author.initials();
+       
        ods << macro;
+       if (!author_initials.empty()) {
+               docstring uncodable_initials;
+               // convert utf8 author initials to something representable
+               // in the current encoding
+               pair<docstring, docstring> author_initials_latexed =
+                       runparams.encoding->latexString(author_initials, runparams.dryrun);
+               if (!author_initials_latexed.second.empty()) {
+                       LYXERR0("Omitting uncodable characters '"
+                               << author_initials_latexed.second
+                               << "' in change author initials!");
+                       uncodable_initials = author_initials;
+               }
+               ods << "[" << author_initials_latexed.first << "]";
+               // warn user (once) if we found uncodable glyphs.
+               if (!uncodable_initials.empty()) {
+                       static std::set<docstring> warned_author_initials;
+                       static Mutex warned_mutex;
+                       Mutex::Locker locker(&warned_mutex);
+                       if (warned_author_initials.find(uncodable_initials) == warned_author_initials.end()) {
+                               frontend::Alert::warning(_("Uncodable character in author initials"),
+                                       support::bformat(_("The author initials '%1$s',\n"
+                                         "used for change tracking, contain the following glyphs that\n"
+                                         "cannot be represented in the current encoding: %2$s.\n"
+                                         "These glyphs will be omitted in the exported LaTeX file.\n\n"
+                                         "Choose an appropriate document encoding (such as utf8)\n"
+                                         "or change the author initials."),
+                                       uncodable_initials, author_initials_latexed.second));
+                               warned_author_initials.insert(uncodable_author);
+                       }
+               }
+       }
        // convert utf8 author name to something representable
        // in the current encoding
        pair<docstring, docstring> author_latexed =
-               runparams.encoding->latexString(author, runparams.dryrun);
+               runparams.encoding->latexString(author_name, runparams.dryrun);
        if (!author_latexed.second.empty()) {
                LYXERR0("Omitting uncodable characters '"
                        << author_latexed.second
                        << "' in change author name!");
-               uncodable_author = author;
+               uncodable_author = author_name;
        }
-       ods << author_latexed.first << "}{" << chgTime << "}{";
+       ods << "{" << author_latexed.first << "}{" << chgTime << "}{";
 
        // warn user (once) if we found uncodable glyphs.
        if (!uncodable_author.empty()) {
@@ -394,11 +428,16 @@ int Changes::latexMarkChange(otexstream & os, BufferParams const & bparams,
 
        int column = 0;
 
+       bool const dvipost = LaTeXFeatures::isAvailable("dvipost") &&
+                       (runparams.flavor == OutputParams::LATEX
+                        || runparams.flavor == OutputParams::DVILUATEX);
+
        if (oldChange.type != Change::UNCHANGED) {
                // close \lyxadded or \lyxdeleted
                os << '}';
                column++;
-               if (oldChange.type == Change::DELETED && !runparams.wasDisplayMath)
+               if (oldChange.type == Change::DELETED
+                   && !runparams.wasDisplayMath && !dvipost)
                        --runparams.inulemcmd;
        }
 
@@ -409,23 +448,21 @@ int Changes::latexMarkChange(otexstream & os, BufferParams const & bparams,
 
        docstring macro_beg;
        if (change.type == Change::DELETED) {
-               macro_beg = from_ascii("\\lyxdeleted{");
-               if (!runparams.inDisplayMath)
+               macro_beg = from_ascii("\\lyxdeleted");
+               if (!runparams.inDisplayMath && !dvipost)
                        ++runparams.inulemcmd;
        }
        else if (change.type == Change::INSERTED)
-               macro_beg = from_ascii("\\lyxadded{");
+               macro_beg = from_ascii("\\lyxadded");
 
        docstring str = getLaTeXMarkup(macro_beg,
-                                      bparams.authors().get(change.author).name(),
+                                      bparams.authors().get(change.author),
                                       chgTime, runparams);
 
        // signature needed by \lyxsout to correctly strike out display math
        if (change.type == Change::DELETED && runparams.inDisplayMath
-           && (!LaTeXFeatures::isAvailable("dvipost")
-               || (runparams.flavor != OutputParams::LATEX
-                   && runparams.flavor != OutputParams::DVILUATEX))) {
-               if (os.afterParbreak())
+           && !dvipost) {
+               if (os.blankLine())
                        str += from_ascii("\\\\\\noindent\n");
                else
                        str += from_ascii("\\\\\\\\\n");