X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Foutput_docbook.cpp;h=f453fc45b16b422aa5706a8ea64833a874a93c9a;hb=27f1f8a94857b147fcd5097351ec2fb070c2966e;hp=cfb6980336317bbaf8f32188f45582df5f12b417;hpb=2b9e44cb0110201ca4d6320266e6550160ee99b3;p=lyx.git diff --git a/src/output_docbook.cpp b/src/output_docbook.cpp index cfb6980336..f453fc45b1 100644 --- a/src/output_docbook.cpp +++ b/src/output_docbook.cpp @@ -17,6 +17,7 @@ #include "buffer_funcs.h" #include "BufferParams.h" #include "Counters.h" +#include "Font.h" #include "Layout.h" #include "OutputParams.h" #include "Paragraph.h" @@ -29,8 +30,7 @@ #include "support/lassert.h" #include "support/debug.h" #include "support/lstrings.h" - -#include +#include "support/lyxalgo.h" using namespace std; using namespace lyx::support; @@ -41,7 +41,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) ; @@ -51,8 +51,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(); @@ -67,8 +67,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(); @@ -94,24 +94,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()) { + 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, - outerFont(distance(paragraphs.begin(), par), paragraphs)); + text.outerFont(distance(paragraphs.begin(), par))); } else { sgml::openTag(buf, os, runparams, *par); par->simpleDocBookOnePar(buf, os, runparams, - outerFont(distance(paragraphs.begin(), par), paragraphs)); + text.outerFont(distance(paragraphs.begin(), par))); sgml::closeTag(os, *par); } } @@ -119,17 +123,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); @@ -176,19 +182,20 @@ 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; case LATEX_LIST_ENVIRONMENT: case LATEX_BIB_ENVIRONMENT: @@ -230,20 +237,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(); @@ -255,13 +264,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'; @@ -273,20 +283,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; } } @@ -299,19 +313,22 @@ ParagraphList::const_iterator makeCommand(Buffer const & buf, } // end anonym 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 << "\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(runparams).par_begin = 0; @@ -326,20 +343,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