lyx_mirror/src/insets/InsetFloatList.cpp
Richard Heck 2e7d1199df Revert 23154.
Sorry, Andre, but this broke not only the modules stuff but the general handling of TextClasses. I'm not opposed to doing this sort of thing, but it's going to be a little more complicated. I'll do it when I get a bit of time, or I can explain what the issue is here if you want to do it.

I'll separately re-commit some of the cleanup here.


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@23189 a592a061-630c-0410-9148-cb99ea01b6c8
2008-02-24 14:59:23 +00:00

162 lines
3.6 KiB
C++

/**
* \file InsetFloatList.cpp
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author Lars Gullik Bjønnes
*
* Full author contact details are available in file CREDITS.
*/
#include <config.h>
#include "InsetFloatList.h"
#include "Buffer.h"
#include "BufferParams.h"
#include "DispatchResult.h"
#include "Floating.h"
#include "FloatList.h"
#include "FuncRequest.h"
#include "LaTeXFeatures.h"
#include "Lexer.h"
#include "MetricsInfo.h"
#include "TocBackend.h"
#include "TextClass.h"
#include "support/debug.h"
#include "support/gettext.h"
#include "support/lstrings.h"
#include <ostream>
using namespace std;
using namespace lyx::support;
namespace lyx {
InsetFloatList::InsetFloatList()
: InsetCommand(InsetCommandParams(FLOAT_LIST_CODE), "toc")
{}
InsetFloatList::InsetFloatList(string const & type)
: InsetCommand(InsetCommandParams(FLOAT_LIST_CODE), "toc")
{
setParam("type", from_ascii(type));
}
ParamInfo const & InsetFloatList::findInfo(string const & /* cmdName */)
{
static ParamInfo param_info_;
if (param_info_.empty()) {
param_info_.add("type", false);
}
return param_info_;
}
//HACK
bool InsetFloatList::isCompatibleCommand(string const & s)
{
string str = s.substr(0, 6);
return str == "listof";
}
docstring const InsetFloatList::getScreenLabel(Buffer const & buf) const
{
FloatList const & floats = buf.params().getTextClass().floats();
FloatList::const_iterator it = floats[to_ascii(getParam("type"))];
if (it != floats.end())
return buf.B_(it->second.listName());
else
return _("ERROR: Nonexistent float type!");
}
void InsetFloatList::write(Buffer const &, ostream & os) const
{
os << "FloatList " << to_ascii(getParam("type")) << "\n";
}
void InsetFloatList::read(Buffer const & buf, Lexer & lex)
{
FloatList const & floats = buf.params().getTextClass().floats();
string token;
if (lex.eatLine()) {
setParam("type", lex.getDocString());
LYXERR(Debug::INSETS, "FloatList::float_type: "
<< to_ascii(getParam("type")));
if (!floats.typeExist(to_ascii(getParam("type"))))
lex.printError("InsetFloatList: Unknown float type: `$$Token'");
} else {
lex.printError("InsetFloatList: Parse error: `$$Token'");
}
while (lex.isOK()) {
lex.next();
token = lex.getString();
if (token == "\\end_inset")
break;
}
if (token != "\\end_inset") {
lex.printError("Missing \\end_inset at this point. "
"Read: `$$Token'");
}
}
int InsetFloatList::latex(Buffer const & buf, odocstream & os,
OutputParams const &) const
{
FloatList const & floats = buf.params().getTextClass().floats();
FloatList::const_iterator cit = floats[to_ascii(getParam("type"))];
if (cit != floats.end()) {
if (cit->second.builtin()) {
// Only two different types allowed here:
string const type = cit->second.type();
if (type == "table") {
os << "\\listoftables\n";
} else if (type == "figure") {
os << "\\listoffigures\n";
} else {
os << "%% unknown builtin float\n";
}
} else {
os << "\\listof{" << getParam("type") << "}{"
<< buf.B_(cit->second.listName()) << "}\n";
}
} else {
os << "%%\\listof{" << getParam("type") << "}{"
<< bformat(_("List of %1$s"), from_utf8(cit->second.name()))
<< "}\n";
}
return 1;
}
int InsetFloatList::plaintext(Buffer const & buffer, odocstream & os,
OutputParams const &) const
{
os << getScreenLabel(buffer) << "\n\n";
buffer.tocBackend().writePlaintextTocList(to_ascii(getParam("type")), os);
return PLAINTEXT_NEWLINE;
}
void InsetFloatList::validate(LaTeXFeatures & features) const
{
features.useFloat(to_ascii(getParam("type")));
}
} // namespace lyx