]> git.lyx.org Git - lyx.git/blobdiff - src/TextClass.cpp
PrefShortcuts: list all shortcuts (bound and unbound), using a better implementation
[lyx.git] / src / TextClass.cpp
index 3e6b75fa83d0d1a2827f9a5c9cd9b6b5449f3ccc..eb71d7380b1bd950533f8feb2cedb682e949d671 100644 (file)
@@ -16,6 +16,7 @@
 
 #include "TextClass.h"
 #include "debug.h"
+#include "Layout.h"
 #include "Lexer.h"
 #include "Counters.h"
 #include "gettext.h"
 #include "support/os.h"
 
 #include <boost/filesystem/operations.hpp>
-namespace fs = boost::filesystem;
 
 #include <sstream>
 
+namespace fs = boost::filesystem;
 
 namespace lyx {
 
@@ -107,6 +108,7 @@ TextClass::TextClass(string const & fn, string const & cln,
          floatlist_(new FloatList), counters_(new Counters),
          texClassAvail_(texClassAvail)
 {
+       modular_ = false;
        outputType_ = LATEX;
        columns_ = 1;
        sides_ = OneSide;
@@ -173,7 +175,7 @@ enum TextClassTags {
 
 
 // Reads a textclass structure from file.
-bool TextClass::read(FileName const & filename, bool merge)
+bool TextClass::read(FileName const & filename, ReadType rt)
 {
        if (!support::isFileReadable(filename)) {
                lyxerr << "Cannot read layout file `" << filename << "'."
@@ -208,14 +210,21 @@ bool TextClass::read(FileName const & filename, bool merge)
                { "tocdepth",        TC_TOCDEPTH }
        };
 
-       if (!merge)
-               LYXERR(Debug::TCLASS) << "Reading textclass "
-                                     << to_utf8(makeDisplayPath(filename.absFilename()))
-                                     << endl;
-       else
-               LYXERR(Debug::TCLASS) << "Reading input file "
-                                     << to_utf8(makeDisplayPath(filename.absFilename()))
-                                     << endl;
+       switch (rt) {
+       case BASECLASS:
+               LYXERR(Debug::TCLASS) << "Reading textclass ";
+               break;
+       case MERGE:
+               LYXERR(Debug::TCLASS) << "Reading input file ";
+         break;
+       case MODULE:
+               LYXERR(Debug::TCLASS) << "Reading module file ";
+               break;
+       default:
+               BOOST_ASSERT(false);
+       }
+       LYXERR(Debug::TCLASS) << to_utf8(makeDisplayPath(filename.absFilename()))
+               << endl;
 
        Lexer lexrc(textClassTags,
                sizeof(textClassTags) / sizeof(textClassTags[0]));
@@ -264,7 +273,7 @@ bool TextClass::read(FileName const & filename, bool merge)
                                        lexrc.printError("Could not find input"
                                                         "file: " + inc);
                                        error = true;
-                               } else if (read(tmp, true)) {
+                               } else if (read(tmp, MERGE)) {
                                        lexrc.printError("Error reading input"
                                                         "file: " + tmp.absFilename());
                                        error = true;
@@ -441,12 +450,20 @@ bool TextClass::read(FileName const & filename, bool merge)
                FileName const tempfile(support::tempName());
                error = !layout2layout(filename, tempfile);
                if (!error)
-                       error = read(tempfile, merge);
+                       error = read(tempfile, rt);
                support::unlink(tempfile);
                return error;
        }
 
-       if (!merge) { // we are at top level here.
+       if (rt == MODULE) 
+               LYXERR(Debug::TCLASS) << "Finished reading module file "
+                               << to_utf8(makeDisplayPath(filename.absFilename()))
+                               << endl;
+       else if (rt == MERGE)
+               LYXERR(Debug::TCLASS) << "Finished reading input file "
+                               << to_utf8(makeDisplayPath(filename.absFilename()))
+                               << endl;
+       else { // we are at top level here.
                LYXERR(Debug::TCLASS) << "Finished reading textclass "
                                      << to_utf8(makeDisplayPath(filename.absFilename()))
                                      << endl;
@@ -476,10 +493,7 @@ bool TextClass::read(FileName const & filename, bool merge)
                        << "Minimum TocLevel is " << min_toclevel_
                        << ", maximum is " << max_toclevel_ <<endl;
 
-       } else
-               LYXERR(Debug::TCLASS) << "Finished reading input file "
-                                     << to_utf8(makeDisplayPath(filename.absFilename()))
-                                     << endl;
+       }
 
        return error;
 }
@@ -501,7 +515,7 @@ void TextClass::readTitleType(Lexer & lexrc)
                return;
        case TITLE_COMMAND_AFTER:
        case TITLE_ENVIRONMENT:
-               titletype_ = static_cast<LYX_TITLE_LATEX_TYPES>(le);
+               titletype_ = static_cast<TitleLatexType>(le);
                break;
        default:
                lyxerr << "Unhandled value " << le
@@ -606,6 +620,7 @@ enum InsetLayoutTags {
        IL_LATEXPARAM,
        IL_LATEXTYPE,
        IL_LYXTYPE,
+       IL_MULTIPAR,
        IL_PREAMBLE,
        IL_END
 };
@@ -624,6 +639,7 @@ void TextClass::readInsetLayout(Lexer & lexrc, docstring const & name)
                { "latexparam", IL_LATEXPARAM },
                { "latextype", IL_LATEXTYPE },
                { "lyxtype", IL_LYXTYPE },
+               { "multipar", IL_MULTIPAR },
                { "preamble", IL_PREAMBLE }
        };
 
@@ -635,10 +651,11 @@ void TextClass::readInsetLayout(Lexer & lexrc, docstring const & name)
        string decoration;
        string latexname;
        string latexparam;
-       Font font(Font::ALL_INHERIT);
-       Font labelfont(Font::ALL_INHERIT);
+       Font font(defaultfont());
+       Font labelfont(defaultfont());
        Color::color bgcolor(Color::background);
        string preamble;
+       bool multipar(false);
 
        bool getout = false;
        while (!getout && lexrc.isOK()) {
@@ -678,9 +695,14 @@ void TextClass::readInsetLayout(Lexer & lexrc, docstring const & name)
                        labelfont.lyxRead(lexrc);
                        labelfont.realize(defaultfont());
                        break;
+               case IL_MULTIPAR:
+                       lexrc.next();
+                       multipar = lexrc.getBool();
+                       break;
                case IL_FONT:
                        font.lyxRead(lexrc);
                        font.realize(defaultfont());
+                       // So: define font before labelfont
                        labelfont = font;
                        break;
                case IL_BGCOLOR: {
@@ -709,6 +731,7 @@ void TextClass::readInsetLayout(Lexer & lexrc, docstring const & name)
                il.latextype = latextype;
                il.latexname = latexname;
                il.latexparam = latexparam;
+               il.multipar = multipar;
                il.font = font;
                il.labelfont = labelfont;
                il.bgcolor = bgcolor;           
@@ -1045,6 +1068,7 @@ InsetLayout const & TextClass::insetlayout(docstring const & name) const
        }
        static InsetLayout empty;
        empty.labelstring = from_utf8("UNDEFINED");
+       empty.bgcolor = Color::error;
        return empty;
 }
 
@@ -1153,7 +1177,7 @@ unsigned int TextClass::columns() const
 }
 
 
-LYX_TITLE_LATEX_TYPES TextClass::titletype() const
+TitleLatexType TextClass::titletype() const
 {
        return titletype_;
 }