]> git.lyx.org Git - lyx.git/blobdiff - src/TextClass.cpp
Fix bug 4441. GuiRef: Ok button must be default.
[lyx.git] / src / TextClass.cpp
index 2b5f52f5e408d591de5e9c7d2ab12f57f355b5f6..79e8b0e7d1e39c955bd13a4a67831eca0acbd9f5 100644 (file)
@@ -24,6 +24,7 @@
 #include "Layout.h"
 #include "Lexer.h"
 #include "Font.h"
+#include "ModuleList.h"
 
 #include "frontends/alert.h"
 
@@ -60,7 +61,8 @@ private:
        docstring name_;
 };
 
-int const FORMAT = 12;
+// Keep the changes documented in the Customization manual. 
+int const FORMAT = 14;
 
 
 bool layout2layout(FileName const & filename, FileName const & tempfile)
@@ -230,17 +232,18 @@ bool TextClass::convertLayoutFormat(support::FileName const & filename, ReadType
        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) + ": " +
@@ -258,10 +261,17 @@ bool TextClass::read(FileName const & filename, ReadType 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 << 
@@ -1104,6 +1114,43 @@ DocumentClassBundle & DocumentClassBundle::get()
 }
 
 
+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