]> git.lyx.org Git - lyx.git/blobdiff - src/TextClass.cpp
Push latest Andre's changes toward their true direction:
[lyx.git] / src / TextClass.cpp
index 87a4f817139b37324733c8f709bf9c7bdec6630b..f1b1df7eaab855ac78b1d13843d9f45479f23ac1 100644 (file)
 #include <config.h>
 
 #include "TextClass.h"
-#include "debug.h"
-#include "Layout.h"
-#include "Lexer.h"
+
+#include "Color.h"
 #include "Counters.h"
+#include "debug.h"
 #include "gettext.h"
 #include "Floating.h"
 #include "FloatList.h"
+#include "Layout.h"
+#include "Lexer.h"
 
 #include "frontends/alert.h"
 
 
 #include <sstream>
 
+using std::endl;
+using std::find_if;
+using std::remove_if;
+using std::string;
+using std::ostream;
+
 namespace lyx {
 
 using support::FileName;
@@ -42,12 +50,7 @@ using support::rtrim;
 using support::subst;
 using support::addName;
 
-using std::endl;
-using std::find_if;
-using std::remove_if;
-using std::string;
-using std::ostream;
-
+extern FontInfo lyxRead(Lexer &, FontInfo const & fi = sane_font);
 
 namespace {
 
@@ -111,7 +114,7 @@ TextClass::TextClass(string const & fn, string const & cln,
        secnumdepth_ = 3;
        tocdepth_ = 3;
        pagestyle_ = "default";
-       defaultfont_ = Font(Font::ALL_SANE);
+       defaultfont_ = sane_font;
        opt_fontsize_ = "10|11|12";
        opt_pagestyle_ = "empty|plain|headings|fancy";
        titletype_ = TITLE_COMMAND_AFTER;
@@ -126,7 +129,7 @@ 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;
        if (!lay.read(lexrc, *this)) {
@@ -295,16 +298,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))
@@ -329,7 +332,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"
@@ -363,11 +366,11 @@ bool TextClass::read(FileName const & filename, ReadType rt)
                        break;
 
                case TC_DEFAULTFONT:
-                       defaultfont_.lyxRead(lexrc);
+                       defaultfont_ = lyxRead(lexrc);
                        if (!defaultfont_.resolved()) {
                                lexrc.printError("Warning: defaultfont should "
                                                 "be fully instantiated!");
-                               defaultfont_.realize(Font(Font::ALL_SANE));
+                               defaultfont_.realize(sane_font);
                        }
                        break;
 
@@ -610,13 +613,18 @@ enum InsetLayoutTags {
        IL_FONT = 1,
        IL_BGCOLOR,
        IL_DECORATION,
+       IL_FREESPACING,
+       IL_FORCELTR,
        IL_LABELFONT,
        IL_LABELSTRING,
        IL_LATEXNAME,
        IL_LATEXPARAM,
        IL_LATEXTYPE,
        IL_LYXTYPE,
+       IL_KEEPEMPTY,
        IL_MULTIPAR,
+       IL_NEEDPROTECT,
+       IL_PASSTHRU,
        IL_PREAMBLE,
        IL_END
 };
@@ -629,6 +637,9 @@ 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 },
                { "labelstring", IL_LABELSTRING },
                { "latexname", IL_LATEXNAME },
@@ -636,6 +647,8 @@ void TextClass::readInsetLayout(Lexer & lexrc, docstring const & name)
                { "latextype", IL_LATEXTYPE },
                { "lyxtype", IL_LYXTYPE },
                { "multipar", IL_MULTIPAR },
+               { "needprotect", IL_NEEDPROTECT },
+               { "passthru", IL_PASSTHRU },
                { "preamble", IL_PREAMBLE }
        };
 
@@ -647,11 +660,16 @@ void TextClass::readInsetLayout(Lexer & lexrc, docstring const & name)
        string decoration;
        string latexname;
        string latexparam;
-       Font font(defaultfont());
-       Font labelfont(defaultfont());
-       Color::color bgcolor(Color::background);
+       FontInfo font = inherit_font;
+       FontInfo labelfont = inherit_font;
+       ColorCode bgcolor(Color_background);
        string preamble;
-       bool multipar(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()) {
@@ -688,16 +706,34 @@ 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();
                        multipar = lexrc.getBool();
                        break;
+               case IL_PASSTHRU:
+                       lexrc.next();
+                       passthru = lexrc.getBool();
+                       break;
+               case IL_KEEPEMPTY:
+                       lexrc.next();
+                       keepempty = lexrc.getBool();
+                       break;
+               case IL_FREESPACING:
+                       lexrc.next();
+                       freespacing = lexrc.getBool();
+                       break;
+               case IL_NEEDPROTECT:
+                       lexrc.next();
+                       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;
@@ -716,7 +752,6 @@ void TextClass::readInsetLayout(Lexer & lexrc, docstring const & name)
                }
        }
 
-       //
        // Here add element to list if getout == true
        if (getout) {
                InsetLayout il;
@@ -728,7 +763,15 @@ void TextClass::readInsetLayout(Lexer & lexrc, docstring const & name)
                il.latexname = latexname;
                il.latexparam = latexparam;
                il.multipar = multipar;
+               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;
@@ -929,7 +972,7 @@ void TextClass::readCounter(Lexer & lexrc)
 }
 
 
-Font const & TextClass::defaultfont() const
+FontInfo const & TextClass::defaultfont() const
 {
        return defaultfont_;
 }
@@ -979,12 +1022,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;
@@ -1064,7 +1106,9 @@ InsetLayout const & TextClass::insetlayout(docstring const & name) const
        }
        static InsetLayout empty;
        empty.labelstring = from_utf8("UNDEFINED");
-       empty.bgcolor = Color::error;
+       empty.labelfont = sane_font;
+       empty.labelfont.setColor(Color_error);
+       empty.bgcolor = Color_error;
        return empty;
 }
 
@@ -1137,7 +1181,7 @@ docstring const & TextClass::preamble() const
 }
 
 
-TextClass::PageSides TextClass::sides() const
+PageSides TextClass::sides() const
 {
        return sides_;
 }
@@ -1209,13 +1253,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;
        }