]> git.lyx.org Git - lyx.git/blobdiff - src/TextClassList.cpp
* gcc does not like missing characters in keywords
[lyx.git] / src / TextClassList.cpp
index 546e02e92c9805bd6288eb411cae2cb17e3dfe25..87e97cf676d19496e883fb923c077989a09b4c65 100644 (file)
 
 #include <boost/bind.hpp>
 #include <boost/regex.hpp>
-#include <boost/filesystem/operations.hpp>
+
 #include <fstream>
 
 
 namespace lyx {
-namespace fs = boost::filesystem;
 
 using support::FileName;
 using support::addName;
@@ -66,11 +65,12 @@ TextClassList::numberOfClass(string const & textclass) const
 TextClass const &
 TextClassList::operator[](textclass_type textclass) const
 {
-       classlist_[textclass].load();
-       if (textclass < classlist_.size())
-               return classlist_[textclass];
-       else
+       if (textclass >= classlist_.size())
                return classlist_[0];
+       
+       //FIXME I don't believe the following line is actually necessary (rgh)
+       classlist_[textclass].load();
+       return classlist_[textclass];
 }
 
 
@@ -103,7 +103,7 @@ bool TextClassList::read()
 
        if (real_file.empty()) {
                lyxerr << "TextClassList::Read: unable to find "
-                         "textclass file  `"
+                         "textclass file  `"
                       << to_utf8(makeDisplayPath(real_file.absFilename(), 1000))
                       << "'. Exiting." << endl;
                return false;
@@ -122,7 +122,7 @@ bool TextClassList::read()
 
        if (!lex.isOK()) {
                lyxerr << "TextClassList::Read: unable to open "
-                         "textclass file  `"
+                         "textclass file  `"
                       << to_utf8(makeDisplayPath(real_file.absFilename(), 1000))
                       << "'\nCheck your installation. LyX can't continue."
                       << endl;
@@ -164,24 +164,36 @@ bool TextClassList::read()
        }
        LYXERR(Debug::TCLASS) << "End of parsing of textclass.lst" << endl;
 
-       if (classlist_.empty()) {
+       // lyx will start with an empty classlist_, but only reconfigure is allowed
+       // in this case. This gives users a second chance to configure lyx if
+       // initial configuration fails. (c.f. bug 2829)
+       if (classlist_.empty())
                lyxerr << "TextClassList::Read: no textclasses found!"
                       << endl;
-               return false;
-       }
-       // Ok everything loaded ok, now sort the list.
-       sort(classlist_.begin(), classlist_.end(), less_textclass_avail_desc());
+       else 
+               // Ok everything loaded ok, now sort the list.
+               sort(classlist_.begin(), classlist_.end(), less_textclass_avail_desc());
        return true;
 }
 
 
+void TextClassList::reset(textclass_type const textclass) {
+       if (textclass >= classlist_.size())
+               return;
+       TextClass const & tc = classlist_[textclass];
+       TextClass tmpl(tc.name(), tc.latexname(), tc.description(), 
+                      tc.isTeXClassAvailable());
+       classlist_[textclass] = tmpl;
+}
+
+
 std::pair<bool, textclass_type> const
 TextClassList::addTextClass(std::string const & textclass, std::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
        FileName const layout_file(addName(path, textclass + ".layout"));
-       if (fs::exists(layout_file.toFilesystemEncoding())) {
+       if (layout_file.exists()) {
                LYXERR(Debug::TCLASS) << "Adding class " << textclass << " from directory " << path << endl;
                // Read .layout file and get description, real latex classname etc
                //
@@ -199,7 +211,7 @@ TextClassList::addTextClass(std::string const & textclass, std::string const & p
                                // returns: whole string, classtype (not used here), first option, description
                                BOOST_ASSERT(sub.size()==4);
                                // now, add the layout to textclass.
-                               TextClass tmpl(textclass, sub.str(2)==""?textclass:sub.str(2), 
+                               TextClass tmpl(textclass, sub.str(2)==""?textclass:sub.str(2),
                                        sub.str(3) + " <" + path + ">", true);
                                if (lyxerr.debugging(Debug::TCLASS))
                                        tmpl.load(path);
@@ -211,12 +223,23 @@ TextClassList::addTextClass(std::string const & textclass, std::string const & p
        // If .layout is not in local directory, or an invalid layout is found, return false
        return make_pair(false, textclass_type(0));
 }
-       
+
 
 // Global variable: textclass table.
 TextClassList textclasslist;
 
 
+textclass_type defaultTextclass()
+{
+       // We want to return the article class. if `first' is
+       // true in the returned pair, then `second' is the textclass
+       // number; if it is false, second is 0. In both cases, second
+       // is what we want.
+       return textclasslist.numberOfClass("article").second;
+}
+
+
+
 // Reads the style files
 bool LyXSetStyle()
 {