X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLayout.cpp;h=c45fd5c101d4e4d3cbfc4ad26289ca36677157ed;hb=45e8ea4acc557dd54e062750f47ff569b5b98c43;hp=748d867a36a8824cfd5b3a89ab9ffa91e2e592b9;hpb=4005a4d470acbecb1ed06c50f3680def6c4edf10;p=lyx.git diff --git a/src/Layout.cpp b/src/Layout.cpp index 748d867a36..c45fd5c101 100644 --- a/src/Layout.cpp +++ b/src/Layout.cpp @@ -31,7 +31,7 @@ using namespace lyx::support; namespace lyx { -/// Special value of toclevel for layouts that to not belong in a TOC +/// Special value of toclevel for layouts that do not belong to a TOC const int Layout::NOT_IN_TOC = -1000; // The order of the LayoutTags enum is no more important. [asierra300396] @@ -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,32 +99,56 @@ enum LayoutTags { LT_HTMLITEM, LT_HTMLITEMATTR, LT_HTMLLABEL, - LT_HTMLLABELATTR, + LT_HTMLLABELATTR, LT_HTMLLABELFIRST, LT_HTMLPREAMBLE, LT_HTMLSTYLE, LT_HTMLFORCECSS, + LT_DOCBOOKTAG, + LT_DOCBOOKATTR, + LT_DOCBOOKININFO, + LT_DOCBOOKWRAPPERTAG, + LT_DOCBOOKWRAPPERATTR, + LT_DOCBOOKSECTIONTAG, + LT_DOCBOOKITEMWRAPPERTAG, + LT_DOCBOOKITEMWRAPPERATTR, + LT_DOCBOOKITEMTAG, + LT_DOCBOOKITEMATTR, + LT_DOCBOOKITEMLABELTAG, + LT_DOCBOOKITEMLABELATTR, + LT_DOCBOOKITEMINNERTAG, + LT_DOCBOOKITEMINNERATTR, + LT_DOCBOOKFORCEABSTRACTTAG, LT_INPREAMBLE, LT_HTMLTITLE, 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 +180,7 @@ Layout::Layout() forcelocal = 0; itemcommand_ = "item"; toggle_indent = ITOGGLE_DOCUMENT_DEFAULT; + par_group_ = false; } @@ -178,15 +208,32 @@ 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 }, { "commanddepth", LT_COMMANDDEPTH }, { "copystyle", LT_COPYSTYLE }, { "dependson", LT_DEPENDSON }, + { "docbookattr", LT_DOCBOOKATTR }, + { "docbookforceabstracttag", LT_DOCBOOKFORCEABSTRACTTAG }, + { "docbookininfo", LT_DOCBOOKININFO }, + { "docbookitemattr", LT_DOCBOOKITEMATTR }, + { "docbookiteminnerattr", LT_DOCBOOKITEMINNERATTR }, + { "docbookiteminnertag", LT_DOCBOOKITEMINNERTAG }, + { "docbookitemlabelattr", LT_DOCBOOKITEMLABELATTR }, + { "docbookitemlabeltag", LT_DOCBOOKITEMLABELTAG }, + { "docbookitemtag", LT_DOCBOOKITEMTAG }, + { "docbookitemwrapperattr", LT_DOCBOOKITEMWRAPPERATTR }, + { "docbookitemwrappertag", LT_DOCBOOKITEMWRAPPERTAG }, + { "docbooksectiontag", LT_DOCBOOKSECTIONTAG }, + { "docbooktag", LT_DOCBOOKTAG }, + { "docbookwrapperattr", LT_DOCBOOKWRAPPERATTR }, + { "docbookwrappertag", LT_DOCBOOKWRAPPERTAG }, { "end", LT_END }, { "endlabelstring", LT_ENDLABELSTRING }, { "endlabeltype", LT_ENDLABELTYPE }, @@ -207,6 +254,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 +276,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 +293,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 +323,7 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass) error = true; continue; - default: + default: break; } switch (static_cast(le)) { @@ -314,7 +368,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 +410,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 +430,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 +514,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 +585,7 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass) case LT_ALIGN: readAlign(lex); break; - + case LT_ALIGNPOSSIBLE: readAlignPossible(lex); break; @@ -523,23 +594,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: @@ -566,10 +637,34 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass) lex.eatLine(); vector const req = getVectorFromString(lex.getString(true)); - requires_.insert(req.begin(), req.end()); + required_.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 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 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 +678,7 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass) case LT_HTMLTAG: lex >> htmltag_; break; - + case LT_HTMLATTR: lex >> htmlattr_; break; @@ -591,25 +686,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,13 +712,73 @@ 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; + case LT_DOCBOOKTAG: + lex >> docbooktag_; + break; + + case LT_DOCBOOKATTR: + lex >> docbookattr_; + break; + + case LT_DOCBOOKFORCEABSTRACTTAG: + lex >> docbookforceabstracttag_; + break; + + case LT_DOCBOOKININFO: + lex >> docbookininfo_; + break; + + case LT_DOCBOOKWRAPPERTAG: + lex >> docbookwrappertag_; + break; + + case LT_DOCBOOKWRAPPERATTR: + lex >> docbookwrapperattr_; + break; + + case LT_DOCBOOKSECTIONTAG: + lex >> docbooksectiontag_; + break; + + case LT_DOCBOOKITEMWRAPPERTAG: + lex >> docbookitemwrappertag_; + break; + + case LT_DOCBOOKITEMWRAPPERATTR: + lex >> docbookitemwrapperattr_; + break; + + case LT_DOCBOOKITEMTAG: + lex >> docbookitemtag_; + break; + + case LT_DOCBOOKITEMATTR: + lex >> docbookitemattr_; + break; + + case LT_DOCBOOKITEMLABELTAG: + lex >> docbookitemlabeltag_; + break; + + case LT_DOCBOOKITEMLABELATTR: + lex >> docbookitemlabelattr_; + break; + + case LT_DOCBOOKITEMINNERTAG: + lex >> docbookiteminnertag_; + break; + + case LT_DOCBOOKITEMINNERATTR: + lex >> docbookiteminnerattr_; + break; + case LT_SPELLCHECK: lex >> spellcheck; break; @@ -631,6 +786,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 +1040,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(le); break; + case LATEX_ENVIRONMENT: + case LATEX_BIB_ENVIRONMENT: + latextype = static_cast(le); + par_group_ = true; + break; default: LYXERR0("Unhandled value " << le); break; @@ -935,16 +1103,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(); @@ -990,10 +1164,13 @@ void Layout::readArgument(Lexer & lex) arg.tooltip = lex.getDocString(); } else if (tok == "requires") { lex.next(); - arg.requires = lex.getString(); + arg.required = lex.getString(); } 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") { @@ -1001,6 +1178,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; @@ -1012,7 +1204,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; } @@ -1044,23 +1240,38 @@ void writeArgument(ostream & os, string const & id, Layout::latexarg const & arg os << "\t\tPresetArg \"" << to_utf8(arg.presetarg) << "\"\n"; if (!arg.tooltip.empty()) os << "\t\tToolTip \"" << to_utf8(arg.tooltip) << "\"\n"; - if (!arg.requires.empty()) - os << "\t\tRequires \"" << arg.requires << "\"\n"; + if (!arg.required.empty()) + os << "\t\tRequires \"" << arg.required << "\"\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 :-( @@ -1110,7 +1321,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) @@ -1121,7 +1334,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); @@ -1210,6 +1428,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()) @@ -1254,8 +1473,6 @@ void Layout::write(ostream & os) const bool first = true; os << "\tAlignPossible"; if (alignpossible & LYX_ALIGN_BLOCK) { - if (!first) - os << ','; os << " Block"; first = false; } @@ -1316,16 +1533,36 @@ void Layout::write(ostream & os) const case Spacing::Default: break; } - if (!requires_.empty()) { + if (!required_.empty()) { os << "\tRequires "; - for (set::const_iterator it = requires_.begin(); - it != requires_.end(); ++it) { - if (it != requires_.begin()) + for (set::const_iterator it = required_.begin(); + it != required_.end(); ++it) { + if (it != required_.begin()) os << ','; os << *it; } os << '\n'; } + if (!autonests_.empty()) { + os << "\tAutoNests\n\t"; + for (set::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::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 @@ -1352,18 +1589,57 @@ void Layout::write(ostream & os) const os << "\tHTMLPreamble\n" << to_utf8(rtrim(htmlpreamble_, "\n")) << "\n\tEndPreamble\n"; - os << "\tHTMLTitle " << htmltitle_ << "\n" - "\tSpellcheck " << spellcheck << "\n" + os << "\tHTMLTitle " << htmltitle_ << "\n"; + if(!docbooktag_.empty()) + os << "\tDocBookTag " << docbooktag_ << '\n'; + if(!docbookattr_.empty()) + os << "\tDocBookAttr " << docbookattr_ << '\n'; + if(!docbookininfo_.empty()) + os << "\tDocBookInInfo " << docbookininfo_ << '\n'; + if(!docbookwrappertag_.empty()) + os << "\tDocBookWrapperTag " << docbookwrappertag_ << '\n'; + if(!docbookwrapperattr_.empty()) + os << "\tDocBookWrapperAttr " << docbookwrapperattr_ << '\n'; + if(!docbooksectiontag_.empty()) + os << "\tDocBookSectionTag " << docbooksectiontag_ << '\n'; + if(!docbookitemtag_.empty()) + os << "\tDocBookItemTag " << docbookitemtag_ << '\n'; + if(!docbookitemattr_.empty()) + os << "\tDocBookItemAttr " << docbookitemattr_ << '\n'; + if(!docbookitemwrappertag_.empty()) + os << "\tDocBookItemWrapperTag " << docbookitemwrappertag_ << '\n'; + if(!docbookitemwrapperattr_.empty()) + os << "\tDocBookItemWrapperAttr " << docbookitemwrapperattr_ << '\n'; + if(!docbookitemlabeltag_.empty()) + os << "\tDocBookItemLabelTag " << docbookitemlabeltag_ << '\n'; + if(!docbookitemlabelattr_.empty()) + os << "\tDocBookItemLabelAttr " << docbookitemlabelattr_ << '\n'; + if(!docbookiteminnertag_.empty()) + os << "\tDocBookItemInnerTag " << docbookiteminnertag_ << '\n'; + if(!docbookiteminnerattr_.empty()) + os << "\tDocBookItemInnerAttr " << docbookiteminnerattr_ << '\n'; + if(!docbookforceabstracttag_.empty()) + os << "\tDocBookForceAbstractTag " << docbookforceabstracttag_ << '\n'; + os << "\tSpellcheck " << spellcheck << "\n" "\tForceLocal " << forcelocal << "\n" "End\n"; } +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; @@ -1404,56 +1680,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_; } @@ -1461,7 +1732,7 @@ docstring Layout::htmlstyle() const { if (!htmlstyle_.empty() && !htmlforcecss_) return htmlstyle_; - if (htmldefaultstyle_.empty()) + if (htmldefaultstyle_.empty()) makeDefaultCSS(); docstring retval = htmldefaultstyle_; if (!htmlstyle_.empty()) @@ -1471,7 +1742,7 @@ docstring Layout::htmlstyle() const string Layout::defaultCSSClass() const -{ +{ if (!defaultcssclass_.empty()) return defaultcssclass_; docstring d; @@ -1497,6 +1768,116 @@ string Layout::defaultCSSClass() const } +string const & Layout::docbooktag() const +{ + // No sensible default value, unhappily... + if (docbooktag_.empty()) + docbooktag_ = to_utf8(name_); + return docbooktag_; +} + + +string const & Layout::docbookattr() const +{ + // Perfectly OK to return no attributes, so docbookattr_ does not need to be filled. + return docbookattr_; +} + + +string const & Layout::docbookininfo() const +{ + // Indeed, a trilean. Only titles should be "maybe": otherwise, metadata is "always", content is "never". + if (docbookininfo_.empty() || (docbookininfo_ != "never" && docbookininfo_ != "always" && docbookininfo_ != "maybe")) + docbookininfo_ = "never"; + return docbookininfo_; +} + + +string const & Layout::docbookwrappertag() const +{ + if (docbookwrappertag_.empty()) + docbookwrappertag_ = "NONE"; + return docbookwrappertag_; +} + + +string const & Layout::docbookwrapperattr() const +{ + return docbookwrapperattr_; +} + + +string const & Layout::docbooksectiontag() const +{ + if (docbooksectiontag_.empty()) + docbooksectiontag_ = "section"; + return docbooksectiontag_; +} + + +string const & Layout::docbookitemwrappertag() const +{ + if (docbookitemwrappertag_.empty()) + docbookitemwrappertag_ = "NONE"; + return docbookitemwrappertag_; +} + + +string const & Layout::docbookitemwrapperattr() const +{ + return docbookitemwrapperattr_; +} + + +string const & Layout::docbookitemtag() const +{ + return docbookitemtag_; +} + + +string const & Layout::docbookitemattr() const +{ + return docbookitemattr_; +} + + +string const & Layout::docbookitemlabeltag() const +{ + if (docbookitemlabeltag_.empty()) + docbookitemlabeltag_ = "NONE"; + return docbookitemlabeltag_; +} + + +string const & Layout::docbookitemlabelattr() const +{ + return docbookitemlabelattr_; +} + + +string const & Layout::docbookiteminnertag() const +{ + if (docbookiteminnertag_.empty()) + docbookiteminnertag_ = "NONE"; + return docbookiteminnertag_; +} + + +string const & Layout::docbookiteminnerattr() const +{ + return docbookiteminnerattr_; +} + + +std::string const & Layout::docbookforceabstracttag() const +{ + if (docbookforceabstracttag_.empty()) + docbookforceabstracttag_ = "NONE"; + return docbookforceabstracttag_; +} + + + namespace { string makeMarginValue(char const * side, double d) @@ -1506,19 +1887,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) @@ -1526,7 +1907,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); @@ -1535,7 +1916,7 @@ void Layout::makeDefaultCSS() const int const len = rightmargin.length(); tmp += makeMarginValue("right", len); } - + if (!tmp.empty()) { if (!htmldefaultstyle_.empty()) htmldefaultstyle_ += from_ascii("\n"); @@ -1550,21 +1931,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") +