#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;
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];
}
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;
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;
}
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
//
// 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);
// 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;