]> git.lyx.org Git - lyx.git/blobdiff - src/lyxlayout.C
* src/tabular.[Ch]: simplify plaintext methods, because there
[lyx.git] / src / lyxlayout.C
index bb43bd72f17fcf46b1be286148444277a4828f6a..b81ea994251c7bcc7da7ffffd2770320830d31bd 100644 (file)
 
 #include "support/lstrings.h"
 
-using lyx::support::subst;
-using lyx::support::trim;
+
+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.
@@ -32,6 +38,7 @@ enum LayoutTags {
        LT_ALIGNPOSSIBLE,
        LT_MARGIN,
        LT_BOTTOMSEP,
+       LT_COMMANDDEPTH,
        LT_COPYSTYLE,
        LT_DEPENDSON,
        LT_OBSOLETEDBY,
@@ -78,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!
 };
 
 /////////////////////
@@ -115,59 +126,66 @@ LyXLayout::LyXLayout ()
        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 },
-               { "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 },
-               { "labelcounter",    LT_LABELCOUNTER },
-               { "labelfont",          LT_LABELFONT },
-               { "labelindent",        LT_LABELINDENT },
-               { "labelsep",           LT_LABELSEP },
-               { "labelstring",        LT_LABELSTRING },
+               { "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 },
-               { "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 },
-               { "topsep",             LT_TOPSEP }
+               { "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;
@@ -194,7 +212,8 @@ 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_;
@@ -241,9 +260,8 @@ 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.
@@ -273,10 +291,14 @@ bool LyXLayout::Read(LyXLex & lexrc, LyXTextClass const & tclass)
                        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:
@@ -307,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();
@@ -314,11 +341,26 @@ bool LyXLayout::Read(LyXLex & lexrc, LyXTextClass const & tclass)
 
                case LT_LATEXPARAM:
                        if (lexrc.next())
-                               latexparam_ = lexrc.getString();
+                               latexparam_ = subst(lexrc.getString(), """, "\"");
+                       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:
@@ -409,22 +451,22 @@ bool LyXLayout::Read(LyXLex & lexrc, LyXTextClass const & tclass)
 
                case LT_LABELSTRING:    // label string definition
                        if (lexrc.next())
-                               labelstring_ = trim(lexrc.getString());
+                               labelstring_ = trim(lexrc.getDocString());
                        break;
 
                case LT_ENDLABELSTRING: // endlabel string definition
                        if (lexrc.next())
-                               endlabelstring_ = trim(lexrc.getString());
+                               endlabelstring_ = trim(lexrc.getDocString());
                        break;
 
                case LT_LABELSTRING_APPENDIX: // label string appendix definition
                        if (lexrc.next())
-                               labelstring_appendix_ = trim(lexrc.getString());
+                               labelstring_appendix_ = trim(lexrc.getDocString());
                        break;
 
                case LT_LABELCOUNTER: // name of counter to use
                        if (lexrc.next())
-                               counter = trim(lexrc.getString());
+                               counter = lyx::from_ascii(trim(lexrc.getString()));
                        break;
 
                case LT_FREE_SPACING:   // Allow for free spacing.
@@ -444,7 +486,7 @@ bool LyXLayout::Read(LyXLex & lexrc, LyXTextClass const & tclass)
        }
        lexrc.popTable();
 
-       if (labelstring_appendix_.empty())      
+       if (labelstring_appendix_.empty())
                labelstring_appendix_ = labelstring_;
        return error;
 }
@@ -749,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;
        }
 }
@@ -777,3 +819,6 @@ string const & LyXLayout::depends_on() const
 {
        return depends_on_;
 }
+
+
+} // namespace lyx