#include "support/lstrings.h"
#include "support/lyxlib.h"
#include "support/filetools.h"
+#include "support/os.h"
+
+#include <boost/filesystem/operations.hpp>
+namespace fs = boost::filesystem;
#include <sstream>
-using lyx::support::LibFileSearch;
-using lyx::support::MakeDisplayPath;
-using lyx::support::QuoteName;
+using lyx::support::libFileSearch;
+using lyx::support::makeDisplayPath;
+using lyx::support::quoteName;
using lyx::support::rtrim;
using lyx::support::subst;
+using lyx::support::addName;
using std::endl;
using std::find_if;
bool layout2layout(string const & filename, string const & tempfile)
{
- string const script = LibFileSearch("scripts", "layout2layout.py");
+ string const script = libFileSearch("scripts", "layout2layout.py");
if (script.empty()) {
lyxerr << "Could not find layout conversion "
- "script layout2layout.py." << endl;
+ "script layout2layout.py." << endl;
return false;
}
std::ostringstream command;
- command << "python " << QuoteName(script)
- << ' ' << QuoteName(filename)
- << ' ' << QuoteName(tempfile);
+ command << lyx::support::os::python() << ' ' << quoteName(script)
+ << ' ' << quoteName(filename)
+ << ' ' << quoteName(tempfile);
string const command_str = command.str();
lyxerr[Debug::TCLASS] << "Running `" << command_str << '\'' << endl;
lyx::support::cmd_ret const ret =
- lyx::support::RunCommand(command_str);
+ lyx::support::runCommand(command_str);
if (ret.first != 0) {
lyxerr << "Could not run layout conversion "
- "script layout2layout.py." << endl;
+ "script layout2layout.py." << endl;
return false;
}
return true;
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());
// 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)) {
+ if (!lyx::support::isFileReadable(filename)) {
lyxerr << "Cannot read layout file `" << filename << "'."
<< endl;
return true;
if (!merge)
lyxerr[Debug::TCLASS] << "Reading textclass "
- << MakeDisplayPath(filename)
+ << makeDisplayPath(filename)
<< endl;
else
lyxerr[Debug::TCLASS] << "Reading input file "
- << MakeDisplayPath(filename)
+ << makeDisplayPath(filename)
<< endl;
LyXLex lexrc(textClassTags,
case TC_INPUT: // Include file
if (lexrc.next()) {
- string tmp = LibFileSearch("layouts",
+ string tmp = libFileSearch("layouts",
lexrc.getString(),
"layout");
- if (Read(tmp, true)) {
+ if (read(tmp, true)) {
lexrc.printError("Error reading input"
"file: "+tmp);
error = true;
lay.setName(name);
if (le == TC_ENVIRONMENT)
lay.is_environment = true;
- if (!(error = do_readStyle(lexrc, lay)))
+ error = do_readStyle(lexrc, lay);
+ if (!error)
layoutlist_.push_back(
boost::shared_ptr<LyXLayout>(new LyXLayout(lay))
);
if (format != FORMAT) {
lyxerr[Debug::TCLASS] << "Converting layout file from format "
- << format << " to " << FORMAT << endl;
+ << format << " to " << FORMAT << endl;
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;
}
if (!merge) { // we are at top level here.
lyxerr[Debug::TCLASS] << "Finished reading textclass "
- << MakeDisplayPath(filename)
+ << makeDisplayPath(filename)
<< endl;
if (defaultlayout_.empty()) {
lyxerr << "Error: Textclass '" << name_
} else
lyxerr[Debug::TCLASS] << "Finished reading input file "
- << MakeDisplayPath(filename)
+ << makeDisplayPath(filename)
<< endl;
return error;
keyword_item outputTypeTags[] = {
{ "docbook", DOCBOOK },
{ "latex", LATEX },
- { "linuxdoc", LINUXDOC },
{ "literate", LITERATE }
};
lexrc.printError("Unknown output type `$$Token'");
return;
case LATEX:
- case LINUXDOC:
case DOCBOOK:
case LITERATE:
outputType_ = static_cast<OutputType>(le);
<< "' in the layout list. You MUST investigate!"
<< endl;
for (LayoutList::const_iterator it = layoutlist_.begin();
- it != layoutlist_.end(); ++it)
+ it != layoutlist_.end(); ++it)
lyxerr << " " << it->get()->name() << endl;
// we require the name to exist
// 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, provided path is searched before the system ones
+ string layout_file;
+ if (!path.empty())
+ layout_file = addName(path, name_ + ".layout");
+ if (layout_file.empty() || !fs::exists(layout_file))
+ layout_file = libFileSearch("layouts", name_, "layout");
+ loaded_ = const_cast<LyXTextClass*>(this)->read(layout_file) == 0;
if (!loaded_) {
lyxerr << "Error reading `"
- << MakeDisplayPath(real_file)
+ << makeDisplayPath(layout_file)
<< "'\n(Check `" << name_
<< "')\nCheck your installation and "
"try Options/Reconfigure..." << endl;
}
+bool LyXTextClass::hasTocLevels() const
+{
+ return min_toclevel_ != LyXLayout::NOT_IN_TOC;
+}
+
+
ostream & operator<<(ostream & os, LyXTextClass::PageSides p)
{
switch (p) {