]> git.lyx.org Git - lyx.git/blobdiff - src/lyxlayout.C
fix compiler warnings about unused parameter
[lyx.git] / src / lyxlayout.C
index 130c12803953e50a632c6b5a90679c6ffb900c15..b81ea994251c7bcc7da7ffffd2770320830d31bd 100644 (file)
@@ -1,20 +1,17 @@
-/* This file is part of
- * ======================================================
+/**
+ * \file lyxlayout.C
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
  *
- *           LyX, The Document Processor
+ * \author Lars Gullik Bjønnes
+ * \author Jean-Marc Lasgouttes
+ * \author André Pönitz
  *
- *          Copyright 1995 Matthias Ettrich
- *          Copyright 1995-2001 The LyX Team.
- *
- * ======================================================
+ * Full author contact details are available in file CREDITS.
  */
 
 #include <config.h>
 
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
 #include "lyxlayout.h"
 #include "lyxtextclass.h"
 #include "lyxlex.h"
 
 #include "support/lstrings.h"
 
+
+namespace lyx {
+
+using support::subst;
+using support::trim;
+
 using std::endl;
+using std::string;
+
+/// Special value of toclevel for layouts that to not belong in a TOC
+const int LyXLayout::NOT_IN_TOC = -1000;
 
 //  The order of the LayoutTags enum is no more important. [asierra300396]
 // Tags indexes.
@@ -31,7 +38,9 @@ enum LayoutTags {
        LT_ALIGNPOSSIBLE,
        LT_MARGIN,
        LT_BOTTOMSEP,
+       LT_COMMANDDEPTH,
        LT_COPYSTYLE,
+       LT_DEPENDSON,
        LT_OBSOLETEDBY,
        //LT_EMPTY,
        LT_END,
@@ -53,12 +62,17 @@ enum LayoutTags {
        LT_LABELSEP,
        LT_LABELSTRING,
        LT_LABELSTRING_APPENDIX,
+       LT_LABELCOUNTER,
        LT_LABELTYPE,
        LT_ENDLABELSTRING,
        LT_ENDLABELTYPE,
        LT_LATEXNAME,
        LT_LATEXPARAM,
+       LT_OPTARGS,
        LT_LATEXTYPE,
+       LT_LATEXHEADER,
+       LT_LATEXFOOTER,
+       LT_LATEXPARAGRAPH,
        LT_LEFTMARGIN,
        LT_NEED_PROTECT,
        LT_NEWLINE,
@@ -71,7 +85,11 @@ enum LayoutTags {
        LT_RIGHTMARGIN,
        LT_SPACING,
        LT_TOPSEP,
-       LT_INTITLE
+       LT_TOCLEVEL,
+       LT_INNERTAG,
+       LT_LABELTAG,
+       LT_ITEMTAG,
+       LT_INTITLE // keep this last!
 };
 
 /////////////////////
@@ -82,6 +100,7 @@ LyXLayout::LyXLayout ()
        margintype = MARGIN_STATIC;
        latextype = LATEX_PARAGRAPH;
        intitle = false;
+       optionalargs = 0;
        needprotect = false;
        keepempty = false;
        font = LyXFont(LyXFont::ALL_INHERIT);
@@ -106,53 +125,67 @@ LyXLayout::LyXLayout ()
        newline_allowed = true;
        free_spacing = false;
        pass_thru = false;
+       is_environment = false;
+       toclevel = NOT_IN_TOC;
+       commanddepth = 0;
 }
 
 
 // Reads a layout definition from file
-bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass)
+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 },
+               { "commanddepth",   LT_COMMANDDEPTH },
+               { "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 },
+               { "innertag",       LT_INNERTAG },
+               { "intitle",        LT_INTITLE },
+               { "itemsep",        LT_ITEMSEP },
+               { "itemtag",        LT_ITEMTAG },
+               { "keepempty",      LT_KEEPEMPTY },
+               { "labelbottomsep", LT_LABEL_BOTTOMSEP },
+               { "labelcounter",   LT_LABELCOUNTER },
+               { "labelfont",      LT_LABELFONT },
+               { "labelindent",    LT_LABELINDENT },
+               { "labelsep",       LT_LABELSEP },
+               { "labelstring",    LT_LABELSTRING },
+               { "labelstringappendix", LT_LABELSTRING_APPENDIX },
+               { "labeltag",       LT_LABELTAG },
+               { "labeltype",      LT_LABELTYPE },
+               { "latexfooter",    LT_LATEXFOOTER },
+               { "latexheader",    LT_LATEXHEADER },
+               { "latexname",      LT_LATEXNAME },
+               { "latexparagraph", LT_LATEXPARAGRAPH },
+               { "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 },
+               { "toclevel",       LT_TOCLEVEL },
+               { "topsep",         LT_TOPSEP }
        };
 
        bool error = false;
@@ -179,19 +212,25 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass)
 
                case LT_COPYSTYLE:     // initialize with a known style
                        if (lexrc.next()) {
-                               string const style = lexrc.getString();
+                               string const style = subst(lexrc.getString(),
+                                                               '_', ' ');
 
                                if (tclass.hasLayout(style)) {
                                        string const tmpname = name_;
-                                       this->operator=(tclass[style]);
+                                       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;
+                                               lyxerr << (*it)->name()
+                                                      << endl;
                                        }
 
                                        //lexrc.printError("Cannot copy known "
@@ -206,12 +245,12 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass)
 
                                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;
