]> git.lyx.org Git - lyx.git/blobdiff - src/TextClass.cpp
New XHTML math options. Format change.
[lyx.git] / src / TextClass.cpp
index 6bc0bc0c8e65aded738618c509014955e8c4588b..bbf54cc946ac9c72760aa643207289a2d9af3fbb 100644 (file)
@@ -30,7 +30,6 @@
 
 #include "support/lassert.h"
 #include "support/debug.h"
-#include "support/ExceptionMessage.h"
 #include "support/FileName.h"
 #include "support/filetools.h"
 #include "support/gettext.h"
@@ -266,7 +265,7 @@ TextClass::ReturnValues TextClass::readWithoutConv(FileName const & filename, Re
        }
 
        LYXERR(Debug::TCLASS, "Reading " + translateRT(rt) + ": " +
-               to_utf8(makeDisplayPath(filename.absFilename())));
+               to_utf8(makeDisplayPath(filename.absFileName())));
 
        // Define the plain layout used in table cells, ert, etc. Note that 
        // we do this before loading any layout file, so that classes can 
@@ -279,7 +278,7 @@ TextClass::ReturnValues TextClass::readWithoutConv(FileName const & filename, Re
        ReturnValues retval = read(lexrc, rt);
        
        LYXERR(Debug::TCLASS, "Finished reading " + translateRT(rt) + ": " +
-                       to_utf8(makeDisplayPath(filename.absFilename())));
+                       to_utf8(makeDisplayPath(filename.absFileName())));
 
        return retval;
 }
@@ -342,10 +341,12 @@ bool TextClass::read(std::string const & str, ReadType rt)
 // Reads a textclass structure from file.
 TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt) 
 {
-       bool error = !lexrc.isOK();
+       if (!lexrc.isOK())
+               return ERROR;
 
        // Format of files before the 'Format' tag was introduced
        int format = 1;
+       bool error = false;
 
        // parsing
        while (lexrc.isOK() && !error) {
@@ -405,8 +406,7 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                                        lexrc.printError("Could not find input file: " + inc);
                                        error = true;
                                } else if (!read(tmp, MERGE)) {
-                                       lexrc.printError("Error reading input"
-                                                        "file: " + tmp.absFilename());
+                                       lexrc.printError("Error reading input file: " + tmp.absFileName());
                                        error = true;
                                }
                        }
@@ -434,7 +434,7 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                        if (name.empty()) {
                                string s = "Could not read name for style: `$$Token' "
                                        + lexrc.getString() + " is probably not valid UTF-8!";
-                               lexrc.printError(s.c_str());
+                               lexrc.printError(s);
                                Layout lay;
                                // Since we couldn't read the name, we just scan the rest
                                // of the style and discard it.
@@ -456,10 +456,10 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                                }
                        }
                        else {
+                               // this was an ifstyle where we didn't have the style
                                // scan the rest and discard it
                                Layout lay;
                                readStyle(lexrc, lay);
-                               error = false;
                        }
 
                        // reset flag
@@ -614,12 +614,13 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                        if (name.empty()) {
                                string s = "Could not read name for InsetLayout: `$$Token' "
                                        + lexrc.getString() + " is probably not valid UTF-8!";
-                               lexrc.printError(s.c_str());
+                               lexrc.printError(s);
                                InsetLayout il;
                                // Since we couldn't read the name, we just scan the rest
                                // of the style and discard it.
                                il.read(lexrc, *this);
-                               error = true;
+                               // Let's try to continue rather than abort.
+                               // error = true;
                        } else if (hasInsetLayout(name)) {
                                InsetLayout & il = insetlayoutlist_[name];
                                error = !il.read(lexrc, *this);
@@ -634,7 +635,7 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                }
 
                case TC_FLOAT:
-                       readFloat(lexrc);
+                       error = !readFloat(lexrc);
                        break;
                
                case TC_CITEFORMAT:
@@ -682,22 +683,24 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                        break;
                } // end of switch
 
-               //Note that this is triggered the first time through the loop unless
-               //we hit a format tag.
+               // Note that this is triggered the first time through the loop unless
+               // we hit a format tag.
                if (format != FORMAT)
