]> git.lyx.org Git - lyx.git/blobdiff - src/TextClass.cpp
Cache icons of dynamic menu buttons
[lyx.git] / src / TextClass.cpp
index 80cb6f8e2a314b71a51c22f1457bf7b0a2d03b16..57a9f749626c788b7bd4f664e2622d9b2ee0052d 100644 (file)
@@ -59,7 +59,7 @@ namespace lyx {
 // You should also run the development/tools/updatelayouts.py script,
 // to update the format of all of our layout files.
 //
-int const LAYOUT_FORMAT = 91; // spitz: InputGlobal method
+int const LAYOUT_FORMAT = 93; // tcuvelier: DocBookNoFontInside
 
 
 // Layout format for the current lyx file format. Controls which format is
@@ -171,6 +171,8 @@ enum TextClassTags {
        TC_PROVIDESTYLE,
        TC_DEFAULTSTYLE,
        TC_INSETLAYOUT,
+       TC_MODIFYINSETLAYOUT,
+       TC_PROVIDEINSETLAYOUT,
        TC_NOINSETLAYOUT,
        TC_NOSTYLE,
        TC_COLUMNS,
@@ -254,6 +256,7 @@ LexerKeyword textClassTags[] = {
        { "insetlayout",       TC_INSETLAYOUT },
        { "leftmargin",        TC_LEFTMARGIN },
        { "maxcitenames",      TC_MAXCITENAMES },
+       { "modifyinsetlayout", TC_MODIFYINSETLAYOUT },
        { "modifystyle",       TC_MODIFYSTYLE },
        { "nocounter",         TC_NOCOUNTER },
        { "nofloat",           TC_NOFLOAT },
@@ -266,6 +269,7 @@ LexerKeyword textClassTags[] = {
        { "pagesize",          TC_PAGESIZE },
        { "pagestyle",         TC_PAGESTYLE },
        { "preamble",          TC_PREAMBLE },
+       { "provideinsetlayout", TC_PROVIDEINSETLAYOUT },
        { "provides",          TC_PROVIDES },
        { "providesmodule",    TC_PROVIDESMODULE },
        { "providestyle",      TC_PROVIDESTYLE },
@@ -431,8 +435,8 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                }
 
                // used below to track whether we are in an IfStyle or IfCounter tag.
-               bool modifystyle  = false;
-               bool providestyle = false;
+               bool modify  = false;
+               bool provide = false;
                bool ifcounter    = false;
                bool only_global  = false;
 
@@ -499,13 +503,13 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                        break;
 
                case TC_MODIFYSTYLE:
-                       modifystyle = true;
+                       modify = true;
                // fall through
                case TC_PROVIDESTYLE:
                        // if modifystyle is true, then we got here by falling through
                        // so we are not in an ProvideStyle block
-                       if (!modifystyle)
-                               providestyle = true;
+                       if (!modify)
+                               provide = true;
                // fall through
                case TC_STYLE: {
                        if (!lexrc.next()) {
@@ -531,13 +535,13 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                        // If the layout already exists, then we want to add it to
                        // the existing layout, as long as we are not in an ProvideStyle
                        // block.
-                       if (have_layout && !providestyle) {
+                       if (have_layout && !provide) {
                                Layout & lay = operator[](name);
                                error = !readStyle(lexrc, lay, rt);
                        }
                        // If the layout does not exist, then we want to create a new
                        // one, but not if we are in a ModifyStyle block.
-                       else if (!have_layout && !modifystyle) {
+                       else if (!have_layout && !modify) {
                                Layout layout;
                                layout.setName(name);
                                error = !readStyle(lexrc, layout, rt);
@@ -732,6 +736,15 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                                rightmargin_ = lexrc.getDocString();
                        break;
 
+               case TC_MODIFYINSETLAYOUT:
+                       modify = true;
+               // fall through
+               case TC_PROVIDEINSETLAYOUT:
+                       // if modifyinsetlayout is true, then we got here by falling through
+                       // so we are not in an ProvideInsetLayout block
+                       if (!modify)
+                               provide = true;
+               // fall through
                case TC_INSETLAYOUT: {
                        if (!lexrc.next()) {
                                lexrc.printError("No name given for InsetLayout: `$$Token'.");
@@ -740,6 +753,7 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                        }
                        docstring const name = subst(lexrc.getDocString(), '_', ' ');
                        bool const validating = (rt == VALIDATION);
+                       bool const have_layout = name.empty() ? false : hasInsetLayout(name);
                        if (name.empty()) {
                                string s = "Could not read name for InsetLayout: `$$Token' "
                                        + lexrc.getString() + " is probably not valid UTF-8!";
@@ -752,15 +766,19 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                                // in which case we want to report the error
                                if (validating)
                                        error = true;
-                       } else if (hasInsetLayout(name)) {
+                       } else if (have_layout && !provide) {
                                InsetLayout & il = insetlayoutlist_[name];
                                error = !il.read(lexrc, *this, validating);
-                       } else {
+                       } else if (!modify && !have_layout) {
                                InsetLayout il;
                                il.setName(name);
                                error = !il.read(lexrc, *this, validating);
                                if (!error)
                                        insetlayoutlist_[name] = il;
+                       } else {
+                               InsetLayout il;
+                               // We just scan the rest of the style and discard it.
+                               il.read(lexrc, *this);
                        }
                        break;
                }
@@ -1731,7 +1749,7 @@ bool TextClass::load(string const & path) const
                       << to_utf8(makeDisplayPath(layout_file.absFileName()))
                       << "'\n(Check `" << name_
                       << "')\nCheck your installation and "
-                         "try Options/Reconfigure..."
+                         "try Tools/Reconfigure..."
                       << endl;
        }