namespace {
-class LayoutNamesEqual : public unary_function<LayoutPtr, bool> {
+class LayoutNamesEqual : public unary_function<Layout, bool> {
public:
LayoutNamesEqual(docstring const & name)
: name_(name)
{}
- bool operator()(LayoutPtr const & c) const
+ bool operator()(Layout const & c) const
{
- return c->name() == name_;
+ return c.name() == name_;
}
private:
docstring name_;
// The only way this happens is because the hardcoded layout above
// is wrong.
BOOST_ASSERT(false);
- }
- layoutlist_.push_back(boost::shared_ptr<Layout>(new Layout(lay)));
+ };
+ layoutlist_.push_back(lay);
}
Lexer lexrc(textClassTags,
//error to true, since we couldn't even read the name?
error = !readStyle(lexrc, lay);
} else if (hasLayout(name)) {
- Layout * lay = operator[](name).get();
- error = !readStyle(lexrc, *lay);
+ Layout & lay = operator[](name);
+ error = !readStyle(lexrc, lay);
} else {
Layout lay;
lay.setName(name);
lay.is_environment = true;
error = !readStyle(lexrc, lay);
if (!error)
- layoutlist_.push_back(boost::shared_ptr<Layout>(new Layout(lay)));
+ layoutlist_.push_back(lay);
if (defaultlayout_.empty()) {
// We do not have a default layout yet, so we choose
min_toclevel_ = Layout::NOT_IN_TOC;
max_toclevel_ = Layout::NOT_IN_TOC;
- for (size_t i = 0; i != layoutCount(); ++i) {
- int const toclevel = layout(i)->toclevel;
+ const_iterator lit = begin();
+ const_iterator len = end();
+ for (; lit != len; ++lit) {
+ int const toclevel = lit->toclevel;
if (toclevel != Layout::NOT_IN_TOC) {
if (min_toclevel_ == Layout::NOT_IN_TOC)
min_toclevel_ = toclevel;
style, name, listName, builtin);
floatlist_->newFloat(fl);
// each float has its own counter
- counters_->newCounter(from_ascii(type), from_ascii(within),
+ counters_->newCounter(from_ascii(type), from_ascii(within),
docstring(), docstring());
+ // also define sub-float counters
+ docstring const subtype = "sub-" + from_ascii(type);
+ counters_->newCounter(subtype, from_ascii(type),
+ "\\alph{" + subtype + "}", docstring());
}
lexrc.popTable();
-LayoutPtr const & TextClass::operator[](docstring const & name) const
+Layout const & TextClass::operator[](docstring const & name) const
{
BOOST_ASSERT(!name.empty());
- LayoutList::const_iterator cit =
- find_if(layoutlist_.begin(),
- layoutlist_.end(),
- LayoutNamesEqual(name));
+ const_iterator it =
+ find_if(begin(), end(), LayoutNamesEqual(name));
- if (cit == layoutlist_.end()) {
+ if (it == end()) {
lyxerr << "We failed to find the layout '" << to_utf8(name)
<< "' in the layout list. You MUST investigate!"
<< endl;
- for (LayoutList::const_iterator it = layoutlist_.begin();
- it != layoutlist_.end(); ++it)
- lyxerr << " " << to_utf8(it->get()->name()) << endl;
+ for (const_iterator cit = begin(); cit != end(); ++cit)
+ lyxerr << " " << to_utf8(cit->name()) << endl;
// we require the name to exist
BOOST_ASSERT(false);
}
- return *cit;
+ return *it;
+}
+
+
+Layout & TextClass::operator[](docstring const & name)
+{
+ BOOST_ASSERT(!name.empty());
+
+ iterator it = find_if(begin(), end(), LayoutNamesEqual(name));
+
+ if (it == end()) {
+ lyxerr << "We failed to find the layout '" << to_utf8(name)
+ << "' in the layout list. You MUST investigate!"
+ << endl;
+ for (const_iterator cit = begin(); cit != end(); ++cit)
+ lyxerr << " " << to_utf8(cit->name()) << endl;
+
+ // we require the name to exist
+ BOOST_ASSERT(false);
+ }
+
+ return *it;
}
}
-LayoutPtr const & TextClass::defaultLayout() const
+Layout const & TextClass::defaultLayout() const
{
return operator[](defaultLayoutName());
}
+bool TextClass::isDefaultLayout(Layout const & lay) const
+{
+ return lay.name() == defaultLayoutName();
+}
+
+
+bool TextClass::isEmptyLayout(Layout const & lay) const
+{
+ return lay.name() == emptyLayoutName();
+}
+
+
DocumentClass & DocumentClassBundle::newClass(LayoutFile const & baseClass)
{
DocumentClass dc(baseClass);
LayoutList::const_iterator it = layoutlist_.begin();
LayoutList::const_iterator end = layoutlist_.end();
for (; it != end; ++it)
- if (it->get()->latexname() == lay)
+ if (it->latexname() == lay)
return true;
return false;
}