]> 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 4f97b89a110637e26d0a59be43f59f4e53f1bb26..51084095a53d53d6d8af9d1c458ade229d8f6045 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)
@@ -69,15 +69,15 @@ bool layout2layout(FileName const & filename, FileName const & tempfile)
        }
 
        ostringstream command;
-       command << support::os::python() << ' ' << quoteName(script.toFilesystemEncoding())
+       command << os::python() << ' ' << quoteName(script.toFilesystemEncoding())
                << ' ' << quoteName(filename.toFilesystemEncoding())
                << ' ' << quoteName(tempfile.toFilesystemEncoding());
        string const command_str = command.str();
 
        LYXERR(Debug::TCLASS, "Running `" << command_str << '\'');
 
-       support::cmd_ret const ret =
-               support::runCommand(command_str);
+       cmd_ret const ret =
+               runCommand(command_str);
        if (ret.first != 0) {
                lyxerr << "Could not run layout conversion "
                          "script layout2layout.py." << endl;
@@ -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;
@@ -391,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();
@@ -433,7 +447,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(support::tempName());
+               FileName const tempfile = FileName::tempName();
                error = !layout2layout(filename, tempfile);
                if (!error)
                        error = read(tempfile, rt);
@@ -609,6 +623,7 @@ enum InsetLayoutTags {
        IL_NEEDPROTECT,
        IL_PASSTHRU,
        IL_PREAMBLE,
+       IL_REQUIRES,
        IL_END
 };
 
@@ -632,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);
@@ -647,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;
@@ -659,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;
                }
@@ -729,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;
@@ -756,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;
        }
 
@@ -809,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;
                }
@@ -909,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;
                }