#include <config.h>
#include "Layout.h"
-#include "FontInfo.h"
-#include "Language.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/Messages.h"
#include "support/textutils.h"
LT_FREE_SPACING,
LT_PASS_THRU,
LT_PASS_THRU_CHARS,
+ LT_NO_PASS_THRU_CHARS,
LT_PARBREAK_IS_NEWLINE,
LT_ITEMCOMMAND,
LT_ITEMSEP,
LT_ITEMTAG,
LT_HTMLTAG,
LT_HTMLATTR,
+ LT_HTMLCLASS,
LT_HTMLITEM,
LT_HTMLITEMATTR,
LT_HTMLLABEL,
LT_DOCBOOKTAG,
LT_DOCBOOKATTR,
LT_DOCBOOKTAGTYPE,
+ LT_DOCBOOKINNERATTR,
+ LT_DOCBOOKINNERTAG,
+ LT_DOCBOOKINNERTAGTYPE,
LT_DOCBOOKININFO,
LT_DOCBOOKABSTRACT,
+ LT_DOCBOOKGENERATETITLE,
LT_DOCBOOKWRAPPERTAG,
LT_DOCBOOKWRAPPERATTR,
LT_DOCBOOKWRAPPERTAGTYPE,
LT_DOCBOOKWRAPPERMERGEWITHPREVIOUS,
+ LT_DOCBOOKSECTION,
LT_DOCBOOKSECTIONTAG,
LT_DOCBOOKITEMWRAPPERTAG,
LT_DOCBOOKITEMWRAPPERATTR,
LT_DOCBOOKITEMINNERATTR,
LT_DOCBOOKITEMINNERTAGTYPE,
LT_DOCBOOKFORCEABSTRACTTAG,
+ LT_DOCBOOKNOFONTINSIDE,
LT_INPREAMBLE,
LT_HTMLTITLE,
LT_SPELLCHECK,
LT_REFPREFIX,
LT_RESETARGS,
LT_RESUMECOUNTER,
- LT_STEPMASTERCOUNTER,
+ LT_STEPPARENTCOUNTER,
LT_RIGHTDELIM,
LT_FORCELOCAL,
LT_TOGGLE_INDENT,
LT_ADDTOTOC,
LT_ISTOCCAPTION,
+ LT_HTMLINTOC,
LT_INTITLE // keep this last!
};
margintype = MARGIN_STATIC;
latextype = LATEX_PARAGRAPH;
resumecounter = false;
- stepmastercounter = false;
+ stepparentcounter = false;
intitle = false;
inpreamble = false;
needprotect = false;
needcprotect = false;
+ nocprotect = false;
needmboxprotect = false;
keepempty = false;
font = inherit_font;
htmllabelfirst_ = false;
htmlforcecss_ = false;
htmltitle_ = false;
+ htmlintoc_ = true;
docbookabstract_ = false;
docbookwrappermergewithprevious_ = false;
+ docbooksection_ = false;
spellcheck = true;
forcelocal = 0;
itemcommand_ = "item";
{ "docbookabstract", LT_DOCBOOKABSTRACT },
{ "docbookattr", LT_DOCBOOKATTR },
{ "docbookforceabstracttag", LT_DOCBOOKFORCEABSTRACTTAG },
+ { "docbookgeneratetitle", LT_DOCBOOKGENERATETITLE },
{ "docbookininfo", LT_DOCBOOKININFO },
+ { "docbookinnerattr", LT_DOCBOOKINNERATTR },
+ { "docbookinnertag", LT_DOCBOOKINNERTAG },
+ { "docbookinnertagtype", LT_DOCBOOKINNERTAGTYPE },
{ "docbookitemattr", LT_DOCBOOKITEMATTR },
{ "docbookiteminnerattr", LT_DOCBOOKITEMINNERATTR },
{ "docbookiteminnertag", LT_DOCBOOKITEMINNERTAG },
{ "docbookitemwrapperattr", LT_DOCBOOKITEMWRAPPERATTR },
{ "docbookitemwrappertag", LT_DOCBOOKITEMWRAPPERTAG },
{ "docbookitemwrappertagtype", LT_DOCBOOKITEMWRAPPERTAGTYPE },
+ { "docbooknofontinside", LT_DOCBOOKNOFONTINSIDE, },
+ { "docbooksection", LT_DOCBOOKSECTION },
{ "docbooksectiontag", LT_DOCBOOKSECTIONTAG },
{ "docbooktag", LT_DOCBOOKTAG },
{ "docbooktagtype", LT_DOCBOOKTAGTYPE },
{ "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 },
{ "needprotect", LT_NEED_PROTECT },
{ "newline", LT_NEWLINE },
{ "nextnoindent", LT_NEXTNOINDENT },
+ { "nopassthruchars", LT_NO_PASS_THRU_CHARS },
{ "obsoletedby", LT_OBSOLETEDBY },
{ "paragraphgroup", LT_PAR_GROUP },
{ "parbreakisnewline", LT_PARBREAK_IS_NEWLINE },
{ "rightmargin", LT_RIGHTMARGIN },
{ "spacing", LT_SPACING },
{ "spellcheck", LT_SPELLCHECK },
- { "stepmastercounter", LT_STEPMASTERCOUNTER },
+ { "stepparentcounter", LT_STEPPARENTCOUNTER },
{ "textfont", LT_TEXTFONT },
{ "toclevel", LT_TOCLEVEL },
{ "toggleindent", LT_TOGGLE_INDENT },
lex >> resumecounter;
break;
- case LT_STEPMASTERCOUNTER:
- lex >> stepmastercounter;
+ case LT_STEPPARENTCOUNTER:
+ lex >> stepparentcounter;
break;
case LT_ARGUMENT:
lex >> needprotect;
break;
- case LT_NEED_CPROTECT:
- lex >> needcprotect;
+ case LT_NEED_CPROTECT: {
+ int i;
+ lex >> i;
+ nocprotect = false;
+ needcprotect = false;
+ if (i == -1)
+ nocprotect = true;
+ else if (i == 1)
+ needcprotect = true;
break;
+ }
case LT_NEED_MBOXPROTECT:
lex >> needmboxprotect;
case LT_LATEXPARAM:
lex >> latexparam_;
- latexparam_ = subst(latexparam_, """, "\"");
+ latexparam_ = subst(latexparam_, """, "\"");
break;
case LT_LEFTDELIM:
lex >> pass_thru_chars;
break;
+ case LT_NO_PASS_THRU_CHARS:
+ lex >> no_pass_thru_chars;
+ break;
+
case LT_PARBREAK_IS_NEWLINE:
lex >> parbreak_is_newline;
break;
break;
}
+ case LT_HTMLINTOC:
+ lex >> htmlintoc_;
+ break;
+
case LT_HTMLTAG:
lex >> htmltag_;
break;
lex >> htmlattr_;
break;
+ case LT_HTMLCLASS:
+ lex >> htmlclass_;
+ break;
+
case LT_HTMLITEM:
lex >> htmlitemtag_;
break;
lex >> docbooktagtype_;
break;
+ case LT_DOCBOOKINNERTAG:
+ lex >> docbookinnertag_;
+ break;
+
+ case LT_DOCBOOKINNERATTR:
+ lex >> docbookinnerattr_;
+ break;
+
+ case LT_DOCBOOKINNERTAGTYPE:
+ lex >> docbookinnertagtype_;
+ break;
+
case LT_DOCBOOKFORCEABSTRACTTAG:
lex >> docbookforceabstracttag_;
break;
lex >> docbookwrappermergewithprevious_;
break;
+ case LT_DOCBOOKSECTION:
+ lex >> docbooksection_;
+ break;
+
case LT_DOCBOOKSECTIONTAG:
lex >> docbooksectiontag_;
break;
- case LT_DOCBOOKITEMWRAPPERTAG:
- lex >> docbookitemwrappertag_;
- break;
-
- case LT_DOCBOOKITEMWRAPPERATTR:
+ case LT_DOCBOOKITEMWRAPPERTAG:
+ lex >> docbookitemwrappertag_;
+ break;
+
+ case LT_DOCBOOKITEMWRAPPERATTR:
lex >> docbookitemwrapperattr_;
break;
lex >> docbookiteminnertagtype_;
break;
+ case LT_DOCBOOKNOFONTINSIDE:
+ lex >> docbooknofontinside_;
+ break;
+
+ case LT_DOCBOOKGENERATETITLE:
+ lex >> docbookgeneratetitle_;
+ break;
+
case LT_SPELLCHECK:
lex >> spellcheck;
break;
latexargs_));
latexarg & arg = lam[id];
+ if (listpreamble)
+ // list preamble has no delimiters by default
+ arg.nodelims = true;
+
bool error = false;
bool finished = false;
while (!finished && lex.isOK() && !error) {
lex.next();
arg.tooltip = lex.getDocString();
} else if (tok == "requires") {
- lex.next();
+ lex.eatLine();
arg.required = lex.getString();
} else if (tok == "decoration") {
lex.next();
} else if (tok == "freespacing") {
lex.next();
arg.free_spacing = lex.getBool();
+ } else if (tok == "docbooktag") {
+ lex.next();
+ arg.docbooktag = lex.getDocString();
+ } else if (tok == "docbookattr") {
+ lex.next();
+ arg.docbookattr = lex.getDocString();
+ } 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;
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())
"\tInPreamble " << inpreamble << "\n"
"\tTocLevel " << toclevel << "\n"
"\tResumeCounter " << resumecounter << "\n"
- "\tStepMasterCounter " << stepmastercounter << '\n';
+ "\tStepParentCounter " << stepparentcounter << '\n';
// ResetArgs does not make sense here
for (LaTeXArgMap::const_iterator it = latexargs_.begin();
it != latexargs_.end(); ++it)
if (!latexname_.empty())
os << "\tLatexName \"" << latexname_ << "\"\n";
if (!latexparam_.empty())
- os << "\tLatexParam \"" << subst(latexparam_, "\"", """)
+ os << "\tLatexParam \"" << subst(latexparam_, "\"", """)
<< "\"\n";
if (!leftdelim_.empty())
os << "\tLeftDelim "
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())
<< 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(!docbookininfo_.empty())
+ if (!docbookinnertag_.empty())
+ os << "\tDocBookInnerTag " << docbookinnertag_ << '\n';
+ if (!docbookinnerattr_.empty())
+ os << "\tDocBookInnerAttr \"" << docbookinnerattr_ << "\"\n";
+ if (!docbookinnertagtype_.empty())
+ os << "\tDocBookInnerTagType " << docbookinnertagtype_ << '\n';
+ 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';
- if(!docbooksectiontag_.empty())
+ os << "\tDocBookSection " << docbooksection_ << '\n';
+ 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 << "\tSpellcheck " << spellcheck << "\n"
+ os << "\tDocBookNoFontInside " << docbooknofontinside_ << "\n"
+ "\tSpellcheck " << spellcheck << "\n"
"\tForceLocal " << forcelocal << "\n"
"End\n";
}
}
-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_;
}
}
-bool isValidTagType(std::string type)
+bool isValidTagType(std::string const & type)
{
return !(type.empty() || (type != "block" && type != "paragraph" && type != "inline"));
}
}
+string const & Layout::docbookinnertag() const
+{
+ if (docbookinnertag_.empty())
+ docbookinnertag_ = "NONE";
+ return docbookinnertag_;
+}
+
+
+string const & Layout::docbookinnerattr() const
+{
+ return docbookinnerattr_;
+}
+
+
+string const & Layout::docbookinnertagtype() const
+{
+ if (!isValidTagType(docbookinnertagtype_))
+ docbookinnertagtype_ = "block";
+ return docbookinnertagtype_;
+}
+
+
string const & Layout::docbookininfo() const
{
// Indeed, a trilean. Only titles should be "maybe": otherwise, metadata is "always", content is "never".