]> git.lyx.org Git - lyx.git/blobdiff - src/TextClass.cpp
cleanup and reorder initialisation code of GuiView and GuiToolbars. Move some things...
[lyx.git] / src / TextClass.cpp
index 8fb11fe2ac8bcb1e3e25f8632e2142be5b946abe..58dca7a152ea4ce871cd602191b6f247ac4ea1da 100644 (file)
@@ -50,7 +50,7 @@ using support::rtrim;
 using support::subst;
 using support::addName;
 
-extern FontInfo lyxRead(Lexer &);
+extern FontInfo lyxRead(Lexer &, FontInfo const & fi = sane_font);
 
 namespace {
 
@@ -86,7 +86,7 @@ bool layout2layout(FileName const & filename, FileName const & tempfile)
                << ' ' << quoteName(tempfile.toFilesystemEncoding());
        string const command_str = command.str();
 
-       LYXERR(Debug::TCLASS) << "Running `" << command_str << '\'' << endl;
+       LYXERR(Debug::TCLASS, "Running `" << command_str << '\'');
 
        support::cmd_ret const ret =
                support::runCommand(command_str);
@@ -129,9 +129,9 @@ bool TextClass::isTeXClassAvailable() const
 }
 
 
-bool TextClass::do_readStyle(Lexer & lexrc, Layout & lay)
+bool TextClass::readStyle(Lexer & lexrc, Layout & lay)
 {
-       LYXERR(Debug::TCLASS) << "Reading style " << to_utf8(lay.name()) << endl;
+       LYXERR(Debug::TCLASS, "Reading style " << to_utf8(lay.name()));
        if (!lay.read(lexrc, *this)) {
                // Resolve fonts
                lay.resfont = lay.font;
@@ -211,19 +211,18 @@ bool TextClass::read(FileName const & filename, ReadType rt)
 
        switch (rt) {
        case BASECLASS:
-               LYXERR(Debug::TCLASS) << "Reading textclass ";
+               LYXERR(Debug::TCLASS, "Reading textclass ");
                break;
        case MERGE:
-               LYXERR(Debug::TCLASS) << "Reading input file ";
+               LYXERR(Debug::TCLASS, "Reading input file ");
          break;
        case MODULE:
-               LYXERR(Debug::TCLASS) << "Reading module file ";
+               LYXERR(Debug::TCLASS, "Reading module file ");
                break;
        default:
                BOOST_ASSERT(false);
        }
-       LYXERR(Debug::TCLASS) << to_utf8(makeDisplayPath(filename.absFilename()))
-               << endl;
+       LYXERR(Debug::TCLASS, to_utf8(makeDisplayPath(filename.absFilename())));
 
        Lexer lexrc(textClassTags,
                sizeof(textClassTags) / sizeof(textClassTags[0]));
@@ -298,16 +297,16 @@ bool TextClass::read(FileName const & filename, ReadType rt)
                                                + lexrc.getString() + " is probably not valid UTF-8!";
                                        lexrc.printError(s.c_str());
                                        Layout lay;
-                                       error = do_readStyle(lexrc, lay);
+                                       error = readStyle(lexrc, lay);
                                } else if (hasLayout(name)) {
                                        Layout * lay = operator[](name).get();
-                                       error = do_readStyle(lexrc, *lay);
+                                       error = readStyle(lexrc, *lay);
                                } else {
                                        Layout lay;
                                        lay.setName(name);
                                        if (le == TC_ENVIRONMENT)
                                                lay.is_environment = true;
-                                       error = do_readStyle(lexrc, lay);
+                                       error = readStyle(lexrc, lay);
                                        if (!error)
                                                layoutlist_.push_back(
                                                        boost::shared_ptr<Layout>(new Layout(lay))
@@ -332,7 +331,7 @@ bool TextClass::read(FileName const & filename, ReadType rt)
                        if (lexrc.next()) {
                                docstring const style = from_utf8(subst(lexrc.getString(),
                                                     '_', ' '));
-                               if (!delete_layout(style))
+                               if (!deleteLayout(style))
                                        lyxerr << "Cannot delete style `"
                                               << to_utf8(style) << '\'' << endl;
 //                                     lexrc.printError("Cannot delete style"
@@ -444,8 +443,8 @@ bool TextClass::read(FileName const & filename, ReadType rt)
        }
 
        if (format != FORMAT) {
-               LYXERR(Debug::TCLASS) << "Converting layout file from format "
-                                     << format << " to " << FORMAT << endl;
+               LYXERR(Debug::TCLASS, "Converting layout file from format "
+                                     << format << " to " << FORMAT);
                FileName const tempfile(support::tempName());
                error = !layout2layout(filename, tempfile);
                if (!error)
@@ -455,17 +454,14 @@ bool TextClass::read(FileName const & filename, ReadType rt)
        }
 
        if (rt == MODULE) 
-               LYXERR(Debug::TCLASS) << "Finished reading module file "
-                               << to_utf8(makeDisplayPath(filename.absFilename()))
-                               << endl;
+               LYXERR(Debug::TCLASS, "Finished reading module file "
+                               << to_utf8(makeDisplayPath(filename.absFilename())));
        else if (rt == MERGE)
-               LYXERR(Debug::TCLASS) << "Finished reading input file "
-                               << to_utf8(makeDisplayPath(filename.absFilename()))
-                               << endl;
+               LYXERR(Debug::TCLASS, "Finished reading input file "
+                               << to_utf8(makeDisplayPath(filename.absFilename())));
        else { // we are at top level here.
-               LYXERR(Debug::TCLASS) << "Finished reading textclass "
-                                     << to_utf8(makeDisplayPath(filename.absFilename()))
-                                     << endl;
+               LYXERR(Debug::TCLASS, "Finished reading textclass "
+                                     << to_utf8(makeDisplayPath(filename.absFilename())));
                if (defaultlayout_.empty()) {
                        lyxerr << "Error: Textclass '" << name_
                               << "' is missing a defaultstyle." << endl;
@@ -488,9 +484,8 @@ bool TextClass::read(FileName const & filename, ReadType rt)
                                                         toclevel);
                        }
                }
-               LYXERR(Debug::TCLASS)
-                       << "Minimum TocLevel is " << min_toclevel_
-                       << ", maximum is " << max_toclevel_ <<endl;
+               LYXERR(Debug::TCLASS, "Minimum TocLevel is " << min_toclevel_
+                       << ", maximum is " << max_toclevel_);
 
        }
 
@@ -614,6 +609,7 @@ enum InsetLayoutTags {
        IL_BGCOLOR,
        IL_DECORATION,
        IL_FREESPACING,
+       IL_FORCELTR,
        IL_LABELFONT,
        IL_LABELSTRING,
        IL_LATEXNAME,
@@ -636,6 +632,7 @@ void TextClass::readInsetLayout(Lexer & lexrc, docstring const & name)
                { "decoration", IL_DECORATION },
                { "end", IL_END },
                { "font", IL_FONT },
+               { "forceltr", IL_FORCELTR },
                { "freespacing", IL_FREESPACING },
                { "keepempty", IL_KEEPEMPTY },
                { "labelfont", IL_LABELFONT },
@@ -658,15 +655,16 @@ void TextClass::readInsetLayout(Lexer & lexrc, docstring const & name)
        string decoration;
        string latexname;
        string latexparam;
-       FontInfo font(defaultfont());
-       FontInfo labelfont(defaultfont());
+       FontInfo font = inherit_font;
+       FontInfo labelfont = inherit_font;
        ColorCode bgcolor(Color_background);
        string preamble;
-       bool multipar(false);
-       bool passthru(false);
-       bool needprotect(false);
-       bool keepempty(false);
-       bool freespacing(false);
+       bool multipar = false;
+       bool passthru = false;
+       bool needprotect = false;
+       bool keepempty = false;
+       bool freespacing = false;
+       bool forceltr = false;
 
        bool getout = false;
        while (!getout && lexrc.isOK()) {
@@ -703,8 +701,11 @@ void TextClass::readInsetLayout(Lexer & lexrc, docstring const & name)
                        latexparam = subst(lexrc.getString(), "&quot;", "\"");
                        break;
                case IL_LABELFONT:
-                       labelfont = lyxRead(lexrc);
-                       labelfont.realize(defaultfont());
+                       labelfont = lyxRead(lexrc, inherit_font);
+                       break;
+               case IL_FORCELTR:
+                       lexrc.next();
+                       forceltr = lexrc.getBool();
                        break;
                case IL_MULTIPAR:
                        lexrc.next();
@@ -727,8 +728,7 @@ void TextClass::readInsetLayout(Lexer & lexrc, docstring const & name)
                        needprotect = lexrc.getBool();
                        break;
                case IL_FONT:
-                       font = lyxRead(lexrc);
-                       font.realize(defaultfont());
+                       font = lyxRead(lexrc, inherit_font);
                        // So: define font before labelfont
                        labelfont = font;
                        break;
@@ -747,7 +747,6 @@ void TextClass::readInsetLayout(Lexer & lexrc, docstring const & name)
                }
        }
 
-       //
        // Here add element to list if getout == true
        if (getout) {
                InsetLayout il;
@@ -762,8 +761,12 @@ void TextClass::readInsetLayout(Lexer & lexrc, docstring const & name)
                il.passthru = passthru;
                il.needprotect = needprotect;
                il.freespacing = freespacing;
+               il.forceltr = forceltr;
                il.keepempty = keepempty;
                il.font = font;
+               // The label font is generally used as-is without
+               // any realization against a given context.
+               labelfont.realize(sane_font);
                il.labelfont = labelfont;
                il.bgcolor = bgcolor;           
                il.preamble = preamble;
@@ -895,6 +898,7 @@ enum CounterTags {
        CT_END
 };
 
+
 void TextClass::readCounter(Lexer & lexrc)
 {
        keyword_item counterTags[] = {
@@ -926,13 +930,9 @@ void TextClass::readCounter(Lexer & lexrc)
                        lexrc.next();
                        name = lexrc.getDocString();
                        if (counters_->hasCounter(name))
-                               LYXERR(Debug::TCLASS) 
-                                       << "Reading existing counter " 
-                                       << to_utf8(name) << endl;
+                               LYXERR(Debug::TCLASS, "Reading existing counter " << to_utf8(name));
                        else
-                               LYXERR(Debug::TCLASS) 
-                                       << "Reading new counter " 
-                                       << to_utf8(name) << endl;
+                               LYXERR(Debug::TCLASS, "Reading new counter " << to_utf8(name));
                        break;
                case CT_WITHIN:
                        lexrc.next();
@@ -1014,12 +1014,11 @@ LayoutPtr const & TextClass::operator[](docstring const & name) const
                BOOST_ASSERT(false);
        }
 
-       return (*cit);
+       return *cit;
 }
 
 
-
-bool TextClass::delete_layout(docstring const & name)
+bool TextClass::deleteLayout(docstring const & name)
 {
        if (name == defaultLayoutName())
                return false;
@@ -1099,6 +1098,8 @@ InsetLayout const & TextClass::insetlayout(docstring const & name) const
        }
        static InsetLayout empty;
        empty.labelstring = from_utf8("UNDEFINED");
+       empty.labelfont = sane_font;
+       empty.labelfont.setColor(Color_error);
        empty.bgcolor = Color_error;
        return empty;
 }
@@ -1172,7 +1173,7 @@ docstring const & TextClass::preamble() const
 }
 
 
-TextClass::PageSides TextClass::sides() const
+PageSides TextClass::sides() const
 {
        return sides_;
 }
@@ -1244,13 +1245,13 @@ bool TextClass::hasTocLevels() const
 }
 
 
-ostream & operator<<(ostream & os, TextClass::PageSides p)
+ostream & operator<<(ostream & os, PageSides p)
 {
        switch (p) {
-       case TextClass::OneSide:
+       case OneSide:
                os << '1';
                break;
-       case TextClass::TwoSides:
+       case TwoSides:
                os << '2';
                break;
        }