X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetIndex.cpp;h=a328d27de635c885b6d978e1fccf0ec81a763e16;hb=239b9919ffe28338d789e6dc9122228f77ab77a7;hp=043f58eeb90d79603872a0ef59077e1c5438c8d9;hpb=a93a8cd393e3e652b015528f89b728d4adec86e8;p=lyx.git diff --git a/src/insets/InsetIndex.cpp b/src/insets/InsetIndex.cpp index 043f58eeb9..a328d27de6 100644 --- a/src/insets/InsetIndex.cpp +++ b/src/insets/InsetIndex.cpp @@ -28,6 +28,7 @@ #include "output_latex.h" #include "output_xhtml.h" #include "sgml.h" +#include "texstream.h" #include "TextClass.h" #include "TocBackend.h" @@ -74,9 +75,10 @@ void InsetIndex::latex(otexstream & os, OutputParams const & runparams_in) const } // get contents of InsetText as LaTeX and plaintext - TexRow texrow; odocstringstream ourlatex; - otexstream ots(ourlatex, texrow); + // FIXME: do Tex/Row correspondence (I don't currently understand what is + // being generated from latexstr below) + otexstream ots(ourlatex); InsetText::latex(ots, runparams); odocstringstream ourplain; InsetText::plaintext(ourplain, runparams); @@ -200,13 +202,13 @@ void InsetIndex::doDispatch(Cursor & cur, FuncRequest & cmd) case LFUN_INSET_MODIFY: { if (cmd.getArg(0) == "changetype") { - cur.recordUndoInset(ATOMIC_UNDO, this); + cur.recordUndoInset(this); params_.index = from_utf8(cmd.getArg(1)); break; } InsetIndexParams params; InsetIndex::string2params(to_utf8(cmd.argument()), params); - cur.recordUndoInset(ATOMIC_UNDO, this); + cur.recordUndoInset(this); params_.index = params.index; // what we really want here is a TOC update, but that means // a full buffer update @@ -348,15 +350,22 @@ void InsetIndex::string2params(string const & in, InsetIndexParams & params) } -void InsetIndex::addToToc(DocIterator const & cpit, bool output_active) const +void InsetIndex::addToToc(DocIterator const & cpit, bool output_active, + UpdateType utype) const { DocIterator pit = cpit; pit.push_back(CursorSlice(const_cast(*this))); docstring str; - text().forToc(str, 0); - buffer().tocBackend().toc("index").push_back(TocItem(pit, 0, str, output_active)); + string type = "index"; + if (buffer().masterBuffer()->params().use_indices) + type += ":" + to_utf8(params_.index); + // this is unlikely to be terribly long + text().forOutliner(str, INT_MAX); + TocBuilder & b = buffer().tocBackend().builder(type); + b.pushItem(pit, str, output_active); // Proceed with the rest of the inset. - InsetCollapsable::addToToc(cpit, output_active); + InsetCollapsable::addToToc(cpit, output_active, utype); + b.pop(); } @@ -427,7 +436,7 @@ ParamInfo const & InsetPrintIndex::findInfo(string const & /* cmdName */) static ParamInfo param_info_; if (param_info_.empty()) { param_info_.add("type", ParamInfo::LATEX_OPTIONAL, - ParamInfo::HANDLING_ESCAPE); + ParamInfo::HANDLING_ESCAPE); param_info_.add("name", ParamInfo::LATEX_REQUIRED); } return param_info_; @@ -555,7 +564,7 @@ void InsetPrintIndex::latex(otexstream & os, OutputParams const & runparams_in) { if (!buffer().masterBuffer()->params().use_indices) { if (getParam("type") == from_ascii("idx")) - os << "\\printindex{}"; + os << "\\printindex" << termcmd; return; } OutputParams runparams = runparams_in; @@ -685,21 +694,28 @@ docstring InsetPrintIndex::xhtml(XHTMLStream &, OutputParams const & op) const if (bp.use_indices && getParam("type") != from_ascii("idx")) return docstring(); - Toc const & toc = buffer().tocBackend().toc("index"); - if (toc.empty()) + shared_ptr toc = buffer().tocBackend().toc("index"); + if (toc->empty()) return docstring(); - // Collection the index entries in a form we can use them. - Toc::const_iterator it = toc.begin(); - Toc::const_iterator const en = toc.end(); + // Collect the index entries in a form we can use them. + Toc::const_iterator it = toc->begin(); + Toc::const_iterator const en = toc->end(); vector entries; for (; it != en; ++it) - entries.push_back(IndexEntry(it->str(), it->dit())); + if (it->isOutput()) + entries.push_back(IndexEntry(it->str(), it->dit())); + + if (entries.empty()) + // not very likely that all the index entries are in notes or + // whatever, but.... + return docstring(); + stable_sort(entries.begin(), entries.end()); Layout const & lay = bp.documentClass().htmlTOCLayout(); string const & tocclass = lay.defaultCSSClass(); - string const tocattr = "class='index tochead " + tocclass + "'"; + string const tocattr = "class='index " + tocclass + "'"; // we'll use our own stream, because we are going to defer everything. // that's how we deal with the fact that we're probably inside a standard