]> git.lyx.org Git - lyx.git/blobdiff - src/lyxlayout.C
Remove the inset and view member functions from PreviewedInset.
[lyx.git] / src / lyxlayout.C
index 6533fe3051d59c0ee66fa45e439c1ad018a42913..168997c78d8f879534e8d0a7315527e184f466e8 100644 (file)
@@ -1,12 +1,13 @@
-/* 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>
 
 #include "support/lstrings.h"
 
+using lyx::support::subst;
+using lyx::support::trim;
+
 using std::endl;
+using std::string;
+
 
 //  The order of the LayoutTags enum is no more important. [asierra300396]
 // Tags indexes.
@@ -50,6 +56,7 @@ enum LayoutTags {
        LT_LABELSEP,
        LT_LABELSTRING,
        LT_LABELSTRING_APPENDIX,
+       LT_LABELCOUNTER,
        LT_LABELTYPE,
        LT_ENDLABELSTRING,
        LT_ENDLABELTYPE,
@@ -57,6 +64,9 @@ enum LayoutTags {
        LT_LATEXPARAM,
        LT_OPTARGS,
        LT_LATEXTYPE,
+       LT_LATEXHEADER,
+       LT_LATEXFOOTER,
+       LT_LATEXPARAGRAPH,
        LT_LEFTMARGIN,
        LT_NEED_PROTECT,
        LT_NEWLINE,
@@ -69,6 +79,7 @@ enum LayoutTags {
        LT_RIGHTMARGIN,
        LT_SPACING,
        LT_TOPSEP,
+       LT_TOCLEVEL,
        LT_INTITLE
 };
 
@@ -105,11 +116,13 @@ LyXLayout::LyXLayout ()
        newline_allowed = true;
        free_spacing = false;
        pass_thru = false;
+       is_environment = false;
+       toclevel = 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[] = {
@@ -129,13 +142,17 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass)
                { "itemsep",            LT_ITEMSEP },
                { "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 },
                { "labeltype",          LT_LABELTYPE },
+               { "latexfooter",                LT_LATEXFOOTER },
+               { "latexheader",                LT_LATEXHEADER },
                { "latexname",          LT_LATEXNAME },
+               { "latexparagraph",             LT_LATEXPARAGRAPH },
                { "latexparam",         LT_LATEXPARAM },
                { "latextype",          LT_LATEXTYPE },
                { "leftmargin",         LT_LEFTMARGIN },
@@ -153,6 +170,7 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass)
                { "rightmargin",        LT_RIGHTMARGIN },
                { "spacing",            LT_SPACING },
                { "textfont",           LT_TEXTFONT },
+               { "toclevel",            LT_TOCLEVEL },
                { "topsep",             LT_TOPSEP }
        };
 
@@ -227,27 +245,45 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass)
                        break;
 
                case LT_DEPENDSON:
-                       if (lexrc.next()) {
+                       if (lexrc.next())
                                depends_on_ = lexrc.getString();
-                       }
                        break;
 
-               case LT_MARGIN:         // Margin style definition.
+               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()) {
+                       if (lexrc.next())
                                optionalargs = lexrc.getInteger();
-                       }
                        break;
 
                case LT_NEED_PROTECT:
@@ -380,17 +416,22 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass)
 
                case LT_LABELSTRING:    // label string definition
                        if (lexrc.next())
-                               labelstring_ = lexrc.getString();
+                               labelstring_ = trim(lexrc.getString());
                        break;
 
                case LT_ENDLABELSTRING: // endlabel string definition
                        if (lexrc.next())
-                               endlabelstring_ = lexrc.getString();
+                               endlabelstring_ = trim(lexrc.getString());
                        break;
 
                case LT_LABELSTRING_APPENDIX: // label string appendix definition
                        if (lexrc.next())
-                               labelstring_appendix_ = lexrc.getString();
+                               labelstring_appendix_ = trim(lexrc.getString());
+                       break;
+
+               case LT_LABELCOUNTER: // name of counter to use
+                       if (lexrc.next())
+                               counter = trim(lexrc.getString());
                        break;
 
                case LT_FREE_SPACING:   // Allow for free spacing.
@@ -409,6 +450,9 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass)
                }
        }
        lexrc.popTable();
+
+       if (labelstring_appendix_.empty())
+               labelstring_appendix_ = labelstring_;
        return error;
 }
 
@@ -510,16 +554,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
 };
 
@@ -529,22 +566,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();
@@ -573,35 +603,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;
-               break;
-       case LA_COUNTER_SUBSECTION:
-               labeltype = LABEL_COUNTER_SUBSECTION;
-               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;
+       case LA_COUNTER:
+               labeltype = LABEL_COUNTER;
                break;
-       case LA_COUNTER_ENUMIII:
-               labeltype = LABEL_COUNTER_ENUMIII;
+       case LA_ENUMERATE:
+               labeltype = LABEL_ENUMERATE;
                break;
-       case LA_COUNTER_ENUMIV:
-               labeltype = LABEL_COUNTER_ENUMIV;
+       case LA_ITEMIZE:
+               labeltype = LABEL_ITEMIZE;
                break;
        case LA_BIBLIO:
                labeltype = LABEL_BIBLIO;
@@ -680,6 +689,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 },
@@ -697,6 +707,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;