]> git.lyx.org Git - lyx.git/blobdiff - src/Layout.cpp
GuiCharacter: Consider default settings for underline, strikeout and language
[lyx.git] / src / Layout.cpp
index 3d1d78136018f859af6d41d801ab3854443b37c1..005acb22581fddc7a122312216e812cfdc023c23 100644 (file)
@@ -40,6 +40,8 @@ enum LayoutTags {
        LT_ALIGN = 1,
        LT_ALIGNPOSSIBLE,
        LT_ARGUMENT,
+       LT_AUTONESTS,
+       LT_AUTONESTEDBY,
        LT_MARGIN,
        LT_BOTTOMSEP,
        LT_CATEGORY,
@@ -95,7 +97,7 @@ enum LayoutTags {
        LT_HTMLITEM,
        LT_HTMLITEMATTR,
        LT_HTMLLABEL,
-       LT_HTMLLABELATTR, 
+       LT_HTMLLABELATTR,
        LT_HTMLLABELFIRST,
        LT_HTMLPREAMBLE,
        LT_HTMLSTYLE,
@@ -118,7 +120,7 @@ enum LayoutTags {
 /////////////////////
 
 Layout::Layout()
-       : add_to_toc_(false), is_toc_caption_(false)
+       : add_to_toc_(false), is_toc_caption_(true)
 {
        unknown_ = false;
        margintype = MARGIN_STATIC;
@@ -191,6 +193,7 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                { "align",          LT_ALIGN },
                { "alignpossible",  LT_ALIGNPOSSIBLE },
                { "argument",       LT_ARGUMENT },
+               { "autonests",      LT_AUTONESTS },
                { "babelpreamble",  LT_BABELPREAMBLE },
                { "bottomsep",      LT_BOTTOMSEP },
                { "category",       LT_CATEGORY },
@@ -217,6 +220,7 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                { "innertag",       LT_INNERTAG },
                { "inpreamble",     LT_INPREAMBLE },
                { "intitle",        LT_INTITLE },
+               { "isautonestedby", LT_AUTONESTEDBY },
                { "istoccaption",   LT_ISTOCCAPTION },
                { "itemcommand",    LT_ITEMCOMMAND },
                { "itemsep",        LT_ITEMSEP },
@@ -283,7 +287,7 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                        error = true;
                        continue;
 
-               default: 
+               default:
                        break;
                }
                switch (static_cast<LayoutTags>(le)) {
@@ -328,7 +332,7 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                                if (obsoleted_by().empty())
                                        obsoleted_by_ = style;
                        } else {
-                               LYXERR0("Cannot replace with unknown style `" 
+                               LYXERR0("Cannot replace with unknown style `"
                                        << style << '\'');
 
                                //lex.printError("Cannot replace with"
@@ -536,7 +540,7 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                case LT_ALIGN:
                        readAlign(lex);
                        break;
-       
+
                case LT_ALIGNPOSSIBLE:
                        readAlignPossible(lex);
                        break;
@@ -545,23 +549,19 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                        // FIXME: this means LT_LABELSTRING_APPENDIX may only
                        // occur after LT_LABELSTRING
                        lex >> labelstring_;
-                       labelstring_ = trim(labelstring_);
                        labelstring_appendix_ = labelstring_;
                        break;
 
                case LT_ENDLABELSTRING:
-                       lex >> endlabelstring_; 
-                       endlabelstring_ = trim(endlabelstring_);
+                       lex >> endlabelstring_;
                        break;
 
                case LT_LABELSTRING_APPENDIX:
-                       lex >> labelstring_appendix_;   
-                       labelstring_appendix_ = trim(labelstring_appendix_);
+                       lex >> labelstring_appendix_;
                        break;
 
                case LT_LABELCOUNTER:
-                       lex >> counter; 
-                       counter = trim(counter);
+                       lex >> counter;
                        break;
 
                case LT_PAR_GROUP:
@@ -595,7 +595,31 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                        requires_.insert(req.begin(), req.end());
                        break;
                }
-                       
+
+               case LT_AUTONESTS: {
+                       docstring const autonest =
+                               subst(subst(subst(lex.getLongString(from_ascii("EndAutoNests")),
+                                                 from_ascii("\n"), docstring()),
+                                           from_ascii(" "), docstring()),
+                                     from_ascii("\t"), docstring());
+                       vector<docstring> const autonests =
+                               getVectorFromString(autonest);
+                       autonests_.insert(autonests.begin(), autonests.end());
+                       break;
+               }
+
+               case LT_AUTONESTEDBY: {
+                       docstring const autonest =
+                               subst(subst(subst(lex.getLongString(from_ascii("EndIsAutoNestedBy")),
+                                                 from_ascii("\n"), docstring()),
+                                           from_ascii(" "), docstring()),
+                                     from_ascii("\t"), docstring());
+                       vector<docstring> const autonests =
+                               getVectorFromString(autonest);
+                       autonested_by_.insert(autonests.begin(), autonests.end());
+                       break;
+               }
+
                case LT_REFPREFIX: {
                        docstring arg;
                        lex >> arg;
@@ -609,7 +633,7 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                case LT_HTMLTAG:
                        lex >> htmltag_;
                        break;
-       
+
                case LT_HTMLATTR:
                        lex >> htmlattr_;
                        break;
@@ -617,23 +641,23 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                case LT_HTMLITEM:
                        lex >> htmlitemtag_;
                        break;
-       
+
                case LT_HTMLITEMATTR:
                        lex >> htmlitemattr_;
                        break;
-       
+
                case LT_HTMLLABEL:
                        lex >> htmllabeltag_;
                        break;
 
-               case LT_HTMLLABELATTR: 
+               case LT_HTMLLABELATTR:
                        lex >> htmllabelattr_;
                        break;
 
                case LT_HTMLLABELFIRST:
                        lex >> htmllabelfirst_;
                        break;
-                       
+
                case LT_HTMLSTYLE:
                        htmlstyle_ = lex.getLongString(from_ascii("EndHTMLStyle"));
                        break;
@@ -645,7 +669,7 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                case LT_HTMLPREAMBLE:
                        htmlpreamble_ = lex.getLongString(from_ascii("EndPreamble"));
                        break;
-               
+
                case LT_HTMLTITLE:
                        lex >> htmltitle_;
                        break;
@@ -1391,6 +1415,26 @@ void Layout::write(ostream & os) const
                }
                os << '\n';
        }
+       if (!autonests_.empty()) {
+               os << "\tAutoNests\n\t";
+               for (set<docstring>::const_iterator it = autonests_.begin();
+                    it != autonests_.end(); ++it) {
+                       if (it != autonests_.begin())
+                               os << ',';
+                       os << to_utf8(*it);
+               }
+               os << "\n\tEndAutoNests\n";
+       }
+       if (!autonested_by_.empty()) {
+               os << "\tIsAutoNestedBy\n\t";
+               for (set<docstring>::const_iterator it = autonested_by_.begin();
+                    it != autonested_by_.end(); ++it) {
+                       if (it != autonested_by_.begin())
+                               os << ',';
+                       os << to_utf8(*it);
+               }
+               os << "\n\tIsAutoNestedBy\n";
+       }
        if (refprefix.empty())
                os << "\tRefPrefix OFF\n";
        else
@@ -1476,56 +1520,51 @@ int Layout::requiredArgs() const
 }
 
 
-string const & Layout::htmltag() const 
-{ 
+string const & Layout::htmltag() const
+{
        if (htmltag_.empty())
                htmltag_ =  "div";
        return htmltag_;
 }
 
 
-string const & Layout::htmlattr() const 
-{ 
+string const & Layout::htmlattr() const
+{
        if (htmlattr_.empty())
                htmlattr_ = "class=\"" + defaultCSSClass() + "\"";
-       return htmlattr_; 
+       return htmlattr_;
 }
 
 
-string const & Layout::htmlitemtag() const 
-{ 
+string const & Layout::htmlitemtag() const
+{
        if (htmlitemtag_.empty())
                htmlitemtag_ = "div";
-       return htmlitemtag_; 
+       return htmlitemtag_;
 }
 
 
-string const & Layout::htmlitemattr() const 
-{ 
+string const & Layout::htmlitemattr() const
+{
        if (htmlitemattr_.empty())
                htmlitemattr_ = "class=\"" + defaultCSSItemClass() + "\"";
-       return htmlitemattr_; 
+       return htmlitemattr_;
 }
 
 
-string const & Layout::htmllabeltag() const 
-{ 
-       if (htmllabeltag_.empty()) {
-               if (labeltype != LABEL_ABOVE &&
-                   labeltype != LABEL_CENTERED)
+string const & Layout::htmllabeltag() const
+{
+       if (htmllabeltag_.empty())
                        htmllabeltag_ = "span";
-               else
-                       htmllabeltag_ = "div";
-       }
-       return htmllabeltag_; 
+       return htmllabeltag_;
 }
 
 
-string const & Layout::htmllabelattr() const 
-{ 
+string const & Layout::htmllabelattr() const
+{
        if (htmllabelattr_.empty())
                htmllabelattr_ = "class=\"" + defaultCSSLabelClass() + "\"";
-       return htmllabelattr_; 
+       return htmllabelattr_;
 }
 
 
@@ -1533,7 +1572,7 @@ docstring Layout::htmlstyle() const
 {
        if (!htmlstyle_.empty() && !htmlforcecss_)
                return htmlstyle_;
-       if (htmldefaultstyle_.empty()) 
+       if (htmldefaultstyle_.empty())
                makeDefaultCSS();
        docstring retval = htmldefaultstyle_;
        if (!htmlstyle_.empty())
@@ -1543,7 +1582,7 @@ docstring Layout::htmlstyle() const
 
 
 string Layout::defaultCSSClass() const
-{ 
+{
        if (!defaultcssclass_.empty())
                return defaultcssclass_;
        docstring d;
@@ -1578,19 +1617,19 @@ string makeMarginValue(char const * side, double d)
        return os.str();
 }
 
-}
+} // namespace
 
 
 void Layout::makeDefaultCSS() const
 {
        // this never needs to be redone, since reloading layouts will
        // wipe out what we did before.
-       if (!htmldefaultstyle_.empty()) 
+       if (!htmldefaultstyle_.empty())
                return;
-       
+
        // main font
        htmldefaultstyle_ = font.asCSS();
-       
+
        // bottom margins
        string tmp;
        if (topsep > 0)
@@ -1598,7 +1637,7 @@ void Layout::makeDefaultCSS() const
        if (bottomsep > 0)
                tmp += makeMarginValue("bottom", bottomsep);
        if (!leftmargin.empty()) {
-               // we can't really do what LyX does with the margin, so 
+               // we can't really do what LyX does with the margin, so
                // we'll just figure out how many characters it is
                int const len = leftmargin.length();
                tmp += makeMarginValue("left", len);
@@ -1607,7 +1646,7 @@ void Layout::makeDefaultCSS() const
                int const len = rightmargin.length();
                tmp += makeMarginValue("right", len);
        }
-               
+
        if (!tmp.empty()) {
                if (!htmldefaultstyle_.empty())
                        htmldefaultstyle_ += from_ascii("\n");
@@ -1622,21 +1661,21 @@ void Layout::makeDefaultCSS() const
 
        // wrap up what we have, if anything
        if (!htmldefaultstyle_.empty())
-               htmldefaultstyle_ = 
+               htmldefaultstyle_ =
                        from_ascii(htmltag() + "." + defaultCSSClass() + " {\n") +
                        htmldefaultstyle_ + from_ascii("\n}\n");
-       
+
        if (labeltype == LABEL_NO_LABEL || htmllabeltag() == "NONE")
                return;
-       
+
        docstring labelCSS;
-       
+
        // label font
        if (labelfont != font)
                labelCSS = labelfont.asCSS() + from_ascii("\n");
        if (labeltype == LABEL_CENTERED)
                labelCSS += from_ascii("text-align: center;\n");
-       
+
        if (!labelCSS.empty())
                htmldefaultstyle_ +=
                        from_ascii(htmllabeltag() + "." + defaultCSSLabelClass() + " {\n") +