]> git.lyx.org Git - lyx.git/blobdiff - src/TextClass.cpp
Fix the rest of bug 5010.
[lyx.git] / src / TextClass.cpp
index f7da2d11f2876a96e94dccb6753472e75f46f81a..ff70eeaf03c072474281b1d471f27ccae875ad41 100644 (file)
@@ -27,6 +27,7 @@
 
 #include "frontends/alert.h"
 
+#include "support/lassert.h"
 #include "support/debug.h"
 #include "support/ExceptionMessage.h"
 #include "support/FileName.h"
@@ -39,8 +40,6 @@
 #include <fstream>
 #include <sstream>
 
-#include "boost/assert.hpp"
-
 using namespace std;
 using namespace lyx::support;
 
@@ -69,8 +68,8 @@ bool layout2layout(FileName const & filename, FileName const & tempfile)
 {
        FileName const script = libFileSearch("scripts", "layout2layout.py");
        if (script.empty()) {
-               lyxerr << "Could not find layout conversion "
-                         "script layout2layout.py." << endl;
+               LYXERR0("Could not find layout conversion "
+                         "script layout2layout.py.");
                return false;
        }
 
@@ -82,11 +81,9 @@ bool layout2layout(FileName const & filename, FileName const & tempfile)
 
        LYXERR(Debug::TCLASS, "Running `" << command_str << '\'');
 
-       cmd_ret const ret =
-               runCommand(command_str);
+       cmd_ret const ret = runCommand(command_str);
        if (ret.first != 0) {
-               lyxerr << "Could not run layout conversion "
-                         "script layout2layout.py." << endl;
+               LYXERR0("Could not run layout conversion script layout2layout.py.");
                return false;
        }
        return true;
@@ -112,12 +109,20 @@ std::string translateRT(TextClass::ReadType rt)
 } // namespace anon
 
 
-docstring const TextClass::emptylayout_ = from_ascii(N_("Plain Layout"));
+// This string should not be translated here, 
+// because it is a layout identifier.
+docstring const TextClass::emptylayout_ = from_ascii("Plain Layout");
 
 
 InsetLayout DocumentClass::empty_insetlayout_;
 
 
+/////////////////////////////////////////////////////////////////////////
+//
+// TextClass
+//
+/////////////////////////////////////////////////////////////////////////
+
 TextClass::TextClass()
 {
        outputType_ = LATEX;
@@ -132,6 +137,7 @@ TextClass::TextClass()
        titletype_ = TITLE_COMMAND_AFTER;
        titlename_ = "maketitle";
        loaded_ = false;
+       _("Plain Layout"); // a hack to make this translatable
 }
 
 
