#include "Buffer.h"
#include "BufferParams.h"
+#include "Cursor.h"
#include "FloatList.h"
#include "FuncRequest.h"
#include "InsetList.h"
#include "support/convert.h"
#include "support/debug.h"
#include "support/docstream.h"
-
+#include "support/gettext.h"
#include "support/lassert.h"
+#include "support/lstrings.h"
using namespace std;
docstring const TocItem::asString() const
{
- // U+2327 X IN A RECTANGLE BOX
- // char_type const cross = 0x2327;
- // U+274E NEGATIVE SQUARED CROSS MARK
- char_type const cross = 0x274e;
+ static char_type const cross = 0x2716; // ✖ U+2716 HEAVY MULTIPLICATION X
+ static char_type const thin = 0x2009; // U+2009 THIN SPACE
docstring prefix;
if (!output_) {
prefix += cross;
- prefix += " ";
+ prefix += thin;
}
return prefix + str_;
}
+namespace {
+
// convert a DocIterator into an argument to LFUN_PARAGRAPH_GOTO
docstring paragraph_goto_arg(DocIterator const & dit)
{
convert<docstring>(s.pos());
}
+} // namespace anon
+
FuncRequest TocItem::action() const
{
if (action_.action() == LFUN_UNKNOWN_ACTION) {
}
-bool TocBackend::updateItem(DocIterator const & dit)
+// FIXME: This function duplicates functionality from InsetText::iterateForToc.
+// Both have their own way of computing the TocItem for "tableofcontents". The
+// TocItem creation and update should be made in a dedicated function and
+// updateItem should be rewritten to uniformly update the matching items from
+// all TOCs.
+bool TocBackend::updateItem(DocIterator const & dit_in)
{
+ // we need a text
+ DocIterator dit = dit_in.getInnerText();
+
if (dit.text()->getTocLevel(dit.pit()) == Layout::NOT_IN_TOC)
return false;
// For each paragraph, traverse its insets and let them add
// their toc items
+ //
+ // FIXME: This is supposed to accomplish the same as the body of
+ // InsetText::iterateForToc(), probably
Paragraph & par = toc_item->dit_.paragraph();
InsetList::const_iterator it = par.insetList().begin();
InsetList::const_iterator end = par.insetList().end();
for (; it != end; ++it) {
Inset & inset = *it->inset;
if (inset.lyxCode() == ARG_CODE) {
+ tocstring = par.labelString();
if (!tocstring.empty())
- break;
- Paragraph const & inset_par =
- *static_cast<InsetArgument&>(inset).paragraphs().begin();
- if (!par.labelString().empty())
- tocstring = par.labelString() + ' ';
- tocstring += inset_par.asString(AS_STR_INSETS);
+ tocstring += ' ';
+ inset.asInsetText()->text().forOutliner(tocstring,TOC_ENTRY_LENGTH);
break;
}
}
- int const toclevel = toc_item->dit_.text()->getTocLevel(toc_item->dit_.pit());
+ int const toclevel = toc_item->dit_.text()->
+ getTocLevel(toc_item->dit_.pit());
if (toclevel != Layout::NOT_IN_TOC && toclevel >= min_toclevel
&& tocstring.empty())
- tocstring = par.asString(AS_STR_LABEL | AS_STR_INSETS);
+ par.forOutliner(tocstring, TOC_ENTRY_LENGTH);
+ support::truncateWithEllipsis(tocstring, TOC_ENTRY_LENGTH);
const_cast<TocItem &>(*toc_item).str(tocstring);
buffer_->updateTocItem("tableofcontents", dit);
}
+docstring TocBackend::outlinerName(std::string const & type) const
+{
+ return translateIfPossible(
+ buffer_->params().documentClass().outlinerName(type));
+}
+
+
} // namespace lyx