]> git.lyx.org Git - lyx.git/blobdiff - src/Layout.cpp
Correctly set language after intitle paragraphs
[lyx.git] / src / Layout.cpp
index cb1f69bf8d65c616eeb0354b566bde6e7fdcb768..3c1a9bd955515d321e847e1a7c408a50e59de9f8 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,
@@ -72,9 +74,12 @@ enum LayoutTags {
        LT_LATEXTYPE,
        LT_LEFTDELIM,
        LT_LEFTMARGIN,
+       LT_NEED_CPROTECT,
+       LT_NEED_MBOXPROTECT,
        LT_NEED_PROTECT,
        LT_NEWLINE,
        LT_NEXTNOINDENT,
+       LT_PAR_GROUP,
        LT_PARINDENT,
        LT_PARSEP,
        LT_PARSKIP,
@@ -94,7 +99,7 @@ enum LayoutTags {
        LT_HTMLITEM,
        LT_HTMLITEMATTR,
        LT_HTMLLABEL,
-       LT_HTMLLABELATTR, 
+       LT_HTMLLABELATTR,
        LT_HTMLLABELFIRST,
        LT_HTMLPREAMBLE,
        LT_HTMLSTYLE,
@@ -104,22 +109,31 @@ enum LayoutTags {
        LT_SPELLCHECK,
        LT_REFPREFIX,
        LT_RESETARGS,
+       LT_RESUMECOUNTER,
+       LT_STEPMASTERCOUNTER,
        LT_RIGHTDELIM,
        LT_FORCELOCAL,
        LT_TOGGLE_INDENT,
+       LT_ADDTOTOC,
+       LT_ISTOCCAPTION,
        LT_INTITLE // keep this last!
 };
 
 /////////////////////
 
 Layout::Layout()
+       : add_to_toc_(false), is_toc_caption_(true)
 {
        unknown_ = false;
        margintype = MARGIN_STATIC;
        latextype = LATEX_PARAGRAPH;
+       resumecounter = false;
+       stepmastercounter = false;
        intitle = false;
        inpreamble = false;
        needprotect = false;
+       needcprotect = false;
+       needmboxprotect = false;
        keepempty = false;
        font = inherit_font;
        labelfont = inherit_font;
@@ -151,6 +165,7 @@ Layout::Layout()
        forcelocal = 0;
        itemcommand_ = "item";
        toggle_indent = ITOGGLE_DOCUMENT_DEFAULT;
+       par_group_ = false;
 }
 
 
@@ -178,9 +193,11 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
 {
        // This table is sorted alphabetically [asierra 30March96]
        LexerKeyword layoutTags[] = {
+               { "addtotoc",       LT_ADDTOTOC },
                { "align",          LT_ALIGN },
                { "alignpossible",  LT_ALIGNPOSSIBLE },
                { "argument",       LT_ARGUMENT },
+               { "autonests",      LT_AUTONESTS },
                { "babelpreamble",  LT_BABELPREAMBLE },
                { "bottomsep",      LT_BOTTOMSEP },
                { "category",       LT_CATEGORY },
@@ -207,6 +224,8 @@ 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 },
                { "itemtag",        LT_ITEMTAG },
@@ -227,10 +246,13 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                { "leftdelim",      LT_LEFTDELIM },
                { "leftmargin",     LT_LEFTMARGIN },
                { "margin",         LT_MARGIN },
+               { "needcprotect",    LT_NEED_CPROTECT },
+               { "needmboxprotect", LT_NEED_MBOXPROTECT },
                { "needprotect",    LT_NEED_PROTECT },
                { "newline",        LT_NEWLINE },
                { "nextnoindent",   LT_NEXTNOINDENT },
                { "obsoletedby",    LT_OBSOLETEDBY },
+               { "paragraphgroup", LT_PAR_GROUP },
                { "parbreakisnewline", LT_PARBREAK_IS_NEWLINE },
                { "parindent",      LT_PARINDENT },
                { "parsep",         LT_PARSEP },
@@ -241,10 +263,12 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                { "refprefix",      LT_REFPREFIX },
                { "requires",       LT_REQUIRES },
                { "resetargs",      LT_RESETARGS },
+               { "resumecounter",  LT_RESUMECOUNTER },
                { "rightdelim",     LT_RIGHTDELIM },
                { "rightmargin",    LT_RIGHTMARGIN },
                { "spacing",        LT_SPACING },
                { "spellcheck",     LT_SPELLCHECK },
+               { "stepmastercounter",  LT_STEPMASTERCOUNTER },
                { "textfont",       LT_TEXTFONT },
                { "toclevel",       LT_TOCLEVEL },
                { "toggleindent",   LT_TOGGLE_INDENT },
@@ -269,7 +293,7 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                        error = true;
                        continue;
 
-               default: 
+               default:
                        break;
                }
                switch (static_cast<LayoutTags>(le)) {
@@ -314,7 +338,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"
@@ -356,9 +380,18 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                                latexargs_.clear();
                                itemargs_.clear();
                                postcommandargs_.clear();
+                               listpreamble_.clear();
                        }
                        break;
 
+               case LT_RESUMECOUNTER:
+                       lex >> resumecounter;
+                       break;
+
+               case LT_STEPMASTERCOUNTER:
+                       lex >> stepmastercounter;
+                       break;
+
                case LT_ARGUMENT:
                        readArgument(lex);
                        break;
@@ -367,6 +400,14 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                        lex >> needprotect;
                        break;
 
+               case LT_NEED_CPROTECT:
+                       lex >> needcprotect;
+                       break;
+
+               case LT_NEED_MBOXPROTECT:
+                       lex >> needmboxprotect;
+                       break;
+
                case LT_KEEPEMPTY:
                        lex >> keepempty;
                        break;
@@ -443,15 +484,15 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                        break;
 
                case LT_PREAMBLE:
-                       preamble_ = from_utf8(lex.getLongString("EndPreamble"));
+                       preamble_ = lex.getLongString(from_ascii("EndPreamble"));
                        break;
 
                case LT_LANGPREAMBLE:
-                       langpreamble_ = from_utf8(lex.getLongString("EndLangPreamble"));
+                       langpreamble_ = lex.getLongString(from_ascii("EndLangPreamble"));
                        break;
 
                case LT_BABELPREAMBLE:
-                       babelpreamble_ = from_utf8(lex.getLongString("EndBabelPreamble"));
+                       babelpreamble_ = lex.getLongString(from_ascii("EndBabelPreamble"));
                        break;
 
                case LT_LABELTYPE:
@@ -514,7 +555,7 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                case LT_ALIGN:
                        readAlign(lex);
                        break;
-       
+
                case LT_ALIGNPOSSIBLE:
                        readAlignPossible(lex);
                        break;
@@ -523,23 +564,23 @@ 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:
+                       lex >> par_group_;
                        break;
 
                case LT_FREE_SPACING:
@@ -564,12 +605,36 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
 
                case LT_REQUIRES: {
                        lex.eatLine();
-                       vector<string> const req = 
-                               getVectorFromString(lex.getString());
+                       vector<string> const req =
+                               getVectorFromString(lex.getString(true));
                        requires_.insert(req.begin(), req.end());
                        break;
                }
-                       
+
+               case LT_AUTONESTS: {
+                       docstring autonest = lex.getLongString(from_ascii("EndAutoNests"));
+                       autonest = subst(autonest, from_ascii("\n"), docstring());
+                       autonest = subst(autonest, from_ascii("\t"), docstring());
+                       autonest = subst(autonest, from_ascii("\""), docstring());
+                       autonest = subst(autonest, '_', ' ');
+                       vector<docstring> const autonests =
+                               getVectorFromString(autonest, from_ascii(","), false, true);
+                       autonests_.insert(autonests.begin(), autonests.end());
+                       break;
+               }
+
+               case LT_AUTONESTEDBY: {
+                       docstring autonest = lex.getLongString(from_ascii("EndIsAutoNestedBy"));
+                       autonest = subst(autonest, from_ascii("\n"), docstring());
+                       autonest = subst(autonest, from_ascii("\t"), docstring());
+                       autonest = subst(autonest, from_ascii("\""), docstring());
+                       autonest = subst(autonest, '_', ' ');
+                       vector<docstring> const autonests =
+                               getVectorFromString(autonest, from_ascii(","), false, true);
+                       autonested_by_.insert(autonests.begin(), autonests.end());
+                       break;
+               }
+
                case LT_REFPREFIX: {
                        docstring arg;
                        lex >> arg;
@@ -583,7 +648,7 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                case LT_HTMLTAG:
                        lex >> htmltag_;
                        break;
-       
+
                case LT_HTMLATTR:
                        lex >> htmlattr_;
                        break;
@@ -591,25 +656,25 @@ 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_ = from_utf8(lex.getLongString("EndHTMLStyle"));
+                       htmlstyle_ = lex.getLongString(from_ascii("EndHTMLStyle"));
                        break;
 
                case LT_HTMLFORCECSS:
@@ -617,9 +682,9 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                        break;
 
                case LT_HTMLPREAMBLE:
-                       htmlpreamble_ = from_utf8(lex.getLongString("EndPreamble"));
+                       htmlpreamble_ = lex.getLongString(from_ascii("EndPreamble"));
                        break;
-               
+
                case LT_HTMLTITLE:
                        lex >> htmltitle_;
                        break;
@@ -631,6 +696,16 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                case LT_FORCELOCAL:
                        lex >> forcelocal;
                        break;
+
+               case LT_ADDTOTOC:
+                       lex >> toc_type_;
+                       add_to_toc_ = !toc_type_.empty();
+                       break;
+
+               case LT_ISTOCCAPTION:
+                       lex >> is_toc_caption_;
+                       break;
+
                }
        }
        lex.popTable();
@@ -875,12 +950,15 @@ void Layout::readLatexType(Lexer & lex)
                return;
        case LATEX_PARAGRAPH:
        case LATEX_COMMAND:
-       case LATEX_ENVIRONMENT:
        case LATEX_ITEM_ENVIRONMENT:
-       case LATEX_BIB_ENVIRONMENT:
        case LATEX_LIST_ENVIRONMENT:
                latextype = static_cast<LatexType>(le);
                break;
+       case LATEX_ENVIRONMENT:
+       case LATEX_BIB_ENVIRONMENT:
+               latextype = static_cast<LatexType>(le);
+               par_group_ = true;
+               break;
        default:
                LYXERR0("Unhandled value " << le);
                break;
@@ -935,15 +1013,22 @@ void Layout::readArgument(Lexer & lex)
        latexarg arg;
        // writeArgument() makes use of these default values
        arg.mandatory = false;
+       arg.nodelims = false;
        arg.autoinsert = false;
+       arg.insertcotext = false;
+       arg.insertonnewline = false;
        bool error = false;
        bool finished = false;
        arg.font = inherit_font;
        arg.labelfont = inherit_font;
+       arg.is_toc_caption = false;
+       arg.passthru = PT_INHERITED;
+       arg.free_spacing = false;
        string id;
        lex >> id;
        bool const itemarg = prefixIs(id, "item:");
        bool const postcmd = prefixIs(id, "post:");
+       bool const listpreamble = prefixIs(id, "listpreamble:");
 
        while (!finished && lex.isOK() && !error) {
                lex.next();
@@ -965,6 +1050,9 @@ void Layout::readArgument(Lexer & lex)
                } else if (tok == "autoinsert") {
                        lex.next();
                        arg.autoinsert = lex.getBool();
+               } else if (tok == "insertcotext") {
+                       lex.next();
+                       arg.insertcotext = lex.getBool();
                } else if (tok == "leftdelim") {
                        lex.next();
                        arg.ldelim = lex.getDocString();
@@ -990,6 +1078,9 @@ void Layout::readArgument(Lexer & lex)
                } else if (tok == "decoration") {
                        lex.next();
                        arg.decoration = lex.getString();
+               } else if (tok == "newlinecmd") {
+                       lex.next();
+                       arg.newlinecmd = lex.getString();
                } else if (tok == "font") {
                        arg.font = lyxRead(lex, arg.font);
                } else if (tok == "labelfont") {
@@ -997,6 +1088,21 @@ void Layout::readArgument(Lexer & lex)
                } else if (tok == "passthruchars") {
                        lex.next();
                        arg.pass_thru_chars = lex.getDocString();
+               } else if (tok == "passthru") {
+                       lex.next();
+                       docstring value = lex.getDocString();
+                       if (value == "true" || value == "1")
+                               arg.passthru = PT_TRUE;
+                       else if (value == "false" || value == "0")
+                               arg.passthru = PT_FALSE;
+                       else
+                               arg.passthru = PT_INHERITED;
+               } else if (tok == "istoccaption") {
+                       lex.next();
+                       arg.is_toc_caption = lex.getBool();
+               } else if (tok == "freespacing") {
+                       lex.next();
+                       arg.free_spacing = lex.getBool();
                } else {
                        lex.printError("Unknown tag");
                        error = true;
@@ -1008,7 +1114,11 @@ void Layout::readArgument(Lexer & lex)
                itemargs_[id] = arg;
        else if (postcmd)
                postcommandargs_[id] = arg;
-       else
+       else if (listpreamble) {
+               // list preamble has no delimiters by default
+               arg.nodelims = true;
+               listpreamble_[id] = arg;
+       } else
                latexargs_[id] = arg;
 }
 
@@ -1024,6 +1134,8 @@ void writeArgument(ostream & os, string const & id, Layout::latexarg const & arg
                os << "\t\tMandatory " << arg.mandatory << '\n';
        if (arg.autoinsert)
                os << "\t\tAutoinsert " << arg.autoinsert << '\n';
+       if (arg.insertcotext)
+               os << "\t\tInsertCotext " << arg.insertcotext << '\n';
        if (!arg.ldelim.empty())
                os << "\t\tLeftDelim \""
                   << to_utf8(subst(arg.ldelim, from_ascii("\n"), from_ascii("<br/>")))
@@ -1042,19 +1154,34 @@ void writeArgument(ostream & os, string const & id, Layout::latexarg const & arg
                os << "\t\tRequires \"" << arg.requires << "\"\n";
        if (!arg.decoration.empty())
                os << "\t\tDecoration \"" << arg.decoration << "\"\n";
+       if (!arg.newlinecmd.empty())
+               os << "\t\tNewlineCmd \"" << arg.newlinecmd << "\"\n";
        if (arg.font != inherit_font)
                lyxWrite(os, arg.font, "Font", 2);
        if (arg.labelfont != inherit_font)
                lyxWrite(os, arg.labelfont, "LabelFont", 2);
+       switch (arg.passthru) {
+               case PT_TRUE:
+                       os << "\t\tPassThru true\n";
+                       break;
+               case PT_FALSE:
+                       os << "\t\tPassThru false\n";
+                       break;
+               case PT_INHERITED:
+                       os << "\t\tPassThru inherited\n";
+                       break;
+       }
        if (!arg.pass_thru_chars.empty())
                os << "\t\tPassThruChars \"" << to_utf8(arg.pass_thru_chars) << "\"\n";
+       if (arg.free_spacing)
+               os << "\t\tFreeSpacing " << arg.free_spacing << "\n";
        os << "\tEndArgument\n";
 }
 
 
 void Layout::write(ostream & os) const
 {
-       os << "Style " << to_utf8(name_) << '\n';
+       os << "Style \"" << to_utf8(name_) << "\"\n";
        if (!category_.empty() && obsoleted_by_.empty())
                os << "\tCategory \"" << to_utf8(category_) << "\"\n";
        // Can't deduce Copystyle here :-(
@@ -1104,7 +1231,9 @@ void Layout::write(ostream & os) const
        }
        os << "\tInTitle " << intitle << "\n"
              "\tInPreamble " << inpreamble << "\n"
-             "\tTocLevel " << toclevel << '\n';
+             "\tTocLevel " << toclevel << "\n"
+             "\tResumeCounter " << resumecounter << "\n"
+            "\tStepMasterCounter " << stepmastercounter << '\n';
        // ResetArgs does not make sense here
        for (LaTeXArgMap::const_iterator it = latexargs_.begin();
             it != latexargs_.end(); ++it)
@@ -1115,7 +1244,12 @@ void Layout::write(ostream & os) const
        for (LaTeXArgMap::const_iterator it = postcommandargs_.begin();
             it != postcommandargs_.end(); ++it)
                writeArgument(os, it->first, it->second);
+       for (LaTeXArgMap::const_iterator it = listpreamble_.begin();
+            it != listpreamble_.end(); ++it)
+               writeArgument(os, it->first, it->second);
        os << "\tNeedProtect " << needprotect << "\n"
+             "\tNeedCProtect " << needcprotect << "\n"
+             "\tNeedMBoxProtect " << needmboxprotect << "\n"
              "\tKeepEmpty " << keepempty << '\n';
        if (labelfont == font)
                lyxWrite(os, font, "Font", 1);
@@ -1204,6 +1338,7 @@ void Layout::write(ostream & os) const
                os << "\tEndLabelType Static\n";
                break;
        }
+       os << "\tParagraphGroup \"" << par_group_ << "\"\n";
        if (!leftmargin.empty())
                os << "\tLeftMargin \"" << to_utf8(leftmargin) << "\"\n";
        if (!rightmargin.empty())
@@ -1248,8 +1383,6 @@ void Layout::write(ostream & os) const
                bool first = true;
                os << "\tAlignPossible";
                if (alignpossible & LYX_ALIGN_BLOCK) {
-                       if (!first)
-                               os << ',';
                        os << " Block";
                        first = false;
                }
@@ -1320,6 +1453,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\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\tEndIsAutoNestedBy\n";
+       }
        if (refprefix.empty())
                os << "\tRefPrefix OFF\n";
        else
