X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FTextClass.cpp;h=f6723ec9c2ff3c48fdf33ed91a29f7f2bceba9b2;hb=4db3e641ed6765e005343010cb90ee8af26f8f99;hp=a34cf9020feb21ca0ec24002f9fc5e61c26ea20c;hpb=06cac41193e82e5e10d36958abc21129ba89cdbb;p=lyx.git diff --git a/src/TextClass.cpp b/src/TextClass.cpp index a34cf9020f..f6723ec9c2 100644 --- a/src/TextClass.cpp +++ b/src/TextClass.cpp @@ -30,6 +30,7 @@ #include "support/lassert.h" #include "support/debug.h" +#include "support/ExceptionMessage.h" #include "support/FileName.h" #include "support/filetools.h" #include "support/gettext.h" @@ -60,7 +61,7 @@ namespace lyx { // development/tools/updatelayouts.sh script, to update the format of // all of our layout files. // -int const LAYOUT_FORMAT = 44; // rgh: change LabelType declarations +int const LAYOUT_FORMAT = 47; //rgh: package options namespace { @@ -196,6 +197,7 @@ enum TextClassTags { TC_HTMLSTYLES, TC_PROVIDES, TC_REQUIRES, + TC_PKGOPTS, TC_LEFTMARGIN, TC_RIGHTMARGIN, TC_FLOAT, @@ -255,6 +257,7 @@ LexerKeyword textClassTags[] = { { "nostyle", TC_NOSTYLE }, { "outputformat", TC_OUTPUTFORMAT }, { "outputtype", TC_OUTPUTTYPE }, + { "packageoptions", TC_PKGOPTS }, { "pagestyle", TC_PAGESTYLE }, { "preamble", TC_PREAMBLE }, { "provides", TC_PROVIDES }, @@ -633,6 +636,15 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt) break; } + case TC_PKGOPTS : { + lexrc.next(); + string const pkg = lexrc.getString(); + lexrc.next(); + string const options = lexrc.getString(); + package_options_[pkg] = options; + break; + } + case TC_DEFAULTMODULE: { lexrc.next(); string const module = lexrc.getString(); @@ -961,6 +973,8 @@ bool TextClass::readCiteEngine(Lexer & lexrc) cite_styles_[ENGINE_TYPE_AUTHORYEAR].clear(); if (type & ENGINE_TYPE_NUMERICAL) cite_styles_[ENGINE_TYPE_NUMERICAL].clear(); + if (type & ENGINE_TYPE_DEFAULT) + cite_styles_[ENGINE_TYPE_DEFAULT].clear(); string def; bool getout = false; while (!getout && lexrc.isOK()) { @@ -1000,6 +1014,8 @@ bool TextClass::readCiteEngine(Lexer & lexrc) cite_styles_[ENGINE_TYPE_AUTHORYEAR].push_back(cs); if (type & ENGINE_TYPE_NUMERICAL) cite_styles_[ENGINE_TYPE_NUMERICAL].push_back(cs); + if (type & ENGINE_TYPE_DEFAULT) + cite_styles_[ENGINE_TYPE_DEFAULT].push_back(cs); } return getout; } @@ -1007,8 +1023,8 @@ bool TextClass::readCiteEngine(Lexer & lexrc) int TextClass::readCiteEngineType(Lexer & lexrc) const { - int const ENGINE_TYPE_DEFAULT = - ENGINE_TYPE_AUTHORYEAR | ENGINE_TYPE_NUMERICAL; + LATTEST(ENGINE_TYPE_DEFAULT == + (ENGINE_TYPE_AUTHORYEAR | ENGINE_TYPE_NUMERICAL)); if (!lexrc.next()) { lexrc.printError("No cite engine type given for token: `$$Token'."); return ENGINE_TYPE_DEFAULT; @@ -1049,11 +1065,15 @@ bool TextClass::readCiteFormat(Lexer & lexrc) cite_macros_[ENGINE_TYPE_AUTHORYEAR][etype] = definition; if (type & ENGINE_TYPE_NUMERICAL) cite_macros_[ENGINE_TYPE_NUMERICAL][etype] = definition; + if (type & ENGINE_TYPE_DEFAULT) + cite_macros_[ENGINE_TYPE_DEFAULT][etype] = definition; } else { if (type & ENGINE_TYPE_AUTHORYEAR) cite_formats_[ENGINE_TYPE_AUTHORYEAR][etype] = definition; if (type & ENGINE_TYPE_NUMERICAL) cite_formats_[ENGINE_TYPE_NUMERICAL][etype] = definition; + if (type & ENGINE_TYPE_DEFAULT) + cite_formats_[ENGINE_TYPE_DEFAULT][etype] = definition; } } return true; @@ -1271,20 +1291,20 @@ bool TextClass::hasInsetLayout(docstring const & n) const Layout const & TextClass::operator[](docstring const & name) const { - LASSERT(!name.empty(), /**/); + LATTEST(!name.empty()); const_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; + LYXERR0("We failed to find the layout '" << name + << "' in the layout list. You MUST investigate!"); for (const_iterator cit = begin(); cit != end(); ++cit) lyxerr << " " << to_utf8(cit->name()) << endl; - // we require the name to exist - LASSERT(false, /**/); + // We require the name to exist + static const Layout dummy; + LASSERT(false, return dummy); } return *it; @@ -1293,7 +1313,8 @@ Layout const & TextClass::operator[](docstring const & name) const Layout & TextClass::operator[](docstring const & name) { - LASSERT(!name.empty(), /**/); + LATTEST(!name.empty()); + // Safe to continue, given what we do below. iterator it = find_if(begin(), end(), LayoutNamesEqual(name)); @@ -1304,7 +1325,10 @@ Layout & TextClass::operator[](docstring const & name) LYXERR0(" " << to_utf8(cit->name())); // we require the name to exist - LASSERT(false, /**/); + LATTEST(false); + // we are here only in release mode + layoutlist_.push_back(createBasicLayout(name, true)); + it = find_if(begin(), end(), LayoutNamesEqual(name)); } return *it; @@ -1371,6 +1395,24 @@ bool DocumentClass::addLayoutIfNeeded(docstring const & n) const } +string DocumentClass::forcedLayouts() const +{ + ostringstream os; + bool first = true; + const_iterator const e = end(); + for (const_iterator i = begin(); i != e; ++i) { + if (i->forcelocal > 0) { + if (first) { + os << "Format " << LAYOUT_FORMAT << '\n'; + first = false; + } + i->write(os); + } + } + return os.str(); +} + + InsetLayout const & DocumentClass::insetLayout(docstring const & name) const { // FIXME The fix for the InsetLayout part of 4812 would be here: @@ -1440,7 +1482,7 @@ Layout TextClass::createBasicLayout(docstring const & name, bool unknown) const if (!readStyle(lex, *defaultLayout)) { // The only way this happens is because the hardcoded layout above // is wrong. - LASSERT(false, /**/); + LATTEST(false); }; return *defaultLayout; } @@ -1531,8 +1573,9 @@ Layout const & DocumentClass::getTOCLayout() const 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) + // we don't want Part or unnumbered sections + if (level == Layout::NOT_IN_TOC || level < 0 + || level >= minlevel || lit->counter.empty()) continue; lay = &*lit; minlevel = level;