]> git.lyx.org Git - lyx.git/blobdiff - src/TextClassList.cpp
* Doxy: polish html output.
[lyx.git] / src / TextClassList.cpp
index 02d065df6608fdc914f6dfc1159fa4c031dc5ba2..a696936f535380c5a9a77dbca4d8308801d76ddf 100644 (file)
@@ -16,6 +16,7 @@
 #include "support/debug.h"
 #include "Lexer.h"
 
+#include "support/FileName.h"
 #include "support/filetools.h"
 
 #include <boost/bind.hpp>
 
 #include <fstream>
 
+using namespace std;
+using namespace lyx::support;
 
 namespace lyx {
 
-using support::FileName;
-using support::addName;
-using support::libFileSearch;
-using support::makeDisplayPath;
-
 using boost::bind;
 using boost::regex;
 using boost::smatch;
 
-using std::endl;
-using std::equal_to;
-using std::find_if;
-using std::make_pair;
-using std::sort;
-using std::string;
-using std::pair;
-using std::ifstream;
-
-
 // Gets textclass number from name
 pair<bool, textclass_type> const
 TextClassList::numberOfClass(string const & textclass) const
@@ -76,7 +64,7 @@ TextClassList::operator[](textclass_type textclass) const
 
 // used when sorting the textclass list.
 class less_textclass_avail_desc
-       : public std::binary_function<TextClass, TextClass, int>
+       : public binary_function<TextClass, TextClass, int>
 {
 public:
        int operator()(TextClass const & tc1,
@@ -97,7 +85,7 @@ public:
 bool TextClassList::read()
 {
        Lexer lex(0, 0);
-       support::FileName const real_file = libFileSearch("", "textclass.lst");
+       FileName const real_file = libFileSearch("", "textclass.lst");
        LYXERR(Debug::TCLASS, "Reading textclasses from `" << real_file << '\'');
 
        if (real_file.empty()) {
@@ -186,8 +174,8 @@ void TextClassList::reset(textclass_type const textclass) {
 }
 
 
-std::pair<bool, textclass_type> const
-TextClassList::addTextClass(std::string const & textclass, std::string const & path)
+pair<bool, textclass_type> const
+TextClassList::addTextClass(string const & textclass, string const & path)
 {
        // only check for textclass.layout file, .cls can be anywhere in $TEXINPUTS
        // NOTE: latex class name is defined in textclass.layout, which can be different from textclass
@@ -209,11 +197,18 @@ TextClassList::addTextClass(std::string const & textclass, std::string const & p
                        if (regex_match(line, sub, reg)) {
                                // returns: whole string, classtype (not used here), first option, description
                                BOOST_ASSERT(sub.size()==4);
-                               // now, add the layout to textclass.
+                               // now, create a TextClass with description containing path information
                                TextClass tmpl(textclass, sub.str(2)==""?textclass:sub.str(2),
                                        sub.str(3) + " <" + path + ">", true);
                                if (lyxerr.debugging(Debug::TCLASS))
                                        tmpl.load(path);
+                               // Do not add this local TextClass to classlist_ if it has
+                               // already been loaded by, for example, a master buffer.
+                               pair<bool, lyx::textclass_type> pp =
+                                       textclasslist.numberOfClass(textclass);
+                               // only layouts from the same directory are considered to be identical.
+                               if (pp.first && classlist_[pp.second].description() == tmpl.description())
+                                       return pp;
                                classlist_.push_back(tmpl);
                                return make_pair(true, classlist_.size() - 1);
                        }