]> git.lyx.org Git - lyx.git/blobdiff - src/TextClass.cpp
Embedding: saving inzip name to .lyx file so that embedded files can always be found...
[lyx.git] / src / TextClass.cpp
index e9c9cda5148709cf0e2530ce517b59891ae1ebf3..51084095a53d53d6d8af9d1c458ade229d8f6045 100644 (file)
@@ -29,6 +29,7 @@
 #include "frontends/alert.h"
 
 #include "support/lstrings.h"
+#include "support/FileName.h"
 #include "support/filetools.h"
 #include "support/os.h"
 
@@ -55,7 +56,7 @@ private:
 };
 
 
-int const FORMAT = 5;
+int const FORMAT = 6;
 
 
 bool layout2layout(FileName const & filename, FileName const & tempfile)
@@ -149,6 +150,7 @@ enum TextClassTags {
        TC_CLASSOPTIONS,
        TC_PREAMBLE,
        TC_PROVIDES,
+       TC_REQUIRES,
        TC_LEFTMARGIN,
        TC_RIGHTMARGIN,
        TC_FLOAT,
@@ -187,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 },
@@ -202,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;
@@ -390,6 +393,18 @@ bool TextClass::read(FileName const & filename, ReadType rt)
                        break;
                }
 
+               case TC_REQUIRES: {
+                       lexrc.eatLine();
+                       string const packages = lexrc.getString();
+                       vector<string> req = getVectorFromString(packages);
+                       for (vector<string>::const_iterator it = req.begin();
+                            it != req.end(); ++it) {
+                               if (find(requires_.begin(), requires_.end(), *it) == requires_.end())
+                                       requires_.push_back(*it);
+                       }
+                       break;
+               }
+
                case TC_LEFTMARGIN:     // left margin type
                        if (lexrc.next())
                                leftmargin_ = lexrc.getDocString();
@@ -608,6 +623,7 @@ enum InsetLayoutTags {
        IL_NEEDPROTECT,
        IL_PASSTHRU,
        IL_PREAMBLE,
+       IL_REQUIRES,
        IL_END
 };
 
@@ -631,7 +647,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);
@@ -646,6 +663,7 @@ void TextClass::readInsetLayout(Lexer & lexrc, docstring const & name)
        FontInfo labelfont = inherit_font;
        ColorCode bgcolor(Color_background);
        string preamble;
+       vector<string> requires;
        bool multipar = false;
        bool passthru = false;
        bool needprotect = false;
@@ -658,7 +676,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;
                }
@@ -728,6 +746,12 @@ void TextClass::readInsetLayout(Lexer & lexrc, docstring const & name)
                case IL_PREAMBLE:
                        preamble = lexrc.getLongString("EndPreamble");
                        break;
+               case IL_REQUIRES: {
+                       lexrc.eatLine();
+                       string const packages = lexrc.getString();
+                       requires = getVectorFromString(packages);
+                       break;
+               }
                case IL_END:
                        getout = true;
                        break;
@@ -755,8 +779,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;
        }
 
@@ -808,7 +833,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;
                }
@@ -908,7 +933,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;
                }