X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FTextClassList.cpp;h=a696936f535380c5a9a77dbca4d8308801d76ddf;hb=6b651f2ad9f698c01993dcc6e340682c279f1c55;hp=02d065df6608fdc914f6dfc1159fa4c031dc5ba2;hpb=9d0ea8aeff32833a90b3fe64df0c5518a9e241be;p=lyx.git diff --git a/src/TextClassList.cpp b/src/TextClassList.cpp index 02d065df66..a696936f53 100644 --- a/src/TextClassList.cpp +++ b/src/TextClassList.cpp @@ -16,6 +16,7 @@ #include "support/debug.h" #include "Lexer.h" +#include "support/FileName.h" #include "support/filetools.h" #include @@ -23,28 +24,15 @@ #include +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 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 + : public binary_function { 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 const -TextClassList::addTextClass(std::string const & textclass, std::string const & path) +pair 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 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); }