]> git.lyx.org Git - lyx.git/blobdiff - src/lyxlayout.C
Lars says _(_(b)) is a bug ... fix
[lyx.git] / src / lyxlayout.C
index 55e2cf0622ce334115c3fd4c9e269dc00d7a7684..0a95c43811397b8ab0be3de73fefdd4746959213 100644 (file)
@@ -1,9 +1,8 @@
-
 /* This file is part of
- * ====================================================== 
- * 
+ * ======================================================
+ *
  *           LyX, The Document Processor
- *      
+ *
  *          Copyright 1995 Matthias Ettrich
  *          Copyright 1995-2001 The LyX Team.
  *
@@ -28,51 +27,53 @@ using std::endl;
 //  The order of the LayoutTags enum is no more important. [asierra300396]
 // Tags indexes.
 enum LayoutTags {
-       LT_ALIGN = 1, 
-       LT_ALIGNPOSSIBLE, 
-       LT_MARGIN, 
-       LT_BOTTOMSEP, 
-       LT_COPYSTYLE, 
-       LT_OBSOLETEDBY, 
+       LT_ALIGN = 1,
+       LT_ALIGNPOSSIBLE,
+       LT_MARGIN,
+       LT_BOTTOMSEP,
+       LT_COPYSTYLE,
+       LT_DEPENDSON,
+       LT_OBSOLETEDBY,
        //LT_EMPTY,
-       LT_END, 
-       //LT_ENVIRONMENT_DEFAULT, 
+       LT_END,
+       //LT_ENVIRONMENT_DEFAULT,
        //LT_FANCYHDR,
-       LT_FILL_BOTTOM, 
-       LT_FILL_TOP, 
+       LT_FILL_BOTTOM,
+       LT_FILL_TOP,
        //LT_FIRST_COUNTER,
-       LT_FONT, 
-       LT_FREE_SPACING, 
+       LT_FONT,
+       LT_FREE_SPACING,
        LT_PASS_THRU,
        //LT_HEADINGS,
-       LT_ITEMSEP, 
-       LT_KEEPEMPTY, 
-       LT_LABEL_BOTTOMSEP, 
-       LT_LABELFONT, 
+       LT_ITEMSEP,
+       LT_KEEPEMPTY,
+       LT_LABEL_BOTTOMSEP,
+       LT_LABELFONT,
        LT_TEXTFONT,
-       LT_LABELINDENT, 
-       LT_LABELSEP, 
-       LT_LABELSTRING, 
-       LT_LABELSTRING_APPENDIX, 
+       LT_LABELINDENT,
+       LT_LABELSEP,
+       LT_LABELSTRING,
+       LT_LABELSTRING_APPENDIX,
        LT_LABELTYPE,
        LT_ENDLABELSTRING,
        LT_ENDLABELTYPE,
-       LT_LATEXNAME, 
-       LT_LATEXPARAM, 
-       LT_LATEXTYPE, 
-       LT_LEFTMARGIN, 
-       LT_NEED_PROTECT, 
-       LT_NEWLINE, 
-       LT_NEXTNOINDENT, 
-       LT_PARINDENT, 
-       LT_PARSEP, 
-       LT_PARSKIP, 
+       LT_LATEXNAME,
+       LT_LATEXPARAM,
+       LT_OPTARGS,
+       LT_LATEXTYPE,
+       LT_LEFTMARGIN,
+       LT_NEED_PROTECT,
+       LT_NEWLINE,
+       LT_NEXTNOINDENT,
+       LT_PARINDENT,
+       LT_PARSEP,
+       LT_PARSKIP,
        //LT_PLAIN,
-       LT_PREAMBLE, 
-       LT_RIGHTMARGIN, 
-       LT_SPACING, 
-       LT_TOPSEP, 
-        LT_INTITLE 
+       LT_PREAMBLE,
+       LT_RIGHTMARGIN,
+       LT_SPACING,
+       LT_TOPSEP,
+       LT_INTITLE
 };
 
 /////////////////////
@@ -83,6 +84,7 @@ LyXLayout::LyXLayout ()
        margintype = MARGIN_STATIC;
        latextype = LATEX_PARAGRAPH;
        intitle = false;
+       optionalargs = 0;
        needprotect = false;
        keepempty = false;
        font = LyXFont(LyXFont::ALL_INHERIT);
@@ -115,45 +117,47 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass)
 {
        // This table is sorted alphabetically [asierra 30March96]
        keyword_item layoutTags[] = {
-               { "align",                      LT_ALIGN },
-               { "alignpossible",              LT_ALIGNPOSSIBLE },
-               { "bottomsep",                  LT_BOTTOMSEP },
-               { "copystyle",                  LT_COPYSTYLE },
-               { "end",                        LT_END },
-               { "endlabelstring",             LT_ENDLABELSTRING },
-               { "endlabeltype",               LT_ENDLABELTYPE },
-               { "fill_bottom",                LT_FILL_BOTTOM },
-               { "fill_top",                   LT_FILL_TOP },
-               { "font",                       LT_FONT },
-               { "freespacing",                LT_FREE_SPACING },
-               { "intitle",                    LT_INTITLE },
-               { "itemsep",                    LT_ITEMSEP },
-               { "keepempty",                  LT_KEEPEMPTY },
-               { "labelbottomsep",             LT_LABEL_BOTTOMSEP },
-               { "labelfont",                  LT_LABELFONT },
-               { "labelindent",                LT_LABELINDENT },
-               { "labelsep",                   LT_LABELSEP },
-               { "labelstring",                LT_LABELSTRING },
-               { "labelstringappendix",        LT_LABELSTRING_APPENDIX },
-               { "labeltype",                  LT_LABELTYPE },
-               { "latexname",                  LT_LATEXNAME },
-               { "latexparam",                 LT_LATEXPARAM },
-               { "latextype",                  LT_LATEXTYPE },
-               { "leftmargin",                 LT_LEFTMARGIN },
-               { "margin",                     LT_MARGIN },
-               { "needprotect",                LT_NEED_PROTECT },
-               { "newline",                    LT_NEWLINE },
-               { "nextnoindent",               LT_NEXTNOINDENT },
-               { "obsoletedby",                LT_OBSOLETEDBY },
-               { "parindent",                  LT_PARINDENT },
-               { "parsep",                     LT_PARSEP },
-               { "parskip",                    LT_PARSKIP },
-               { "passthru",                   LT_PASS_THRU },
-               { "preamble",                   LT_PREAMBLE },
-               { "rightmargin",                LT_RIGHTMARGIN },
-               { "spacing",                    LT_SPACING },
-               { "textfont",                   LT_TEXTFONT },
-               { "topsep",                     LT_TOPSEP }
+               { "align",              LT_ALIGN },
+               { "alignpossible",      LT_ALIGNPOSSIBLE },
+               { "bottomsep",          LT_BOTTOMSEP },
+               { "copystyle",          LT_COPYSTYLE },
+               { "dependson",          LT_DEPENDSON },
+               { "end",                LT_END },
+               { "endlabelstring",     LT_ENDLABELSTRING },
+               { "endlabeltype",       LT_ENDLABELTYPE },
+               { "fill_bottom",        LT_FILL_BOTTOM },
+               { "fill_top",           LT_FILL_TOP },
+               { "font",               LT_FONT },
+               { "freespacing",        LT_FREE_SPACING },
+               { "intitle",            LT_INTITLE },
+               { "itemsep",            LT_ITEMSEP },
+               { "keepempty",          LT_KEEPEMPTY },
+               { "labelbottomsep",     LT_LABEL_BOTTOMSEP },
+               { "labelfont",          LT_LABELFONT },
+               { "labelindent",        LT_LABELINDENT },
+               { "labelsep",           LT_LABELSEP },
+               { "labelstring",        LT_LABELSTRING },
+               { "labelstringappendix", LT_LABELSTRING_APPENDIX },
+               { "labeltype",          LT_LABELTYPE },
+               { "latexname",          LT_LATEXNAME },
+               { "latexparam",         LT_LATEXPARAM },
+               { "latextype",          LT_LATEXTYPE },
+               { "leftmargin",         LT_LEFTMARGIN },
+               { "margin",             LT_MARGIN },
+               { "needprotect",        LT_NEED_PROTECT },
+               { "newline",            LT_NEWLINE },
+               { "nextnoindent",       LT_NEXTNOINDENT },
+               { "obsoletedby",        LT_OBSOLETEDBY },
+               { "optionalargs",       LT_OPTARGS },
+               { "parindent",          LT_PARINDENT },
+               { "parsep",             LT_PARSEP },
+               { "parskip",            LT_PARSKIP },
+               { "passthru",           LT_PASS_THRU },
+               { "preamble",           LT_PREAMBLE },
+               { "rightmargin",        LT_RIGHTMARGIN },
+               { "spacing",            LT_SPACING },
+               { "textfont",           LT_TEXTFONT },
+               { "topsep",             LT_TOPSEP }
        };
 
        bool error = false;
@@ -165,12 +169,12 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass)
                // See comment in lyxrc.C.
                switch (le) {
                case LyXLex::LEX_FEOF:
-                       continue; 
+                       continue;
 
                case LyXLex::LEX_UNDEF:         // parse error
                        lexrc.printError("Unknown layout tag `$$Token'");
                        error = true;
-                       continue; 
+                       continue;
                default: break;
                }
                switch (static_cast<LayoutTags>(le)) {
@@ -179,23 +183,27 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass)
                        break;
 
                case LT_COPYSTYLE:     // initialize with a known style
-                       if (lexrc.next()) {
-                               string const style = lowercase(lexrc.getString());
-                       
+                       if (lexrc.next()) {
+                               string const style = lexrc.getString();
+
                                if (tclass.hasLayout(style)) {
-                                       string const tmpname = lowercase(name_);
-                                       this->operator=(tclass[style]);
-                                       name_ = lowercase(tmpname);
+                                       string const tmpname = name_;
+                                       this->operator=(*tclass[style]);
+                                       name_ = tmpname;
                                } else {
-                                       lyxerr << "Cannot copy unknown style `" << style << "'" << endl;
-                                       LyXTextClass::const_iterator it = tclass.begin();
-                                       LyXTextClass::const_iterator end = tclass.end();
-                                       lyxerr << "All layouts so far:" << endl;
+                                       lyxerr << "Cannot copy unknown style `"
+                                              << style << "'\n"
+                                              << "All layouts so far:"
+                                              << endl;
+                                       LyXTextClass::const_iterator it =
+                                               tclass.begin();
+                                       LyXTextClass::const_iterator end =
+                                               tclass.end();
                                        for (; it != end; ++it) {
-                                               //lyxerr << it->name() << endl;
-                                               fprintf(stderr, "%s\n", it->name().c_str());
+                                               lyxerr << (*it)->name()
+                                                      << endl;
                                        }
-                                       
+
                                        //lexrc.printError("Cannot copy known "
                                        //               "style `$$Token'");
                                }
@@ -203,25 +211,31 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass)
                        break;
 
                case LT_OBSOLETEDBY:     // replace with a known style
-                       if (lexrc.next()) {
-                               string const style = lowercase(lexrc.getString());
-                               
+                       if (lexrc.next()) {
+                               string const style = lexrc.getString();
+
                                if (tclass.hasLayout(style)) {
                                        string const tmpname = name_;
-                                       this->operator=(tclass[style]);
+                                       this->operator=(*tclass[style]);
                                        name_ = tmpname;
                                        if (obsoleted_by().empty())
                                                obsoleted_by_ = style;
                                } else {
-                                       lyxerr << "Cannot replace with unknown style `" << style << "'" << endl;
-                                       
-                                       //lexrc.printError("Cannot replace with" 
+                                       lyxerr << "Cannot replace with unknown style `" << style << '\'' << endl;
+
+                                       //lexrc.printError("Cannot replace with"
                                        //               " unknown style "
                                        //               "`$$Token'");
                                }
                        }
                        break;
 
+               case LT_DEPENDSON:
+                       if (lexrc.next()) {
+                               depends_on_ = lexrc.getString();
+                       }
+                       break;
+
                case LT_MARGIN:         // Margin style definition.
                        readMargin(lexrc);
                        break;
@@ -233,11 +247,17 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass)
                case LT_INTITLE:
                        intitle = lexrc.next() && lexrc.getInteger();
                        break;
-                       
+
+               case LT_OPTARGS:
+                       if (lexrc.next()) {
+                               optionalargs = lexrc.getInteger();
+                       }
+                       break;
+
                case LT_NEED_PROTECT:
                        needprotect = lexrc.next() && lexrc.getInteger();
                        break;
-                       
+
                case LT_KEEPEMPTY:
                        keepempty = lexrc.next() && lexrc.getInteger();
                        break;
@@ -263,10 +283,10 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass)
                        break;
 
                case LT_LATEXNAME:
-                       if (lexrc.next())
-                               latexname_ = lexrc.getString();
+                       if (lexrc.next())
+                               latexname_ = lexrc.getString();
                        break;
-                        
+
                case LT_LATEXPARAM:
                        if (lexrc.next())
                                latexparam_ = lexrc.getString();
@@ -283,11 +303,11 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass)
                case LT_ENDLABELTYPE:
                        readEndLabelType(lexrc);
                        break;
-                       
+
                case LT_LEFTMARGIN:     // left margin type
-                       if (lexrc.next())
+                       if (lexrc.next())
                                leftmargin = lexrc.getString();
-                       break;                  
+                       break;
 
                case LT_RIGHTMARGIN:    // right margin type
                        if (lexrc.next())
@@ -421,7 +441,7 @@ void LyXLayout::readAlign(LyXLex & lexrc)
        switch (le) {
        case LyXLex::LEX_UNDEF:
                lexrc.printError("Unknown alignment `$$Token'");
-               return; 
+               return;
        default: break;
        };
        switch (static_cast<AlignTags>(le)) {
@@ -462,7 +482,7 @@ void LyXLayout::readAlignPossible(LyXLex & lexrc)
                switch (le) {
                case LyXLex::LEX_UNDEF:
                        lexrc.printError("Unknown alignment `$$Token'");
-                       continue; 
+                       continue;
                default: break;
                };
                switch (static_cast<AlignTags>(le)) {
@@ -535,7 +555,7 @@ void LyXLayout::readLabelType(LyXLex & lexrc)
        switch (le) {
        case LyXLex::LEX_UNDEF:
                lexrc.printError("Unknown labeltype tag `$$Token'");
-               return; 
+               return;
        default: break;
        }
        switch (static_cast<LabelTypeTags>(le)) {
@@ -737,21 +757,23 @@ void LyXLayout::readSpacing(LyXLex & lexrc)
 
 string const & LyXLayout::name() const
 {
-       static string name_t;
-       name_t = lowercase(name_);
-       return name_t;
+       return name_;
 }
 
 
 void LyXLayout::setName(string const & n)
 {
-       name_ = lowercase(n);
+       name_ = n;
 }
 
 
 string const & LyXLayout::obsoleted_by() const
 {
-       static string obsoleted_by_t;
-       obsoleted_by_t = lowercase(obsoleted_by_);
-       return obsoleted_by_t;
+       return obsoleted_by_;
+}
+
+
+string const & LyXLayout::depends_on() const
+{
+       return depends_on_;
 }