X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Foutput_docbook.C;h=2778dde86e67a77fc57fe57bb959ead634675c51;hb=52eb91c94fb70d58dceef430659c8781de2eccda;hp=a54fc303f6b73b4b2a8b1abc4169294a751acc45;hpb=eb485caa9653a20dc87649ebe17ed7b877cdf651;p=lyx.git diff --git a/src/output_docbook.C b/src/output_docbook.C index a54fc303f6..2778dde86e 100644 --- a/src/output_docbook.C +++ b/src/output_docbook.C @@ -32,11 +32,10 @@ #include "support/convert.h" #include "support/types.h" -#ifdef HAVE_LOCALE -#endif -using lyx::pos_type; -using lyx::support::subst; +namespace lyx { + +using support::subst; using std::endl; using std::ostream; @@ -45,52 +44,58 @@ using std::string; namespace { -ParagraphList::const_iterator searchParagraph(ParagraphList::const_iterator const & par, - ParagraphList::const_iterator const & pend) +ParagraphList::const_iterator searchParagraph( + ParagraphList::const_iterator const & par, + ParagraphList::const_iterator const & pend) { ParagraphList::const_iterator p = boost::next(par); - for( ; p != pend && p->layout()->latextype == LATEX_PARAGRAPH; ++p); + for (; p != pend && p->layout()->latextype == LATEX_PARAGRAPH; ++p) + ; return p; } -ParagraphList::const_iterator searchCommand(ParagraphList::const_iterator const & par, - ParagraphList::const_iterator const & pend) +ParagraphList::const_iterator searchCommand( + ParagraphList::const_iterator const & par, + ParagraphList::const_iterator const & pend) { LyXLayout_ptr const & bstyle = par->layout(); ParagraphList::const_iterator p = boost::next(par); - for( ; p != pend; ++p) { + for ( ; p != pend; ++p) { LyXLayout_ptr const & style = p->layout(); - if( style->latextype == LATEX_COMMAND && style->commanddepth <= bstyle->commanddepth) + if (style->latextype == LATEX_COMMAND + && style->commanddepth <= bstyle->commanddepth) return p; } return pend; } -ParagraphList::const_iterator searchEnvironment(ParagraphList::const_iterator const & par, - ParagraphList::const_iterator const & pend) +ParagraphList::const_iterator searchEnvironment( + ParagraphList::const_iterator const & par, + ParagraphList::const_iterator const & pend) { LyXLayout_ptr const & bstyle = par->layout(); ParagraphList::const_iterator p = boost::next(par); - for( ; p != pend; ++p) { + for (; p != pend; ++p) { LyXLayout_ptr const & style = p->layout(); - if( style->latextype == LATEX_COMMAND) + if (style->latextype == LATEX_COMMAND) return p; - if( style->latextype == LATEX_PARAGRAPH) { + if (style->latextype == LATEX_PARAGRAPH) { if (p->params().depth() > par->params().depth()) continue; return p; } - if(p->params().depth() < par->params().depth()) + if (p->params().depth() < par->params().depth()) return p; - if( style->latexname() != bstyle->latexname() && p->params().depth() == par->params().depth() ) + if (style->latexname() != bstyle->latexname() + && p->params().depth() == par->params().depth() ) return p; } return pend; @@ -98,14 +103,15 @@ ParagraphList::const_iterator searchEnvironment(ParagraphList::const_iterator co ParagraphList::const_iterator makeParagraph(Buffer const & buf, - ostream & os, + odocstream & os, OutputParams const & runparams, ParagraphList const & paragraphs, ParagraphList::const_iterator const & pbegin, ParagraphList::const_iterator const & pend) { - LyXLayout_ptr const & defaultstyle = buf.params().getLyXTextClass().defaultLayout(); - for(ParagraphList::const_iterator par = pbegin; par != pend; ++par) { + LyXLayout_ptr const & defaultstyle = + buf.params().getLyXTextClass().defaultLayout(); + for (ParagraphList::const_iterator par = pbegin; par != pend; ++par) { if (par != pbegin) os << '\n'; if (par->layout() == defaultstyle && par->emptyTag()) { @@ -121,7 +127,7 @@ ParagraphList::const_iterator makeParagraph(Buffer const & buf, ParagraphList::const_iterator makeEnvironment(Buffer const & buf, - ostream & os, + odocstream & os, OutputParams const & runparams, ParagraphList const & paragraphs, ParagraphList::const_iterator const & pbegin, @@ -161,7 +167,13 @@ ParagraphList::const_iterator makeEnvironment(Buffer const & buf, sgml::closeTag(os, bstyle->labeltag()); } wrapper = defaultstyle->latexname(); - sgml::openTag(os, bstyle->itemtag()); + // If a sub list (embedded list) appears next with a + // different depth, then there is no need to open + // another tag at the current depth. + if(par->params().depth() == pbegin->params().depth()) { + sgml::openTag(os, bstyle->itemtag()); + } + break; default: break; } @@ -169,7 +181,7 @@ ParagraphList::const_iterator makeEnvironment(Buffer const & buf, switch (style->latextype) { case LATEX_ENVIRONMENT: case LATEX_ITEM_ENVIRONMENT: { - if(par->params().depth() == pbegin->params().depth()) { + if (par->params().depth() == pbegin->params().depth()) { sgml::openTag(os, wrapper); par->simpleDocBookOnePar(buf, os, runparams, outerFont(std::distance(paragraphs.begin(), par), paragraphs), sep); sgml::closeTag(os, wrapper); @@ -198,7 +210,17 @@ ParagraphList::const_iterator makeEnvironment(Buffer const & buf, } break; case LATEX_ITEM_ENVIRONMENT: - sgml::closeTag(os, bstyle->itemtag()); + // If a sub list (embedded list) appears next, then + // there is no need to close the current tag. + // par should have already been incremented to the next + // element. So we can compare the depth of the next + // element with pbegin. + // We need to be careful, that we don't dereference par + // when par == pend but at the same time that the + // current tag is closed. + if((par != pend && par->params().depth() == pbegin->params().depth()) || par == pend) { + sgml::closeTag(os, bstyle->itemtag()); + } if (!bstyle->labeltag().empty()) sgml::closeTag(os, bstyle->innertag()); break; @@ -218,7 +240,7 @@ ParagraphList::const_iterator makeEnvironment(Buffer const & buf, ParagraphList::const_iterator makeCommand(Buffer const & buf, - ostream & os, + odocstream & os, OutputParams const & runparams, ParagraphList const & paragraphs, ParagraphList::const_iterator const & pbegin, @@ -234,7 +256,8 @@ ParagraphList::const_iterator makeCommand(Buffer const & buf, // Label around sectioning number: if (!bstyle->labeltag().empty()) { sgml::openTag(os, bstyle->labeltag()); - os << expandLabel(buf, bstyle, false); + // We don't care about appendix in DOCBOOK. + os << par->expandLabel(bstyle, buf.params(), false); sgml::closeTag(os, bstyle->labeltag()); } @@ -280,7 +303,7 @@ ParagraphList::const_iterator makeCommand(Buffer const & buf, void docbookParagraphs(ParagraphList const & paragraphs, Buffer const & buf, - ostream & os, + odocstream & os, OutputParams const & runparams) { ParagraphList::const_iterator par = paragraphs.begin(); @@ -326,3 +349,6 @@ void docbookParagraphs(ParagraphList const & paragraphs, break; } } + + +} // namespace lyx