]> 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 8f1ca296513d81235ae097f84019a46c0e6ddb1b..51084095a53d53d6d8af9d1c458ade229d8f6045 100644 (file)
 #include "frontends/alert.h"
 
 #include "support/lstrings.h"
-#include "support/lyxlib.h"
+#include "support/FileName.h"
 #include "support/filetools.h"
 #include "support/os.h"
 
 #include <sstream>
 
-using std::endl;
-using std::find_if;
-using std::remove_if;
-using std::string;
-using std::ostream;
+using namespace std;
+using namespace lyx::support;
 
 namespace lyx {
 
-using support::FileName;
-using support::libFileSearch;
-using support::makeDisplayPath;
-using support::quoteName;
-using support::rtrim;
-using support::subst;
-using support::addName;
-
-
 namespace {
 
-class LayoutNamesEqual : public std::unary_function<LayoutPtr, bool> {
+class LayoutNamesEqual : public unary_function<LayoutPtr, bool> {
 public:
        LayoutNamesEqual(docstring const & name)
                : name_(name)
@@ -68,7 +56,7 @@ private:
 };
 
 
-int const FORMAT = 5;
+int const FORMAT = 6;
 
 
 bool layout2layout(FileName const & filename, FileName const & tempfile)
@@ -80,16 +68,16 @@ bool layout2layout(FileName const & filename, FileName const & tempfile)
                return false;
        }
 
-       std::ostringstream command;
-       command << support::os::python() << ' ' << quoteName(script.toFilesystemEncoding())
+       ostringstream command;
+       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;
@@ -162,6 +150,7 @@ enum TextClassTags {
        TC_CLASSOPTIONS,
        TC_PREAMBLE,
        TC_PROVIDES,
+       TC_REQUIRES,
        TC_LEFTMARGIN,
        TC_RIGHTMARGIN,
        TC_FLOAT,
@@ -200,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 },
@@ -215,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;
@@ -403,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();
@@ -445,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);
@@ -478,9 +480,9 @@ bool TextClass::read(FileName const & filename, ReadType rt)
                                if (min_toclevel_ == Layout::NOT_IN_TOC)
                                        min_toclevel_ = toclevel;
                                else
-                                       min_toclevel_ = std::min(min_toclevel_,
+                                       min_toclevel_ = min(min_toclevel_,
                                                         toclevel);
-                               max_toclevel_ = std::max(max_toclevel_,
+                               max_toclevel_ = max(max_toclevel_,
                                                         toclevel);
                        }
                }
@@ -621,6 +623,7 @@ enum InsetLayoutTags {
        IL_NEEDPROTECT,
        IL_PASSTHRU,
        IL_PREAMBLE,
+       IL_REQUIRES,
        IL_END
 };
 
@@ -644,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);
@@ -659,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;
@@ -671,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;
                }
@@ -741,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;
@@ -768,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;
        }
 
@@ -821,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;
                }
@@ -921,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;
                }