@@ -139,7 +145,7 @@ bool TextClass::readStyle(Lexer & lexrc, Layout & lay)
 {
        LYXERR(Debug::TCLASS, "Reading style " << to_utf8(lay.name()));
        if (!lay.read(lexrc, *this)) {
-               lyxerr << "Error parsing style `" << to_utf8(lay.name()) << '\'' << endl;
+               LYXERR0("Error parsing style `" << to_utf8(lay.name()) << '\'');
                return false;
        }
        // Resolve fonts
@@ -157,7 +163,6 @@ enum TextClassTags {
        TC_STYLE,
        TC_DEFAULTSTYLE,
        TC_INSETLAYOUT,
-       TC_ENVIRONMENT,
        TC_NOSTYLE,
        TC_COLUMNS,
        TC_SIDES,
@@ -190,7 +195,6 @@ namespace {
                { "counter",         TC_COUNTER },
                { "defaultfont",     TC_DEFAULTFONT },
                { "defaultstyle",    TC_DEFAULTSTYLE },
-               { "environment",     TC_ENVIRONMENT },
                { "float",           TC_FLOAT },
                { "format",          TC_FORMAT },
                { "input",           TC_INPUT },
@@ -256,7 +260,7 @@ bool TextClass::read(FileName const & filename, ReadType rt)
                if (!readStyle(lex, lay)) {
                        // The only way this happens is because the hardcoded layout above
                        // is wrong.
-                       BOOST_ASSERT(false);
+                       LASSERT(false, /**/);
                };
                layoutlist_.push_back(lay);
        }
@@ -302,8 +306,7 @@ bool TextClass::read(std::string const & str, ReadType rt)
        FileName const tempfile = FileName::tempName();
        ofstream os(tempfile.toFilesystemEncoding().c_str());
        if (!os) {
-               lyxerr << "Unable to create tempoary file in TextClass::read!!" 
-                       << std::endl;
+               LYXERR0("Unable to create tempoary file");
                return false;
        }
        os << str;
@@ -312,8 +315,8 @@ bool TextClass::read(std::string const & str, ReadType rt)
        // now try to convert it
        bool const worx = convertLayoutFormat(tempfile, rt);
        if (!worx) {
-               lyxerr << "Unable to convert internal layout information to format " 
-                       << FORMAT << std::endl;
+               LYXERR0("Unable to convert internal layout information to format " 
+                       << FORMAT);
        }
        tempfile.removeFile();
        return worx;
@@ -381,7 +384,6 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                        }
                        break;
 
-               case TC_ENVIRONMENT:
                case TC_STYLE:
                        if (lexrc.next()) {
                                docstring const name = from_utf8(subst(lexrc.getString(),
@@ -398,13 +400,11 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                                        Layout & lay = operator[](name);
                                        error = !readStyle(lexrc, lay);
                                } else {
-                                       Layout lay;
-                                       lay.setName(name);
-                                       if (le == TC_ENVIRONMENT)
-                                               lay.is_environment = true;
-                                       error = !readStyle(lexrc, lay);
+                                       Layout layout;
+                                       layout.setName(name);
+                                       error = !readStyle(lexrc, layout);
                                        if (!error)
-                                               layoutlist_.push_back(lay);
+                                               layoutlist_.push_back(layout);
 
                                        if (defaultlayout_.empty()) {
                                                // We do not have a default layout yet, so we choose
@@ -415,8 +415,8 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                        }
                        else {
                                //FIXME Should we also eat the style here? viz:
-                               //Layout lay;
-                               //readStyle(lexrc, lay);
+                               //Layout layout;
+                               //readStyle(lexrc, layout);
                                //as above...
                                lexrc.printError("No name given for style: `$$Token'.");
                                error = true;
@@ -522,9 +522,8 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                case TC_INSETLAYOUT:
                        if (lexrc.next()) {
                                InsetLayout il;
-                               if (il.read(lexrc)) {
+                               if (il.read(lexrc))
                                        insetlayoutlist_[il.name()] = il;
-                               }
                                // else there was an error, so forget it
                        }
                        break;
@@ -567,21 +566,21 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                return (error ? ERROR : OK);
 
        if (defaultlayout_.empty()) {
-               lyxerr << "Error: Textclass '" << name_
-                                               << "' is missing a defaultstyle." << endl;
+               LYXERR0("Error: Textclass '" << name_
+                                               << "' is missing a defaultstyle.");
                error = true;
        }
                
-       //Try to erase "stdinsets" from the provides_ set. 
-       //The
-       //  Provides stdinsets 1
-       //declaration simply tells us that the standard insets have been
-       //defined. (It's found in stdinsets.inc but could also be used in
-       //user-defined files.) There isn't really any such package. So we
-       //might as well go ahead and erase it.
-       //If we do not succeed, then it was not there, which means that
-       //the textclass did not provide the definitions of the standard
-       //insets. So we need to try to load them.
+       // Try to erase "stdinsets" from the provides_ set. 
+       // The
+       //   Provides stdinsets 1
+       // declaration simply tells us that the standard insets have been
+       // defined. (It's found in stdinsets.inc but could also be used in
+       // user-defined files.) There isn't really any such package. So we
+       // might as well go ahead and erase it.
+       // If we do not succeed, then it was not there, which means that
+       // the textclass did not provide the definitions of the standard
+       // insets. So we need to try to load them.
        int erased = provides_.erase("stdinsets");
        if (!erased) {
                FileName tmp = libFileSearch("layouts", "stdinsets.inc");
@@ -631,15 +630,13 @@ void TextClass::readTitleType(Lexer & lexrc)
        switch (le) {
        case Lexer::LEX_UNDEF:
                lexrc.printError("Unknown output type `$$Token'");
-               return;
+               break;
        case TITLE_COMMAND_AFTER:
        case TITLE_ENVIRONMENT:
                titletype_ = static_cast<TitleLatexType>(le);
                break;
        default:
-               lyxerr << "Unhandled value " << le
-                      << " in TextClass::readTitleType." << endl;
-
+               LYXERR0("Unhandled value " << le << " in TextClass::readTitleType.");
                break;
        }
 }
@@ -666,9 +663,7 @@ void TextClass::readOutputType(Lexer & lexrc)
                outputType_ = static_cast<OutputType>(le);
                break;
        default:
-               lyxerr << "Unhandled value " << le
-                      << " in TextClass::readOutputType." << endl;
-
+               LYXERR0("Unhandled value " << le);
                break;
        }
 }
@@ -929,7 +924,7 @@ bool TextClass::hasLayout(docstring const & n) const
 
 Layout const & TextClass::operator[](docstring const & name) const
 {
-       BOOST_ASSERT(!name.empty());
+       LASSERT(!name.empty(), /**/);
 
        const_iterator it = 
                find_if(begin(), end(), LayoutNamesEqual(name));
@@ -942,7 +937,7 @@ Layout const & TextClass::operator[](docstring const & name) const
                        lyxerr  << " " << to_utf8(cit->name()) << endl;
 
                // we require the name to exist
-               BOOST_ASSERT(false);
+               LASSERT(false, /**/);
        }
 
        return *it;
@@ -951,19 +946,18 @@ Layout const & TextClass::operator[](docstring const & name) const
 
 Layout & TextClass::operator[](docstring const & name)
 {
-       BOOST_ASSERT(!name.empty());
+       LASSERT(!name.empty(), /**/);
 
        iterator it = find_if(begin(), end(), LayoutNamesEqual(name));
 
        if (it == end()) {
-               lyxerr << "We failed to find the layout '" << to_utf8(name)
-                      << "' in the layout list. You MUST investigate!"
-                      << endl;
+               LYXERR0("We failed to find the layout '" << to_utf8(name)
+                      << "' in the layout list. You MUST investigate!");
                for (const_iterator cit = begin(); cit != end(); ++cit)
-                       lyxerr  << " " << to_utf8(cit->name()) << endl;
+                       LYXERR0(" " << to_utf8(cit->name()));
 
                // we require the name to exist
-               BOOST_ASSERT(false);
+               LASSERT(false, /**/);
        }
 
        return *it;
@@ -1042,23 +1036,36 @@ Layout const & TextClass::defaultLayout() const
 }
 
 
-bool TextClass::isDefaultLayout(Layout const & lay) const 
+bool TextClass::isDefaultLayout(Layout const & layout) const 
 {
-       return lay.name() == defaultLayoutName();
+       return layout.name() == defaultLayoutName();
 }
 
 
-bool TextClass::isEmptyLayout(Layout const & lay) const 
+bool TextClass::isEmptyLayout(Layout const & layout) const 
 {
-       return lay.name() == emptyLayoutName();
+       return layout.name() == emptyLayoutName();
 }
 
 
+/////////////////////////////////////////////////////////////////////////
+//
+// DocumentClassBundle
+//
+/////////////////////////////////////////////////////////////////////////
+
+DocumentClassBundle::~DocumentClassBundle()
+{
+       for (size_t i = 0; i != documentClasses_.size(); ++i)
+               delete documentClasses_[i];
+       documentClasses_.clear();
+}
+
 DocumentClass & DocumentClassBundle::newClass(LayoutFile const & baseClass)
 {
        DocumentClass * dc = new DocumentClass(baseClass);
-       tc_list_.push_back(dc);
-       return *tc_list_.back();
+       documentClasses_.push_back(dc);
+       return *documentClasses_.back();
 }
 
 
@@ -1069,6 +1076,12 @@ DocumentClassBundle & DocumentClassBundle::get()
 }
 
 
+/////////////////////////////////////////////////////////////////////////
+//
+// DocumentClass
+//
+/////////////////////////////////////////////////////////////////////////
+
 DocumentClass::DocumentClass(LayoutFile const & tc)
        : TextClass(tc)
 {}
@@ -1097,6 +1110,12 @@ bool DocumentClass::hasTocLevels() const
 }
 
 
+/////////////////////////////////////////////////////////////////////////
+//
+// PageSides
+//
+/////////////////////////////////////////////////////////////////////////
+
 ostream & operator<<(ostream & os, PageSides p)
 {
        switch (p) {