#include "frontends/alert.h"
+#include "support/ExceptionMessage.h"
#include "support/lstrings.h"
-#include "support/lyxlib.h"
+#include "support/FileName.h"
#include "support/filetools.h"
#include "support/os.h"
};
-int const FORMAT = 5;
+int const FORMAT = 6;
bool layout2layout(FileName const & filename, FileName const & tempfile)
return true;
}
+
+std::string translateRT(TextClass::ReadType rt)
+{
+ switch (rt) {
+ case TextClass::BASECLASS:
+ return "textclass";
+ case TextClass::MERGE:
+ return "input file";
+ case TextClass::MODULE:
+ return "module file";
+ }
+ // shutup warning
+ return string();
+}
+
} // namespace anon
TC_CLASSOPTIONS,
TC_PREAMBLE,
TC_PROVIDES,
+ TC_REQUIRES,
TC_LEFTMARGIN,
TC_RIGHTMARGIN,
TC_FLOAT,
{ "pagestyle", TC_PAGESTYLE },
{ "preamble", TC_PREAMBLE },
{ "provides", TC_PROVIDES },
+ { "requires", TC_REQUIRES },
{ "rightmargin", TC_RIGHTMARGIN },
{ "secnumdepth", TC_SECNUMDEPTH },
{ "sides", TC_SIDES },
{ "tocdepth", TC_TOCDEPTH }
};
- switch (rt) {
- case BASECLASS:
- LYXERR(Debug::TCLASS, "Reading textclass ");
- break;
- case MERGE:
- LYXERR(Debug::TCLASS, "Reading input file ");
- break;
- case MODULE:
- LYXERR(Debug::TCLASS, "Reading module file ");
- break;
- default:
- BOOST_ASSERT(false);
- }
- LYXERR(Debug::TCLASS, to_utf8(makeDisplayPath(filename.absFilename())));
+ LYXERR(Debug::TCLASS, "Reading " + translateRT(rt) + ": " +
+ to_utf8(makeDisplayPath(filename.absFilename())));
Lexer lexrc(textClassTags,
sizeof(textClassTags) / sizeof(textClassTags[0]));
"layout");
if (tmp.empty()) {
- lexrc.printError("Could not find input"
- "file: " + inc);
+ lexrc.printError("Could not find input file: " + inc);
error = true;
} else if (read(tmp, MERGE)) {
lexrc.printError("Error reading input"
break;
}
+ case TC_REQUIRES: {
+ lexrc.eatLine();
+ vector<string> const req
+ = getVectorFromString(lexrc.getString());
+ requires_.insert(req.begin(), req.end());
+ break;
+ }
+
case TC_LEFTMARGIN: // left margin type
if (lexrc.next())
leftmargin_ = lexrc.getDocString();
return error;
}
- if (rt == MODULE)
- LYXERR(Debug::TCLASS, "Finished reading module file "
- << to_utf8(makeDisplayPath(filename.absFilename())));
- else if (rt == MERGE)
- LYXERR(Debug::TCLASS, "Finished reading input file "
- << to_utf8(makeDisplayPath(filename.absFilename())));
- else { // we are at top level here.
- LYXERR(Debug::TCLASS, "Finished reading textclass "
- << to_utf8(makeDisplayPath(filename.absFilename())));
- if (defaultlayout_.empty()) {
- lyxerr << "Error: Textclass '" << name_
- << "' is missing a defaultstyle." << endl;
+ LYXERR(Debug::TCLASS, "Finished reading " + translateRT(rt) + ": " +
+ to_utf8(makeDisplayPath(filename.absFilename())));
+
+ if (rt != BASECLASS)
+ return error;
+
+ if (defaultlayout_.empty()) {
+ lyxerr << "Error: Textclass '" << name_
+ << "' is missing a defaultstyle." << endl;
+ error = true;
+ }
+
+ //Try to erase "stdinsets" from the provides_ set.
+ //The
+ // Provides stdinsets 1
+ //declaration simply tells us that the standard insets have been
+ //defined. (It's found in stdinsets.inc but could also be used in
+ //user-defined files.) There isn't really any such package. So we
+ //might as well go ahead and erase it.
+ //If we do not succeed, then it was not there, which means that
+ //the textclass did not provide the definitions of the standard
+ //insets. So we need to try to load them.
+ int erased = provides_.erase("stdinsets");
+ if (!erased) {
+ FileName tmp = libFileSearch("layouts", "stdinsets.inc");
+
+ if (tmp.empty()) {
+ throw ExceptionMessage(WarningException, _("Missing File"),
+ _("Could not find stdinsets.inc! This may lead to data loss!"));
+ error = true;
+ } else if (read(tmp, MERGE)) {
+ throw ExceptionMessage(WarningException, _("Corrupt File"),
+ _("Could not read stdinsets.inc! This may lead to data loss!"));
error = true;
}
+ }
- min_toclevel_ = Layout::NOT_IN_TOC;
- max_toclevel_ = Layout::NOT_IN_TOC;
- const_iterator cit = begin();
- const_iterator the_end = end();
- for ( ; cit != the_end ; ++cit) {
- int const toclevel = (*cit)->toclevel;
- if (toclevel != Layout::NOT_IN_TOC) {
- if (min_toclevel_ == Layout::NOT_IN_TOC)
- min_toclevel_ = toclevel;
- else
- min_toclevel_ = min(min_toclevel_,
- toclevel);
- max_toclevel_ = max(max_toclevel_,
- toclevel);
- }
+ min_toclevel_ = Layout::NOT_IN_TOC;
+ max_toclevel_ = Layout::NOT_IN_TOC;
+ const_iterator cit = begin();
+ const_iterator the_end = end();
+ for ( ; cit != the_end ; ++cit) {
+ int const toclevel = (*cit)->toclevel;
+ if (toclevel != Layout::NOT_IN_TOC) {
+ if (min_toclevel_ == Layout::NOT_IN_TOC)
+ min_toclevel_ = toclevel;
+ else
+ min_toclevel_ = min(min_toclevel_,
+ toclevel);
+ max_toclevel_ = max(max_toclevel_,
+ toclevel);
}
- LYXERR(Debug::TCLASS, "Minimum TocLevel is " << min_toclevel_
- << ", maximum is " << max_toclevel_);
-
}
+ LYXERR(Debug::TCLASS, "Minimum TocLevel is " << min_toclevel_
+ << ", maximum is " << max_toclevel_);
return error;
}
IL_NEEDPROTECT,
IL_PASSTHRU,
IL_PREAMBLE,
+ IL_REQUIRES,
IL_END
};
{ "multipar", IL_MULTIPAR },
{ "needprotect", IL_NEEDPROTECT },
{ "passthru", IL_PASSTHRU },
- { "preamble", IL_PREAMBLE }
+ { "preamble", IL_PREAMBLE },
+ { "requires", IL_REQUIRES }
};
lexrc.pushTable(elementTags, IL_END);
FontInfo labelfont = inherit_font;
ColorCode bgcolor(Color_background);
string preamble;
+ set<string> requires;
bool multipar = false;
bool passthru = false;
bool needprotect = false;
int le = lexrc.lex();
switch (le) {
case Lexer::LEX_UNDEF:
- lexrc.printError("Unknown ClassOption tag `$$Token'");
+ lexrc.printError("Unknown InsetLayout tag `$$Token'");
continue;
default: break;
}
case IL_PREAMBLE:
preamble = lexrc.getLongString("EndPreamble");
break;
+ case IL_REQUIRES: {
+ lexrc.eatLine();
+ vector<string> const req
+ = getVectorFromString(lexrc.getString());
+ requires.insert(req.begin(), req.end());
+ break;
+ }
case IL_END:
getout = true;
break;
// any realization against a given context.
labelfont.realize(sane_font);
il.labelfont = labelfont;
- il.bgcolor = bgcolor;
+ il.bgcolor = bgcolor;
il.preamble = preamble;
+ il.requires = requires;
insetlayoutlist_[name] = il;
}
int le = lexrc.lex();
switch (le) {
case Lexer::LEX_UNDEF:
- lexrc.printError("Unknown ClassOption tag `$$Token'");
+ lexrc.printError("Unknown float tag `$$Token'");
continue;
default: break;
}
int le = lexrc.lex();
switch (le) {
case Lexer::LEX_UNDEF:
- lexrc.printError("Unknown ClassOption tag `$$Token'");
+ lexrc.printError("Unknown counter tag `$$Token'");
continue;
default: break;
}