#include "Layout.h"
#include "Lexer.h"
#include "Font.h"
+#include "ModuleList.h"
#include "frontends/alert.h"
docstring name_;
};
-int const FORMAT = 12;
+// Keep the changes documented in the Customization manual.
+int const FORMAT = 16;
bool layout2layout(FileName const & filename, FileName const & tempfile)
TextClass::TextClass()
{
outputType_ = LATEX;
+ outputFormat_ = "latex";
columns_ = 1;
sides_ = OneSide;
secnumdepth_ = 3;
enum TextClassTags {
TC_OUTPUTTYPE = 1,
+ TC_OUTPUTFORMAT,
TC_INPUT,
TC_STYLE,
TC_DEFAULTSTYLE,
TC_TOCDEPTH,
TC_CLASSOPTIONS,
TC_PREAMBLE,
+ TC_HTMLPREAMBLE,
TC_PROVIDES,
TC_REQUIRES,
TC_LEFTMARGIN,
{ "excludesmodule", TC_EXCLUDESMODULE },
{ "float", TC_FLOAT },
{ "format", TC_FORMAT },
+ { "htmlpreamble", TC_HTMLPREAMBLE },
{ "input", TC_INPUT },
{ "insetlayout", TC_INSETLAYOUT },
{ "leftmargin", TC_LEFTMARGIN },
{ "nofloat", TC_NOFLOAT },
{ "nostyle", TC_NOSTYLE },
+ { "outputformat", TC_OUTPUTFORMAT },
{ "outputtype", TC_OUTPUTTYPE },
{ "pagestyle", TC_PAGESTYLE },
{ "preamble", TC_PREAMBLE },
FileName const tempfile = FileName::tempName("convert_layout");
bool success = layout2layout(filename, tempfile);
if (success)
- success = read(tempfile, rt);
+ success = readWithoutConv(tempfile, rt) == OK;
tempfile.removeFile();
return success;
}
-bool TextClass::read(FileName const & filename, ReadType rt)
+
+TextClass::ReturnValues TextClass::readWithoutConv(FileName const & filename, ReadType rt)
{
if (!filename.isReadableFile()) {
lyxerr << "Cannot read layout file `" << filename << "'."
<< endl;
- return false;
+ return ERROR;
}
LYXERR(Debug::TCLASS, "Reading " + translateRT(rt) + ": " +
LYXERR(Debug::TCLASS, "Finished reading " + translateRT(rt) + ": " +
to_utf8(makeDisplayPath(filename.absFilename())));
-
- if (retval != FORMAT_MISMATCH)
+
+ return retval;
+}
+
+
+bool TextClass::read(FileName const & filename, ReadType rt)
+{
+ ReturnValues const retval = readWithoutConv(filename, rt);
+ if (retval != FORMAT_MISMATCH)
return retval == OK;
-
+
bool const worx = convertLayoutFormat(filename, rt);
if (!worx) {
LYXERR0 ("Unable to convert " << filename <<
format = lexrc.getInteger();
break;
- case TC_OUTPUTTYPE: // output type definition
+ case TC_OUTPUTFORMAT:
+ if (lexrc.next())
+ outputFormat_ = lexrc.getString();
+ break;
+
+ case TC_OUTPUTTYPE:
readOutputType(lexrc);
+ switch(outputType_) {
+ case LATEX:
+ outputFormat_ = "latex";
+ break;
+ case DOCBOOK:
+ outputFormat_ = "docbook";
+ break;
+ case LITERATE:
+ outputFormat_ = "literate";
+ break;
+ }
break;
case TC_INPUT: // Include file
preamble_ = from_utf8(lexrc.getLongString("EndPreamble"));
break;
+ case TC_HTMLPREAMBLE:
+ htmlpreamble_ = from_utf8(lexrc.getLongString("EndPreamble"));
+ break;
+
case TC_ADDTOPREAMBLE:
preamble_ += from_utf8(lexrc.getLongString("EndPreamble"));
break;
}
+DocumentClass & DocumentClassBundle::makeDocumentClass(
+ LayoutFile const & baseClass, LayoutModuleList const & modlist)
+{
+ DocumentClass & doc_class = newClass(baseClass);
+ LayoutModuleList::const_iterator it = modlist.begin();
+ LayoutModuleList::const_iterator en = modlist.end();
+ for (; it != en; it++) {
+ string const modName = *it;
+ LyXModule * lm = moduleList[modName];
+ if (!lm) {
+ docstring const msg =
+ bformat(_("The module %1$s has been requested by\n"
+ "this document but has not been found in the list of\n"
+ "available modules. If you recently installed it, you\n"
+ "probably need to reconfigure LyX.\n"), from_utf8(modName));
+ ExceptionMessage(WarningException,_("Module not available"),
+ msg + _("Some layouts may not be available."));
+ continue;
+ }
+ if (!lm->isAvailable()) {
+ docstring const msg =
+ bformat(_("The module %1$s requires a package that is\n"
+ "not available in your LaTeX installation. LaTeX output\n"
+ "may not be possible.\n"), from_utf8(modName));
+ ExceptionMessage(WarningException, _("Package not available"), msg);
+ }
+ FileName layout_file = libFileSearch("layouts", lm->getFilename());
+ if (!doc_class.read(layout_file, TextClass::MODULE)) {
+ docstring const msg =
+ bformat(_("Error reading module %1$s\n"), from_utf8(modName));
+ throw ExceptionMessage(WarningException, _("Read Error"), msg);
+ }
+ }
+ return doc_class;
+}
+
+
/////////////////////////////////////////////////////////////////////////
//
// DocumentClass