+                                       lyxerr << "Cannot replace with unknown style `" << style << '\'' << endl;
 
                                        //lexrc.printError("Cannot replace with"
                                        //               " unknown style "
@@ -220,18 +259,48 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass)
                        }
                        break;
 
-               case LT_MARGIN:         // Margin style definition.
+               case LT_DEPENDSON:
+                       if (lexrc.next())
+                               depends_on_ = lexrc.getString();
+                       break;
+
+               case LT_MARGIN:         // margin style definition.
                        readMargin(lexrc);
                        break;
 
-               case LT_LATEXTYPE:      // Latex style definition.
+               case LT_LATEXTYPE:      // LaTeX style definition.
                        readLatexType(lexrc);
                        break;
 
+               case LT_LATEXHEADER:    // header for environments
+                       lexrc.next();
+                       latexheader = lexrc.getString();
+                       break;
+
+               case LT_LATEXFOOTER:    // footer for environments
+                       lexrc.next();
+                       latexfooter = lexrc.getString();
+                       break;
+
+               case LT_LATEXPARAGRAPH:
+                       lexrc.next();
+                       latexparagraph = lexrc.getString();
+                       break;
+
                case LT_INTITLE:
                        intitle = lexrc.next() && lexrc.getInteger();
                        break;
 
+               case LT_TOCLEVEL:
+                       lexrc.next();
+                       toclevel = lexrc.getInteger();
+                       break;
+
+               case LT_OPTARGS:
+                       if (lexrc.next())
+                               optionalargs = lexrc.getInteger();
+                       break;
+
                case LT_NEED_PROTECT:
                        needprotect = lexrc.next() && lexrc.getInteger();
                        break;
@@ -260,6 +329,11 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass)
                                nextnoindent = false;
                        break;
 
+               case LT_COMMANDDEPTH:
+                       lexrc.next();
+                       commanddepth = lexrc.getInteger();
+                       break;
+
                case LT_LATEXNAME:
                        if (lexrc.next())
                                latexname_ = lexrc.getString();
@@ -267,11 +341,26 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass)
 
                case LT_LATEXPARAM:
                        if (lexrc.next())
-                               latexparam_ = lexrc.getString();
+                               latexparam_ = subst(lexrc.getString(), "&quot;", "\"");
+                       break;
+
+               case LT_INNERTAG:
+                       if (lexrc.next())
+                               innertag_ = lexrc.getString();
+                       break;
+
+               case LT_LABELTAG:
+                       if (lexrc.next())
+                               labeltag_ = lexrc.getString();
+                       break;
+
+               case LT_ITEMTAG:
+                       if (lexrc.next())
+                               itemtag_ = lexrc.getString();
                        break;
 
                case LT_PREAMBLE:
-                       preamble_ = lexrc.getLongString("EndPreamble");
+                       preamble_ = from_utf8(lexrc.getLongString("EndPreamble"));
                        break;
 
                case LT_LABELTYPE:
@@ -362,17 +451,22 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass)
 
                case LT_LABELSTRING:    // label string definition
                        if (lexrc.next())
-                               labelstring_ = lexrc.getString();
+                               labelstring_ = trim(lexrc.getDocString());
                        break;
 
                case LT_ENDLABELSTRING: // endlabel string definition
                        if (lexrc.next())
-                               endlabelstring_ = lexrc.getString();
+                               endlabelstring_ = trim(lexrc.getDocString());
                        break;
 
                case LT_LABELSTRING_APPENDIX: // label string appendix definition
                        if (lexrc.next())
-                               labelstring_appendix_ = lexrc.getString();
+                               labelstring_appendix_ = trim(lexrc.getDocString());
+                       break;
+
+               case LT_LABELCOUNTER: // name of counter to use
+                       if (lexrc.next())
+                               counter = lyx::from_ascii(trim(lexrc.getString()));
                        break;
 
                case LT_FREE_SPACING:   // Allow for free spacing.
@@ -391,6 +485,9 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass)
                }
        }
        lexrc.popTable();
+
+       if (labelstring_appendix_.empty())
+               labelstring_appendix_ = labelstring_;
        return error;
 }
 
@@ -492,16 +589,9 @@ enum LabelTypeTags {
        LA_CENTERED_TOP_ENVIRONMENT,
        LA_STATIC,
        LA_SENSITIVE,
-       LA_COUNTER_CHAPTER,
-       LA_COUNTER_SECTION,
-       LA_COUNTER_SUBSECTION,
-       LA_COUNTER_SUBSUBSECTION,
-       LA_COUNTER_PARAGRAPH,
-       LA_COUNTER_SUBPARAGRAPH,
-       LA_COUNTER_ENUMI,
-       LA_COUNTER_ENUMII,
-       LA_COUNTER_ENUMIII,
-       LA_COUNTER_ENUMIV,
+       LA_COUNTER,
+       LA_ENUMERATE,
+       LA_ITEMIZE,
        LA_BIBLIO
 };
 
