#include "Buffer.h"
#include "BufferParams.h"
+#include "BufferView.h"
+#include "Cursor.h"
#include "DispatchResult.h"
#include "Floating.h"
#include "FloatList.h"
#include "Font.h"
+#include "FuncRequest.h"
#include "Language.h"
#include "LaTeXFeatures.h"
#include "Lexer.h"
#include "Paragraph.h"
#include "output_xhtml.h"
+#include "texstream.h"
#include "TextClass.h"
#include "TocBackend.h"
}
+void InsetFloatList::doDispatch(Cursor & cur, FuncRequest & cmd) {
+ switch (cmd.action()) {
+ case LFUN_MOUSE_RELEASE:
+ if (!cur.selection() && cmd.button() == mouse_button::button1) {
+ cur.bv().showDialog("toc", params2string(params()));
+ cur.dispatched();
+ }
+ break;
+
+ default:
+ InsetCommand::doDispatch(cur, cmd);
+ }
+}
+
+
void InsetFloatList::write(ostream & os) const
{
os << "FloatList " << to_ascii(getParam("type")) << "\n";
}
-int InsetFloatList::latex(odocstream & os, OutputParams const &) const
+void InsetFloatList::latex(otexstream & os, OutputParams const &) const
{
FloatList const & floats = buffer().params().documentClass().floats();
FloatList::const_iterator cit = floats[to_ascii(getParam("type"))];
if (cit != floats.end()) {
Floating const & fl = cit->second;
- if (fl.needsFloatPkg())
+ if (fl.usesFloatPkg()) {
+ docstring const name =
+ buffer().language()->translateLayout(fl.listName());
os << "\\listof{" << getParam("type") << "}{"
- << buffer().B_(fl.listName()) << "}\n";
- else {
+ << name << "}\n";
+ } else {
if (!fl.listCommand().empty())
os << "\\" << from_ascii(fl.listCommand()) << "\n";
- else
+ else
os << "%% "
<< bformat(_("LyX cannot generate a list of %1$s"), getParam("type"))
<< "\n";
}
} else {
+ string const flName = "List of " + to_utf8(getParam("type"));
+ docstring const name = buffer().language()->translateLayout(flName);
os << "%%\\listof{" << getParam("type") << "}{"
- << bformat(_("List of %1$s"), getParam("type"))
- << "}\n";
+ << name << "}\n";
}
- return 1;
}
-int InsetFloatList::plaintext(odocstream & os, OutputParams const &) const
+int InsetFloatList::plaintext(odocstringstream & os,
+ OutputParams const &, size_t max_length) const
{
os << screenLabel() << "\n\n";
- buffer().tocBackend().writePlaintextTocList(to_ascii(getParam("type")), os);
+ buffer().tocBackend().writePlaintextTocList(to_ascii(getParam("type")), os, max_length);
return PLAINTEXT_NEWLINE;
}
-docstring InsetFloatList::xhtml(XHTMLStream &, OutputParams const &) const {
+docstring InsetFloatList::xhtml(XMLStream &, OutputParams const & op) const {
FloatList const & floats = buffer().params().documentClass().floats();
FloatList::const_iterator cit = floats[to_ascii(getParam("type"))];
// Other builtin floats should be handled here. But I'm not sure if that is
// even possible yet, since I'm not sure if we have a TOC for such things.
// If so, then they should define ListName, as non-builtin floats do, and
- // then we can use that.
+ // then we can use that.
// Really, all floats should define that.
- if (!cit->second.needsFloatPkg()) {
+ if (cit->second.isPredefined()) {
// Only two different types allowed here:
string const type = cit->second.floattype();
if (type == "table") {
toctype = "table";
- toclabel = _("List of Tables");
+ toclabel = translateIfPossible(from_ascii("List of Tables"),
+ op.local_font->language()->lang());
} else if (type == "figure") {
toctype = "figure";
- toclabel = _("List of Figures");
+ toclabel = translateIfPossible(from_ascii("List of Figures"),
+ op.local_font->language()->lang());
} else {
LYXERR0("Unknown Builtin Float!");
return docstring();
}
} else {
toctype = to_utf8(getParam("type"));
- toclabel = buffer().B_(cit->second.listName());
+ toclabel = translateIfPossible(from_utf8(cit->second.listName()),
+ op.local_font->language()->lang());
}
- // FIXME Do we need to check if it exists? If so, we need a new
- // routine in TocBackend to do that.
- Toc const & toc = buffer().tocBackend().toc(toctype);
- if (toc.empty())
+ shared_ptr<Toc const> toc = buffer().tocBackend().toc(toctype);
+ if (toc->empty())
return docstring();
// we want to look like a chapter, section, or whatever.
// so we're going to look for the layout with the minimum toclevel
- // number > 0---because we don't want Part.
+ // number > 0---because we don't want Part.
// we'll take the first one, just because.
// FIXME This could be specified in the layout file.
DocumentClass const & dc = buffer().params().documentClass();
TextClass::LayoutList::const_iterator lit = dc.begin();
TextClass::LayoutList::const_iterator len = dc.end();
int minlevel = 1000;
- Layout const * lay = NULL;
+ Layout const * lay = nullptr;
for (; lit != len; ++lit) {
int const level = lit->toclevel;
if (level > 0 && (level == Layout::NOT_IN_TOC || level >= minlevel))
lay = &*lit;
minlevel = level;
}
-
+
string const tocclass = lay ? " " + lay->defaultCSSClass(): "";
- string const tocattr = "class='tochead + toc-" + toctype + " " + tocclass + "'";
-
+ string const tocattr = "class='tochead toc-" + toctype + 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
// paragraph, and we don't want to be.
odocstringstream ods;
- XHTMLStream xs(ods);
-
- xs << html::StartTag("div", "class='toc'");
- xs << html::StartTag("div", tocattr)
- << toclabel
- << html::EndTag("div");
-
- Toc::const_iterator it = toc.begin();
- Toc::const_iterator const en = toc.end();
+ XMLStream xs(ods);
+
+ InsetLayout const & il = getLayout();
+ string const & tag = il.htmltag();
+ xs << xml::StartTag("div", "class='toc toc-floats'");
+ xs << xml::StartTag(tag, tocattr)
+ << toclabel
+ << xml::EndTag(tag);
+
+ Toc::const_iterator it = toc->begin();
+ Toc::const_iterator const en = toc->end();
for (; it != en; ++it) {
+ if (it->str().empty())
+ continue;
Paragraph const & par = it->dit().innerParagraph();
- string const attr = "class='lyxtoc-" + toctype + "'";
- Font const dummy;
- xs << html::StartTag("div", attr);
- string const parattr = "href='#" + par.magicLabel() + "' class='tocarrow'";
- xs << it->str() << " "
- << html::StartTag("a", parattr)
- // FIXME XHTML
- // There ought to be a simple way to customize this.
- << XHTMLStream::ESCAPE_NONE << ">"
- << html::EndTag("a");
- xs << html::EndTag("div");
+ string const attr = "class='lyxtoc-floats lyxtoc-" + toctype + "'";
+ xs << xml::StartTag("div", attr);
+ string const parattr = "href='#" + par.magicLabel() + "' class='lyxtoc-floats'";
+ xs << xml::StartTag("a", parattr)
+ << it->str()
+ << xml::EndTag("a");
+ xs << xml::EndTag("div");
}
- xs << html::EndTag("div");
+ xs << xml::EndTag("div");
return ods.str();
}
void InsetFloatList::validate(LaTeXFeatures & features) const
{
features.useFloat(to_ascii(getParam("type")));
+ features.useInsetLayout(getLayout());
+}
+
+
+docstring InsetFloatList::layoutName() const
+{
+ return "FloatList:" + getParam("type");
}