]> git.lyx.org Git - lyx.git/blobdiff - src/Changes.cpp
Remove obsolete (and false) comment.
[lyx.git] / src / Changes.cpp
index 5db28010fa1755deae327cafda4ef0a8e9a5e5cc..a579144a7a1f875b8e6fb60bfb22043017d8d582 100644 (file)
@@ -19,6 +19,7 @@
 #include "BufferParams.h"
 #include "Encoding.h"
 #include "LaTeXFeatures.h"
+#include "LyXRC.h"
 #include "MetricsInfo.h"
 #include "OutputParams.h"
 #include "Paragraph.h"
@@ -72,19 +73,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;
        }
 
@@ -142,7 +143,7 @@ void Changes::set(Change const & change, pos_type const start, pos_type const en
 {
        if (change.type != Change::UNCHANGED) {
                LYXERR(Debug::CHANGES, "setting change (type: " << change.type
-                       << ", author: " << change.author 
+                       << ", author: " << change.author
                        << ", time: " << long(change.changetime)
                        << ") in range (" << start << ", " << end << ")");
        }
@@ -338,7 +339,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 +349,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_initials);
+                       }
+               }
+       }
        // 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()) {
@@ -382,7 +417,7 @@ docstring getLaTeXMarkup(docstring const & macro, docstring const & author,
        return ods.str();
 }
 
-} //namespace anon
+} // namespace
 
 
 int Changes::latexMarkChange(otexstream & os, BufferParams const & bparams,
@@ -395,10 +430,13 @@ int Changes::latexMarkChange(otexstream & os, BufferParams const & bparams,
        int column = 0;
 
        if (oldChange.type != Change::UNCHANGED) {
-               // close \lyxadded or \lyxdeleted
-               os << '}';
-               column++;
-               if (oldChange.type == Change::DELETED && !runparams.wasDisplayMath)
+               if (oldChange.type != Change::DELETED || runparams.ctObject != OutputParams::CT_OMITOBJECT) {
+                       // close \lyxadded or \lyxdeleted
+                       os << '}';
+                       column++;
+               }
+               if (oldChange.type == Change::DELETED
+                   && !runparams.wasDisplayMath)
                        --runparams.inulemcmd;
        }
 
@@ -409,27 +447,26 @@ int Changes::latexMarkChange(otexstream & os, BufferParams const & bparams,
 
        docstring macro_beg;
        if (change.type == Change::DELETED) {
-               macro_beg = from_ascii("\\lyxdeleted{");
-               if (!runparams.inDisplayMath)
-                       ++runparams.inulemcmd;
+               if (runparams.ctObject == OutputParams::CT_OMITOBJECT)
+                       return 0;
+               else if (runparams.ctObject == OutputParams::CT_OBJECT)
+                       macro_beg = from_ascii("\\lyxobjdeleted");
+               else if (runparams.ctObject == OutputParams::CT_DISPLAYOBJECT)
+                       macro_beg = from_ascii("\\lyxdisplayobjdeleted");
+               else if (runparams.ctObject == OutputParams::CT_UDISPLAYOBJECT)
+                       macro_beg = from_ascii("\\lyxudisplayobjdeleted");
+               else {
+                       macro_beg = from_ascii("\\lyxdeleted");
+                       if (!runparams.inDisplayMath)
+                               ++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())
-                       str += from_ascii("\\\\\\noindent\n");
-               else
-                       str += from_ascii("\\\\\\\\\n");
-       }
 
        os << str;
        column += str.size();
@@ -520,18 +557,10 @@ void Changes::addToToc(DocIterator const & cdit, Buffer const & buffer,
 }
 
 
-void Changes::updateBuffer(Buffer const & buf)
-{
-       bool const changed = isChanged();
-       buf.setChangesPresent(buf.areChangesPresent() || changed);
-       previously_changed_ = changed;
-}
-
-
 void Change::paintCue(PainterInfo & pi, double const x1, double const y,
                       double const x2, FontInfo const & font) const
 {
-       if (!changed())
+       if (!changed() || (!lyxrc.ct_additions_underlined && inserted()))
                return;
        // Calculate 1/3 height of font
        FontMetrics const & fm = theFontMetrics(font);
@@ -557,11 +586,14 @@ void Change::paintCue(PainterInfo & pi, double const x1, double const y1,
        switch(type) {
        case UNCHANGED:
                return;
-       case INSERTED:
+       case INSERTED: {
+               if (!lyxrc.ct_additions_underlined)
+                       break;
                pi.pain.line(int(x1), int(y2) + 1, int(x2), int(y2) + 1,
                             color(), Painter::line_solid,
                             pi.base.solidLineThickness());
                return;
+       }
        case DELETED:
                // FIXME: we cannot use antialias since we keep drawing on the same
                // background with the current painting mechanism.