X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FTextClass.cpp;h=b352ca29542aed1bdacb4d3de312b0155983be4d;hb=b64d17e9dcaeb84a94095622c93a051e4d93eab7;hp=82740cba429dcd5bd371ed443ce45198892b2614;hpb=a2e8cb758b70269da40d13d7b272d256a29a022a;p=lyx.git diff --git a/src/TextClass.cpp b/src/TextClass.cpp index 82740cba42..b352ca2954 100644 --- a/src/TextClass.cpp +++ b/src/TextClass.cpp @@ -60,7 +60,7 @@ namespace lyx { // development/tools/updatelayouts.sh script, to update the format of // all of our layout files. // -int const LAYOUT_FORMAT = 38; //gb : LangPreamble and BabelPreamble for InsetLayout +int const LAYOUT_FORMAT = 39; //sanda branch styling namespace { @@ -1431,41 +1431,14 @@ Layout TextClass::createBasicLayout(docstring const & name, bool unknown) const } -///////////////////////////////////////////////////////////////////////// -// -// DocumentClassBundle -// -///////////////////////////////////////////////////////////////////////// - -DocumentClassBundle::~DocumentClassBundle() -{ - for (size_t i = 0; i != documentClasses_.size(); ++i) - delete documentClasses_[i]; - documentClasses_.clear(); -} - -DocumentClass & DocumentClassBundle::newClass(LayoutFile const & baseClass) -{ - DocumentClass * dc = new DocumentClass(baseClass); - documentClasses_.push_back(dc); - return *documentClasses_.back(); -} - - -DocumentClassBundle & DocumentClassBundle::get() -{ - static DocumentClassBundle singleton; - return singleton; -} - - -DocumentClass & DocumentClassBundle::makeDocumentClass( +DocumentClassPtr getDocumentClass( LayoutFile const & baseClass, LayoutModuleList const & modlist) { - DocumentClass & doc_class = newClass(baseClass); + DocumentClassPtr doc_class = + DocumentClassPtr(new DocumentClass(baseClass)); LayoutModuleList::const_iterator it = modlist.begin(); LayoutModuleList::const_iterator en = modlist.end(); - for (; it != en; it++) { + for (; it != en; ++it) { string const modName = *it; LyXModule * lm = theModuleList[modName]; if (!lm) { @@ -1490,7 +1463,7 @@ DocumentClass & DocumentClassBundle::makeDocumentClass( frontend::Alert::warning(_("Package not available"), msg, true); } FileName layout_file = libFileSearch("layouts", lm->getFilename()); - if (!doc_class.read(layout_file, TextClass::MODULE)) { + if (!doc_class->read(layout_file, TextClass::MODULE)) { docstring const msg = bformat(_("Error reading module %1$s\n"), from_utf8(modName)); frontend::Alert::warning(_("Read Error"), msg); @@ -1534,27 +1507,32 @@ bool DocumentClass::hasTocLevels() const } +Layout const & DocumentClass::getTOCLayout() const +{ + // we're going to look for the layout with the minimum toclevel + TextClass::LayoutList::const_iterator lit = begin(); + TextClass::LayoutList::const_iterator const len = end(); + int minlevel = 1000; + Layout const * lay = NULL; + for (; lit != len; ++lit) { + int const level = lit->toclevel; + // we don't want Part + if (level == Layout::NOT_IN_TOC || level < 0 || level >= minlevel) + continue; + lay = &*lit; + minlevel = level; + } + if (lay) + return *lay; + // hmm. that is very odd, so we'll do our best. + return operator[](defaultLayoutName()); +} + + Layout const & DocumentClass::htmlTOCLayout() const { if (html_toc_section_.empty()) { - // we're going to look for the layout with the minimum toclevel - TextClass::LayoutList::const_iterator lit = begin(); - TextClass::LayoutList::const_iterator const len = end(); - int minlevel = 1000; - Layout const * lay = NULL; - for (; lit != len; ++lit) { - int const level = lit->toclevel; - // we don't want Part - if (level == Layout::NOT_IN_TOC || level < 0 || level >= minlevel) - continue; - lay = &*lit; - minlevel = level; - } - if (lay) - html_toc_section_ = lay->name(); - else - // hmm. that is very odd, so we'll do our best - html_toc_section_ = defaultLayoutName(); + html_toc_section_ = getTOCLayout().name(); } return operator[](html_toc_section_); }