@@ -511,22 +601,15 @@ void LyXLayout::readLabelType(LyXLex & lexrc)
        keyword_item labelTypeTags[] = {
        { "bibliography",             LA_BIBLIO },
        { "centered_top_environment", LA_CENTERED_TOP_ENVIRONMENT },
-       { "counter_chapter",          LA_COUNTER_CHAPTER },
-       { "counter_enumi",            LA_COUNTER_ENUMI },
-       { "counter_enumii",           LA_COUNTER_ENUMII },
-       { "counter_enumiii",          LA_COUNTER_ENUMIII },
-       { "counter_enumiv",           LA_COUNTER_ENUMIV },
-       { "counter_paragraph",        LA_COUNTER_PARAGRAPH },
-       { "counter_section",          LA_COUNTER_SECTION },
-       { "counter_subparagraph",     LA_COUNTER_SUBPARAGRAPH },
-       { "counter_subsection",       LA_COUNTER_SUBSECTION },
-       { "counter_subsubsection",    LA_COUNTER_SUBSUBSECTION },
+       { "counter",                  LA_COUNTER },
+       { "enumerate",                LA_ENUMERATE },
+       { "itemize",                  LA_ITEMIZE },
        { "manual",                   LA_MANUAL },
        { "no_label",                 LA_NO_LABEL },
        { "sensitive",                LA_SENSITIVE },
        { "static",                   LA_STATIC },
        { "top_environment",          LA_TOP_ENVIRONMENT }
-};
+       };
 
        pushpophelper pph(lexrc, labelTypeTags, LA_BIBLIO);
        int le = lexrc.lex();
@@ -555,35 +638,14 @@ void LyXLayout::readLabelType(LyXLex & lexrc)
        case LA_SENSITIVE:
                labeltype = LABEL_SENSITIVE;
                break;
-       case LA_COUNTER_CHAPTER:
-               labeltype = LABEL_COUNTER_CHAPTER;
-               break;
-       case LA_COUNTER_SECTION:
-               labeltype = LABEL_COUNTER_SECTION;
+       case LA_COUNTER:
+               labeltype = LABEL_COUNTER;
                break;
-       case LA_COUNTER_SUBSECTION:
-               labeltype = LABEL_COUNTER_SUBSECTION;
+       case LA_ENUMERATE:
+               labeltype = LABEL_ENUMERATE;
                break;
-       case LA_COUNTER_SUBSUBSECTION:
-               labeltype = LABEL_COUNTER_SUBSUBSECTION;
-               break;
-       case LA_COUNTER_PARAGRAPH:
-               labeltype = LABEL_COUNTER_PARAGRAPH;
-               break;
-       case LA_COUNTER_SUBPARAGRAPH:
-               labeltype = LABEL_COUNTER_SUBPARAGRAPH;
-               break;
-       case LA_COUNTER_ENUMI:
-               labeltype = LABEL_COUNTER_ENUMI;
-               break;
-       case LA_COUNTER_ENUMII:
-               labeltype = LABEL_COUNTER_ENUMII;
-               break;
-       case LA_COUNTER_ENUMIII:
-               labeltype = LABEL_COUNTER_ENUMIII;
-               break;
-       case LA_COUNTER_ENUMIV:
-               labeltype = LABEL_COUNTER_ENUMIV;
+       case LA_ITEMIZE:
+               labeltype = LABEL_ITEMIZE;
                break;
        case LA_BIBLIO:
                labeltype = LABEL_BIBLIO;
@@ -662,6 +724,7 @@ void LyXLayout::readMargin(LyXLex & lexrc)
 void LyXLayout::readLatexType(LyXLex & lexrc)
 {
        keyword_item latexTypeTags[] = {
+               { "bib_environment",  LATEX_BIB_ENVIRONMENT },
                { "command",          LATEX_COMMAND },
                { "environment",      LATEX_ENVIRONMENT },
                { "item_environment", LATEX_ITEM_ENVIRONMENT },
@@ -679,6 +742,7 @@ void LyXLayout::readLatexType(LyXLex & lexrc)
        case LATEX_COMMAND:
        case LATEX_ENVIRONMENT:
        case LATEX_ITEM_ENVIRONMENT:
+       case LATEX_BIB_ENVIRONMENT:
        case LATEX_LIST_ENVIRONMENT:
                latextype = static_cast<LYX_LATEX_TYPES>(le);
                break;
@@ -727,7 +791,7 @@ void LyXLayout::readSpacing(LyXLex & lexrc)
                break;
        case ST_OTHER:
                lexrc.next();
-               spacing.set(Spacing::Other, lexrc.getFloat());
+               spacing.set(Spacing::Other, lexrc.getString());
                break;
        }
 }
@@ -749,3 +813,12 @@ string const & LyXLayout::obsoleted_by() const
 {
        return obsoleted_by_;
 }
+
+
+string const & LyXLayout::depends_on() const
+{
+       return depends_on_;
+}
+
+
+} // namespace lyx