commit 2d86b881242c3ea4756af28f8458aeb7cbfa6822 Author: Thibaut Cuvelier <tcuvel...@lyx.org> Date: Mon May 20 03:21:00 2024 +0200
XHTML: export paragraph IDs also for list items, but not for the opening tag of the list. The IDs are used to link to specific elements (for instance, the User's guide nomenclature). The beginning of the list (<ul> or <ol>) has the same magic ID as the first item of the list. --- src/output_xhtml.cpp | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/src/output_xhtml.cpp b/src/output_xhtml.cpp index c83fdeed82..4cb1d2f7c0 100644 --- a/src/output_xhtml.cpp +++ b/src/output_xhtml.cpp @@ -210,25 +210,32 @@ inline void closeLabelTag(XMLStream & xs, Layout const & lay) } -inline void openItemTag(XMLStream & xs, Layout const & lay) +inline void openItemTag(XMLStream & xs, Layout const & lay, + std::string const & parlabel) { if (lay.htmlitemtag() != "NONE") { - xs << xml::StartTag(lay.htmlitemtag(), lay.htmlitemattr(), true); + string attrs = lay.htmlitemattr(); + if (!parlabel.empty()) + attrs += " id='" + parlabel + "'"; + xs << xml::StartTag(lay.htmlitemtag(), attrs, true); } } void openItemTag(XMLStream & xs, Layout const & lay, - ParagraphParameters const & params) + ParagraphParameters const & params, + std::string const & parlabel) { if (lay.htmlitemtag() != "NONE") { // FIXME Are there other things we should handle here? string const align = alignmentToCSS(params.align()); if (align.empty()) { - openItemTag(xs, lay); + openItemTag(xs, lay, parlabel); return; } string attrs = lay.htmlGetAttrString() + " style='text-align: " + align + ";'"; + if (!parlabel.empty()) + attrs += " id='" + parlabel + "'"; xs << xml::StartTag(lay.htmlitemtag(), attrs); } } @@ -411,7 +418,8 @@ ParagraphList::const_iterator makeEnvironment(Buffer const & buf, ParagraphList::const_iterator const begin = text.paragraphs().begin(); ParagraphList::const_iterator par = pbegin; Layout const & bstyle = par->layout(); - depth_type const origdepth = pbegin->params().depth(); + depth_type const origdepth = par->params().depth(); + string const parId = bstyle.htmlitemtag().empty() ? par->magicLabel() : ""; // open tag for this environment if ((bstyle.labeltype == LABEL_ENUMERATE || bstyle.labeltype == LABEL_ITEMIZE) @@ -444,12 +452,12 @@ ParagraphList::const_iterator makeEnvironment(Buffer const & buf, // not a valid enumdepth... break; } - openParTag(xs, bstyle, - string( isenum ? "lyxenum" : "lyxitem" ) + " " - + to_utf8(enumcounter), pbegin->magicLabel()); + const string cssClass = string(isenum ? "lyxenum" : "lyxitem") + " " + + to_utf8(enumcounter); + openParTag(xs, bstyle, cssClass, parId); } else - openParTag(xs, bstyle, pbegin->magicLabel()); + openParTag(xs, bstyle, parId); xs << xml::CR(); // we will on occasion need to remember a layout from before. @@ -491,7 +499,7 @@ ParagraphList::const_iterator makeEnvironment(Buffer const & buf, pos_type sep = 0; bool const labelfirst = style.htmllabelfirst(); if (!labelfirst) - openItemTag(xs, style, par->params()); + openItemTag(xs, style, par->params(), par->magicLabel()); // label output if (style.labeltype != LABEL_NO_LABEL && @@ -529,7 +537,7 @@ ParagraphList::const_iterator makeEnvironment(Buffer const & buf, } // end label output if (labelfirst) - openItemTag(xs, style, par->params()); + openItemTag(xs, style, par->params(), par->magicLabel()); docstring deferred = par->simpleLyXHTMLOnePar(buf, xs, runparams, text.outerFont(distance(begin, par)), true, true, sep); @@ -594,8 +602,7 @@ void makeCommand(Buffer const & buf, buf.masterBuffer()->params(). documentClass().counters().step(style.counter, OutputUpdate); - bool const make_parid = !runparams.for_toc && runparams.html_make_pars; - + bool const make_parid = !runparams.for_toc && runparams.html_make_pars && style.itemtag().empty(); openParTag(xs, style, pbegin->params(), make_parid ? pbegin->magicLabel() : ""); -- lyx-cvs mailing list lyx-cvs@lists.lyx.org http://lists.lyx.org/mailman/listinfo/lyx-cvs