]> git.lyx.org Git - lyx.git/blobdiff - src/Layout.cpp
Move Lexer to support/ directory (and lyx::support namespace)
[lyx.git] / src / Layout.cpp
index e037ad1c5e69d6840a0e4e9679d477aa46a77c86..50a4d05ac6b72b259071f82edc6c99f5edcd032a 100644 (file)
 #include <config.h>
 
 #include "Layout.h"
-#include "Lexer.h"
 #include "output_xhtml.h"
 #include "TextClass.h"
 
 #include "support/debug.h"
 #include "support/docstream.h"
 #include "support/lassert.h"
+#include "support/Lexer.h"
 #include "support/lstrings.h"
 #include "support/textutils.h"
 
@@ -94,6 +94,7 @@ enum LayoutTags {
        LT_ITEMTAG,
        LT_HTMLTAG,
        LT_HTMLATTR,
+       LT_HTMLCLASS,
        LT_HTMLITEM,
        LT_HTMLITEMATTR,
        LT_HTMLLABEL,
@@ -110,6 +111,7 @@ enum LayoutTags {
        LT_DOCBOOKINNERTAGTYPE,
        LT_DOCBOOKININFO,
        LT_DOCBOOKABSTRACT,
+       LT_DOCBOOKGENERATETITLE,
        LT_DOCBOOKWRAPPERTAG,
        LT_DOCBOOKWRAPPERATTR,
        LT_DOCBOOKWRAPPERTAGTYPE,
@@ -142,6 +144,7 @@ enum LayoutTags {
        LT_TOGGLE_INDENT,
        LT_ADDTOTOC,
        LT_ISTOCCAPTION,
+       LT_HTMLINTOC,
        LT_INTITLE // keep this last!
 };
 
@@ -187,6 +190,7 @@ Layout::Layout()
        htmllabelfirst_ = false;
        htmlforcecss_ = false;
        htmltitle_ = false;
+       htmlintoc_ = true;
        docbookabstract_ = false;
        docbookwrappermergewithprevious_ = false;
        docbooksection_ = false;
@@ -237,6 +241,7 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass,
                { "docbookabstract",           LT_DOCBOOKABSTRACT },
                { "docbookattr",               LT_DOCBOOKATTR },
                { "docbookforceabstracttag",   LT_DOCBOOKFORCEABSTRACTTAG },
+               { "docbookgeneratetitle",      LT_DOCBOOKGENERATETITLE },
                { "docbookininfo",             LT_DOCBOOKININFO },
                { "docbookinnerattr",          LT_DOCBOOKINNERATTR },
                { "docbookinnertag",           LT_DOCBOOKINNERTAG },
@@ -269,7 +274,9 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass,
                { "forcelocal",     LT_FORCELOCAL },
                { "freespacing",    LT_FREE_SPACING },
                { "htmlattr",       LT_HTMLATTR },
+               { "htmlclass",      LT_HTMLCLASS },
                { "htmlforcecss",   LT_HTMLFORCECSS },
+               { "htmlintoc",      LT_HTMLINTOC },
                { "htmlitem",       LT_HTMLITEM },
                { "htmlitemattr",   LT_HTMLITEMATTR },
                { "htmllabel",      LT_HTMLLABEL },
@@ -510,7 +517,7 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass,
 
                case LT_LATEXPARAM:
                        lex >> latexparam_;
-                       latexparam_ = subst(latexparam_, "&quot;", "\"");
+                       latexparam_ = subst(latexparam_, "&#34;", "\"");
                        break;
 
                case LT_LEFTDELIM:
@@ -703,6 +710,10 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass,
                        break;
                }
 
+               case LT_HTMLINTOC:
+                       lex >> htmlintoc_;
+                       break;
+
                case LT_HTMLTAG:
                        lex >> htmltag_;
                        break;
@@ -711,6 +722,10 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass,
                        lex >> htmlattr_;
                        break;
 
+               case LT_HTMLCLASS:
+                       lex >> htmlclass_;
+                       break;
+
                case LT_HTMLITEM:
                        lex >> htmlitemtag_;
                        break;
@@ -859,6 +874,10 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass,
             lex >> docbooknofontinside_;
             break;
 
+        case LT_DOCBOOKGENERATETITLE:
+            lex >> docbookgeneratetitle_;
+            break;
+
                case LT_SPELLCHECK:
                        lex >> spellcheck;
                        break;
@@ -1245,7 +1264,7 @@ void Layout::readArgument(Lexer & lex, bool validating)
                        lex.next();
                        arg.tooltip = lex.getDocString();
                } else if (tok == "requires") {
-                       lex.next();
+                       lex.eatLine();
                        arg.required = lex.getString();
                } else if (tok == "decoration") {
                        lex.next();
@@ -1284,6 +1303,12 @@ void Layout::readArgument(Lexer & lex, bool validating)
                } else if (tok == "docbooktagtype") {
                        lex.next();
                        arg.docbooktagtype = lex.getDocString();
+               } else if (tok == "docbookargumentaftermaintag") {
+                       lex.next();
+                       arg.docbookargumentaftermaintag = lex.getBool();
+               } else if (tok == "docbookargumentbeforemaintag") {
+                       lex.next();
+                       arg.docbookargumentbeforemaintag = lex.getBool();
                } else {
                        lex.printError("Unknown tag");
                        error = true;
@@ -1325,7 +1350,7 @@ void writeArgument(ostream & os, string const & id, Layout::latexarg const & arg
        if (!arg.tooltip.empty())
                os << "\t\tToolTip \"" << to_utf8(arg.tooltip) << "\"\n";
        if (!arg.required.empty())
-               os << "\t\tRequires \"" << arg.required << "\"\n";
+               os << "\t\tRequires " << arg.required << "\n";
        if (!arg.decoration.empty())
                os << "\t\tDecoration \"" << arg.decoration << "\"\n";
        if (!arg.newlinecmd.empty())
@@ -1436,7 +1461,7 @@ void Layout::write(ostream & os) const
        if (!latexname_.empty())
                os << "\tLatexName \"" << latexname_ << "\"\n";
        if (!latexparam_.empty())
-               os << "\tLatexParam \"" << subst(latexparam_, "\"", "&quot;")
+               os << "\tLatexParam \"" << subst(latexparam_, "\"", "&#34;")
                   << "\"\n";
        if (!leftdelim_.empty())
                os << "\tLeftDelim "
@@ -1655,6 +1680,10 @@ void Layout::write(ostream & os) const
                os << "\tHTMLTag " << htmltag_ << '\n';
        if (!htmlattr_.empty())
                os << "\tHTMLAttr " << htmlattr_ << '\n';
+       if (!htmlclass_.empty())
+               os << "\tHTMLClass " << htmlclass_ << '\n';
+       if (!htmlintoc_)
+               os << "\tHTMLInToc " << htmlintoc_ << '\n';
        if (!htmlitemtag_.empty())
                os << "\tHTMLItem " << htmlitemtag_ << '\n';
        if (!htmlitemattr_.empty())
@@ -1674,56 +1703,56 @@ void Layout::write(ostream & os) const
                   << to_utf8(rtrim(htmlpreamble_, "\n"))
                   << "\n\tEndPreamble\n";
        os << "\tHTMLTitle " << htmltitle_ << "\n";
-       if(!docbooktag_.empty())
+       if (!docbooktag_.empty())
                os << "\tDocBookTag " << docbooktag_ << '\n';
-       if(!docbookattr_.empty())
+       if (!docbookattr_.empty())
                os << "\tDocBookAttr \"" << docbookattr_ << "\"\n";
-       if(!docbooktagtype_.empty())
+       if (!docbooktagtype_.empty())
                os << "\tDocBookTagType " << docbooktagtype_ << '\n';
-       if(!docbookinnertag_.empty())
+       if (!docbookinnertag_.empty())
                os << "\tDocBookInnerTag " << docbookinnertag_ << '\n';
-       if(!docbookinnerattr_.empty())
+       if (!docbookinnerattr_.empty())
                os << "\tDocBookInnerAttr \"" << docbookinnerattr_ << "\"\n";
-       if(!docbookinnertagtype_.empty())
+       if (!docbookinnertagtype_.empty())
                os << "\tDocBookInnerTagType " << docbookinnertagtype_ << '\n';
-       if(!docbookininfo_.empty())
+       if (!docbookininfo_.empty())
                os << "\tDocBookInInfo " << docbookininfo_ << '\n';
        os << "\tDocBookAbstract " << docbookabstract_ << '\n';
-       if(!docbookwrappertag_.empty())
+       if (!docbookwrappertag_.empty())
                os << "\tDocBookWrapperTag " << docbookwrappertag_ << '\n';
-       if(!docbookwrapperattr_.empty())
+       if (!docbookwrapperattr_.empty())
                os << "\tDocBookWrapperAttr " << docbookwrapperattr_ << '\n';
-       if(!docbookwrappertagtype_.empty())
+       if (!docbookwrappertagtype_.empty())
                os << "\tDocBookWrapperTagType " << docbookwrappertagtype_ << '\n';
        os << "\tDocBookSection " << docbooksection_ << '\n';
-       if(!docbooksectiontag_.empty())
+       if (!docbooksectiontag_.empty())
                os << "\tDocBookSectionTag " << docbooksectiontag_ << '\n';
-       if(!docbookitemtag_.empty())
+       if (!docbookitemtag_.empty())
                os << "\tDocBookItemTag " << docbookitemtag_ << '\n';
-       if(!docbookitemattr_.empty())
+       if (!docbookitemattr_.empty())
                os << "\tDocBookItemAttr " << docbookitemattr_ << '\n';
-       if(!docbookitemtagtype_.empty())
+       if (!docbookitemtagtype_.empty())
                os << "\tDocBookItemTagType " << docbookitemtagtype_ << '\n';
-       if(!docbookitemwrappertag_.empty())
+       if (!docbookitemwrappertag_.empty())
                os << "\tDocBookItemWrapperTag " << docbookitemwrappertag_ << '\n';
-       if(!docbookitemwrapperattr_.empty())
+       if (!docbookitemwrapperattr_.empty())
                os << "\tDocBookItemWrapperAttr " << docbookitemwrapperattr_ << '\n';
-       if(!docbookitemwrappertagtype_.empty())
+       if (!docbookitemwrappertagtype_.empty())
                os << "\tDocBookItemWrapperTagType " << docbookitemwrappertagtype_ << '\n';
        os << "\tDocBookWrapperMergeWithPrevious " << docbookwrappermergewithprevious_ << '\n';
-       if(!docbookitemlabeltag_.empty())
+       if (!docbookitemlabeltag_.empty())
                os << "\tDocBookItemLabelTag " << docbookitemlabeltag_ << '\n';
-       if(!docbookitemlabelattr_.empty())
+       if (!docbookitemlabelattr_.empty())
                os << "\tDocBookItemLabelAttr " << docbookitemlabelattr_ << '\n';
-       if(!docbookitemlabeltagtype_.empty())
+       if (!docbookitemlabeltagtype_.empty())
                os << "\tDocBookItemLabelTagType " << docbookitemlabeltagtype_ << '\n';
-       if(!docbookiteminnertag_.empty())
+       if (!docbookiteminnertag_.empty())
                os << "\tDocBookItemInnerTag " << docbookiteminnertag_ << '\n';
-       if(!docbookiteminnerattr_.empty())
+       if (!docbookiteminnerattr_.empty())
                os << "\tDocBookItemInnerAttr " << docbookiteminnerattr_ << '\n';
-       if(!docbookiteminnertagtype_.empty())
+       if (!docbookiteminnertagtype_.empty())
                os << "\tDocBookItemInnerTagType " << docbookiteminnertagtype_ << '\n';
-       if(!docbookforceabstracttag_.empty())
+       if (!docbookforceabstracttag_.empty())
                os << "\tDocBookForceAbstractTag " << docbookforceabstracttag_ << '\n';
     os << "\tDocBookNoFontInside " << docbooknofontinside_ << "\n"
              "\tSpellcheck " << spellcheck << "\n"
@@ -1794,11 +1823,25 @@ string const & Layout::htmltag() const
 }
 
 
-string const & Layout::htmlattr() const
+string const & Layout::htmlclass() const
 {
-       if (htmlattr_.empty())
-               htmlattr_ = "class=\"" + defaultCSSClass() + "\"";
-       return htmlattr_;
+       // If it's an enumeration or itemize list, then we recalculate the class each
+       // time through (unless it has been given explicitly). So we do nothing here.
+       if (htmlclass_.empty() && labeltype != LABEL_ENUMERATE && labeltype != LABEL_ITEMIZE)
+               htmlclass_ = defaultCSSClass();
+       return htmlclass_;
+}
+
+
+string const & Layout::htmlGetAttrString() const {
+       if (!htmlfullattrs_.empty())
+               return htmlfullattrs_;
+       htmlfullattrs_ = htmlclass();
+       if (!htmlfullattrs_.empty())
+               htmlfullattrs_ = "class='" + htmlfullattrs_ + "'";
+       if (!htmlattr_.empty())
+               htmlfullattrs_ += " " + htmlattr_;
+       return htmlfullattrs_;
 }