]> git.lyx.org Git - lyx.git/blobdiff - src/lyxlayout.C
new \lyxline difinition, fixes also bug 1988:
[lyx.git] / src / lyxlayout.C
index 79c506831ca6b9df45885444698c42160dc8af7e..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.
@@ -82,6 +87,8 @@ enum LayoutTags {
        LT_TOPSEP,
        LT_TOCLEVEL,
        LT_INNERTAG,
+       LT_LABELTAG,
+       LT_ITEMTAG,
        LT_INTITLE // keep this last!
 };
 
@@ -119,13 +126,13 @@ LyXLayout::LyXLayout ()
        free_spacing = false;
        pass_thru = false;
        is_environment = false;
-       toclevel = 0;
+       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[] = {
@@ -145,6 +152,7 @@ bool LyXLayout::Read(LyXLex & lexrc, LyXTextClass const & tclass)
                { "innertag",       LT_INNERTAG },
                { "intitle",        LT_INTITLE },
                { "itemsep",        LT_ITEMSEP },
+               { "itemtag",        LT_ITEMTAG },
                { "keepempty",      LT_KEEPEMPTY },
                { "labelbottomsep", LT_LABEL_BOTTOMSEP },
                { "labelcounter",   LT_LABELCOUNTER },
@@ -153,6 +161,7 @@ bool LyXLayout::Read(LyXLex & lexrc, LyXTextClass const & tclass)
                { "labelsep",       LT_LABELSEP },
                { "labelstring",    LT_LABELSTRING },
                { "labelstringappendix", LT_LABELSTRING_APPENDIX },
+               { "labeltag",       LT_LABELTAG },
                { "labeltype",      LT_LABELTYPE },
                { "latexfooter",    LT_LATEXFOOTER },
                { "latexheader",    LT_LATEXHEADER },
@@ -203,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_;
@@ -331,7 +341,7 @@ 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:
@@ -339,8 +349,18 @@ bool LyXLayout::Read(LyXLex & lexrc, LyXTextClass const & tclass)
                                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:
@@ -431,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.
@@ -771,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;
        }
 }
@@ -799,3 +819,6 @@ string const & LyXLayout::depends_on() const
 {
        return depends_on_;
 }
+
+
+} // namespace lyx