]> git.lyx.org Git - lyx.git/blobdiff - src/paragraph.C
remove some very old dead code
[lyx.git] / src / paragraph.C
index d6701c8e4bcc0b8d40170403a9c3e404ff9d3c7c..a38fe6e8c6b6bc507920ba0b0732800e0a56c46f 100644 (file)
 
 #include <config.h>
 
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
 #include "paragraph.h"
 #include "paragraph_pimpl.h"
 #include "lyxrc.h"
@@ -28,6 +24,7 @@
 #include "encoding.h"
 #include "ParameterStruct.h"
 #include "gettext.h"
+#include "changes.h"
 
 #include "insets/insetbib.h"
 #include "insets/insetoptarg.h"
@@ -42,6 +39,7 @@
 #include <algorithm>
 #include <fstream>
 #include <csignal>
+#include <ctime>
 
 using std::ostream;
 using std::endl;
@@ -49,7 +47,6 @@ using std::fstream;
 using std::ios;
 using std::lower_bound;
 using std::upper_bound;
-using std::reverse;
 
 using lyx::pos_type;
 
@@ -182,15 +179,15 @@ void Paragraph::write(Buffer const * buf, ostream & os,
        }
 
        // First write the layout
-       os << "\n\\layout " << layout()->name() << "\n";
+       os << "\n\\layout " << layout()->name() << '\n';
 
        // Maybe some vertical spaces.
        if (params().spaceTop().kind() != VSpace::NONE)
                os << "\\added_space_top "
-                  << params().spaceTop().asLyXCommand() << " ";
+                  << params().spaceTop().asLyXCommand() << ' ';
        if (params().spaceBottom().kind() != VSpace::NONE)
                os << "\\added_space_bottom "
-                  << params().spaceBottom().asLyXCommand() << " ";
+                  << params().spaceBottom().asLyXCommand() << ' ';
 
        // Maybe the paragraph has special spacing
        params().spacing().writeFile(os, true);
@@ -222,7 +219,8 @@ void Paragraph::write(Buffer const * buf, ostream & os,
 
        // Do we have a manual left indent?
        if (!params().leftIndent().zero())
-               os << "\\leftindent " << params().leftIndent().asString() << " ";
+               os << "\\leftindent " << params().leftIndent().asString()
+                  << ' ';
 
        // Alignment?
        if (params().align() != LYX_ALIGN_LAYOUT) {
@@ -233,7 +231,7 @@ void Paragraph::write(Buffer const * buf, ostream & os,
                case LYX_ALIGN_CENTER: h = 3; break;
                default: h = 0; break;
                }
-               os << "\\align " << string_align[h] << " ";
+               os << "\\align " << string_align[h] << ' ';
        }
 
        // bibitem  ale970302
@@ -242,13 +240,20 @@ void Paragraph::write(Buffer const * buf, ostream & os,
 
        LyXFont font1(LyXFont::ALL_INHERIT, bparams.language);
 
+       Change running_change = Change(Change::UNCHANGED);
+       lyx::time_type const curtime(lyx::current_time());
        int column = 0;
        for (pos_type i = 0; i < size(); ++i) {
                if (!i) {
-                       os << "\n";
+                       os << '\n';
                        column = 0;
                }
 
+               Change change = pimpl_->lookupChangeFull(i);
+               Changes::lyxMarkChange(os, column, curtime, running_change, change);
+               running_change = change;
                // Write font changes
                LyXFont font2 = getFontSettings(bparams, i);
                if (font2 != font1) {
@@ -293,12 +298,12 @@ void Paragraph::write(Buffer const * buf, ostream & os,
                                os << ".\n";
                                column = 0;
                        } else
-                               os << ".";
+                               os << '.';
                        break;
                default:
                        if ((column > 70 && c == ' ')
                            || column > 79) {
-                               os << "\n";
+                               os << '\n';
                                column = 0;
                        }
                        // this check is to amend a bug. LyX sometimes
@@ -312,6 +317,15 @@ void Paragraph::write(Buffer const * buf, ostream & os,
                        break;
                }
        }
+
+       // to make reading work properly
+       if (!size()) {
+               running_change = pimpl_->lookupChange(0);
+               Changes::lyxMarkChange(os, column, curtime,
+                       Change(Change::UNCHANGED), running_change);
+       }
+       Changes::lyxMarkChange(os, column, curtime,
+               running_change, Change(Change::UNCHANGED)); 
 }
 
 
@@ -389,6 +403,12 @@ void Paragraph::erase(pos_type pos)
 }
 
 
+bool Paragraph::erase(pos_type start, pos_type end)
+{
+       return pimpl_->erase(start, end);
+}
+
 bool Paragraph::checkInsertChar(LyXFont & font)
 {
        if (pimpl_->inset_owner)
@@ -405,9 +425,9 @@ void Paragraph::insertChar(pos_type pos, Paragraph::value_type c)
 
 
 void Paragraph::insertChar(pos_type pos, Paragraph::value_type c,
-                          LyXFont const & font)
+                          LyXFont const & font, Change change)
 {
-       pimpl_->insertChar(pos, c, font);
+       pimpl_->insertChar(pos, c, font, change);
 }
 
 
@@ -418,9 +438,9 @@ void Paragraph::insertInset(pos_type pos, Inset * inset)
 }
 
 