-                       break;
+                       return FORMAT_MISMATCH;
        }
 
-       if (format != FORMAT)
-               return FORMAT_MISMATCH;
+       // at present, we abort if we encounter an error,
+       // so there is no point continuing.
+       if (error)
+               return ERROR;
 
-       if (rt != BASECLASS) 
+       if (rt != BASECLASS)
                return (error ? ERROR : OK);
 
        if (defaultlayout_.empty()) {
                LYXERR0("Error: Textclass '" << name_
                                                << "' is missing a defaultstyle.");
-               error = true;
+               return ERROR;
        }
                
        // Try to erase "stdinsets" from the provides_ set. 
@@ -715,11 +718,11 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                FileName tmp = libFileSearch("layouts", "stdinsets.inc");
 
                if (tmp.empty()) {
-                       throw ExceptionMessage(WarningException, _("Missing File"),
+                       frontend::Alert::warning(_("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"),
+                       frontend::Alert::warning(_("Corrupt File"),
                                _("Could not read stdinsets.inc! This may lead to data loss!"));
                        error = true;
                }
@@ -824,7 +827,8 @@ void TextClass::readClassOptions(Lexer & lexrc)
                case Lexer::LEX_UNDEF:
                        lexrc.printError("Unknown ClassOption tag `$$Token'");
                        continue;
-               default: break;
+               default:
+                       break;
                }
                switch (le) {
                case CO_FONTSIZE:
@@ -837,7 +841,10 @@ void TextClass::readClassOptions(Lexer & lexrc)
                        break;
                case CO_OTHER:
                        lexrc.next();
-                       options_ = lexrc.getString();
+                       if (options_.empty())
+                               options_ = lexrc.getString();
+                       else
+                               options_ += ',' + lexrc.getString();
                        break;
                case CO_HEADER:
                        lexrc.next();
@@ -874,7 +881,7 @@ void TextClass::readCiteFormat(Lexer & lexrc)
 }
 
 
-void TextClass::readFloat(Lexer & lexrc)
+bool TextClass::readFloat(Lexer & lexrc)
 {
        enum {
                FT_TYPE = 1,
@@ -933,7 +940,8 @@ void TextClass::readFloat(Lexer & lexrc)
                case Lexer::LEX_UNDEF:
                        lexrc.printError("Unknown float tag `$$Token'");
                        continue;
-               default: break;
+               default:
+                       break;
                }
                switch (le) {
                case FT_TYPE:
@@ -1008,6 +1016,8 @@ void TextClass::readFloat(Lexer & lexrc)
                }
        }
 
+       lexrc.popTable();
+
        // Here we have a full float if getout == true
        if (getout) {
                if (!needsfloat && listcommand.empty())
@@ -1026,8 +1036,7 @@ void TextClass::readFloat(Lexer & lexrc)
                counters_.newCounter(subtype, from_ascii(type),
                                      "\\alph{" + subtype + "}", docstring());
        }
-
-       lexrc.popTable();
+       return getout;
 }
 
 
@@ -1138,10 +1147,11 @@ bool TextClass::load(string const & path) const
 
        if (!loaded_) {
                lyxerr << "Error reading `"
-                      << to_utf8(makeDisplayPath(layout_file.absFilename()))
+                      << to_utf8(makeDisplayPath(layout_file.absFileName()))
                       << "'\n(Check `" << name_
                       << "')\nCheck your installation and "
-                       "try Options/Reconfigure..." << endl;
+                         "try Options/Reconfigure..." 
+                      << endl;
        }
 
        return loaded_;
@@ -1274,8 +1284,7 @@ DocumentClass & DocumentClassBundle::makeDocumentClass(
                                                "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."));
+                       frontend::Alert::warning(_("Module not available"), msg);
                        continue;
                }
                if (!lm->isAvailable()) {
@@ -1283,13 +1292,13 @@ DocumentClass & DocumentClassBundle::makeDocumentClass(
                                                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);
+                       frontend::Alert::warning(_("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);
+                       frontend::Alert::warning(_("Read Error"), msg);
                }
        }
        return doc_class;