]> git.lyx.org Git - lyx.git/blobdiff - src/output_docbook.cpp
Disable CheckTeX while buffer is processed
[lyx.git] / src / output_docbook.cpp
index a7277259cc0699915aa15613150a9a61679db434..6ed409c5dda04c69eafadcf2e0f3131bd2fa4abe 100644 (file)
 #include "buffer_funcs.h"
 #include "BufferParams.h"
 #include "Counters.h"
+#include "Font.h"
 #include "Layout.h"
 #include "OutputParams.h"
 #include "Paragraph.h"
-#include "paragraph_funcs.h"
 #include "ParagraphList.h"
 #include "ParagraphParameters.h"
 #include "sgml.h"
+#include "Text.h"
 #include "TextClass.h"
 
 #include "support/lassert.h"
-#include "support/convert.h"
 #include "support/debug.h"
 #include "support/lstrings.h"
+#include "support/lyxalgo.h"
 
-#include <boost/next_prior.hpp>
+#include <iostream>
 
 using namespace std;
 using namespace lyx::support;
@@ -42,7 +43,7 @@ namespace {
 
 ParagraphList::const_iterator searchParagraph(
        ParagraphList::const_iterator p,
-  ParagraphList::const_iterator const & pend)
+       ParagraphList::const_iterator const & pend)
 {
        for (++p; p != pend && p->layout().latextype == LATEX_PARAGRAPH; ++p)
                ;
@@ -52,8 +53,8 @@ ParagraphList::const_iterator searchParagraph(
 
 
 ParagraphList::const_iterator searchCommand(
-               ParagraphList::const_iterator p,
-               ParagraphList::const_iterator const & pend)
+       ParagraphList::const_iterator p,
+       ParagraphList::const_iterator const & pend)
 {
        Layout const & bstyle = p->layout();
 
@@ -68,8 +69,8 @@ ParagraphList::const_iterator searchCommand(
 
 
 ParagraphList::const_iterator searchEnvironment(
-               ParagraphList::const_iterator p,
-               ParagraphList::const_iterator const & pend)
+       ParagraphList::const_iterator p,
+       ParagraphList::const_iterator const & pend)
 {
        Layout const & bstyle = p->layout();
        size_t const depth = p->params().depth();
@@ -95,24 +96,28 @@ ParagraphList::const_iterator searchEnvironment(
 }
 
 
-ParagraphList::const_iterator makeParagraph(Buffer const & buf,
-                                           odocstream & os,
-                                           OutputParams const & runparams,
-                                           ParagraphList const & paragraphs,
-                                           ParagraphList::const_iterator const & pbegin,
-                                           ParagraphList::const_iterator const & pend)
+ParagraphList::const_iterator makeParagraph(
+       Buffer const & buf,
+       odocstream & os,
+       OutputParams const & runparams,
+       Text const & text,
+       ParagraphList::const_iterator const & pbegin,
+       ParagraphList::const_iterator const & pend)
 {
+       ParagraphList const & paragraphs = text.paragraphs();
        for (ParagraphList::const_iterator par = pbegin; par != pend; ++par) {
                if (par != pbegin)
                        os << '\n';
-               if (buf.params().documentClass().isDefaultLayout(par->layout()) 
-                   && par->emptyTag()) {
-                       par->simpleDocBookOnePar(buf, os, runparams, 
-                                       outerFont(distance(paragraphs.begin(), par), paragraphs));
+               bool const default_or_plain =
+                       (buf.params().documentClass().isDefaultLayout(par->layout())
+                               || buf.params().documentClass().isPlainLayout(par->layout()));
+               if (default_or_plain && par->emptyTag()) {
+                       par->simpleDocBookOnePar(buf, os, runparams,
+                                       text.outerFont(distance(paragraphs.begin(), par)));
                } else {
                        sgml::openTag(buf, os, runparams, *par);
-                       par->simpleDocBookOnePar(buf, os, runparams, 
-                                       outerFont(distance(paragraphs.begin(), par), paragraphs));
+                       par->simpleDocBookOnePar(buf, os, runparams,
+                                       text.outerFont(distance(paragraphs.begin(), par)));
                        sgml::closeTag(os, *par);
                }
        }
@@ -120,17 +125,19 @@ ParagraphList::const_iterator makeParagraph(Buffer const & buf,
 }
 
 
-ParagraphList::const_iterator makeEnvironment(Buffer const & buf,
-                                             odocstream & os,
-                                             OutputParams const & runparams,
-                                             ParagraphList const & paragraphs,
-                                             ParagraphList::const_iterator const & pbegin,
-                                             ParagraphList::const_iterator const & pend) {
+ParagraphList::const_iterator makeEnvironment(
+       Buffer const & buf,
+       odocstream & os,
+       OutputParams const & runparams,
+       Text const & text,
+       ParagraphList::const_iterator const & pbegin,
+       ParagraphList::const_iterator const & pend)
+{
+       ParagraphList const & paragraphs = text.paragraphs();
        ParagraphList::const_iterator par = pbegin;
 
        Layout const & defaultstyle = buf.params().documentClass().defaultLayout();
        Layout const & bstyle = par->layout();
-       string item_tag;
 
        // Opening outter tag
        sgml::openTag(buf, os, runparams, *pbegin);
@@ -157,7 +164,7 @@ ParagraphList::const_iterator makeEnvironment(Buffer const & buf,
                        if (!bstyle.labeltag().empty()) {
                                sgml::openTag(os, bstyle.innertag(), id);
                                sgml::openTag(os, bstyle.labeltag());
-                               sep = par->firstWord(os, runparams) + 1;
+                               sep = par->firstWordDocBook(os, runparams) + 1;
                                sgml::closeTag(os, bstyle.labeltag());
                        }
                        wrapper = defaultstyle.latexname();
@@ -177,21 +184,27 @@ ParagraphList::const_iterator makeEnvironment(Buffer const & buf,
                case LATEX_ITEM_ENVIRONMENT: {
                        if (par->params().depth() == pbegin->params().depth()) {
                                sgml::openTag(os, wrapper);
-                               par->simpleDocBookOnePar(buf, os, runparams, outerFont(distance(paragraphs.begin(), par), paragraphs), sep);
+                               par->simpleDocBookOnePar(buf, os, runparams,
+                                       text.outerFont(distance(paragraphs.begin(), par)), sep);
                                sgml::closeTag(os, wrapper);
                                ++par;
                        }
                        else {
                                send = searchEnvironment(par, pend);
-                               par = makeEnvironment(buf, os, runparams, paragraphs, par,send);
+                               par = makeEnvironment(buf, os, runparams, text, par,send);
                        }
                        break;
                }
                case LATEX_PARAGRAPH:
                        send = searchParagraph(par, pend);
-                       par = makeParagraph(buf, os, runparams, paragraphs, par,send);
+                       par = makeParagraph(buf, os, runparams, text, par,send);
                        break;
-               default:
+               case LATEX_LIST_ENVIRONMENT:
+               case LATEX_BIB_ENVIRONMENT:
+               case LATEX_COMMAND:
+                       // FIXME This means that we are just skipping any paragraph that
+                       // isn't implemented above, and this includes lists.
+                       ++par;
                        break;
                }
 
@@ -226,20 +239,22 @@ ParagraphList::const_iterator makeEnvironment(Buffer const & buf,
        if (bstyle.latextype == LATEX_ENVIRONMENT && bstyle.pass_thru)
                os << "]]>";
 
-       // Closing outter tag
+       // Closing outer tag
        sgml::closeTag(os, *pbegin);
 
        return pend;
 }
 
 
-ParagraphList::const_iterator makeCommand(Buffer const & buf,
-                                         odocstream & os,
-                                         OutputParams const & runparams,
-                                         ParagraphList const & paragraphs,
-                                         ParagraphList::const_iterator const & pbegin,
-                                         ParagraphList::const_iterator const & pend)
+ParagraphList::const_iterator makeCommand(
+       Buffer const & buf,
+       odocstream & os,
+       OutputParams const & runparams,
+       Text const & text,
+       ParagraphList::const_iterator const & pbegin,
+       ParagraphList::const_iterator const & pend)
 {
+       ParagraphList const & paragraphs = text.paragraphs();
        ParagraphList::const_iterator par = pbegin;
        Layout const & bstyle = par->layout();
 
@@ -251,13 +266,14 @@ ParagraphList::const_iterator makeCommand(Buffer const & buf,
        if (!bstyle.labeltag().empty()) {
                sgml::openTag(os, bstyle.labeltag());
                // We don't care about appendix in DOCBOOK.
-               os << par->expandLabel(bstyle, buf.params(), false);
+               os << par->expandDocBookLabel(bstyle, buf.params());
                sgml::closeTag(os, bstyle.labeltag());
        }
 
        // Opend inner tag and  close inner tags
        sgml::openTag(os, bstyle.innertag());
-       par->simpleDocBookOnePar(buf, os, runparams,  outerFont(distance(paragraphs.begin(), par), paragraphs));
+       par->simpleDocBookOnePar(buf, os, runparams,
+               text.outerFont(distance(paragraphs.begin(), par)));
        sgml::closeTag(os, bstyle.innertag());
        os << '\n';
 
@@ -269,20 +285,24 @@ ParagraphList::const_iterator makeCommand(Buffer const & buf,
                switch (style.latextype) {
                case LATEX_COMMAND: {
                        send = searchCommand(par, pend);
-                       par = makeCommand(buf, os, runparams, paragraphs, par,send);
+                       par = makeCommand(buf, os, runparams, text, par,send);
                        break;
                }
                case LATEX_ENVIRONMENT:
                case LATEX_ITEM_ENVIRONMENT: {
                        send = searchEnvironment(par, pend);
-                       par = makeEnvironment(buf, os, runparams, paragraphs, par,send);
+                       par = makeEnvironment(buf, os, runparams, text, par,send);
                        break;
                }
                case LATEX_PARAGRAPH:
                        send = searchParagraph(par, pend);
-                       par = makeParagraph(buf, os, runparams, paragraphs, par,send);
+                       par = makeParagraph(buf, os, runparams, text, par,send);
                        break;
-               default:
+               case LATEX_BIB_ENVIRONMENT:
+               case LATEX_LIST_ENVIRONMENT:
+                       // FIXME This means that we are just skipping any paragraph that
+                       // isn't implemented above.
+                       ++par;
                        break;
                }
        }
@@ -292,22 +312,25 @@ ParagraphList::const_iterator makeCommand(Buffer const & buf,
        return pend;
 }
 
-} // end anonym namespace
+} // namespace
 
 
-void docbookParagraphs(ParagraphList const & paragraphs,
+void docbookParagraphs(Text const & text,
                       Buffer const & buf,
                       odocstream & os,
                       OutputParams const & runparams)
 {
+       LASSERT(runparams.par_begin <= runparams.par_end,
+               { os << "<!-- Docbook Output Error -->\n"; return; });
+
+       ParagraphList const & paragraphs = text.paragraphs();
        ParagraphList::const_iterator par = paragraphs.begin();
        ParagraphList::const_iterator pend = 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);
-               pend = boost::next(paragraphs.begin(), runparams.par_end);
+               par = lyx::next(paragraphs.begin(), runparams.par_begin);
+               pend = lyx::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;
@@ -322,20 +345,24 @@ void docbookParagraphs(ParagraphList const & paragraphs,
                switch (style.latextype) {
                case LATEX_COMMAND: {
                        send = searchCommand(par, pend);
-                       par = makeCommand(buf, os, runparams, paragraphs, par,send);
+                       par = makeCommand(buf, os, runparams, text, par, send);
                        break;
                }
                case LATEX_ENVIRONMENT:
                case LATEX_ITEM_ENVIRONMENT: {
                        send = searchEnvironment(par, pend);
-                       par = makeEnvironment(buf, os, runparams, paragraphs, par,send);
+                       par = makeEnvironment(buf, os, runparams, text, par, send);
                        break;
                }
                case LATEX_PARAGRAPH:
                        send = searchParagraph(par, pend);
-                       par = makeParagraph(buf, os, runparams, paragraphs, par,send);
+                       par = makeParagraph(buf, os, runparams, text, par, send);
                        break;
-               default:
+               case LATEX_BIB_ENVIRONMENT:
+               case LATEX_LIST_ENVIRONMENT:
+                       // FIXME This means that we are just skipping any paragraph that
+                       // isn't implemented above.
+                       ++par;
                        break;
                }
                // makeEnvironment may process more than one paragraphs and bypass pend