-void Paragraph::insertInset(pos_type pos, Inset * inset, LyXFont const & font)
+void Paragraph::insertInset(pos_type pos, Inset * inset, LyXFont const & font, Change change)
 {
-       pimpl_->insertInset(pos, inset, font);
+       pimpl_->insertInset(pos, inset, font, change);
 }
 
 
@@ -499,9 +519,7 @@ LyXFont const Paragraph::getFont(BufferParams const & bparams,
 
        LyXLayout_ptr const & lout = layout();
 
-       pos_type main_body = 0;
-       if (lout->labeltype == LABEL_MANUAL)
-               main_body = beginningOfMainBody();
+       pos_type const main_body = beginningOfMainBody();
 
        LyXFont layoutfont;
        if (pos < main_body)
@@ -736,7 +754,7 @@ int Paragraph::stripLeadingSpaces()
 
        int i = 0;
        while (!empty() && (isNewline(0) || isLineSeparator(0))) {
-               erase(0);
+               pimpl_->eraseIntern(0);
                ++i;
        }
 
@@ -846,6 +864,9 @@ void Paragraph::applyLayout(LyXLayout_ptr const & new_layout)
 
 int Paragraph::beginningOfMainBody() const
 {
+       if (layout()->labeltype != LABEL_MANUAL)
+               return 0;
+
        // Unroll the first two cycles of the loop
        // and remember the previous character to
        // remove unnecessary GetChar() calls
@@ -984,7 +1005,7 @@ Paragraph * Paragraph::TeXOnePar(Buffer const * buf,
 
                if (!params().spacing().isDefault()
                        && (!previous() || !previous()->hasSameLayout(this))) {
-                       os << params().spacing().writeEnvirBegin() << "\n";
+                       os << params().spacing().writeEnvirBegin() << '\n';
                        texrow.newline();
                }
 
@@ -1052,7 +1073,7 @@ Paragraph * Paragraph::TeXOnePar(Buffer const * buf,
            language->encoding() != previous_language->encoding()) {
                os << "\\inputencoding{"
                   << language->encoding()->LatexName()
-                  << "}" << endl;
+                  << "}\n";
                texrow.newline();
        }
 
@@ -1102,12 +1123,12 @@ Paragraph * Paragraph::TeXOnePar(Buffer const * buf,
 
        if (style->resfont.size() != font.size() && next_ && !is_command) {
                if (!need_par)
-                       os << "{";
+                       os << '{';
                os << "\\" << font.latexSize() << " \\par}";
        } else if (need_par) {
                os << "\\par}";
        } else if (is_command)
-               os << "}";
+               os << '}';
 
        switch (style->latextype) {
        case LATEX_ITEM_ENVIRONMENT:
@@ -1157,7 +1178,7 @@ Paragraph * Paragraph::TeXOnePar(Buffer const * buf,
 
                if (!params().spacing().isDefault()
                        && (!next_ || !next_->hasSameLayout(this))) {
-                       os << params().spacing().writeEnvirEnd() << "\n";
+                       os << params().spacing().writeEnvirEnd() << '\n';
                        texrow.newline();
                }
        }
@@ -1336,12 +1357,16 @@ bool Paragraph::simpleTeXOnePar(Buffer const * buf,
 
        // Maybe we have to create a optional argument.
        pos_type main_body;
-       if (style->labeltype != LABEL_MANUAL)
+
+       // FIXME: can we actually skip this check and just call
+       // beginningOfMainBody() ??
+       if (style->labeltype != LABEL_MANUAL) {
                main_body = 0;
-       else
+       } else {
                main_body = beginningOfMainBody();
+       }
 
-       int column = 0;
+       unsigned int column = 0;
 
        if (main_body > 0) {
                os << '[';
@@ -1358,6 +1383,8 @@ bool Paragraph::simpleTeXOnePar(Buffer const * buf,
        // Do we have an open font change?
        bool open_font = false;
 
+       Change::Type running_change = Change::UNCHANGED;
        texrow.start(this, 0);
 
        // if the paragraph is empty, the loop will not be entered at all
@@ -1444,7 +1471,12 @@ bool Paragraph::simpleTeXOnePar(Buffer const * buf,
                        running_font = font;
                        open_font = true;
                }
-
+               Change::Type change = pimpl_->lookupChange(i);
+               column += Changes::latexMarkChange(os, running_change, change);
+               running_change = change;
                if (c == Paragraph::META_NEWLINE) {
                        // newlines are handled differently here than
                        // the default in SimpleTeXSpecialChars().
@@ -1459,7 +1491,7 @@ bool Paragraph::simpleTeXOnePar(Buffer const * buf,
                                running_font = basefont;
                                if (font.family() ==
                                    LyXFont::TYPEWRITER_FAMILY) {
-                                       os << "~";
+                                       os << '~';
                                }
                                if (moving_arg)
                                        os << "\\protect ";
@@ -1474,10 +1506,14 @@ bool Paragraph::simpleTeXOnePar(Buffer const * buf,
                                                      os, texrow, moving_arg,
                                                      font, running_font,
                                                      basefont, open_font,
+                                                     running_change,
                                                      *style, i, column, c);
                }
        }
 
+       column += Changes::latexMarkChange(os,
+                       running_change, Change::UNCHANGED);
        // If we have an open font definition, we have to close it
        if (open_font) {
 #ifdef FIXED_LANGUAGE_END_DETECTION
@@ -1729,11 +1765,9 @@ bool Paragraph::isMultiLingual(BufferParams const & bparams)
 // Used for building the table of contents
 string const Paragraph::asString(Buffer const * buffer, bool label) const
 {
-       BufferParams const & bparams = buffer->params;
        string s;
        if (label && !params().labelString().empty())
                s += params().labelString() + ' ';
-       string::size_type const len = s.size();
 
        for (pos_type i = 0; i < size(); ++i) {
                value_type c = getChar(i);
@@ -1747,9 +1781,6 @@ string const Paragraph::asString(Buffer const * buffer, bool label) const
                }
        }
 
-       if (isRightToLeftPar(bparams))
-               reverse(s.begin() + len,s.end());
-
        return s;
 }
 
@@ -1811,6 +1842,68 @@ void Paragraph::setContentsFromPar(Paragraph * par)
 }
 
 
+void Paragraph::trackChanges(Change::Type type)
+{
+       pimpl_->trackChanges(type);
+}
+
+void Paragraph::untrackChanges()
+{
+       pimpl_->untrackChanges();
+}
+
+
+void Paragraph::cleanChanges()
+{
+       pimpl_->cleanChanges();
+}
+
+Change::Type Paragraph::lookupChange(lyx::pos_type pos) const
+{
+       lyx::Assert(!size() || pos < size());
+       return pimpl_->lookupChange(pos);
+}
+
+Change const Paragraph::lookupChangeFull(lyx::pos_type pos) const
+{
+       lyx::Assert(!size() || pos < size());
+       return pimpl_->lookupChangeFull(pos);
+}
+
+bool Paragraph::isChanged(pos_type start, pos_type end) const
+{
+       return pimpl_->isChanged(start, end);
+}
+
+
+bool Paragraph::isChangeEdited(pos_type start, pos_type end) const
+{
+       return pimpl_->isChangeEdited(start, end);
+}
+
+void Paragraph::markErased()
+{
+       pimpl_->markErased();
+}
+
+void Paragraph::acceptChange(pos_type start, pos_type end)
+{
+       return pimpl_->acceptChange(start, end);
+}
+
+void Paragraph::rejectChange(pos_type start, pos_type end)
+{
+       return pimpl_->rejectChange(start, end);
+}
+
 lyx::pos_type Paragraph::size() const
 {
        return pimpl_->size();