]> git.lyx.org Git - lyx.git/commitdiff
latexParagraphs(): cleanup a bit and switch to a 'for' loop. Hopefully this should...
authorAbdelrazak Younes <younes@lyx.org>
Sat, 18 Dec 2010 08:23:14 +0000 (08:23 +0000)
committerAbdelrazak Younes <younes@lyx.org>
Sat, 18 Dec 2010 08:23:14 +0000 (08:23 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@36932 a592a061-630c-0410-9148-cb99ea01b6c8

src/output_latex.cpp
src/support/RandomAccessList.h

index cc56d6b672c2fd4fcac1669aacf963db3264e328..a46af021bc490dcb8e67febf9b6a65db7f18f6c1 100644 (file)
@@ -930,19 +930,6 @@ void latexParagraphs(Buffer const & buf,
        BufferParams const & bparams = buf.params();
        DocumentClass const & tclass = bparams.documentClass();
        ParagraphList const & paragraphs = text.paragraphs();
-       ParagraphList::const_iterator par = paragraphs.begin();
-       ParagraphList::const_iterator endpar = paragraphs.end();
-
-       LASSERT(runparams.par_begin <= runparams.par_end, /**/);
-       // if only part of the paragraphs will be outputed
-       if (runparams.par_begin !=  runparams.par_end) {
-               par = boost::next(paragraphs.begin(), runparams.par_begin);
-               endpar = boost::next(paragraphs.begin(), runparams.par_end);
-               // runparams will be passed to nested paragraphs, so
-               // we have to reset the range parameters.
-               const_cast<OutputParams&>(runparams).par_begin = 0;
-               const_cast<OutputParams&>(runparams).par_end = 0;
-       }
 
        bool const maintext = text.isMainText();
        bool const is_child = buf.masterBuffer() != &buf;
@@ -980,10 +967,28 @@ void latexParagraphs(Buffer const & buf,
                texrow.newline();
        }
 
-       ParagraphList::const_iterator lastpar;
+       LASSERT(runparams.par_begin <= runparams.par_end, /**/);
+       // if only part of the paragraphs will be outputed
+       bool const partial_export = (runparams.par_begin !=  runparams.par_end);
+       pit_type const par_begin = partial_export ? runparams.par_begin : 0;
+       pit_type const par_end = partial_export ? runparams.par_end : paragraphs.size();
+
+       if (partial_export) {
+               // runparams will be passed to nested paragraphs, so
+               // we have to reset the range parameters.
+               const_cast<OutputParams&>(runparams).par_begin = 0;
+               const_cast<OutputParams&>(runparams).par_end = 0;
+       }
+
+       pit_type pit = par_begin;
+       // lastpit is for the language check after the loop.
+       pit_type lastpit;
+       ParagraphList::const_iterator par;
        // if only_body
-       while (par != endpar) {
-               lastpar = par;
+       for (; pit < par_end; ++pit) {
+               lastpit = pit;
+               par = paragraphs.constIterator(pit);
+
                // FIXME This check should not be needed. We should
                // perhaps issue an error if it is.
                Layout const & layout = text.inset().forcePlainLayout() ?
@@ -1017,19 +1022,19 @@ void latexParagraphs(Buffer const & buf,
                        was_title = false;
                }
 
-               if (layout.isEnvironment() ||
-                                       !par->params().leftIndent().zero()) {
-                       TeXEnvironementData const data = prepareEnvironement(buf, text,
-                               par, os, texrow, runparams);
-                       par = TeXEnvironment(buf, text, par, os, texrow, runparams);
-                       finishEnvironement(os, texrow, runparams, data);
-               } else {
+               if (!layout.isEnvironment() && par->params().leftIndent().zero()) {
+                       // Standard top level paragraph.
                        TeXOnePar(buf, text, par, os, texrow, runparams, everypar);
-                       if (par != paragraphs.end())
-                               par++;
+                       continue;
                }
-               if (distance(lastpar, par) >= distance(lastpar, endpar))
-                       break;
+               
+               TeXEnvironementData const data = prepareEnvironement(buf, text, par,
+                       os, texrow, runparams);
+               par = TeXEnvironment(buf, text, par, os, texrow, runparams);
+               finishEnvironement(os, texrow, runparams, data);
+               pit = paragraphs.position(par);
+               //FIXME: TeXEnvironment() advances one par too much.
+               pit--;
        }
 
        // It might be that we only have a title in this document
@@ -1050,7 +1055,7 @@ void latexParagraphs(Buffer const & buf,
        string const lang_end_command = runparams.use_polyglossia ?
                "\\end{$$lang}" : lyxrc.language_command_end;
        if (maintext && !lyxrc.language_auto_end && !mainlang.empty() &&
-               lastpar->getParLanguage(bparams)->encoding()->package() != Encoding::CJK) {
+               paragraphs.at(lastpit).getParLanguage(bparams)->encoding()->package() != Encoding::CJK) {
                os << from_utf8(subst(lang_end_command,
                                        "$$lang",
                                        mainlang))
index 4c48b36db2fde8da3deef965231eaacb0c43b856..2565d62513158ecc57e0f306ef471c9b477ab264 100644 (file)
@@ -293,6 +293,12 @@ public:
                return s;
        }
 
+
+       const_iterator constIterator(size_t i) const
+       {
+               return iterCont_[i];
+       }
+
 private:
        void recreateVector()
        {