X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLayout.cpp;h=3c1a9bd955515d321e847e1a7c408a50e59de9f8;hb=861c6167ca5f1329e16dd788489a7c03772e2332;hp=285511a104c78ff1191cb28a74ee5434c2f15065;hpb=5c545573507bbf55f78c294188537c6aff959bc0;p=lyx.git diff --git a/src/Layout.cpp b/src/Layout.cpp index 285511a104..3c1a9bd955 100644 --- a/src/Layout.cpp +++ b/src/Layout.cpp @@ -40,6 +40,8 @@ enum LayoutTags { LT_ALIGN = 1, LT_ALIGNPOSSIBLE, LT_ARGUMENT, + LT_AUTONESTS, + LT_AUTONESTEDBY, LT_MARGIN, LT_BOTTOMSEP, LT_CATEGORY, @@ -72,6 +74,8 @@ enum LayoutTags { LT_LATEXTYPE, LT_LEFTDELIM, LT_LEFTMARGIN, + LT_NEED_CPROTECT, + LT_NEED_MBOXPROTECT, LT_NEED_PROTECT, LT_NEWLINE, LT_NEXTNOINDENT, @@ -118,7 +122,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; @@ -128,6 +132,8 @@ Layout::Layout() intitle = false; inpreamble = false; needprotect = false; + needcprotect = false; + needmboxprotect = false; keepempty = false; font = inherit_font; labelfont = inherit_font; @@ -191,6 +197,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 +224,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 }, @@ -238,6 +246,8 @@ 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 }, @@ -370,6 +380,7 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass) latexargs_.clear(); itemargs_.clear(); postcommandargs_.clear(); + listpreamble_.clear(); } break; @@ -389,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; @@ -592,6 +611,30 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass) 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; @@ -970,18 +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(); @@ -1031,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") { @@ -1050,6 +1100,9 @@ void Layout::readArgument(Lexer & lex) } 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; @@ -1061,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; } @@ -1097,6 +1154,8 @@ 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) @@ -1114,6 +1173,8 @@ void writeArgument(ostream & os, string const & id, Layout::latexarg const & arg } 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"; } @@ -1183,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); @@ -1387,6 +1453,26 @@ void Layout::write(ostream & os) const } 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 @@ -1423,7 +1509,7 @@ void Layout::write(ostream & os) const bool Layout::hasArgs() const { return !latexargs_.empty() || !postcommandargs_.empty() || - !itemargs_.empty(); + !itemargs_.empty() || !listpreamble_.empty(); } @@ -1432,6 +1518,8 @@ 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; @@ -1506,13 +1594,8 @@ string const & Layout::htmlitemattr() const string const & Layout::htmllabeltag() const { - if (htmllabeltag_.empty()) { - if (labeltype != LABEL_ABOVE && - labeltype != LABEL_CENTERED) + if (htmllabeltag_.empty()) htmllabeltag_ = "span"; - else - htmllabeltag_ = "div"; - } return htmllabeltag_; }