#include "lyx_sty.h"
#include "lyxrc.h"
#include "bufferparams.h"
-#include "lyxtextclasslist.h"
#include "FloatList.h"
#include "language.h"
#include "encoding.h"
using lyx::textclass_type;
using std::endl;
+using std::list;
using std::set;
-using std::vector;
using std::find;
using std::ostream;
}
-void LaTeXFeatures::useLayout(string const & lyt)
+void LaTeXFeatures::useLayout(string const & layoutname)
{
- layout.insert(lyt);
+ // Some code to avoid loops in dependency definition
+ static int level = 0;
+ const int maxlevel = 30;
+ if (level > maxlevel) {
+ lyxerr << "LaTeXFeatures::useLayout: maximum level of "
+ << "recursion attained by layout "
+ << layoutname << endl;
+ return;
+ }
+
+ LyXTextClass tclass = params.getLyXTextClass();
+ if (tclass.hasLayout(layoutname)) {
+ // Is this layout already in usedLayouts?
+ list<string>::const_iterator cit = usedLayouts.begin();
+ list<string>::const_iterator end = usedLayouts.end();
+ for (; cit != end; ++cit) {
+ if (layoutname == *cit)
+ return;
+ }
+
+ LyXLayout_ptr lyt = tclass[layoutname];
+ if (!lyt->depends_on().empty()) {
+ ++level;
+ useLayout(lyt->depends_on());
+ --level;
+ }
+ usedLayouts.push_back(layoutname);
+ } else {
+ lyxerr << "LaTeXFeatures::useLayout: layout `"
+ << layoutname << "' does not exist in this class"
+ << endl;
+ }
+
+ --level;
}
// We only need float.sty if we use non builtin floats, or if we
// use the "H" modifier. This includes modified table and
// figure floats. (Lgb)
- Floating const & fl = floatList.getType(name);
+ Floating const & fl = params.getLyXTextClass().floats().getType(name);
if (!fl.type().empty() && !fl.builtin()) {
require("float");
}
string const LaTeXFeatures::getPackages() const
{
ostringstream packages;
- LyXTextClass const & tclass = textclasslist[params.textclass];
+ LyXTextClass const & tclass = params.getLyXTextClass();
//
string const LaTeXFeatures::getTClassPreamble() const
{
// the text class specific preamble
- LyXTextClass const & tclass = textclasslist[params.textclass];
+ LyXTextClass const & tclass = params.getLyXTextClass();
ostringstream tcpreamble;
tcpreamble << tclass.preamble();
- set<string>::const_iterator cit = layout.begin();
- set<string>::const_iterator end = layout.end();
+ list<string>::const_iterator cit = usedLayouts.begin();
+ list<string>::const_iterator end = usedLayouts.end();
for (; cit != end; ++cit) {
tcpreamble << tclass[*cit]->preamble();
}
void LaTeXFeatures::getFloatDefinitions(ostream & os) const
{
+ FloatList const & floats = params.getLyXTextClass().floats();
+
// Here we will output the code to create the needed float styles.
// We will try to do this as minimal as possible.
// \floatstyle{ruled}
UsedFloats::const_iterator end = usedFloats.end();
// ostringstream floats;
for (; cit != end; ++cit) {
- Floating const & fl = floatList.getType((*cit));
+ Floating const & fl = floats.getType((*cit));
// For builtin floats we do nothing.
if (fl.builtin()) continue;