@@ -1353,11 +1506,20 @@ void Layout::write(ostream & os) const
 }
 
 
+bool Layout::hasArgs() const
+{
+       return !latexargs_.empty() || !postcommandargs_.empty() ||
+               !itemargs_.empty() || !listpreamble_.empty();
+}
+
+
 Layout::LaTeXArgMap Layout::args() const
 {
        LaTeXArgMap args = latexargs_;
        if (!postcommandargs_.empty())
                args.insert(postcommandargs_.begin(), postcommandargs_.end());
+       if (!listpreamble_.empty())
+               args.insert(listpreamble_.begin(), listpreamble_.end());
        if (!itemargs_.empty())
                args.insert(itemargs_.begin(), itemargs_.end());
        return args;
@@ -1398,56 +1560,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_;
 }
 
 
@@ -1455,7 +1612,7 @@ docstring Layout::htmlstyle() const
 {
        if (!htmlstyle_.empty() && !htmlforcecss_)
                return htmlstyle_;
-       if (htmldefaultstyle_.empty()) 
+       if (htmldefaultstyle_.empty())
                makeDefaultCSS();
        docstring retval = htmldefaultstyle_;
        if (!htmlstyle_.empty())
@@ -1465,7 +1622,7 @@ docstring Layout::htmlstyle() const
 
 
 string Layout::defaultCSSClass() const
-{ 
+{
        if (!defaultcssclass_.empty())
                return defaultcssclass_;
        docstring d;
@@ -1500,19 +1657,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)
@@ -1520,7 +1677,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);
@@ -1529,7 +1686,7 @@ void Layout::makeDefaultCSS() const
                int const len = rightmargin.length();
                tmp += makeMarginValue("right", len);
        }
-               
+
        if (!tmp.empty()) {
                if (!htmldefaultstyle_.empty())
                        htmldefaultstyle_ += from_ascii("\n");
@@ -1544,21 +1701,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") +