]> git.lyx.org Git - lyx.git/blobdiff - src/paragraph_funcs.C
fix some C++ parsing bugs
[lyx.git] / src / paragraph_funcs.C
index 04081b6195e6424501e9d97ccfadce3ad2efa118..36b4cc0337b66165ea4dd83e25a431ad52aeb08b 100644 (file)
@@ -32,6 +32,7 @@
 #include "insets/insettabular.h"
 #include "insets/insethfill.h"
 #include "insets/inseterror.h"
+#include "insets/insetnewline.h"
 
 extern string bibitemWidest(Buffer const *);
 
@@ -261,9 +262,24 @@ int getEndLabel(Paragraph * para, BufferParams const & bparams)
 #endif
 
 
+namespace {
+
+ParagraphList::iterator
+TeXEnvironment(Buffer const * buf,
+              ParagraphList const & paragraphs,
+              ParagraphList::iterator pit,
+              ostream & os, TexRow & texrow);
+
+ParagraphList::iterator
+TeXOnePar(Buffer const * buf,
+         ParagraphList const & paragraphs,
+         ParagraphList::iterator pit,
+         ostream & os, TexRow & texrow,
+         bool moving_arg);
+
+
 ParagraphList::iterator
 TeXDeeper(Buffer const * buf,
-         BufferParams const & bparams,
          ParagraphList const & paragraphs,
          ParagraphList::iterator pit,
          ostream & os, TexRow & texrow)
@@ -273,10 +289,10 @@ TeXDeeper(Buffer const * buf,
 
        while (par != paragraphs.end()&& par->params().depth() == pit->params().depth()) {
                if (par->layout()->isEnvironment()) {
-                       par = TeXEnvironment(buf, bparams, paragraphs, par,
+                       par = TeXEnvironment(buf, paragraphs, par,
                                                  os, texrow);
                } else {
-                       par = TeXOnePar(buf, bparams, paragraphs, par,
+                       par = TeXOnePar(buf, paragraphs, par,
                                             os, texrow, false);
                }
        }
@@ -288,13 +304,14 @@ TeXDeeper(Buffer const * buf,
 
 ParagraphList::iterator
 TeXEnvironment(Buffer const * buf,
-              BufferParams const & bparams,
               ParagraphList const & paragraphs,
               ParagraphList::iterator pit,
               ostream & os, TexRow & texrow)
 {
        lyxerr[Debug::LATEX] << "TeXEnvironment...     " << &*pit << endl;
 
+       BufferParams const & bparams = buf->params;
+
        LyXLayout_ptr const & style = pit->layout();
 
        Language const * language = pit->getParLanguage(bparams);
@@ -349,7 +366,7 @@ TeXEnvironment(Buffer const * buf,
        }
        ParagraphList::iterator par = pit;
        do {
-               par = TeXOnePar(buf, bparams, paragraphs, par, os, texrow, false);
+               par = TeXOnePar(buf, paragraphs, par, os, texrow, false);
 
                if (par != paragraphs.end()&& par->params().depth() > pit->params().depth()) {
                            if (par->layout()->isParagraph()) {
@@ -371,7 +388,7 @@ TeXEnvironment(Buffer const * buf,
                                os << '\n';
                                texrow.newline();
                        }
-                       par = TeXDeeper(buf, bparams, paragraphs, par, os, texrow);
+                       par = TeXDeeper(buf, paragraphs, par, os, texrow);
                }
        } while (par != paragraphs.end()
                 && par->layout() == pit->layout()
@@ -393,8 +410,6 @@ TeXEnvironment(Buffer const * buf,
 }
 
 
-namespace {
-
 InsetOptArg * optArgInset(Paragraph const & par)
 {
        // Find the entry.
@@ -409,18 +424,17 @@ InsetOptArg * optArgInset(Paragraph const & par)
        return 0;
 }
 
-} // end namespace
-
 
 ParagraphList::iterator
 TeXOnePar(Buffer const * buf,
-         BufferParams const & bparams,
          ParagraphList const & paragraphs,
          ParagraphList::iterator pit,
          ostream & os, TexRow & texrow,
          bool moving_arg)
 {
        lyxerr[Debug::LATEX] << "TeXOnePar...     " << &*pit << endl;
+       BufferParams const & bparams = buf->params;
+
        Inset const * in = pit->inInset();
        bool further_blank_line = false;
        LyXLayout_ptr style;
@@ -647,6 +661,8 @@ TeXOnePar(Buffer const * buf,
        return ++pit;
 }
 
+} // anon namespace
+
 
 //
 // LaTeX all paragraphs from par to endpar, if endpar == 0 then to the end
@@ -704,12 +720,12 @@ void latexParagraphs(Buffer const * buf,
                        if (layout->isEnvironment() ||
                                !par->params().leftIndent().zero())
                        {
-                               par = TeXEnvironment(buf, buf->params, paragraphs, par, ofs, texrow);
+                               par = TeXEnvironment(buf, paragraphs, par, ofs, texrow);
                        } else {
-                               par = TeXOnePar(buf, buf->params, paragraphs, par, ofs, texrow, moving_arg);
+                               par = TeXOnePar(buf, paragraphs, par, ofs, texrow, moving_arg);
                        }
                } else {
-                       par = TeXOnePar(buf, buf->params, paragraphs, par, ofs, texrow, moving_arg);
+                       par = TeXOnePar(buf, paragraphs, par, ofs, texrow, moving_arg);
                }
        }
        // It might be that we only have a title in this document
@@ -916,9 +932,10 @@ int readParToken(Buffer & buf, Paragraph & par, LyXLex & lex, string const & tok
                par.insertInset(par.size(), inset, font, change);
        } else if (token == "\\backslash") {
                par.insertChar(par.size(), '\\', font, change);
-       // do not delete this token, it is still needed!
        } else if (token == "\\newline") {
-               par.insertChar(par.size(), Paragraph::META_NEWLINE, font, change);
+               Inset * inset = new InsetNewline;
+               inset->read(&buf, lex);
+               par.insertInset(par.size(), inset, font, change);
        } else if (token == "\\LyXTable") {
                Inset * inset = new InsetTabular(buf);
                inset->read(&buf, lex);
@@ -943,7 +960,7 @@ int readParToken(Buffer & buf, Paragraph & par, LyXLex & lex, string const & tok
                lyx::time_type ct;
                istr >> aid;
                istr >> ct;
-               change = Change(Change::INSERTED, aid, ct);
+               change = Change(Change::INSERTED, bp.author_map[aid], ct);
        } else if (token == "\\change_deleted") {
                lex.nextToken();
                istringstream istr(lex.getString());
@@ -951,7 +968,7 @@ int readParToken(Buffer & buf, Paragraph & par, LyXLex & lex, string const & tok
                lyx::time_type ct;
                istr >> aid;
                istr >> ct;
-               change = Change(Change::DELETED, aid, ct);
+               change = Change(Change::DELETED, bp.author_map[aid], ct);
        } else {
                lex.eatLine();
 #if USE_BOOST_FORMAT