X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetText.cpp;h=10b15c88edad34abd39a31fb90b9223ff2700e91;hb=48b1e8a0aca2f3f3faa8f1f800568e47792ba9a0;hp=d4f81f2627d6039e6bf2cce65ff7d6d351fb1e4e;hpb=b0def618f844927468fe724e74315ded43ef0122;p=lyx.git diff --git a/src/insets/InsetText.cpp b/src/insets/InsetText.cpp index d4f81f2627..10b15c88ed 100644 --- a/src/insets/InsetText.cpp +++ b/src/insets/InsetText.cpp @@ -38,14 +38,13 @@ #include "MetricsInfo.h" #include "output_docbook.h" #include "output_latex.h" +#include "output_plaintext.h" #include "output_xhtml.h" #include "OutputParams.h" -#include "output_plaintext.h" #include "Paragraph.h" #include "ParagraphParameters.h" #include "ParIterator.h" #include "Row.h" -#include "sgml.h" #include "TexRow.h" #include "texstream.h" #include "TextClass.h" @@ -56,7 +55,6 @@ #include "frontends/alert.h" #include "frontends/Painter.h" -#include "support/bind.h" #include "support/convert.h" #include "support/debug.h" #include "support/gettext.h" @@ -79,7 +77,8 @@ using graphics::PreviewLoader; ///////////////////////////////////////////////////////////////////// InsetText::InsetText(Buffer * buf, UsePlain type) - : Inset(buf), drawFrame_(false), is_changed_(false), frame_color_(Color_insetframe), + : Inset(buf), drawFrame_(false), is_changed_(false), intitle_context_(false), + frame_color_(Color_insetframe), text_(this, type == DefaultLayout) { } @@ -87,7 +86,7 @@ InsetText::InsetText(Buffer * buf, UsePlain type) InsetText::InsetText(InsetText const & in) : Inset(in), drawFrame_(in.drawFrame_), is_changed_(in.is_changed_), - frame_color_(in.frame_color_), + intitle_context_(false), frame_color_(in.frame_color_), text_(this, in.text_) { } @@ -530,6 +529,9 @@ void InsetText::latex(otexstream & os, OutputParams const & runparams) const runparams.encoding = rp.encoding; // Pass the post_macros upstream runparams.post_macro = rp.post_macro; + // These need to be passed upstream as well + runparams.need_maketitle = rp.need_maketitle; + runparams.have_maketitle = rp.have_maketitle; if (!il.rightdelim().empty()) os << il.rightdelim(); @@ -568,7 +570,7 @@ int InsetText::plaintext(odocstringstream & os, for (; it != end; ++it) { if (it != beg) { os << '\n'; - if (runparams.linelen > 0) + if (runparams.linelen > 0 && !getLayout().parbreakIsNewline()) os << '\n'; } odocstringstream oss; @@ -586,24 +588,56 @@ int InsetText::plaintext(odocstringstream & os, } -int InsetText::docbook(odocstream & os, OutputParams const & runparams) const + +void InsetText::docbook(XMLStream & xs, OutputParams const & rp) const +{ + docbook(xs, rp, WriteEverything); +} + + +void InsetText::docbook(XMLStream & xs, OutputParams const & rp, XHTMLOptions opts) const { - ParagraphList::const_iterator const beg = paragraphs().begin(); + // we will always want to output all our paragraphs when we are + // called this way. + OutputParams runparams = rp; + runparams.par_begin = 0; + runparams.par_end = text().paragraphs().size(); + + if (undefined()) { + xs.startDivision(false); + docbookParagraphs(text_, buffer(), xs, runparams); + xs.endDivision(); + return; + } + + InsetLayout const & il = getLayout(); + if (opts & WriteOuterTag && !il.docbooktag().empty() && il.docbooktag() != "NONE") { + docstring attrs = docstring(); + if (!il.docbookattr().empty()) + attrs += from_ascii(il.docbookattr()); + if (il.docbooktag() == "link") + attrs += from_ascii(" xlink:href=\"") + text_.asString() + from_ascii("\""); + xs << xml::StartTag(il.docbooktag(), attrs); + } - if (!undefined()) - sgml::openTag(os, getLayout().latexname(), - beg->getID(buffer(), runparams) + getLayout().latexparam()); + // No need for labels that are generated from counters. - docbookParagraphs(text_, buffer(), os, runparams); + // With respect to XHTML, paragraphs are still allowed here. + if (!allowMultiPar()) + runparams.docbook_make_pars = false; + if (il.isPassThru()) + runparams.pass_thru = true; - if (!undefined()) - sgml::closeTag(os, getLayout().latexname()); + xs.startDivision(false); + docbookParagraphs(text_, buffer(), xs, runparams); + xs.endDivision(); - return 0; + if (opts & WriteOuterTag) + xs << xml::EndTag(il.docbooktag()); } -docstring InsetText::xhtml(XHTMLStream & xs, OutputParams const & runparams) const +docstring InsetText::xhtml(XMLStream & xs, OutputParams const & runparams) const { return insetAsXHTML(xs, runparams, WriteEverything); } @@ -622,7 +656,7 @@ docstring InsetText::xhtml(XHTMLStream & xs, OutputParams const & runparams) con // if so, try to close fonts, etc. // There are probably limits to how well we can do here, though, and we will // have to rely upon users not putting footnotes inside noun-type insets. -docstring InsetText::insetAsXHTML(XHTMLStream & xs, OutputParams const & rp, +docstring InsetText::insetAsXHTML(XMLStream & xs, OutputParams const & rp, XHTMLOptions opts) const { // we will always want to output all our paragraphs when we are @@ -640,7 +674,7 @@ docstring InsetText::insetAsXHTML(XHTMLStream & xs, OutputParams const & rp, InsetLayout const & il = getLayout(); if (opts & WriteOuterTag) - xs << html::StartTag(il.htmltag(), il.htmlattr()); + xs << xml::StartTag(il.htmltag(), il.htmlattr()); if ((opts & WriteLabel) && !il.counter().empty()) { BufferParams const & bp = buffer().masterBuffer()->params(); @@ -652,15 +686,15 @@ docstring InsetText::insetAsXHTML(XHTMLStream & xs, OutputParams const & rp, cntrs.counterLabel(from_utf8(il.htmllabel()), bp.language->code()); // FIXME is this check necessary? if (!lbl.empty()) { - xs << html::StartTag(il.htmllabeltag(), il.htmllabelattr()); + xs << xml::StartTag(il.htmllabeltag(), il.htmllabelattr()); xs << lbl; - xs << html::EndTag(il.htmllabeltag()); + xs << xml::EndTag(il.htmllabeltag()); } } } if (opts & WriteInnerTag) - xs << html::StartTag(il.htmlinnertag(), il.htmlinnerattr()); + xs << xml::StartTag(il.htmlinnertag(), il.htmlinnerattr()); // we will eventually lose information about the containing inset if (!allowMultiPar() || opts == JustText) @@ -673,10 +707,10 @@ docstring InsetText::insetAsXHTML(XHTMLStream & xs, OutputParams const & rp, xs.endDivision(); if (opts & WriteInnerTag) - xs << html::EndTag(il.htmlinnertag()); + xs << xml::EndTag(il.htmlinnertag()); if (opts & WriteOuterTag) - xs << html::EndTag(il.htmltag()); + xs << xml::EndTag(il.htmltag()); return docstring(); } @@ -836,6 +870,17 @@ void InsetText::updateBuffer(ParIterator const & it, UpdateType utype, bool cons cnt.restoreLastLayout(); // FIXME cnt.restoreLastCounter()? } + // Record in this inset is embedded in a title layout + // This is needed to decide when \maketitle is output. + intitle_context_ = it.paragraph().layout().intitle; + // Also check embedding layouts + size_t const n = it.depth(); + for (size_t i = 0; i < n; ++i) { + if (it[i].paragraph().layout().intitle) { + intitle_context_ = true; + break; + } + } } else { DocumentClass const & tclass = buffer().masterBuffer()->params().documentClass(); // Note that we do not need to call: