]> git.lyx.org Git - lyx.git/blobdiff - src/TextClass.cpp
* Do not keep pointers to data structures around if you don't know
[lyx.git] / src / TextClass.cpp
index a61c52f05ae5a838112244fcba1cd107d2afbe09..ba1ce19b4d66af6bd131020e230f52ec3e8974b5 100644 (file)
@@ -29,7 +29,7 @@
 #include "frontends/alert.h"
 
 #include "support/lstrings.h"
-#include "support/lyxlib.h"
+#include "support/FileName.h"
 #include "support/filetools.h"
 #include "support/os.h"
 
@@ -56,7 +56,7 @@ private:
 };
 
 
-int const FORMAT = 5;
+int const FORMAT = 6;
 
 
 bool layout2layout(FileName const & filename, FileName const & tempfile)
@@ -150,6 +150,7 @@ enum TextClassTags {
        TC_CLASSOPTIONS,
        TC_PREAMBLE,
        TC_PROVIDES,
+       TC_REQUIRES,
        TC_LEFTMARGIN,
        TC_RIGHTMARGIN,
        TC_FLOAT,
@@ -188,6 +189,7 @@ bool TextClass::read(FileName const & filename, ReadType rt)
                { "pagestyle",       TC_PAGESTYLE },
                { "preamble",        TC_PREAMBLE },
                { "provides",        TC_PROVIDES },
+               { "requires",        TC_REQUIRES },
                { "rightmargin",     TC_RIGHTMARGIN },
                { "secnumdepth",     TC_SECNUMDEPTH },
                { "sides",           TC_SIDES },
@@ -203,7 +205,7 @@ bool TextClass::read(FileName const & filename, ReadType rt)
                break;
        case MERGE:
                LYXERR(Debug::TCLASS, "Reading input file ");
-         break;
+               break;
        case MODULE:
                LYXERR(Debug::TCLASS, "Reading module file ");
                break;
@@ -256,8 +258,7 @@ bool TextClass::read(FileName const & filename, ReadType rt)
                                                            "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"
@@ -391,6 +392,14 @@ bool TextClass::read(FileName const & filename, ReadType rt)
                        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();
@@ -433,7 +442,7 @@ bool TextClass::read(FileName const & filename, ReadType rt)
        if (format != FORMAT) {
                LYXERR(Debug::TCLASS, "Converting layout file from format "
                                      << format << " to " << FORMAT);
-               FileName const tempfile(tempName());
+               FileName const tempfile = FileName::tempName();
                error = !layout2layout(filename, tempfile);
                if (!error)
                        error = read(tempfile, rt);
@@ -609,6 +618,7 @@ enum InsetLayoutTags {
        IL_NEEDPROTECT,
        IL_PASSTHRU,
        IL_PREAMBLE,
+       IL_REQUIRES,
        IL_END
 };
 
@@ -632,7 +642,8 @@ void TextClass::readInsetLayout(Lexer & lexrc, docstring const & name)
                { "multipar", IL_MULTIPAR },
                { "needprotect", IL_NEEDPROTECT },
                { "passthru", IL_PASSTHRU },
-               { "preamble", IL_PREAMBLE }
+               { "preamble", IL_PREAMBLE },
+               { "requires", IL_REQUIRES }
        };
 
        lexrc.pushTable(elementTags, IL_END);
@@ -647,6 +658,7 @@ void TextClass::readInsetLayout(Lexer & lexrc, docstring const & name)
        FontInfo labelfont = inherit_font;
        ColorCode bgcolor(Color_background);
        string preamble;
+       set<string> requires;
        bool multipar = false;
        bool passthru = false;
        bool needprotect = false;
@@ -659,7 +671,7 @@ void TextClass::readInsetLayout(Lexer & lexrc, docstring const & name)
                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;
                }
@@ -729,6 +741,13 @@ void TextClass::readInsetLayout(Lexer & lexrc, docstring const & name)
                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;
@@ -756,8 +775,9 @@ void TextClass::readInsetLayout(Lexer & lexrc, docstring const & name)
                // 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;
        }
 
@@ -809,7 +829,7 @@ void TextClass::readFloat(Lexer & lexrc)
                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;
                }
@@ -909,7 +929,7 @@ void TextClass::readCounter(Lexer & lexrc)
                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;
                }