]> git.lyx.org Git - lyx.git/blobdiff - src/lyxtextclass.C
* remove various xforms relicts, in particular:
[lyx.git] / src / lyxtextclass.C
index f98683885135c1c970f51f26a10da79e200c1346..95d6212f0a1af036d20fb212813c4e0e1fea2660 100644 (file)
 #include "support/lstrings.h"
 #include "support/lyxlib.h"
 #include "support/filetools.h"
+#include "support/os.h"
+
+#include <boost/filesystem/operations.hpp>
+namespace fs = boost::filesystem;
 
 #include <sstream>
 
@@ -32,6 +36,7 @@ using lyx::support::makeDisplayPath;
 using lyx::support::quoteName;
 using lyx::support::rtrim;
 using lyx::support::subst;
+using lyx::support::addName;
 
 using std::endl;
 using std::find_if;
@@ -69,7 +74,7 @@ bool layout2layout(string const & filename, string const & tempfile)
        }
 
        std::ostringstream command;
-       command << "python " << quoteName(script)
+       command << lyx::support::os::python() << ' ' << quoteName(script)
                << ' ' << quoteName(filename)
                << ' ' << quoteName(tempfile);
        string const command_str = command.str();
@@ -120,7 +125,7 @@ bool LyXTextClass::isTeXClassAvailable() const
 bool LyXTextClass::do_readStyle(LyXLex & lexrc, LyXLayout & lay)
 {
        lyxerr[Debug::TCLASS] << "Reading style " << lay.name() << endl;
-       if (!lay.Read(lexrc, *this)) {
+       if (!lay.read(lexrc, *this)) {
                // Resolve fonts
                lay.resfont = lay.font;
                lay.resfont.realize(defaultfont());
@@ -165,7 +170,7 @@ enum TextClassTags {
 
 
 // Reads a textclass structure from file.
-bool LyXTextClass::Read(string const & filename, bool merge)
+bool LyXTextClass::read(string const & filename, bool merge)
 {
        if (!lyx::support::isFileReadable(filename)) {
                lyxerr << "Cannot read layout file `" << filename << "'."
@@ -255,7 +260,7 @@ bool LyXTextClass::Read(string const & filename, bool merge)
                                                            lexrc.getString(),
                                                            "layout");
 
-                               if (Read(tmp, true)) {
+                               if (read(tmp, true)) {
                                        lexrc.printError("Error reading input"
                                                         "file: "+tmp);
                                        error = true;
@@ -435,7 +440,7 @@ bool LyXTextClass::Read(string const & filename, bool merge)
                string const tempfile = lyx::support::tempName();
                error = !layout2layout(filename, tempfile);
                if (!error)
-                       error = Read(tempfile, merge);
+                       error = read(tempfile, merge);
                lyx::support::unlink(tempfile);
                return error;
        }
@@ -910,18 +915,22 @@ bool LyXTextClass::delete_layout(string const & name)
 
 
 // Load textclass info if not loaded yet
-bool LyXTextClass::load() const
+bool LyXTextClass::load(string const & path) const
 {
        if (loaded_)
                return true;
 
-       // Read style-file
-       string const real_file = libFileSearch("layouts", name_, "layout");
-       loaded_ = const_cast<LyXTextClass*>(this)->Read(real_file) == 0;
+       // Read style-file, provided path is searched before the system ones
+       string layout_file;
+       if (!path.empty())
+               layout_file = addName(path, name_ + ".layout");
+       if (layout_file.empty() || !fs::exists(layout_file))
+               layout_file = libFileSearch("layouts", name_, "layout");
+       loaded_ = const_cast<LyXTextClass*>(this)->read(layout_file) == 0;
 
        if (!loaded_) {
                lyxerr << "Error reading `"
-                      << makeDisplayPath(real_file)
+                      << makeDisplayPath(layout_file)
                       << "'\n(Check `" << name_
                       << "')\nCheck your installation and "
                        "try Options/Reconfigure..." << endl;