]> git.lyx.org Git - lyx.git/blobdiff - src/lyxtextclass.C
Fix bug 2485 and crash on middle mouse paste on math
[lyx.git] / src / lyxtextclass.C
index f98683885135c1c970f51f26a10da79e200c1346..1790d979b6e2cd4a8b7999f9be39ea323206420d 100644 (file)
@@ -24,6 +24,8 @@
 #include "support/lstrings.h"
 #include "support/lyxlib.h"
 #include "support/filetools.h"
+#include <boost/filesystem/operations.hpp>
+namespace fs = boost::filesystem;
 
 #include <sstream>
 
@@ -120,7 +122,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 +167,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 +257,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 +437,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,14 +912,16 @@ 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, current directory is searched before system ones
+       string real_file = path + "/" + name_ + ".layout";
+       if (!fs::exists(real_file))
+               real_file = libFileSearch("layouts", name_, "layout");
+       loaded_ = const_cast<LyXTextClass*>(this)->read(real_file) == 0;
 
        if (!loaded_) {
                lyxerr << "Error reading `"